@formatica/vue 0.1.2 → 0.2.3

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.
Files changed (97) hide show
  1. package/README.md +280 -24
  2. package/dist/components/BaseField.d.ts +28 -0
  3. package/dist/components/BaseField.d.ts.map +1 -0
  4. package/dist/components/FormBuilder.d.ts +25 -0
  5. package/dist/components/FormBuilder.d.ts.map +1 -0
  6. package/dist/components/FormField.d.ts +6 -0
  7. package/dist/components/FormField.d.ts.map +1 -0
  8. package/dist/components/inputs/CheckboxGroupInput.d.ts +21 -0
  9. package/dist/components/inputs/CheckboxGroupInput.d.ts.map +1 -0
  10. package/dist/components/inputs/CheckboxInput.d.ts +16 -0
  11. package/dist/components/inputs/CheckboxInput.d.ts.map +1 -0
  12. package/dist/components/inputs/DateInput.d.ts +22 -0
  13. package/dist/components/inputs/DateInput.d.ts.map +1 -0
  14. package/dist/components/inputs/FileInput.d.ts +22 -0
  15. package/dist/components/inputs/FileInput.d.ts.map +1 -0
  16. package/dist/components/inputs/NumberInput.d.ts +26 -0
  17. package/dist/components/inputs/NumberInput.d.ts.map +1 -0
  18. package/dist/components/inputs/PhoneInput.d.ts +23 -0
  19. package/dist/components/inputs/PhoneInput.d.ts.map +1 -0
  20. package/dist/components/inputs/RadioInput.d.ts +19 -0
  21. package/dist/components/inputs/RadioInput.d.ts.map +1 -0
  22. package/dist/components/inputs/SelectInput.d.ts +29 -0
  23. package/dist/components/inputs/SelectInput.d.ts.map +1 -0
  24. package/dist/components/inputs/SliderInput.d.ts +23 -0
  25. package/dist/components/inputs/SliderInput.d.ts.map +1 -0
  26. package/dist/components/inputs/SwitchInput.d.ts +17 -0
  27. package/dist/components/inputs/SwitchInput.d.ts.map +1 -0
  28. package/dist/components/inputs/TagsInput.d.ts +24 -0
  29. package/dist/components/inputs/TagsInput.d.ts.map +1 -0
  30. package/dist/components/inputs/TextInput.d.ts +27 -0
  31. package/dist/components/inputs/TextInput.d.ts.map +1 -0
  32. package/dist/components/inputs/TextareaInput.d.ts +28 -0
  33. package/dist/components/inputs/TextareaInput.d.ts.map +1 -0
  34. package/dist/components/layout/FormDivider.d.ts +7 -0
  35. package/dist/components/layout/FormDivider.d.ts.map +1 -0
  36. package/dist/components/layout/FormGroup.d.ts +15 -0
  37. package/dist/components/layout/FormGroup.d.ts.map +1 -0
  38. package/dist/components/layout/FormHtml.d.ts +7 -0
  39. package/dist/components/layout/FormHtml.d.ts.map +1 -0
  40. package/dist/components/layout/FormRow.d.ts +12 -0
  41. package/dist/components/layout/FormRow.d.ts.map +1 -0
  42. package/dist/components/layout/FormSteps.d.ts +11 -0
  43. package/dist/components/layout/FormSteps.d.ts.map +1 -0
  44. package/dist/components/layout/FormTabs.d.ts +8 -0
  45. package/dist/components/layout/FormTabs.d.ts.map +1 -0
  46. package/dist/components/layout/LayoutRenderer.d.ts +8 -0
  47. package/dist/components/layout/LayoutRenderer.d.ts.map +1 -0
  48. package/dist/core/eventBus.d.ts +9 -0
  49. package/dist/core/eventBus.d.ts.map +1 -0
  50. package/dist/core/fieldRegistry.d.ts +24 -0
  51. package/dist/core/fieldRegistry.d.ts.map +1 -0
  52. package/dist/core/ruleRegistry.d.ts +2 -0
  53. package/dist/core/ruleRegistry.d.ts.map +1 -0
  54. package/dist/core/schemaParser.d.ts +4 -0
  55. package/dist/core/schemaParser.d.ts.map +1 -0
  56. package/dist/core/useConditions.d.ts +2 -0
  57. package/dist/core/useConditions.d.ts.map +1 -0
  58. package/dist/core/useForm.d.ts +10 -0
  59. package/dist/core/useForm.d.ts.map +1 -0
  60. package/dist/core/useFormI18n.d.ts +22 -0
  61. package/dist/core/useFormI18n.d.ts.map +1 -0
  62. package/dist/core/useTheme.d.ts +28 -0
  63. package/dist/core/useTheme.d.ts.map +1 -0
  64. package/dist/core/useValidation.d.ts +17 -0
  65. package/dist/core/useValidation.d.ts.map +1 -0
  66. package/dist/formatica.es.js +1230 -1193
  67. package/dist/formatica.es.js.map +1 -1
  68. package/dist/formatica.umd.cjs +1 -1
  69. package/dist/formatica.umd.cjs.map +1 -1
  70. package/dist/index.d.ts +12 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/plugin.d.ts +11 -0
  73. package/dist/plugin.d.ts.map +1 -0
  74. package/dist/style.css +60 -47
  75. package/dist/types/form.d.ts +92 -0
  76. package/dist/types/form.d.ts.map +1 -0
  77. package/dist/types/i18n.d.ts +18 -0
  78. package/dist/types/i18n.d.ts.map +1 -0
  79. package/dist/types/index.d.ts +7 -0
  80. package/dist/types/index.d.ts.map +1 -0
  81. package/dist/types/layout.d.ts +76 -0
  82. package/dist/types/layout.d.ts.map +1 -0
  83. package/dist/types/schema.d.ts +252 -0
  84. package/dist/types/schema.d.ts.map +1 -0
  85. package/dist/types/theme.d.ts +69 -0
  86. package/dist/types/theme.d.ts.map +1 -0
  87. package/dist/types/validation.d.ts +26 -0
  88. package/dist/types/validation.d.ts.map +1 -0
  89. package/dist/utils/deepMerge.d.ts +2 -0
  90. package/dist/utils/deepMerge.d.ts.map +1 -0
  91. package/dist/utils/extractFields.d.ts +2 -0
  92. package/dist/utils/extractFields.d.ts.map +1 -0
  93. package/dist/utils/sanitize.d.ts +2 -0
  94. package/dist/utils/sanitize.d.ts.map +1 -0
  95. package/dist/utils/titleCase.d.ts +2 -0
  96. package/dist/utils/titleCase.d.ts.map +1 -0
  97. package/package.json +4 -2
@@ -0,0 +1,252 @@
1
+ import { FormContext } from './form';
2
+ import { ColumnSpan } from './layout';
3
+ export interface OptionItem {
4
+ label: string;
5
+ value: string | number | boolean;
6
+ disabled?: boolean;
7
+ icon?: string;
8
+ group?: string;
9
+ }
10
+ export type ConditionOperator = "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "contains" | "empty" | "notEmpty" | "matches";
11
+ export interface Condition {
12
+ field: string;
13
+ operator: ConditionOperator;
14
+ value?: unknown;
15
+ }
16
+ export interface ConditionGroup {
17
+ and?: (Condition | ConditionGroup)[];
18
+ or?: (Condition | ConditionGroup)[];
19
+ }
20
+ export interface FieldTranslations {
21
+ [locale: string]: {
22
+ label?: string;
23
+ placeholder?: string;
24
+ helpText?: string;
25
+ tooltip?: string;
26
+ errors?: Record<string, string>;
27
+ options?: Record<string, string>;
28
+ };
29
+ }
30
+ export interface FormTranslations {
31
+ [locale: string]: {
32
+ submit?: string;
33
+ reset?: string;
34
+ cancel?: string;
35
+ next?: string;
36
+ previous?: string;
37
+ messages?: Record<string, string>;
38
+ };
39
+ }
40
+ export interface FieldBase {
41
+ /** Unique field identifier used as the key in form values. */
42
+ name: string;
43
+ label?: string;
44
+ placeholder?: string;
45
+ helpText?: string;
46
+ tooltip?: string;
47
+ defaultValue?: unknown;
48
+ disabled?: boolean | ((ctx: FormContext) => boolean);
49
+ visible?: boolean | ((ctx: FormContext) => boolean);
50
+ readOnly?: boolean;
51
+ required?: boolean;
52
+ /** CSS class(es) applied to the field wrapper. */
53
+ className?: string;
54
+ /** Inline styles applied to the field wrapper. */
55
+ style?: Record<string, string>;
56
+ /** Validation rules expressed as shorthand strings or rule objects. */
57
+ rules?: string | string[] | Record<string, unknown>;
58
+ /** Conditional visibility / requirement. */
59
+ condition?: Condition | ConditionGroup;
60
+ /** Per-field translations. */
61
+ translations?: FieldTranslations;
62
+ /** Arbitrary metadata attached by consumers. */
63
+ meta?: Record<string, unknown>;
64
+ /** Column span when this field is inside a RowNode. */
65
+ span?: ColumnSpan;
66
+ }
67
+ export interface TextFieldSchema extends FieldBase {
68
+ type: "text";
69
+ inputType?: "text" | "email" | "password" | "url" | "tel" | "search";
70
+ minLength?: number;
71
+ maxLength?: number;
72
+ pattern?: string;
73
+ mask?: string;
74
+ prefix?: string;
75
+ suffix?: string;
76
+ autocomplete?: string;
77
+ }
78
+ export interface NumberFieldSchema extends FieldBase {
79
+ type: "number";
80
+ min?: number;
81
+ max?: number;
82
+ step?: number;
83
+ precision?: number;
84
+ prefix?: string;
85
+ suffix?: string;
86
+ }
87
+ export interface TextareaFieldSchema extends FieldBase {
88
+ type: "textarea";
89
+ rows?: number;
90
+ minLength?: number;
91
+ maxLength?: number;
92
+ autoResize?: boolean;
93
+ }
94
+ export interface SelectFieldSchema extends FieldBase {
95
+ type: "select";
96
+ options: OptionItem[] | ((ctx: FormContext) => OptionItem[] | Promise<OptionItem[]>);
97
+ multiple?: boolean;
98
+ searchable?: boolean;
99
+ clearable?: boolean;
100
+ maxSelections?: number;
101
+ groupBy?: string;
102
+ }
103
+ export interface CheckboxFieldSchema extends FieldBase {
104
+ type: "checkbox";
105
+ checkedValue?: unknown;
106
+ uncheckedValue?: unknown;
107
+ }
108
+ export interface CheckboxGroupFieldSchema extends FieldBase {
109
+ type: "checkbox-group";
110
+ options: OptionItem[] | ((ctx: FormContext) => OptionItem[] | Promise<OptionItem[]>);
111
+ minSelections?: number;
112
+ maxSelections?: number;
113
+ inline?: boolean;
114
+ }
115
+ export interface RadioFieldSchema extends FieldBase {
116
+ type: "radio";
117
+ options: OptionItem[] | ((ctx: FormContext) => OptionItem[] | Promise<OptionItem[]>);
118
+ inline?: boolean;
119
+ }
120
+ export interface SwitchFieldSchema extends FieldBase {
121
+ type: "switch";
122
+ checkedValue?: unknown;
123
+ uncheckedValue?: unknown;
124
+ checkedLabel?: string;
125
+ uncheckedLabel?: string;
126
+ }
127
+ export interface DateFieldSchema extends FieldBase {
128
+ type: "date";
129
+ mode?: "date" | "datetime" | "time" | "month" | "year" | "range";
130
+ format?: string;
131
+ minDate?: string;
132
+ maxDate?: string;
133
+ disabledDates?: string[] | ((date: Date) => boolean);
134
+ }
135
+ export interface FileFieldSchema extends FieldBase {
136
+ type: "file";
137
+ accept?: string;
138
+ multiple?: boolean;
139
+ maxSize?: number;
140
+ maxFiles?: number;
141
+ dragDrop?: boolean;
142
+ }
143
+ export interface SliderFieldSchema extends FieldBase {
144
+ type: "slider";
145
+ min?: number;
146
+ max?: number;
147
+ step?: number;
148
+ range?: boolean;
149
+ showTooltip?: boolean;
150
+ marks?: Record<number, string>;
151
+ }
152
+ export interface TagsFieldSchema extends FieldBase {
153
+ type: "tags";
154
+ maxTags?: number;
155
+ allowCustom?: boolean;
156
+ suggestions?: string[] | ((query: string, ctx: FormContext) => string[] | Promise<string[]>);
157
+ separator?: string;
158
+ }
159
+ export interface RichTextFieldSchema extends FieldBase {
160
+ type: "richtext";
161
+ toolbar?: string[];
162
+ minLength?: number;
163
+ maxLength?: number;
164
+ outputFormat?: "html" | "markdown" | "text";
165
+ }
166
+ export interface HiddenFieldSchema extends FieldBase {
167
+ type: "hidden";
168
+ }
169
+ export interface PhoneFieldSchema extends FieldBase {
170
+ type: "phone";
171
+ /** Default country ISO code (e.g. "NL", "US"). Defaults to "US". */
172
+ defaultCountry?: string;
173
+ /** Restrict to specific country codes. If empty, all countries are shown. */
174
+ countries?: string[];
175
+ /** Whether to show the country flag/selector. Defaults to true. */
176
+ showDialCode?: boolean;
177
+ }
178
+ export type FieldSchema = TextFieldSchema | NumberFieldSchema | TextareaFieldSchema | SelectFieldSchema | CheckboxFieldSchema | CheckboxGroupFieldSchema | RadioFieldSchema | SwitchFieldSchema | DateFieldSchema | FileFieldSchema | SliderFieldSchema | TagsFieldSchema | RichTextFieldSchema | HiddenFieldSchema | PhoneFieldSchema;
179
+ export interface FormSettings {
180
+ layout?: "vertical" | "horizontal" | "inline";
181
+ labelWidth?: string | number;
182
+ labelPosition?: "top" | "left" | "right";
183
+ size?: "small" | "medium" | "large";
184
+ disabled?: boolean;
185
+ readOnly?: boolean;
186
+ validateOnChange?: boolean;
187
+ validateOnBlur?: boolean;
188
+ validateOnSubmit?: boolean;
189
+ scrollToError?: boolean;
190
+ debounce?: number;
191
+ }
192
+ export interface FormSchema {
193
+ /** Unique schema identifier. */
194
+ id?: string;
195
+ /** Human-readable schema version. */
196
+ version?: string;
197
+ fields: SchemaNode[];
198
+ settings?: FormSettings;
199
+ translations?: FormTranslations;
200
+ }
201
+ export interface RowNode {
202
+ type: "row";
203
+ children: SchemaNode[];
204
+ gap?: string | number;
205
+ align?: "start" | "center" | "end" | "stretch";
206
+ className?: string;
207
+ }
208
+ export interface GroupNode {
209
+ type: "group";
210
+ title?: string;
211
+ description?: string;
212
+ collapsible?: boolean;
213
+ collapsed?: boolean;
214
+ children: SchemaNode[];
215
+ className?: string;
216
+ condition?: Condition | ConditionGroup;
217
+ }
218
+ export interface StepsNode {
219
+ type: "steps";
220
+ steps: StepNodeItem[];
221
+ linear?: boolean;
222
+ className?: string;
223
+ }
224
+ export interface StepNodeItem {
225
+ title: string;
226
+ description?: string;
227
+ icon?: string;
228
+ children: SchemaNode[];
229
+ }
230
+ export interface TabsNode {
231
+ type: "tabs";
232
+ tabs: TabNodeItem[];
233
+ className?: string;
234
+ }
235
+ export interface TabNodeItem {
236
+ title: string;
237
+ icon?: string;
238
+ disabled?: boolean;
239
+ children: SchemaNode[];
240
+ }
241
+ export interface DividerNode {
242
+ type: "divider";
243
+ label?: string;
244
+ className?: string;
245
+ }
246
+ export interface HtmlNode {
247
+ type: "html";
248
+ content: string;
249
+ className?: string;
250
+ }
251
+ export type SchemaNode = FieldSchema | RowNode | GroupNode | StepsNode | TabsNode | DividerNode | HtmlNode;
252
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ export interface ThemeConfig {
2
+ /** Unique theme identifier. */
3
+ name: string;
4
+ colors?: {
5
+ primary?: string;
6
+ primaryHover?: string;
7
+ error?: string;
8
+ errorHover?: string;
9
+ success?: string;
10
+ warning?: string;
11
+ info?: string;
12
+ text?: string;
13
+ textSecondary?: string;
14
+ textDisabled?: string;
15
+ background?: string;
16
+ backgroundDisabled?: string;
17
+ border?: string;
18
+ borderFocus?: string;
19
+ borderError?: string;
20
+ placeholder?: string;
21
+ };
22
+ typography?: {
23
+ fontFamily?: string;
24
+ fontSize?: string;
25
+ fontSizeSmall?: string;
26
+ fontSizeLarge?: string;
27
+ lineHeight?: string;
28
+ labelFontWeight?: string;
29
+ };
30
+ spacing?: {
31
+ fieldGap?: string;
32
+ rowGap?: string;
33
+ inputPaddingX?: string;
34
+ inputPaddingY?: string;
35
+ labelMarginBottom?: string;
36
+ };
37
+ borders?: {
38
+ radius?: string;
39
+ radiusSmall?: string;
40
+ radiusLarge?: string;
41
+ width?: string;
42
+ style?: string;
43
+ };
44
+ shadows?: {
45
+ focus?: string;
46
+ error?: string;
47
+ dropdown?: string;
48
+ };
49
+ transitions?: {
50
+ duration?: string;
51
+ timingFunction?: string;
52
+ };
53
+ components?: {
54
+ form?: string;
55
+ field?: string;
56
+ label?: string;
57
+ input?: string;
58
+ error?: string;
59
+ helpText?: string;
60
+ group?: string;
61
+ row?: string;
62
+ steps?: string;
63
+ tabs?: string;
64
+ button?: string;
65
+ [component: string]: string | undefined;
66
+ };
67
+ cssVars?: Record<string, string>;
68
+ }
69
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IACxB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IAGF,UAAU,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IAGF,OAAO,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IAGF,OAAO,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAGF,WAAW,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IAGF,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KAC3C,CAAC;IAGF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC"}
@@ -0,0 +1,26 @@
1
+ import { FormContext } from './form';
2
+ export type BuiltInRuleName = "required" | "email" | "url" | "min" | "max" | "minLength" | "maxLength" | "pattern" | "numeric" | "integer" | "alpha" | "alphaNumeric" | "between" | "confirmed" | "date" | "before" | "after" | "in" | "notIn" | "mimeType" | "fileSize" | "maxFiles" | "unique" | "custom";
3
+ export type RuleFn = (value: unknown, params: Record<string, unknown>, ctx: FormContext) => boolean | string | Promise<boolean | string>;
4
+ export interface ValidationRule {
5
+ /** Name of a built-in rule or a custom identifier. */
6
+ name: BuiltInRuleName | (string & Record<never, never>);
7
+ /** Parameters forwarded to the rule function. */
8
+ params?: Record<string, unknown>;
9
+ /** Custom error message (may contain {field} / {param} placeholders). */
10
+ message?: string;
11
+ /** Custom rule function – takes precedence over name-based lookup. */
12
+ validator?: RuleFn;
13
+ /** When true the rule is only evaluated if the value is non-empty. */
14
+ optional?: boolean;
15
+ /** Abort remaining rules for this field on failure. */
16
+ bail?: boolean;
17
+ /** Debounce interval in ms (useful for async rules). */
18
+ debounce?: number;
19
+ }
20
+ export interface SchemaError {
21
+ field: string;
22
+ rule: string;
23
+ message: string;
24
+ params?: Record<string, unknown>;
25
+ }
26
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAM1C,MAAM,MAAM,eAAe,GACrB,UAAU,GACV,OAAO,GACP,KAAK,GACL,KAAK,GACL,KAAK,GACL,WAAW,GACX,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,cAAc,GACd,SAAS,GACT,WAAW,GACX,MAAM,GACN,QAAQ,GACR,OAAO,GACP,IAAI,GACJ,OAAO,GACP,UAAU,GACV,UAAU,GACV,UAAU,GACV,QAAQ,GACR,QAAQ,CAAC;AAMf,MAAM,MAAM,MAAM,GAAG,CACjB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,WAAW,KACf,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;AAMlD,MAAM,WAAW,cAAc;IAC3B,sDAAsD;IACtD,IAAI,EAAE,eAAe,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export { deepMerge } from '@formatica/core';
2
+ //# sourceMappingURL=deepMerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { extractFields, isFieldNode } from '@formatica/core';
2
+ //# sourceMappingURL=extractFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractFields.d.ts","sourceRoot":"","sources":["../../src/utils/extractFields.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { sanitizeHtml } from '@formatica/core';
2
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { titleCase } from '@formatica/core';
2
+ //# sourceMappingURL=titleCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"titleCase.d.ts","sourceRoot":"","sources":["../../src/utils/titleCase.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formatica/vue",
3
- "version": "0.1.2",
3
+ "version": "0.2.3",
4
4
  "description": "Schema-driven, fully-typed form builder for Vue 3",
5
5
  "type": "module",
6
6
  "main": "./dist/formatica.umd.cjs",
@@ -48,7 +48,9 @@
48
48
  "@vitejs/plugin-vue": "^5.0.0",
49
49
  "@vue/test-utils": "^2.4.6",
50
50
  "happy-dom": "^20.8.4",
51
+ "typescript": "^5.9.3",
51
52
  "vite": "^5.4.0",
53
+ "vite-plugin-dts": "^4.5.4",
52
54
  "vitest": "^1.6.0",
53
55
  "vue": "^3.4.0",
54
56
  "vue-tsc": "^2.0.0"
@@ -65,7 +67,7 @@
65
67
  ],
66
68
  "license": "MIT",
67
69
  "dependencies": {
68
- "@formatica/core": "workspace:*",
70
+ "@formatica/core": "^0.1.0",
69
71
  "libphonenumber-js": "^1.12.40"
70
72
  }
71
73
  }