@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,12 @@
1
+ export type * from '@formatica/core';
2
+ export * from '@formatica/core';
3
+ export { default as FormBuilder } from './components/FormBuilder';
4
+ export { FormComponentsKey, getFieldComponent, getRegisteredFieldTypes, hasFieldType, registerFieldType, unregisterFieldType, } from './core/fieldRegistry';
5
+ export type { UseFormOptions } from './core/useForm';
6
+ export { FormContextKey, useForm } from './core/useForm';
7
+ export type { FormI18nInstance, UseFormI18nOptions } from './core/useFormI18n';
8
+ export { FormI18nKey, useFormI18n, useFormI18nContext } from './core/useFormI18n';
9
+ export type { FormaticaOptions } from './plugin';
10
+ export { createFormatica, FormaticaKey } from './plugin';
11
+ export type { FieldInstance, FormContext, FormEvent, FormEventName, FormEventPayloadMap, FormInstance, SubmitHandler, } from './types/form';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,mBAAmB,iBAAiB,CAAC;AAErC,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEzD,YAAY,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,aAAa,GAChB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ThemeConfig } from '@formatica/core';
2
+ import { Component, InjectionKey, Plugin } from 'vue';
3
+ export interface FormaticaOptions {
4
+ theme?: ThemeConfig;
5
+ locale?: string;
6
+ fallbackLocale?: string;
7
+ components?: Record<string, Component>;
8
+ }
9
+ export declare const FormaticaKey: InjectionKey<FormaticaOptions>;
10
+ export declare function createFormatica(options?: FormaticaOptions): Plugin;
11
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAO,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAIhE,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC1C;AAED,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAuB,CAAC;AAEhF,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAatE"}
package/dist/style.css CHANGED
@@ -28,7 +28,9 @@
28
28
 
29
29
  /* --- Sizing, padding, border-radius --- */
30
30
  .fc-form-builder
31
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="hidden"]),
31
+ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not(
32
+ [type="hidden"]
33
+ ),
32
34
  .fc-form-builder textarea,
33
35
  .fc-form-builder select {
34
36
  border-color: var(--_border);
@@ -37,13 +39,16 @@
37
39
  padding-right: var(--fc-input-padding-x, 0.75rem);
38
40
  padding-top: var(--fc-input-padding-y, 0.5rem);
39
41
  padding-bottom: var(--fc-input-padding-y, 0.5rem);
40
- transition: border-color 0.2s, box-shadow 0.2s, background-color 0.2s;
42
+ transition:
43
+ border-color 0.2s,
44
+ box-shadow 0.2s,
45
+ background-color 0.2s;
41
46
  }
42
47
 
43
48
  /* --- Border radius on buttons --- */
44
49
  .fc-form-builder button[type="button"],
45
50
  .fc-form-builder button[type="submit"] {
46
- border-radius: var(--_radius) !important;
51
+ border-radius: var(--_radius);
47
52
  }
48
53
 
49
54
  /* --- Required asterisk --- */
@@ -56,18 +61,20 @@
56
61
  ═══════════════════════════════════════════════════════════════════ */
57
62
 
58
63
  .fc-form-builder
59
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="hidden"]):focus,
64
+ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not(
65
+ [type="hidden"]
66
+ ):focus,
60
67
  .fc-form-builder textarea:focus,
61
68
  .fc-form-builder select:focus {
62
- border-color: var(--_border-focus) !important;
63
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--_primary) 20%, transparent) !important;
64
- outline: none !important;
69
+ border-color: var(--_border-focus);
70
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--_primary) 20%, transparent);
71
+ outline: none;
65
72
  }
66
73
 
67
74
  /* Generic focus ring for buttons, collapsible headers, step circles, tabs */
68
75
  .fc-form-builder button:focus,
69
76
  .fc-form-builder [tabindex]:focus {
70
- --tw-ring-color: color-mix(in srgb, var(--_primary) 40%, transparent) !important;
77
+ --tw-ring-color: color-mix(in srgb, var(--_primary) 40%, transparent);
71
78
  }
72
79
 
73
80
  /* ═══════════════════════════════════════════════════════════════════
@@ -80,11 +87,11 @@
80
87
  }
81
88
 
82
89
  .fc-form-builder input[type="range"] {
83
- accent-color: var(--_primary) !important;
90
+ accent-color: var(--_primary);
84
91
  }
85
92
 
86
93
  .fc-form-builder .accent-blue-500 {
87
- accent-color: var(--_primary) !important;
94
+ accent-color: var(--_primary);
88
95
  }
89
96
 
90
97
  /* ═══════════════════════════════════════════════════════════════════
@@ -113,17 +120,17 @@
113
120
 
114
121
  .fc-form-builder .border-red-500,
115
122
  .fc-form-builder .focus\:border-red-500:focus {
116
- border-color: var(--_error) !important;
123
+ border-color: var(--_error);
117
124
  }
118
125
 
119
126
  .fc-form-builder .text-red-500,
120
127
  .fc-form-builder .text-red-600 {
121
- color: var(--_error) !important;
128
+ color: var(--_error);
122
129
  }
123
130
 
124
131
  .fc-form-builder .ring-red-500\/20,
125
132
  .fc-form-builder .focus\:ring-red-500\/20:focus {
126
- --tw-ring-color: color-mix(in srgb, var(--_error) 20%, transparent) !important;
133
+ --tw-ring-color: color-mix(in srgb, var(--_error) 20%, transparent);
127
134
  }
128
135
 
129
136
  /* ═══════════════════════════════════════════════════════════════════
@@ -132,11 +139,11 @@
132
139
 
133
140
  .fc-form-builder button[role="switch"][aria-checked="true"],
134
141
  .fc-form-builder button.bg-blue-500:not([type="submit"]) {
135
- background-color: var(--_primary) !important;
142
+ background-color: var(--_primary);
136
143
  }
137
144
 
138
145
  .fc-form-builder button[role="switch"]:focus {
139
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--_primary) 20%, transparent) !important;
146
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--_primary) 20%, transparent);
140
147
  }
141
148
 
142
149
  /* ═══════════════════════════════════════════════════════════════════
@@ -145,28 +152,28 @@
145
152
 
146
153
  /* Active / completed step circle */
147
154
  .fc-form-builder .border-blue-500.bg-blue-500 {
148
- border-color: var(--_primary) !important;
149
- background-color: var(--_primary) !important;
155
+ border-color: var(--_primary);
156
+ background-color: var(--_primary);
150
157
  }
151
158
 
152
159
  /* Active step circle (border only, not filled) */
153
160
  .fc-form-builder .border-blue-500:not(.bg-blue-500) {
154
- border-color: var(--_primary) !important;
161
+ border-color: var(--_primary);
155
162
  }
156
163
 
157
164
  /* Next button in steps */
158
165
  .fc-form-builder .bg-blue-500.text-white {
159
- background-color: var(--_primary) !important;
166
+ background-color: var(--_primary);
160
167
  }
161
168
 
162
169
  .fc-form-builder .bg-blue-500.text-white:hover,
163
170
  .fc-form-builder .hover\:bg-blue-600:hover {
164
- background-color: color-mix(in srgb, var(--_primary) 85%, black) !important;
171
+ background-color: color-mix(in srgb, var(--_primary) 85%, black);
165
172
  }
166
173
 
167
174
  /* Completed step check icon bg */
168
175
  .fc-form-builder .bg-blue-500 {
169
- background-color: var(--_primary) !important;
176
+ background-color: var(--_primary);
170
177
  }
171
178
 
172
179
  /* ═══════════════════════════════════════════════════════════════════
@@ -175,13 +182,13 @@
175
182
 
176
183
  /* Active tab text */
177
184
  .fc-form-builder .text-blue-600 {
178
- color: var(--_primary) !important;
185
+ color: var(--_primary);
179
186
  }
180
187
 
181
188
  /* Active tab underline bar */
182
189
  .fc-form-builder .bg-blue-500.h-0\.5,
183
190
  .fc-form-builder [class*="bg-blue-500"][class*="h-0.5"] {
184
- background-color: var(--_primary) !important;
191
+ background-color: var(--_primary);
185
192
  }
186
193
 
187
194
  /* ═══════════════════════════════════════════════════════════════════
@@ -189,26 +196,26 @@
189
196
  ═══════════════════════════════════════════════════════════════════ */
190
197
 
191
198
  .fc-form-builder .bg-blue-100 {
192
- background-color: color-mix(in srgb, var(--_primary) 15%, white) !important;
199
+ background-color: color-mix(in srgb, var(--_primary) 15%, white);
193
200
  }
194
201
 
195
202
  .fc-form-builder .text-blue-800 {
196
- color: color-mix(in srgb, var(--_primary) 80%, black) !important;
203
+ color: color-mix(in srgb, var(--_primary) 80%, black);
197
204
  }
198
205
 
199
206
  .fc-form-builder .text-blue-600 {
200
- color: var(--_primary) !important;
207
+ color: var(--_primary);
201
208
  }
202
209
 
203
210
  .fc-form-builder .text-blue-600:hover,
204
211
  .fc-form-builder .hover\:text-blue-800:hover {
205
- color: color-mix(in srgb, var(--_primary) 80%, black) !important;
212
+ color: color-mix(in srgb, var(--_primary) 80%, black);
206
213
  }
207
214
 
208
215
  /* Tag input / select dropdown focused wrapper */
209
216
  .fc-form-builder .border-blue-500.ring-2 {
210
- border-color: var(--_border-focus) !important;
211
- --tw-ring-color: color-mix(in srgb, var(--_primary) 20%, transparent) !important;
217
+ border-color: var(--_border-focus);
218
+ --tw-ring-color: color-mix(in srgb, var(--_primary) 20%, transparent);
212
219
  }
213
220
 
214
221
  /* ═══════════════════════════════════════════════════════════════════
@@ -216,11 +223,11 @@
216
223
  ═══════════════════════════════════════════════════════════════════ */
217
224
 
218
225
  .fc-form-builder .bg-blue-50 {
219
- background-color: color-mix(in srgb, var(--_primary) 8%, white) !important;
226
+ background-color: color-mix(in srgb, var(--_primary) 8%, white);
220
227
  }
221
228
 
222
229
  .fc-form-builder .text-blue-700 {
223
- color: color-mix(in srgb, var(--_primary) 70%, black) !important;
230
+ color: color-mix(in srgb, var(--_primary) 70%, black);
224
231
  }
225
232
 
226
233
  /* ═══════════════════════════════════════════════════════════════════
@@ -228,18 +235,18 @@
228
235
  ═══════════════════════════════════════════════════════════════════ */
229
236
 
230
237
  .fc-form-builder .border-blue-500.bg-blue-500.text-white {
231
- border-color: var(--_primary) !important;
232
- background-color: var(--_primary) !important;
238
+ border-color: var(--_primary);
239
+ background-color: var(--_primary);
233
240
  }
234
241
 
235
242
  /* Radio outer ring when selected */
236
243
  .fc-form-builder .border-blue-500 {
237
- border-color: var(--_primary) !important;
244
+ border-color: var(--_primary);
238
245
  }
239
246
 
240
247
  /* Radio inner dot */
241
248
  .fc-form-builder .rounded-full.bg-blue-500 {
242
- background-color: var(--_primary) !important;
249
+ background-color: var(--_primary);
243
250
  }
244
251
 
245
252
  /* ═══════════════════════════════════════════════════════════════════
@@ -247,13 +254,13 @@
247
254
  ═══════════════════════════════════════════════════════════════════ */
248
255
 
249
256
  .fc-form-builder .border-blue-500.bg-blue-50 {
250
- border-color: var(--_primary) !important;
251
- background-color: color-mix(in srgb, var(--_primary) 8%, white) !important;
257
+ border-color: var(--_primary);
258
+ background-color: color-mix(in srgb, var(--_primary) 8%, white);
252
259
  }
253
260
 
254
261
  /* "browse" link text */
255
262
  .fc-form-builder .text-blue-500 {
256
- color: var(--_primary) !important;
263
+ color: var(--_primary);
257
264
  }
258
265
 
259
266
  /* ═══════════════════════════════════════════════════════════════════
@@ -261,24 +268,24 @@
261
268
  ═══════════════════════════════════════════════════════════════════ */
262
269
 
263
270
  .fc-form-builder .focus\:ring-blue-500\/40:focus {
264
- --tw-ring-color: color-mix(in srgb, var(--_primary) 40%, transparent) !important;
271
+ --tw-ring-color: color-mix(in srgb, var(--_primary) 40%, transparent);
265
272
  }
266
273
 
267
274
  .fc-form-builder .focus\:border-blue-500:focus {
268
- border-color: var(--_border-focus) !important;
275
+ border-color: var(--_border-focus);
269
276
  }
270
277
 
271
278
  .fc-form-builder .focus\:ring-blue-500\/20:focus {
272
- --tw-ring-color: color-mix(in srgb, var(--_primary) 20%, transparent) !important;
279
+ --tw-ring-color: color-mix(in srgb, var(--_primary) 20%, transparent);
273
280
  }
274
281
 
275
282
  .fc-form-builder .ring-blue-500\/20 {
276
- --tw-ring-color: color-mix(in srgb, var(--_primary) 20%, transparent) !important;
283
+ --tw-ring-color: color-mix(in srgb, var(--_primary) 20%, transparent);
277
284
  }
278
285
 
279
286
  /* Select dropdown search input focus */
280
287
  .fc-form-builder .fc-select-search:focus {
281
- border-color: var(--_border-focus) !important;
288
+ border-color: var(--_border-focus);
282
289
  }
283
290
 
284
291
  /* ═══════════════════════════════════════════════════════════════════
@@ -288,7 +295,9 @@
288
295
 
289
296
  /* --- Input / Textarea / Select backgrounds & text --- */
290
297
  .dark .fc-form-builder
291
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="hidden"]),
298
+ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not(
299
+ [type="hidden"]
300
+ ),
292
301
  .dark .fc-form-builder textarea,
293
302
  .dark .fc-form-builder select {
294
303
  background-color: #1f2937; /* gray-800 */
@@ -298,7 +307,9 @@
298
307
 
299
308
  /* Also support dark class on the form-builder itself */
300
309
  .fc-form-builder.dark
301
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="hidden"]),
310
+ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not(
311
+ [type="hidden"]
312
+ ),
302
313
  .fc-form-builder.dark textarea,
303
314
  .fc-form-builder.dark select {
304
315
  background-color: #1f2937;
@@ -308,7 +319,9 @@
308
319
 
309
320
  /* --- Placeholder text --- */
310
321
  .dark .fc-form-builder
311
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="hidden"])::placeholder,
322
+ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not(
323
+ [type="hidden"]
324
+ )::placeholder,
312
325
  .dark .fc-form-builder textarea::placeholder,
313
326
  .dark .fc-form-builder select::placeholder {
314
327
  color: #6b7280; /* gray-500 */
@@ -569,7 +582,7 @@
569
582
 
570
583
  /* --- Tags: dark mode chip colors use color-mix with dark background --- */
571
584
  .dark .fc-form-builder .bg-blue-100 {
572
- background-color: color-mix(in srgb, var(--_primary) 20%, #1f2937) !important;
585
+ background-color: color-mix(in srgb, var(--_primary) 20%, #1f2937);
573
586
  }
574
587
 
575
588
  /* Dark mode uses `.dark` class strategy only (Tailwind darkMode: 'class').
@@ -0,0 +1,92 @@
1
+ import { ComputedRef, Ref } from 'vue';
2
+ import { FieldSchema, FormSchema } from './schema';
3
+ export interface FormContext {
4
+ values: Record<string, unknown>;
5
+ getFieldValue: (name: string) => unknown;
6
+ }
7
+ export interface FieldInstance {
8
+ name: string;
9
+ value: Ref<unknown>;
10
+ errors: Ref<string[]>;
11
+ touched: Ref<boolean>;
12
+ dirty: Ref<boolean>;
13
+ disabled: Ref<boolean>;
14
+ visible: Ref<boolean>;
15
+ schema: FieldSchema;
16
+ validate: () => Promise<string[]>;
17
+ reset: () => void;
18
+ clear: () => void;
19
+ }
20
+ export type FormEventName = "submit" | "submit:success" | "submit:error" | "reset" | "change" | "field:change" | "field:blur" | "field:focus" | "validate" | "validate:field";
21
+ export interface FormEventPayloadMap {
22
+ submit: {
23
+ values: Record<string, unknown>;
24
+ };
25
+ "submit:success": {
26
+ values: Record<string, unknown>;
27
+ result: unknown;
28
+ };
29
+ "submit:error": {
30
+ values: Record<string, unknown>;
31
+ error: unknown;
32
+ };
33
+ reset: undefined;
34
+ change: {
35
+ values: Record<string, unknown>;
36
+ };
37
+ "field:change": {
38
+ field: string;
39
+ value: unknown;
40
+ previousValue: unknown;
41
+ };
42
+ "field:blur": {
43
+ field: string;
44
+ value: unknown;
45
+ };
46
+ "field:focus": {
47
+ field: string;
48
+ };
49
+ validate: {
50
+ valid: boolean;
51
+ errors: Record<string, string[]>;
52
+ };
53
+ "validate:field": {
54
+ field: string;
55
+ valid: boolean;
56
+ errors: string[];
57
+ };
58
+ }
59
+ export type FormEvent<E extends FormEventName = FormEventName> = {
60
+ type: E;
61
+ payload: FormEventPayloadMap[E];
62
+ timestamp: number;
63
+ };
64
+ export type SubmitHandler = (values: Record<string, unknown>, ctx: FormContext) => void | Promise<void>;
65
+ export interface FormInstance {
66
+ values: Record<string, unknown>;
67
+ errors: Record<string, string[]>;
68
+ touched: Record<string, boolean>;
69
+ dirty: Record<string, boolean>;
70
+ isValid: ComputedRef<boolean>;
71
+ isDirty: ComputedRef<boolean>;
72
+ isSubmitting: Ref<boolean>;
73
+ submitCount: Ref<number>;
74
+ validate: () => Promise<boolean>;
75
+ validateField: (name: string) => Promise<string[]>;
76
+ submit: (handler?: SubmitHandler) => Promise<void>;
77
+ reset: () => void;
78
+ clear: () => void;
79
+ setError: (name: string, messages: string[]) => void;
80
+ clearError: (name: string) => void;
81
+ clearErrors: () => void;
82
+ getField: (name: string) => FieldInstance | undefined;
83
+ setFieldValue: (name: string, value: unknown) => void;
84
+ setFieldDisabled: (name: string, disabled: boolean) => void;
85
+ setFieldVisible: (name: string, visible: boolean) => void;
86
+ on: <E extends FormEventName>(event: E, handler: (payload: FormEventPayloadMap[E]) => void) => () => void;
87
+ locale: Ref<string>;
88
+ setLocale: (locale: string) => void;
89
+ schema: FormSchema;
90
+ updateSchema: (schema: FormSchema) => void;
91
+ }
92
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/types/form.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type { FieldTranslations, FormTranslations } from './schema';
2
+ export interface I18nContext {
3
+ /** Current active locale. */
4
+ locale: string;
5
+ /** Fallback locale used when a key is missing in the active locale. */
6
+ fallbackLocale: string;
7
+ /** Available locales. */
8
+ availableLocales: string[];
9
+ /** Translate a key with optional interpolation parameters. */
10
+ t: (key: string, params?: Record<string, unknown>) => string;
11
+ /** Set the active locale. */
12
+ setLocale: (locale: string) => void;
13
+ /** Register translations for a locale. */
14
+ registerLocale: (locale: string, messages: Record<string, string>) => void;
15
+ /** Check whether a translation key exists for the active locale. */
16
+ hasKey: (key: string) => boolean;
17
+ }
18
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/types/i18n.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMpE,MAAM,WAAW,WAAW;IACxB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,8DAA8D;IAC9D,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC7D,6BAA6B;IAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,0CAA0C;IAC1C,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC3E,oEAAoE;IACpE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC"}
@@ -0,0 +1,7 @@
1
+ export type { FieldInstance, FormContext, FormEvent, FormEventName, FormEventPayloadMap, FormInstance, SubmitHandler, } from './form';
2
+ export type { I18nContext } from './i18n';
3
+ export type { ColumnSpan, ConditionalLayout, DividerLayout, DividerNode, FieldRef, GroupLayout, GroupNode, HtmlLayout, HtmlNode, LayoutNode, LayoutSchema, RowLayout, RowNode, SchemaNode, StepItem, StepNodeItem, StepsLayout, StepsNode, TabItem, TabNodeItem, TabsLayout, TabsNode, } from './layout';
4
+ export type { CheckboxFieldSchema, CheckboxGroupFieldSchema, Condition, ConditionGroup, ConditionOperator, DateFieldSchema, FieldBase, FieldSchema, FieldTranslations, FileFieldSchema, FormSchema, FormSettings, FormTranslations, HiddenFieldSchema, NumberFieldSchema, OptionItem, RadioFieldSchema, RichTextFieldSchema, SelectFieldSchema, SliderFieldSchema, SwitchFieldSchema, TagsFieldSchema, TextareaFieldSchema, TextFieldSchema, } from './schema';
5
+ export type { ThemeConfig } from './theme';
6
+ export type { BuiltInRuleName, RuleFn, SchemaError, ValidationRule, } from './validation';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,aAAa,GAChB,MAAM,QAAQ,CAAC;AAEhB,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG1C,YAAY,EACR,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,QAAQ,GACX,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,mBAAmB,EACnB,wBAAwB,EACxB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,eAAe,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,YAAY,EACR,eAAe,EACf,MAAM,EACN,WAAW,EACX,cAAc,GACjB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { Condition, ConditionGroup } from './schema';
2
+ export type ColumnSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | "full" | "auto";
3
+ export interface FieldRef {
4
+ type: "field";
5
+ name: string;
6
+ span?: ColumnSpan;
7
+ className?: string;
8
+ }
9
+ export interface RowLayout {
10
+ type: "row";
11
+ columns: LayoutNode[];
12
+ gap?: string | number;
13
+ align?: "start" | "center" | "end" | "stretch";
14
+ className?: string;
15
+ }
16
+ export interface GroupLayout {
17
+ type: "group";
18
+ title?: string;
19
+ description?: string;
20
+ collapsible?: boolean;
21
+ collapsed?: boolean;
22
+ children: LayoutNode[];
23
+ className?: string;
24
+ condition?: Condition | ConditionGroup;
25
+ }
26
+ export interface StepItem {
27
+ title: string;
28
+ description?: string;
29
+ icon?: string;
30
+ children: LayoutNode[];
31
+ condition?: Condition | ConditionGroup;
32
+ }
33
+ export interface StepsLayout {
34
+ type: "steps";
35
+ steps: StepItem[];
36
+ linear?: boolean;
37
+ className?: string;
38
+ }
39
+ export interface TabItem {
40
+ title: string;
41
+ icon?: string;
42
+ children: LayoutNode[];
43
+ disabled?: boolean;
44
+ condition?: Condition | ConditionGroup;
45
+ }
46
+ export interface TabsLayout {
47
+ type: "tabs";
48
+ tabs: TabItem[];
49
+ className?: string;
50
+ }
51
+ export interface ConditionalLayout {
52
+ type: "conditional";
53
+ condition: Condition | ConditionGroup;
54
+ children: LayoutNode[];
55
+ elseChildren?: LayoutNode[];
56
+ className?: string;
57
+ }
58
+ export interface DividerLayout {
59
+ type: "divider";
60
+ label?: string;
61
+ className?: string;
62
+ }
63
+ export interface HtmlLayout {
64
+ type: "html";
65
+ content: string;
66
+ className?: string;
67
+ }
68
+ export type LayoutNode = FieldRef | RowLayout | GroupLayout | StepsLayout | TabsLayout | ConditionalLayout | DividerLayout | HtmlLayout;
69
+ export interface LayoutSchema {
70
+ nodes: LayoutNode[];
71
+ columns?: number;
72
+ gap?: string | number;
73
+ className?: string;
74
+ }
75
+ export type { DividerNode, GroupNode, HtmlNode, RowNode, SchemaNode, StepNodeItem, StepsNode, TabNodeItem, TabsNode, } from './schema';
76
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/types/layout.ts"],"names":[],"mappings":"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"}