diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..ec92286c4 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +STAGED=$(git diff --cached --name-only --diff-filter=ACMR) +yarn format-changed +git diff --exit-code $STAGED || (echo "Files were reformatted, please stage them and commit again" && exit 1) \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json index 50f7605fd..998a6bb31 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -2,5 +2,6 @@ "semi": false, "singleQuote": true, "tabWidth": 2, + "printWidth": 100, "proseWrap": "always" } \ No newline at end of file diff --git a/package.json b/package.json index 1d7e81fd8..f45e6b00b 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "scripts": { "test": "vitest --run", "type-check": "tsc --noEmit", - "prettier": "yarn prettier -w ./src", + "format": "prettier -w ./src", + "format-changed": "prettier $(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g') --write --ignore-unknown", "bump-and-release": "yarn test && git pull --rebase origin main && yarn run release-patch", "release-patch": "yarn version --patch && git push && git push --tags", "dev": "vite", @@ -16,7 +17,8 @@ "docs:dev": "vitepress dev docs --host", "docs:build": "vitepress build docs", "docs:preview": "vitepress preview docs", - "docs:gen": "node docs/scripts/propsgen.ts --trace-uncaught" + "docs:gen": "node docs/scripts/propsgen.ts --trace-uncaught", + "prepare": "husky" }, "exports": { ".": { @@ -132,6 +134,7 @@ "devDependencies": { "@vitejs/plugin-vue": "^4.0.0", "autoprefixer": "^10.4.13", + "husky": "^9.1.7", "jsdom": "^27.4.0", "lint-staged": ">=10", "msw": "^2.7.0", diff --git a/src/components/Alert/Alert.vue b/src/components/Alert/Alert.vue index eed0afb33..360acbff4 100644 --- a/src/components/Alert/Alert.vue +++ b/src/components/Alert/Alert.vue @@ -1,16 +1,16 @@ diff --git a/src/components/Badge/Badge.vue b/src/components/Badge/Badge.vue index 8099ae703..97c1dbdce 100644 --- a/src/components/Badge/Badge.vue +++ b/src/components/Badge/Badge.vue @@ -3,17 +3,11 @@ class="inline-flex select-none items-center gap-1 rounded-full whitespace-nowrap" :class="classes" > -
+
{{ props.label?.toString() }} -
+
@@ -73,7 +67,7 @@ const classes = computed(() => { sm: 'h-4 text-xs px-1.5', md: 'h-5 text-xs px-1.5', lg: 'h-6 text-sm px-2', - xl: 'h-7 text-base px-2', + xl: 'h-7 text-base px-2', }[props.size] return [variantClasses, sizeClasses] diff --git a/src/components/Badge/stories/Themes.vue b/src/components/Badge/stories/Themes.vue index 0ee989120..fe637be34 100644 --- a/src/components/Badge/stories/Themes.vue +++ b/src/components/Badge/stories/Themes.vue @@ -3,8 +3,8 @@ import { Badge } from 'frappe-ui' diff --git a/src/components/Badge/types.ts b/src/components/Badge/types.ts index 0d9417564..8ca421afc 100644 --- a/src/components/Badge/types.ts +++ b/src/components/Badge/types.ts @@ -15,4 +15,3 @@ export interface BadgeProps { /** Content displayed inside the badge */ label?: Label | string | number } - diff --git a/src/components/Breadcrumbs/Breadcrumbs.vue b/src/components/Breadcrumbs/Breadcrumbs.vue index aaf9c848f..3875eb55c 100644 --- a/src/components/Breadcrumbs/Breadcrumbs.vue +++ b/src/components/Breadcrumbs/Breadcrumbs.vue @@ -8,9 +8,7 @@ - +
@@ -21,9 +19,7 @@ @click="item.onClick ? item.onClick() : null" class="flex items-center rounded px-0.5 py-1 text-lg font-medium focus:outline-none focus-visible:ring-2 focus-visible:ring-outline-gray-3" :class="[ - i == crumbs.length - 1 - ? 'text-ink-gray-9' - : 'text-ink-gray-5 hover:text-ink-gray-7', + i == crumbs.length - 1 ? 'text-ink-gray-9' : 'text-ink-gray-5 hover:text-ink-gray-7', ]" > @@ -38,9 +34,7 @@ @click="item.onClick ? item.onClick() : null" class="flex items-center rounded px-0.5 py-1 text-lg font-medium focus:outline-none focus-visible:ring-2 focus-visible:ring-outline-gray-3" :class="[ - i == crumbs.length - 1 - ? 'text-ink-gray-9' - : 'text-ink-gray-5 hover:text-ink-gray-7', + i == crumbs.length - 1 ? 'text-ink-gray-9' : 'text-ink-gray-5 hover:text-ink-gray-7', ]" > @@ -54,9 +48,7 @@ @click="item.onClick ? item.onClick() : null" class="flex items-center rounded px-0.5 py-1 text-lg font-medium focus:outline-none focus-visible:ring-2 focus-visible:ring-outline-gray-3" :class="[ - i == crumbs.length - 1 - ? 'text-ink-gray-9' - : 'text-ink-gray-5 hover:text-ink-gray-7', + i == crumbs.length - 1 ? 'text-ink-gray-9' : 'text-ink-gray-5 hover:text-ink-gray-7', ]" > diff --git a/src/components/Button/Button.vue b/src/components/Button/Button.vue index 717e7bace..aa49204df 100644 --- a/src/components/Button/Button.vue +++ b/src/components/Button/Button.vue @@ -6,7 +6,7 @@ @click="handleClick" :disabled="isDisabled" :ariaLabel="ariaLabel" - :type = "props.type" + :type="props.type" ref="rootRef" > @@ -78,7 +74,7 @@ const props = withDefaults(defineProps(), { variant: 'subtle', loading: false, disabled: false, - type: "button" + type: 'button', }) const slots = useSlots() @@ -88,16 +84,14 @@ const buttonClasses = computed(() => { let solidClasses = { gray: 'text-ink-white bg-surface-gray-7 hover:bg-surface-gray-6 active:bg-surface-gray-5', blue: 'text-ink-white bg-blue-500 hover:bg-surface-blue-3 active:bg-blue-700', - green: - 'text-ink-white bg-surface-green-3 hover:bg-green-700 active:bg-green-800', + green: 'text-ink-white bg-surface-green-3 hover:bg-green-700 active:bg-green-800', red: 'text-ink-white bg-surface-red-5 hover:bg-surface-red-6 active:bg-surface-red-7', }[props.theme] let subtleClasses = { gray: 'text-ink-gray-8 bg-surface-gray-2 hover:bg-surface-gray-3 active:bg-surface-gray-4', blue: 'text-ink-blue-3 bg-surface-blue-2 hover:bg-blue-200 active:bg-blue-300', - green: - 'text-green-800 bg-surface-green-2 hover:bg-green-200 active:bg-green-300', + green: 'text-green-800 bg-surface-green-2 hover:bg-green-200 active:bg-green-300', red: 'text-red-700 bg-surface-red-2 hover:bg-surface-red-3 active:bg-surface-red-4', }[props.theme] @@ -112,8 +106,7 @@ const buttonClasses = computed(() => { let ghostClasses = { gray: 'text-ink-gray-8 bg-transparent hover:bg-surface-gray-3 active:bg-surface-gray-4', blue: 'text-ink-blue-3 bg-transparent hover:bg-blue-200 active:bg-blue-300', - green: - 'text-green-800 bg-transparent hover:bg-green-200 active:bg-green-300', + green: 'text-green-800 bg-transparent hover:bg-green-200 active:bg-green-300', red: 'text-red-700 bg-transparent hover:bg-surface-red-3 active:bg-surface-red-4', }[props.theme] @@ -136,26 +129,22 @@ const buttonClasses = computed(() => { let disabledClassesMap: Record = { 'gray-solid': 'bg-surface-gray-2 text-ink-gray-4', 'gray-subtle': 'bg-surface-gray-2 text-ink-gray-4', - 'gray-outline': - 'bg-surface-gray-2 text-ink-gray-4 border border-outline-gray-2', + 'gray-outline': 'bg-surface-gray-2 text-ink-gray-4 border border-outline-gray-2', 'gray-ghost': 'text-ink-gray-4', 'blue-solid': 'bg-blue-300 text-ink-white', 'blue-subtle': 'bg-surface-blue-2 text-ink-blue-link', - 'blue-outline': - 'bg-surface-blue-2 text-ink-blue-link border border-outline-blue-1', + 'blue-outline': 'bg-surface-blue-2 text-ink-blue-link border border-outline-blue-1', 'blue-ghost': 'text-ink-blue-link', 'green-solid': 'bg-surface-green-2 text-ink-green-2', 'green-subtle': 'bg-surface-green-2 text-ink-green-2', - 'green-outline': - 'bg-surface-green-2 text-ink-green-2 border border-outline-green-2', + 'green-outline': 'bg-surface-green-2 text-ink-green-2 border border-outline-green-2', 'green-ghost': 'text-ink-green-2', 'red-solid': 'bg-surface-red-2 text-ink-red-2', 'red-subtle': 'bg-surface-red-2 text-ink-red-2', - 'red-outline': - 'bg-surface-red-2 text-ink-red-2 border border-outline-red-1', + 'red-outline': 'bg-surface-red-2 text-ink-red-2 border border-outline-red-1', 'red-ghost': 'text-ink-red-2', } let disabledClasses = disabledClassesMap[themeVariant] @@ -218,10 +207,7 @@ const hasLucideIconInDefaultSlot = computed(() => { // if the slot contains only one element and it's a lucide icon // render it as an icon button let firstVNode = slotContent[0] - if ( - typeof firstVNode.type?.name == 'string' && - firstVNode.type?.name?.startsWith('lucide-') - ) { + if (typeof firstVNode.type?.name == 'string' && firstVNode.type?.name?.startsWith('lucide-')) { return true } return false diff --git a/src/components/Calendar/Calendar.vue b/src/components/Calendar/Calendar.vue index 53341f59e..f12183de4 100644 --- a/src/components/Calendar/Calendar.vue +++ b/src/components/Calendar/Calendar.vue @@ -46,11 +46,7 @@
@@ -78,30 +74,15 @@ :config="overrideConfig" > - +