From 2d8de43dec910637c81e8e779c26b27364d7711b Mon Sep 17 00:00:00 2001 From: J-michalek Date: Fri, 26 Sep 2025 15:08:29 +0200 Subject: [PATCH 01/16] test --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d0ed02878..e6a1051fbc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15376,4 +15376,4 @@ snapshots: zod@4.1.11: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} \ No newline at end of file From 609475707a477cf2283309763820722f9a35a5e8 Mon Sep 17 00:00:00 2001 From: J-michalek Date: Mon, 22 Sep 2025 19:24:56 +0200 Subject: [PATCH 02/16] fix(Drawer): use full height/width for snapPoints --- src/runtime/components/Drawer.vue | 3 ++- src/theme/drawer.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/runtime/components/Drawer.vue b/src/runtime/components/Drawer.vue index 70aea2af39..648cc274c3 100644 --- a/src/runtime/components/Drawer.vue +++ b/src/runtime/components/Drawer.vue @@ -91,7 +91,8 @@ const contentEvents = { const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.drawer || {}) })({ direction: props.direction, - inset: props.inset + inset: props.inset, + snapPoints: !!props.snapPoints && props.snapPoints.length > 0 })) diff --git a/src/theme/drawer.ts b/src/theme/drawer.ts index f3868d19a6..f2cda8ef54 100644 --- a/src/theme/drawer.ts +++ b/src/theme/drawer.ts @@ -35,6 +35,9 @@ export default (options: Required) => ({ true: { content: 'rounded-lg after:hidden overflow-hidden [--initial-transform:calc(100%+1.5rem)]' } + }, + snapPoints: { + true: '' } }, compoundVariants: [{ @@ -43,6 +46,11 @@ export default (options: Required) => ({ content: 'h-auto max-h-[96%]', handle: '!w-12 !h-1.5 mx-auto' } + }, { + direction: ['top', 'bottom'], + snapPoints: true, + class: { + content: 'h-full' } }, { direction: ['right', 'left'], class: { @@ -50,6 +58,12 @@ export default (options: Required) => ({ handle: '!h-12 !w-1.5 mt-auto mb-auto' } }, { + direction: ['right', 'left'], + snapPoints: true, + class: { + content: 'w-full' } + }, + { direction: 'top', inset: true, class: { From 86cf6c5e8e337e8c24efea10c95a179e73b5d8e0 Mon Sep 17 00:00:00 2001 From: J-michalek Date: Mon, 22 Sep 2025 19:30:06 +0200 Subject: [PATCH 03/16] up --- src/runtime/components/Drawer.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/Drawer.vue b/src/runtime/components/Drawer.vue index 648cc274c3..4feaa79023 100644 --- a/src/runtime/components/Drawer.vue +++ b/src/runtime/components/Drawer.vue @@ -92,7 +92,7 @@ const contentEvents = { const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.drawer || {}) })({ direction: props.direction, inset: props.inset, - snapPoints: !!props.snapPoints && props.snapPoints.length > 0 + snapPoints: props.snapPoints && props.snapPoints.length > 0 })) From b7a1592c4715288f6596f1e2c7e2b8fa4fcf340b Mon Sep 17 00:00:00 2001 From: J-michalek Date: Fri, 26 Sep 2025 15:20:58 +0200 Subject: [PATCH 04/16] test --- pnpm-lock.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6a1051fbc..31cd829bfc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15376,4 +15376,5 @@ snapshots: zod@4.1.11: {} - zwitch@2.0.4: {} \ No newline at end of file + zwitch@2.0.4: {} + \ No newline at end of file From 31c123a8b67ec8277afb384645749b8c77dc5445 Mon Sep 17 00:00:00 2001 From: J-michalek Date: Fri, 26 Sep 2025 15:25:31 +0200 Subject: [PATCH 05/16] test --- pnpm-lock.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31cd829bfc..4d0ed02878 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15377,4 +15377,3 @@ snapshots: zod@4.1.11: {} zwitch@2.0.4: {} - \ No newline at end of file From 90973bc80b70b34c80051707aff1c9ad5900e484 Mon Sep 17 00:00:00 2001 From: Eugen Istoc Date: Fri, 26 Sep 2025 09:51:19 -0400 Subject: [PATCH 06/16] chore: add formwerk dependency --- package.json | 1 + pnpm-lock.yaml | 64 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c9d3e908c0..6ecdecdb1d 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ }, "dependencies": { "@ai-sdk/vue": "^2.0.51", + "@formwerk/core": "https://pkg.pr.new/formwerkjs/formwerk/@formwerk/core@205", "@iconify/vue": "^5.0.0", "@internationalized/date": "^3.9.0", "@internationalized/number": "^3.6.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6a1051fbc..dbd3d6108c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@ai-sdk/vue': specifier: ^2.0.51 version: 2.0.51(vue@3.5.21(typescript@5.8.3))(zod@4.1.11) + '@formwerk/core': + specifier: https://pkg.pr.new/formwerkjs/formwerk/@formwerk/core@205 + version: https://pkg.pr.new/formwerkjs/formwerk/@formwerk/core@205(vue@3.5.21(typescript@5.8.3)) '@iconify/vue': specifier: ^5.0.0 version: 5.0.0(vue@3.5.21(typescript@5.8.3)) @@ -826,6 +829,16 @@ packages: '@floating-ui/vue@1.1.7': resolution: {integrity: sha512-idmAtbAIigGXN2SI5gItiXYBYtNfDTP9yIiObxgu13dgtG7ARCHlNfnR29GxP4LI4o13oiwsJ8wVgghj1lNqcw==} + '@formwerk/core@https://pkg.pr.new/formwerkjs/formwerk/@formwerk/core@205': + resolution: {tarball: https://pkg.pr.new/formwerkjs/formwerk/@formwerk/core@205} + version: 0.11.6 + peerDependencies: + vue: '>=3.5.0' + + '@formwerk/devtools@https://pkg.pr.new/formwerkjs/formwerk/@formwerk/devtools@57c8b75b6be3b06b4fecefc1c6117ce1377dfd5d': + resolution: {tarball: https://pkg.pr.new/formwerkjs/formwerk/@formwerk/devtools@57c8b75b6be3b06b4fecefc1c6117ce1377dfd5d} + version: 0.11.6 + '@ghostery/adblocker-content@2.11.6': resolution: {integrity: sha512-K+hJR27fYpRGoUQnza2p0BmN86htN1ASoRxF73mAdf1CNDSyfPNCNlpoKt83Z9CbYBdEglXOWItazB9hRMs7gw==} @@ -2091,6 +2104,9 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@stylistic/eslint-plugin@5.2.3': resolution: {integrity: sha512-oY7GVkJGVMI5benlBDCaRrSC1qPasafyv5dOBLLv5MTilMGnErKhO6ziEfodDDIZbo5QxPUNW360VudJOFODMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2612,6 +2628,9 @@ packages: '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/devtools-api@8.0.2': + resolution: {integrity: sha512-RdwsaYoSTumwZ7XOt5yIPP1/T4O0bTs+c5XaEjmUB6f9x+FvDSL9AekxW1vuhK1lmA9TfewpXVt2r5LIax3LHw==} + '@vue/devtools-core@7.7.7': resolution: {integrity: sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==} peerDependencies: @@ -2620,9 +2639,15 @@ packages: '@vue/devtools-kit@7.7.7': resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} + '@vue/devtools-kit@8.0.2': + resolution: {integrity: sha512-yjZKdEmhJzQqbOh4KFBfTOQjDPMrjjBNCnHBvnTGJX+YLAqoUtY2J+cg7BE+EA8KUv8LprECq04ts75wCoIGWA==} + '@vue/devtools-shared@7.7.7': resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} + '@vue/devtools-shared@8.0.2': + resolution: {integrity: sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==} + '@vue/language-core@3.0.7': resolution: {integrity: sha512-0sqqyqJ0Gn33JH3TdIsZLCZZ8Gr4kwlg8iYOnOrDDkJKSjFurlQY/bEFQx5zs7SX2C/bjMkmPYq/NiyY1fTOkw==} peerDependencies: @@ -7729,6 +7754,23 @@ snapshots: - '@vue/composition-api' - vue + '@formwerk/core@https://pkg.pr.new/formwerkjs/formwerk/@formwerk/core@205(vue@3.5.21(typescript@5.8.3))': + dependencies: + '@formwerk/devtools': https://pkg.pr.new/formwerkjs/formwerk/@formwerk/devtools@57c8b75b6be3b06b4fecefc1c6117ce1377dfd5d + '@internationalized/date': 3.9.0 + '@standard-schema/spec': 1.0.0 + '@standard-schema/utils': 0.3.0 + klona: 2.0.6 + type-fest: 4.41.0 + vue: 3.5.21(typescript@5.8.3) + + '@formwerk/devtools@https://pkg.pr.new/formwerkjs/formwerk/@formwerk/devtools@57c8b75b6be3b06b4fecefc1c6117ce1377dfd5d': + dependencies: + '@vue/devtools-api': 8.0.2 + '@vue/devtools-kit': 8.0.2 + klona: 2.0.6 + type-fest: 4.41.0 + '@ghostery/adblocker-content@2.11.6': dependencies: '@ghostery/adblocker-extended-selectors': 2.11.6 @@ -9234,6 +9276,8 @@ snapshots: '@standard-schema/spec@1.0.0': {} + '@standard-schema/utils@0.3.0': {} + '@stylistic/eslint-plugin@5.2.3(eslint@9.36.0(jiti@2.5.1))': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) @@ -9772,6 +9816,10 @@ snapshots: '@vue/devtools-api@6.6.4': {} + '@vue/devtools-api@8.0.2': + dependencies: + '@vue/devtools-kit': 8.0.2 + '@vue/devtools-core@7.7.7(vite@7.1.7(@types/node@24.0.7)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.21(typescript@5.8.3))': dependencies: '@vue/devtools-kit': 7.7.7 @@ -9794,10 +9842,24 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.2 + '@vue/devtools-kit@8.0.2': + dependencies: + '@vue/devtools-shared': 8.0.2 + birpc: 2.6.1 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 2.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + '@vue/devtools-shared@7.7.7': dependencies: rfdc: 1.4.1 + '@vue/devtools-shared@8.0.2': + dependencies: + rfdc: 1.4.1 + '@vue/language-core@3.0.7(typescript@5.8.3)': dependencies: '@volar/language-core': 2.4.23 @@ -15376,4 +15438,4 @@ snapshots: zod@4.1.11: {} - zwitch@2.0.4: {} \ No newline at end of file + zwitch@2.0.4: {} From ef1af9aac7f785e484d094463661ae0346ef81e4 Mon Sep 17 00:00:00 2001 From: Eugen Istoc Date: Fri, 26 Sep 2025 10:16:02 -0400 Subject: [PATCH 07/16] chore: migrate UInput --- src/runtime/components/FormField.vue | 45 +++++++++++----------------- src/runtime/components/Input.vue | 15 ++++++---- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/runtime/components/FormField.vue b/src/runtime/components/FormField.vue index 87e523d996..0c9dac3406 100644 --- a/src/runtime/components/FormField.vue +++ b/src/runtime/components/FormField.vue @@ -47,41 +47,31 @@ export interface FormFieldSlots { @@ -101,19 +90,19 @@ provide(formFieldInjectionKey, computed(() => ({
-
-

+

{{ description }} @@ -123,12 +112,12 @@ provide(formFieldInjectionKey, computed(() => ({

-
+
{{ error }}
-
+
{{ help }} diff --git a/src/runtime/components/Input.vue b/src/runtime/components/Input.vue index aed1b12f1d..429d3b09a0 100644 --- a/src/runtime/components/Input.vue +++ b/src/runtime/components/Input.vue @@ -65,6 +65,7 @@ export interface InputSlots { import { ref, computed, onMounted } from 'vue' import { Primitive } from 'reka-ui' import { useVModel } from '@vueuse/core' +import { useCustomControl } from '@formwerk/core' import { useAppConfig } from '#imports' import { useFieldGroup } from '../composables/useFieldGroup' import { useComponentIcons } from '../composables/useComponentIcons' @@ -88,7 +89,13 @@ const modelValue = useVModel, 'modelValue', 'update:modelValue'>(p const appConfig = useAppConfig() as Input['AppConfig'] -const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, emitFormFocus, ariaAttrs } = useFormField>(props, { deferInputValidation: true }) +const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, name, highlight, disabled, emitFormFocus } = useFormField>(props, { deferInputValidation: true }) +const { controlProps, field: { isDisabled } } = useCustomControl({ + name, + disabled, + required: props.required, + controlType: 'UInput' +}) const { orientation, size: fieldGroupSize } = useFieldGroup>(props) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props) @@ -177,17 +184,15 @@ defineExpose({