@tgb-form/vue 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 The @tgb-form Authors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # @tgb-form/vue
2
+
3
+ Vue 3 adapter for TGB Form definitions and TanStack Vue Form.
4
+
5
+ The adapter renders a `RuntimeFormDefinition` with `TgbForm`, resolves fields through a Vue renderer registry, and passes TanStack field state to renderer components.
6
+
7
+ ## Supported Flows
8
+
9
+ - Implicit: `TgbForm` creates the TanStack form instance and reads renderers from `TgbFormProvider`.
10
+ - Hybrid: pass either `instance` or `renderers`, while `TgbForm` supplies the rest.
11
+ - Fully explicit: pass both `instance` and `renderers` directly to `TgbForm`.
12
+
13
+ ## Public API
14
+
15
+ - `TgbFormProvider`
16
+ - `TgbForm`
17
+ - `TgbFormField`
18
+ - `createVueRendererRegistry`
19
+ - `BaseVueRendererProps`
20
+ - `VueRenderer`
21
+ - `VueRendererField`
22
+ - `VueRendererProps`
23
+ - `VueRendererRegistry`
24
+ - `TgbFormTanStackForm`
25
+
26
+ ## Quick Start
27
+
28
+ ```vue
29
+ <script setup lang="ts">
30
+ import { defineComponent, h } from 'vue';
31
+ import { defineForm, FieldDataType, ValidationRuleKind } from '@tgb-form/core';
32
+ import { TgbForm, TgbFormProvider, createVueRendererRegistry } from '@tgb-form/vue';
33
+
34
+ const definition = defineForm({
35
+ fields: {
36
+ email: {
37
+ type: FieldDataType.String,
38
+ defaultValue: '',
39
+ label: 'Email',
40
+ component: 'email-input',
41
+ props: { placeholder: 'you@example.com' },
42
+ rules: [{ kind: ValidationRuleKind.Email, message: 'Enter a valid email' }],
43
+ },
44
+ },
45
+ });
46
+
47
+ const TextField = defineComponent({
48
+ props: ['field', 'label', 'props', 'value', 'errors'],
49
+ setup(props) {
50
+ return () =>
51
+ h('label', [
52
+ h('span', props.label),
53
+ h('input', {
54
+ value: props.value,
55
+ placeholder: props.props?.placeholder,
56
+ onBlur: props.field.handleBlur,
57
+ onInput: (event: Event) => {
58
+ props.field.handleChange((event.target as HTMLInputElement).value);
59
+ },
60
+ }),
61
+ props.errors?.length ? h('small', props.errors.join(', ')) : null,
62
+ ]);
63
+ },
64
+ });
65
+
66
+ const renderers = createVueRendererRegistry({
67
+ byName: {
68
+ 'email-input': TextField,
69
+ },
70
+ byType: {
71
+ [FieldDataType.String]: TextField,
72
+ },
73
+ });
74
+ </script>
75
+
76
+ <template>
77
+ <TgbFormProvider :renderers="renderers">
78
+ <TgbForm
79
+ :definition="definition"
80
+ :tanstack-options="{ onSubmit: async ({ value }) => console.log(value) }"
81
+ />
82
+ </TgbFormProvider>
83
+ </template>
84
+ ```
85
+
86
+ ## Component Props
87
+
88
+ `TgbFormProvider` accepts:
89
+
90
+ - `renderers`: renderer registry shared by descendant forms and fields.
91
+
92
+ `TgbForm` accepts:
93
+
94
+ - `definition`: normalized form definition.
95
+ - `instance`: optional TanStack form instance created by `useForm`.
96
+ - `tanstackOptions`: options merged into `toTanStackOptions` when `TgbForm` creates the form.
97
+ - `renderers`: renderer registry; overrides provider.
98
+ - `fields`: optional list of field names to render.
99
+
100
+ `TgbFormField` accepts:
101
+
102
+ - `name`: field name.
103
+ - `field`: field definition.
104
+ - `renderers`: optional renderer registry; overrides provider.
105
+
106
+ Renderer props include `name`, `field`, `form`, `label`, `description`, `props`, `value`, and `errors`.
@@ -0,0 +1,133 @@
1
+ import { FieldDataType, FieldDefinition, RendererRegistry, RuntimeFormDefinition, TgbFormTanStackOptions } from "@tgb-form/core";
2
+ import { Component, InjectionKey, PropType } from "vue";
3
+ import { AnyFieldApi, AnyFormApi, VueFormApi } from "@tanstack/vue-form";
4
+ //#region src/types.d.ts
5
+ type VueRendererField = AnyFieldApi;
6
+ type VueRendererProps = {
7
+ readonly name: string;
8
+ readonly field: VueRendererField;
9
+ readonly form: TgbFormTanStackForm;
10
+ readonly label?: string;
11
+ readonly description?: string;
12
+ readonly props?: Record<string, unknown>;
13
+ readonly value: unknown;
14
+ readonly errors: readonly unknown[];
15
+ };
16
+ type BaseVueRendererProps = VueRendererProps;
17
+ type VueRenderer = Component;
18
+ type VueRendererRegistry<TByName extends Readonly<Record<string, VueRenderer>> = Readonly<Record<string, VueRenderer>>, TByType extends Partial<Readonly<Record<FieldDataType, VueRenderer>>> = Partial<Readonly<Record<FieldDataType, VueRenderer>>>> = RendererRegistry<TByName, TByType>;
19
+ type TgbFormTanStackForm = AnyFormApi & VueFormApi<any, any, any, any, any, any, any, any, any, any, any, any>;
20
+ declare function createVueRendererRegistry<const TByName extends Readonly<Record<string, VueRenderer>> = {}, const TByType extends Partial<Readonly<Record<FieldDataType, VueRenderer>>> = {}>(registry: {
21
+ readonly byName?: TByName;
22
+ readonly byType?: TByType;
23
+ }): VueRendererRegistry<TByName, TByType>;
24
+ //#endregion
25
+ //#region src/TgbForm.d.ts
26
+ declare const TgbForm: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
27
+ definition: {
28
+ type: PropType<RuntimeFormDefinition>;
29
+ required: true;
30
+ };
31
+ instance: {
32
+ type: PropType<TgbFormTanStackForm>;
33
+ default: undefined;
34
+ };
35
+ tanstackOptions: {
36
+ type: PropType<TgbFormTanStackOptions>;
37
+ default: undefined;
38
+ };
39
+ renderers: {
40
+ type: PropType<VueRendererRegistry>;
41
+ default: undefined;
42
+ };
43
+ fields: {
44
+ type: PropType<readonly string[]>;
45
+ default: undefined;
46
+ };
47
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
48
+ [key: string]: any;
49
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
50
+ definition: {
51
+ type: PropType<RuntimeFormDefinition>;
52
+ required: true;
53
+ };
54
+ instance: {
55
+ type: PropType<TgbFormTanStackForm>;
56
+ default: undefined;
57
+ };
58
+ tanstackOptions: {
59
+ type: PropType<TgbFormTanStackOptions>;
60
+ default: undefined;
61
+ };
62
+ renderers: {
63
+ type: PropType<VueRendererRegistry>;
64
+ default: undefined;
65
+ };
66
+ fields: {
67
+ type: PropType<readonly string[]>;
68
+ default: undefined;
69
+ };
70
+ }>> & Readonly<{}>, {
71
+ renderers: VueRendererRegistry;
72
+ instance: TgbFormTanStackForm;
73
+ tanstackOptions: TgbFormTanStackOptions;
74
+ fields: readonly string[];
75
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
76
+ //#endregion
77
+ //#region src/TgbFormField.d.ts
78
+ declare const TgbFormField: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
79
+ name: {
80
+ type: StringConstructor;
81
+ required: true;
82
+ };
83
+ field: {
84
+ type: PropType<FieldDefinition>;
85
+ required: true;
86
+ };
87
+ renderers: {
88
+ type: PropType<VueRendererRegistry | undefined>;
89
+ default: undefined;
90
+ };
91
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
92
+ [key: string]: any;
93
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
94
+ name: {
95
+ type: StringConstructor;
96
+ required: true;
97
+ };
98
+ field: {
99
+ type: PropType<FieldDefinition>;
100
+ required: true;
101
+ };
102
+ renderers: {
103
+ type: PropType<VueRendererRegistry | undefined>;
104
+ default: undefined;
105
+ };
106
+ }>> & Readonly<{}>, {
107
+ renderers: VueRendererRegistry | undefined;
108
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
109
+ //#endregion
110
+ //#region src/TgbFormProvider.d.ts
111
+ type TgbFormRegistries = {
112
+ renderers?: VueRendererRegistry;
113
+ };
114
+ declare const TgbFormRegistriesKey: InjectionKey<TgbFormRegistries>;
115
+ declare const TgbFormInstanceKey: InjectionKey<unknown>;
116
+ declare const TgbFormProvider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
117
+ renderers: {
118
+ type: PropType<VueRendererRegistry>;
119
+ default: undefined;
120
+ };
121
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
122
+ [key: string]: any;
123
+ }>[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
124
+ renderers: {
125
+ type: PropType<VueRendererRegistry>;
126
+ default: undefined;
127
+ };
128
+ }>> & Readonly<{}>, {
129
+ renderers: VueRendererRegistry;
130
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
131
+ //#endregion
132
+ export { type BaseVueRendererProps, TgbForm, TgbFormField, TgbFormInstanceKey, TgbFormProvider, TgbFormRegistriesKey, type TgbFormTanStackForm, type VueRenderer, type VueRendererField, type VueRendererProps, type VueRendererRegistry, createVueRendererRegistry };
133
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js ADDED
@@ -0,0 +1,118 @@
1
+ import { createRendererRegistry, resolveRenderer, toTanStackOptions } from "@tgb-form/core";
2
+ import { defineComponent, h, inject, markRaw, provide, toRaw } from "vue";
3
+ import { useForm } from "@tanstack/vue-form";
4
+ //#region src/types.ts
5
+ function createVueRendererRegistry(registry) {
6
+ return createRendererRegistry(registry);
7
+ }
8
+ //#endregion
9
+ //#region src/TgbFormProvider.ts
10
+ const TgbFormRegistriesKey = Symbol("tgb-form-registries");
11
+ const TgbFormInstanceKey = Symbol("tgb-form-instance");
12
+ const TgbFormProvider = defineComponent({
13
+ name: "TgbFormProvider",
14
+ props: { renderers: {
15
+ type: Object,
16
+ default: void 0
17
+ } },
18
+ setup(props, { slots }) {
19
+ provide(TgbFormRegistriesKey, { renderers: props.renderers });
20
+ return () => slots.default?.();
21
+ }
22
+ });
23
+ //#endregion
24
+ //#region src/TgbFormField.ts
25
+ const TgbFormField = defineComponent({
26
+ name: "TgbFormField",
27
+ props: {
28
+ name: {
29
+ type: String,
30
+ required: true
31
+ },
32
+ field: {
33
+ type: Object,
34
+ required: true
35
+ },
36
+ renderers: {
37
+ type: Object,
38
+ default: void 0
39
+ }
40
+ },
41
+ setup(props) {
42
+ return () => {
43
+ const registries = inject(TgbFormRegistriesKey, null);
44
+ const renderers = props.renderers ?? registries?.renderers;
45
+ const form = inject(TgbFormInstanceKey, null);
46
+ if (!form) throw new Error("TgbFormField must be used inside a TgbForm component");
47
+ if (!renderers) throw new Error("No renderer registry found. Pass a renderers prop to TgbFormField or to the parent TgbForm.");
48
+ const FieldComponent = markRaw(toRaw(form.Field));
49
+ const Renderer = markRaw(toRaw(resolveRenderer(props.field, renderers)));
50
+ return h(FieldComponent, { name: props.name }, { default: ({ field, state }) => h(Renderer, {
51
+ name: props.name,
52
+ field,
53
+ form,
54
+ label: props.field.label,
55
+ description: props.field.description,
56
+ props: props.field.props,
57
+ value: state?.value ?? field.state?.value,
58
+ errors: state?.meta?.errors ?? field.state?.meta?.errors ?? []
59
+ }) });
60
+ };
61
+ }
62
+ });
63
+ //#endregion
64
+ //#region src/TgbForm.ts
65
+ const TgbForm = defineComponent({
66
+ name: "TgbForm",
67
+ props: {
68
+ definition: {
69
+ type: Object,
70
+ required: true
71
+ },
72
+ instance: {
73
+ type: Object,
74
+ default: void 0
75
+ },
76
+ tanstackOptions: {
77
+ type: Object,
78
+ default: void 0
79
+ },
80
+ renderers: {
81
+ type: Object,
82
+ default: void 0
83
+ },
84
+ fields: {
85
+ type: Array,
86
+ default: void 0
87
+ }
88
+ },
89
+ setup(props, { slots }) {
90
+ const registries = inject(TgbFormRegistriesKey, null);
91
+ const renderers = props.renderers ?? registries?.renderers;
92
+ const form = props.instance !== void 0 ? props.instance : useForm(toTanStackOptions(props.definition, props.tanstackOptions));
93
+ provide(TgbFormInstanceKey, form);
94
+ return () => {
95
+ return h("form", { onSubmit: (event) => {
96
+ event.preventDefault();
97
+ form.handleSubmit?.();
98
+ } }, [...getOrderedFields(props.definition, props.fields).map(({ name, field }) => h(TgbFormField, {
99
+ key: name,
100
+ name,
101
+ field,
102
+ renderers
103
+ })), slots.default?.()].filter(Boolean));
104
+ };
105
+ }
106
+ });
107
+ function getOrderedFields(definition, fields) {
108
+ const fieldSet = fields ? new Set(fields) : void 0;
109
+ return Object.entries(definition.fields).map(([name, field], index) => ({
110
+ name,
111
+ field,
112
+ index
113
+ })).filter(({ name }) => !fieldSet || fieldSet.has(name)).sort((left, right) => (left.field.order ?? Number.POSITIVE_INFINITY) - (right.field.order ?? Number.POSITIVE_INFINITY) || left.index - right.index);
114
+ }
115
+ //#endregion
116
+ export { TgbForm, TgbFormField, TgbFormInstanceKey, TgbFormProvider, TgbFormRegistriesKey, createVueRendererRegistry };
117
+
118
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/types.ts","../src/TgbFormProvider.ts","../src/TgbFormField.ts","../src/TgbForm.ts"],"sourcesContent":["import { createRendererRegistry, type FieldDataType, type RendererRegistry } from '@tgb-form/core';\nimport type { AnyFieldApi, AnyFormApi, VueFormApi } from '@tanstack/vue-form';\nimport type { Component } from 'vue';\n\nexport type VueRendererField = AnyFieldApi;\n\nexport type VueRendererProps = {\n readonly name: string;\n readonly field: VueRendererField;\n readonly form: TgbFormTanStackForm;\n readonly label?: string;\n readonly description?: string;\n readonly props?: Record<string, unknown>;\n readonly value: unknown;\n readonly errors: readonly unknown[];\n};\n\nexport type BaseVueRendererProps = VueRendererProps;\n\nexport type VueRenderer = Component;\n\nexport type VueRendererRegistry<\n TByName extends Readonly<Record<string, VueRenderer>> = Readonly<Record<string, VueRenderer>>,\n TByType extends Partial<Readonly<Record<FieldDataType, VueRenderer>>> = Partial<\n Readonly<Record<FieldDataType, VueRenderer>>\n >,\n> = RendererRegistry<TByName, TByType>;\n\nexport type TgbFormTanStackForm = AnyFormApi &\n VueFormApi<any, any, any, any, any, any, any, any, any, any, any, any>;\n\nexport function createVueRendererRegistry<\n const TByName extends Readonly<Record<string, VueRenderer>> = {},\n const TByType extends Partial<Readonly<Record<FieldDataType, VueRenderer>>> = {},\n>(registry: {\n readonly byName?: TByName;\n readonly byType?: TByType;\n}): VueRendererRegistry<TByName, TByType> {\n return createRendererRegistry(registry);\n}\n","import { type InjectionKey, type PropType, defineComponent, provide } from 'vue';\nimport type { VueRendererRegistry } from './types';\n\nexport type TgbFormRegistries = {\n renderers?: VueRendererRegistry;\n};\n\nexport const TgbFormRegistriesKey: InjectionKey<TgbFormRegistries> = Symbol('tgb-form-registries');\nexport const TgbFormInstanceKey: InjectionKey<unknown> = Symbol('tgb-form-instance');\n\nexport const TgbFormProvider = defineComponent({\n name: 'TgbFormProvider',\n props: {\n renderers: {\n type: Object as PropType<VueRendererRegistry>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n provide(TgbFormRegistriesKey, { renderers: props.renderers });\n\n return () => slots.default?.();\n },\n});\n","import { type PropType, defineComponent, h, inject, markRaw, toRaw } from 'vue';\nimport { resolveRenderer, type FieldDefinition } from '@tgb-form/core';\nimport { TgbFormInstanceKey, TgbFormRegistriesKey } from './TgbFormProvider';\nimport type { VueRenderer, VueRendererRegistry } from './types';\n\ntype TanStackFieldSlotProps = {\n readonly field: Record<string, unknown> & {\n readonly state?: {\n readonly value?: unknown;\n readonly meta?: {\n readonly errors?: readonly unknown[];\n };\n };\n };\n readonly state?: {\n readonly value?: unknown;\n readonly meta?: {\n readonly errors?: readonly unknown[];\n };\n };\n};\n\nexport const TgbFormField = defineComponent({\n name: 'TgbFormField',\n props: {\n name: {\n type: String,\n required: true,\n },\n field: {\n type: Object as PropType<FieldDefinition>,\n required: true,\n },\n renderers: {\n type: Object as PropType<VueRendererRegistry | undefined>,\n default: undefined,\n },\n },\n setup(props) {\n return () => {\n const registries = inject(TgbFormRegistriesKey, null);\n const renderers = props.renderers ?? registries?.renderers;\n\n const form = inject(TgbFormInstanceKey, null);\n\n if (!form) {\n throw new Error('TgbFormField must be used inside a TgbForm component');\n }\n\n if (!renderers) {\n throw new Error(\n 'No renderer registry found. Pass a renderers prop to TgbFormField or to the parent TgbForm.',\n );\n }\n\n const FieldComponent = markRaw(toRaw((form as Record<string, unknown>).Field) as any);\n const Renderer = markRaw(toRaw(resolveRenderer(props.field, renderers)) as VueRenderer);\n\n return h(\n FieldComponent,\n { name: props.name },\n {\n default: ({ field, state }: TanStackFieldSlotProps) =>\n h(Renderer, {\n name: props.name,\n field,\n form,\n label: props.field.label,\n description: props.field.description,\n props: props.field.props,\n value: state?.value ?? field.state?.value,\n errors: state?.meta?.errors ?? field.state?.meta?.errors ?? [],\n }),\n },\n );\n };\n },\n});\n","import { type PropType, defineComponent, h, inject, provide } from 'vue';\nimport { useForm } from '@tanstack/vue-form';\nimport {\n toTanStackOptions,\n type TgbFormTanStackOptions,\n type FormDefinition,\n type RuntimeFormDefinition,\n} from '@tgb-form/core';\nimport { TgbFormField } from './TgbFormField';\nimport { TgbFormInstanceKey, TgbFormRegistriesKey } from './TgbFormProvider';\nimport type { TgbFormTanStackForm, VueRendererRegistry } from './types';\n\ntype SubmitLikeEvent = {\n preventDefault(): void;\n};\n\nexport const TgbForm = defineComponent({\n name: 'TgbForm',\n props: {\n definition: {\n type: Object as PropType<RuntimeFormDefinition>,\n required: true,\n },\n instance: {\n type: Object as PropType<TgbFormTanStackForm>,\n default: undefined,\n },\n tanstackOptions: {\n type: Object as PropType<TgbFormTanStackOptions>,\n default: undefined,\n },\n renderers: {\n type: Object as PropType<VueRendererRegistry>,\n default: undefined,\n },\n fields: {\n type: Array as PropType<readonly string[]>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const registries = inject(TgbFormRegistriesKey, null);\n const renderers = props.renderers ?? registries?.renderers;\n\n const form =\n props.instance !== undefined\n ? (props.instance as unknown as TgbFormTanStackForm)\n : (useForm(\n toTanStackOptions(props.definition, props.tanstackOptions) as Record<string, unknown>,\n ) as unknown as TgbFormTanStackForm);\n\n provide(TgbFormInstanceKey, form);\n\n return () => {\n const orderedFields = getOrderedFields(props.definition, props.fields);\n\n return h(\n 'form',\n {\n onSubmit: (event: SubmitLikeEvent) => {\n event.preventDefault();\n form.handleSubmit?.();\n },\n },\n [\n ...orderedFields.map(({ name, field }) =>\n h(TgbFormField, {\n key: name,\n name,\n field,\n renderers,\n }),\n ),\n slots.default?.(),\n ].filter(Boolean),\n );\n };\n },\n});\n\nfunction getOrderedFields(definition: FormDefinition, fields?: readonly string[]) {\n const fieldSet = fields ? new Set(fields) : undefined;\n\n return Object.entries(definition.fields)\n .map(([name, field], index) => ({ name, field, index }))\n .filter(({ name }) => !fieldSet || fieldSet.has(name))\n .sort(\n (left, right) =>\n (left.field.order ?? Number.POSITIVE_INFINITY) -\n (right.field.order ?? Number.POSITIVE_INFINITY) || left.index - right.index,\n );\n}\n"],"mappings":";;;;AA+BA,SAAgB,0BAGd,UAGwC;CACxC,OAAO,uBAAuB,QAAQ;AACxC;;;AChCA,MAAa,uBAAwD,OAAO,qBAAqB;AACjG,MAAa,qBAA4C,OAAO,mBAAmB;AAEnF,MAAa,kBAAkB,gBAAgB;CAC7C,MAAM;CACN,OAAO,EACL,WAAW;EACT,MAAM;EACN,SAAS,KAAA;CACX,EACF;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,QAAQ,sBAAsB,EAAE,WAAW,MAAM,UAAU,CAAC;EAE5D,aAAa,MAAM,UAAU;CAC/B;AACF,CAAC;;;ACDD,MAAa,eAAe,gBAAgB;CAC1C,MAAM;CACN,OAAO;EACL,MAAM;GACJ,MAAM;GACN,UAAU;EACZ;EACA,OAAO;GACL,MAAM;GACN,UAAU;EACZ;EACA,WAAW;GACT,MAAM;GACN,SAAS,KAAA;EACX;CACF;CACA,MAAM,OAAO;EACX,aAAa;GACX,MAAM,aAAa,OAAO,sBAAsB,IAAI;GACpD,MAAM,YAAY,MAAM,aAAa,YAAY;GAEjD,MAAM,OAAO,OAAO,oBAAoB,IAAI;GAE5C,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,sDAAsD;GAGxE,IAAI,CAAC,WACH,MAAM,IAAI,MACR,6FACF;GAGF,MAAM,iBAAiB,QAAQ,MAAO,KAAiC,KAAK,CAAQ;GACpF,MAAM,WAAW,QAAQ,MAAM,gBAAgB,MAAM,OAAO,SAAS,CAAC,CAAgB;GAEtF,OAAO,EACL,gBACA,EAAE,MAAM,MAAM,KAAK,GACnB,EACE,UAAU,EAAE,OAAO,YACjB,EAAE,UAAU;IACV,MAAM,MAAM;IACZ;IACA;IACA,OAAO,MAAM,MAAM;IACnB,aAAa,MAAM,MAAM;IACzB,OAAO,MAAM,MAAM;IACnB,OAAO,OAAO,SAAS,MAAM,OAAO;IACpC,QAAQ,OAAO,MAAM,UAAU,MAAM,OAAO,MAAM,UAAU,CAAC;GAC/D,CAAC,EACL,CACF;EACF;CACF;AACF,CAAC;;;AC7DD,MAAa,UAAU,gBAAgB;CACrC,MAAM;CACN,OAAO;EACL,YAAY;GACV,MAAM;GACN,UAAU;EACZ;EACA,UAAU;GACR,MAAM;GACN,SAAS,KAAA;EACX;EACA,iBAAiB;GACf,MAAM;GACN,SAAS,KAAA;EACX;EACA,WAAW;GACT,MAAM;GACN,SAAS,KAAA;EACX;EACA,QAAQ;GACN,MAAM;GACN,SAAS,KAAA;EACX;CACF;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,aAAa,OAAO,sBAAsB,IAAI;EACpD,MAAM,YAAY,MAAM,aAAa,YAAY;EAEjD,MAAM,OACJ,MAAM,aAAa,KAAA,IACd,MAAM,WACN,QACC,kBAAkB,MAAM,YAAY,MAAM,eAAe,CAC3D;EAEN,QAAQ,oBAAoB,IAAI;EAEhC,aAAa;GAGX,OAAO,EACL,QACA,EACE,WAAW,UAA2B;IACpC,MAAM,eAAe;IACrB,KAAK,eAAe;GACtB,EACF,GACA,CACE,GAXkB,iBAAiB,MAAM,YAAY,MAAM,MAW5C,CAAC,CAAC,KAAK,EAAE,MAAM,YAC5B,EAAE,cAAc;IACd,KAAK;IACL;IACA;IACA;GACF,CAAC,CACH,GACA,MAAM,UAAU,CAClB,CAAC,CAAC,OAAO,OAAO,CAClB;EACF;CACF;AACF,CAAC;AAED,SAAS,iBAAiB,YAA4B,QAA4B;CAChF,MAAM,WAAW,SAAS,IAAI,IAAI,MAAM,IAAI,KAAA;CAE5C,OAAO,OAAO,QAAQ,WAAW,MAAM,CAAC,CACrC,KAAK,CAAC,MAAM,QAAQ,WAAW;EAAE;EAAM;EAAO;CAAM,EAAE,CAAC,CACvD,QAAQ,EAAE,WAAW,CAAC,YAAY,SAAS,IAAI,IAAI,CAAC,CAAC,CACrD,MACE,MAAM,WACJ,KAAK,MAAM,SAAS,OAAO,sBACzB,MAAM,MAAM,SAAS,OAAO,sBAAsB,KAAK,QAAQ,MAAM,KAC5E;AACJ"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@tgb-form/vue",
3
+ "version": "0.0.1",
4
+ "description": "An easy to use form library for Vue, built on top of @tgb-form/core.",
5
+ "homepage": "https://github.com/VueEasyForm/easyform#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/VueEasyForm/easyform/issues"
8
+ },
9
+ "license": "MIT",
10
+ "author": "The @tgb-form Authors",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/VueEasyForm/easyform.git"
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "type": "module",
19
+ "sideEffects": false,
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": "./dist/index.js",
23
+ "./package.json": "./package.json"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "devDependencies": {
29
+ "@tanstack/vue-form": "^1.33.0",
30
+ "@tsdown/css": "^0.22.4",
31
+ "@types/node": "^26.1.1",
32
+ "@vitejs/plugin-vue": "^6.0.6",
33
+ "@vitest/browser-playwright": "^4.1.10",
34
+ "playwright": "^1.61.1",
35
+ "tsdown": "^0.22.4",
36
+ "typescript": "^6.0.3",
37
+ "vite": "^8.1.4",
38
+ "vitest": "^4.1.10",
39
+ "vitest-browser-vue": "^2.1.0",
40
+ "vue": "^3.5.34",
41
+ "vue-tsc": "^3.3.7",
42
+ "@tgb-form/core": "0.0.1"
43
+ },
44
+ "peerDependencies": {
45
+ "@tanstack/vue-form": "^1.33.0",
46
+ "vue": "^3.0.0"
47
+ },
48
+ "scripts": {
49
+ "build": "tsdown",
50
+ "dev": "tsdown --watch",
51
+ "play": "vite",
52
+ "test": "vitest --run",
53
+ "typecheck": "vue-tsc --noEmit"
54
+ }
55
+ }