@btst/stack 2.5.6 → 2.6.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.
Files changed (216) hide show
  1. package/README.md +23 -0
  2. package/dist/client/components/index.d.cts +9 -9
  3. package/dist/client/components/index.d.mts +9 -9
  4. package/dist/client/components/index.d.ts +9 -9
  5. package/dist/components/auto-form/index.cjs +8 -0
  6. package/dist/components/auto-form/index.d.cts +26 -0
  7. package/dist/components/auto-form/index.d.mts +26 -0
  8. package/dist/components/auto-form/index.d.ts +26 -0
  9. package/dist/components/auto-form/index.mjs +1 -0
  10. package/dist/components/empty/index.cjs +12 -0
  11. package/dist/components/empty/index.d.cts +15 -0
  12. package/dist/components/empty/index.d.mts +15 -0
  13. package/dist/components/empty/index.d.ts +15 -0
  14. package/dist/components/empty/index.mjs +1 -0
  15. package/dist/components/form-builder/index.cjs +16 -0
  16. package/dist/components/form-builder/index.d.cts +385 -0
  17. package/dist/components/form-builder/index.d.mts +385 -0
  18. package/dist/components/form-builder/index.d.ts +385 -0
  19. package/dist/components/form-builder/index.mjs +4 -0
  20. package/dist/components/markdown/index.cjs +9 -0
  21. package/dist/components/markdown/index.d.cts +30 -0
  22. package/dist/components/markdown/index.d.mts +30 -0
  23. package/dist/components/markdown/index.d.ts +30 -0
  24. package/dist/components/markdown/index.mjs +2 -0
  25. package/dist/components/markdown/style.css +394 -0
  26. package/dist/components/minimal-tiptap/style.css +548 -0
  27. package/dist/components/multi-select/index.cjs +7 -0
  28. package/dist/components/multi-select/index.d.cts +78 -0
  29. package/dist/components/multi-select/index.d.mts +78 -0
  30. package/dist/components/multi-select/index.d.ts +78 -0
  31. package/dist/components/multi-select/index.mjs +1 -0
  32. package/dist/components/search-select/index.cjs +7 -0
  33. package/dist/components/search-select/index.d.cts +15 -0
  34. package/dist/components/search-select/index.d.mts +15 -0
  35. package/dist/components/search-select/index.d.ts +15 -0
  36. package/dist/components/search-select/index.mjs +1 -0
  37. package/dist/components/stepped-auto-form/index.cjs +7 -0
  38. package/dist/components/stepped-auto-form/index.d.cts +37 -0
  39. package/dist/components/stepped-auto-form/index.d.mts +37 -0
  40. package/dist/components/stepped-auto-form/index.d.ts +37 -0
  41. package/dist/components/stepped-auto-form/index.mjs +1 -0
  42. package/dist/components/ui-builder/style.css +552 -0
  43. package/dist/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@dnd-kit/core/dist/core.esm.cjs +1 -1
  44. package/dist/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@dnd-kit/core/dist/core.esm.mjs +1 -1
  45. package/dist/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@dnd-kit/sortable/dist/sortable.esm.mjs +2 -2
  46. package/dist/node_modules/.pnpm/@floating-ui_core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +1 -1
  47. package/dist/node_modules/.pnpm/@floating-ui_dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +3 -3
  48. package/dist/node_modules/.pnpm/@floating-ui_react-dom@2.1.6_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs +1 -1
  49. package/dist/packages/stack/src/plugins/ai-chat/client/components/shared/default-error.cjs +1 -1
  50. package/dist/packages/stack/src/plugins/ai-chat/client/components/shared/default-error.mjs +1 -1
  51. package/dist/packages/stack/src/plugins/ai-chat/client/plugin.cjs +44 -35
  52. package/dist/packages/stack/src/plugins/ai-chat/client/plugin.mjs +44 -35
  53. package/dist/packages/stack/src/plugins/blog/client/components/forms/markdown-editor-with-overrides.cjs +23 -0
  54. package/dist/packages/stack/src/plugins/blog/client/components/forms/markdown-editor-with-overrides.mjs +21 -0
  55. package/dist/packages/stack/src/plugins/blog/client/components/forms/markdown-editor.cjs +11 -12
  56. package/dist/packages/stack/src/plugins/blog/client/components/forms/markdown-editor.mjs +11 -12
  57. package/dist/packages/stack/src/plugins/blog/client/components/forms/post-forms.cjs +2 -2
  58. package/dist/packages/stack/src/plugins/blog/client/components/forms/post-forms.mjs +2 -2
  59. package/dist/packages/stack/src/plugins/blog/client/components/shared/default-error.cjs +1 -1
  60. package/dist/packages/stack/src/plugins/blog/client/components/shared/default-error.mjs +1 -1
  61. package/dist/packages/stack/src/plugins/blog/client/components/shared/search-input.cjs +0 -3
  62. package/dist/packages/stack/src/plugins/blog/client/components/shared/search-input.mjs +1 -1
  63. package/dist/packages/stack/src/plugins/blog/client/components/shared/search-modal.cjs +0 -3
  64. package/dist/packages/stack/src/plugins/blog/client/components/shared/search-modal.mjs +1 -1
  65. package/dist/packages/stack/src/plugins/blog/client/hooks/use-debounce.cjs +22 -0
  66. package/dist/packages/stack/src/plugins/blog/client/hooks/use-debounce.mjs +23 -2
  67. package/dist/packages/stack/src/plugins/blog/client/plugin.cjs +12 -6
  68. package/dist/packages/stack/src/plugins/blog/client/plugin.mjs +12 -6
  69. package/dist/packages/stack/src/plugins/cms/client/components/shared/default-error.cjs +1 -1
  70. package/dist/packages/stack/src/plugins/cms/client/components/shared/default-error.mjs +1 -1
  71. package/dist/packages/stack/src/plugins/cms/client/plugin.cjs +38 -26
  72. package/dist/packages/stack/src/plugins/cms/client/plugin.mjs +38 -26
  73. package/dist/packages/stack/src/plugins/form-builder/client/components/shared/default-error.cjs +1 -1
  74. package/dist/packages/stack/src/plugins/form-builder/client/components/shared/default-error.mjs +1 -1
  75. package/dist/packages/stack/src/plugins/form-builder/client/plugin.cjs +32 -20
  76. package/dist/packages/stack/src/plugins/form-builder/client/plugin.mjs +32 -20
  77. package/dist/packages/stack/src/plugins/kanban/client/components/shared/default-error.cjs +1 -1
  78. package/dist/packages/stack/src/plugins/kanban/client/components/shared/default-error.mjs +1 -1
  79. package/dist/packages/stack/src/plugins/kanban/client/plugin.cjs +6 -3
  80. package/dist/packages/stack/src/plugins/kanban/client/plugin.mjs +6 -3
  81. package/dist/packages/stack/src/plugins/ui-builder/client/components/page-renderer.cjs +1 -1
  82. package/dist/packages/stack/src/plugins/ui-builder/client/components/page-renderer.mjs +1 -1
  83. package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/default-error.cjs +1 -1
  84. package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/default-error.mjs +1 -1
  85. package/dist/packages/stack/src/plugins/ui-builder/client/plugin.cjs +24 -15
  86. package/dist/packages/stack/src/plugins/ui-builder/client/plugin.mjs +24 -15
  87. package/dist/packages/ui/src/components/auto-form/index.cjs +12 -2
  88. package/dist/packages/ui/src/components/auto-form/index.mjs +9 -2
  89. package/dist/packages/ui/src/components/auto-form/stepped-auto-form.cjs +2 -2
  90. package/dist/packages/ui/src/components/empty.cjs +28 -0
  91. package/dist/packages/ui/src/components/empty.mjs +27 -1
  92. package/dist/packages/ui/src/components/form-builder/components/index.mjs +2 -2
  93. package/dist/packages/ui/src/components/form-builder/edit-field-dialog.cjs +1 -1
  94. package/dist/packages/ui/src/components/form-builder/index.mjs +2 -2
  95. package/dist/packages/ui/src/components/form.mjs +1 -1
  96. package/dist/packages/ui/src/components/kanban.mjs +1 -1
  97. package/dist/packages/ui/src/components/multi-select.mjs +2 -2
  98. package/dist/packages/ui/src/components/search-select.cjs +13 -3
  99. package/dist/packages/ui/src/components/search-select.mjs +14 -4
  100. package/dist/packages/ui/src/components/ui-builder/internal/config-panel.cjs +1 -1
  101. package/dist/packages/ui/src/components/ui-builder/internal/props-panel.cjs +1 -1
  102. package/dist/plugins/ai-chat/client/index.d.cts +17 -4
  103. package/dist/plugins/ai-chat/client/index.d.mts +17 -4
  104. package/dist/plugins/ai-chat/client/index.d.ts +17 -4
  105. package/dist/plugins/blog/api/index.d.cts +2 -2
  106. package/dist/plugins/blog/api/index.d.mts +2 -2
  107. package/dist/plugins/blog/api/index.d.ts +2 -2
  108. package/dist/plugins/blog/client/hooks/index.cjs +3 -0
  109. package/dist/plugins/blog/client/hooks/index.d.cts +7 -226
  110. package/dist/plugins/blog/client/hooks/index.d.mts +7 -226
  111. package/dist/plugins/blog/client/hooks/index.d.ts +7 -226
  112. package/dist/plugins/blog/client/hooks/index.mjs +1 -0
  113. package/dist/plugins/blog/client/index.d.cts +46 -22
  114. package/dist/plugins/blog/client/index.d.mts +46 -22
  115. package/dist/plugins/blog/client/index.d.ts +46 -22
  116. package/dist/plugins/blog/query-keys.d.cts +2 -2
  117. package/dist/plugins/blog/query-keys.d.mts +2 -2
  118. package/dist/plugins/blog/query-keys.d.ts +2 -2
  119. package/dist/plugins/cms/client/index.d.cts +36 -15
  120. package/dist/plugins/cms/client/index.d.mts +36 -15
  121. package/dist/plugins/cms/client/index.d.ts +36 -15
  122. package/dist/plugins/form-builder/client/components/index.d.cts +2 -2
  123. package/dist/plugins/form-builder/client/components/index.d.mts +2 -2
  124. package/dist/plugins/form-builder/client/components/index.d.ts +2 -2
  125. package/dist/plugins/form-builder/client/index.d.cts +33 -15
  126. package/dist/plugins/form-builder/client/index.d.mts +33 -15
  127. package/dist/plugins/form-builder/client/index.d.ts +33 -15
  128. package/dist/plugins/kanban/api/index.d.cts +1 -1
  129. package/dist/plugins/kanban/api/index.d.mts +1 -1
  130. package/dist/plugins/kanban/api/index.d.ts +1 -1
  131. package/dist/plugins/kanban/client/components/index.d.cts +5 -5
  132. package/dist/plugins/kanban/client/components/index.d.mts +5 -5
  133. package/dist/plugins/kanban/client/components/index.d.ts +5 -5
  134. package/dist/plugins/kanban/client/index.d.cts +25 -10
  135. package/dist/plugins/kanban/client/index.d.mts +25 -10
  136. package/dist/plugins/kanban/client/index.d.ts +25 -10
  137. package/dist/plugins/kanban/query-keys.d.cts +1 -1
  138. package/dist/plugins/kanban/query-keys.d.mts +1 -1
  139. package/dist/plugins/kanban/query-keys.d.ts +1 -1
  140. package/dist/plugins/route-docs/client/index.d.cts +4 -4
  141. package/dist/plugins/route-docs/client/index.d.mts +4 -4
  142. package/dist/plugins/route-docs/client/index.d.ts +4 -4
  143. package/dist/plugins/ui-builder/client/components/index.d.cts +3 -3
  144. package/dist/plugins/ui-builder/client/components/index.d.mts +3 -3
  145. package/dist/plugins/ui-builder/client/components/index.d.ts +3 -3
  146. package/dist/plugins/ui-builder/client/hooks/index.d.cts +3 -3
  147. package/dist/plugins/ui-builder/client/hooks/index.d.mts +3 -3
  148. package/dist/plugins/ui-builder/client/hooks/index.d.ts +3 -3
  149. package/dist/plugins/ui-builder/client/index.d.cts +32 -18
  150. package/dist/plugins/ui-builder/client/index.d.mts +32 -18
  151. package/dist/plugins/ui-builder/client/index.d.ts +32 -18
  152. package/dist/plugins/ui-builder/index.d.cts +3 -3
  153. package/dist/plugins/ui-builder/index.d.mts +3 -3
  154. package/dist/plugins/ui-builder/index.d.ts +3 -3
  155. package/dist/shared/{stack.B2DwzF3r.d.ts → stack.ASwEoINr.d.ts} +1 -1
  156. package/dist/shared/{stack.C5ZSOJGJ.d.cts → stack.B1srlBud.d.mts} +1 -1
  157. package/dist/shared/stack.B8vT-Yt4.d.mts +228 -0
  158. package/dist/shared/stack.BAT540yW.d.ts +228 -0
  159. package/dist/shared/{stack.D0QupDcQ.d.ts → stack.BK9Z2dcL.d.ts} +1 -1
  160. package/dist/shared/stack.BwA7trxA.d.cts +228 -0
  161. package/dist/shared/{stack.Cl7ok_cY.d.cts → stack.CFECM0ew.d.cts} +1 -1
  162. package/dist/shared/stack.CZMWR72v.d.cts +10 -0
  163. package/dist/shared/stack.CZMWR72v.d.mts +10 -0
  164. package/dist/shared/stack.CZMWR72v.d.ts +10 -0
  165. package/dist/shared/{stack.VMmQdbsJ.d.mts → stack.DVtk5CNw.d.mts} +1 -1
  166. package/dist/shared/{stack.B8_74ror.d.ts → stack.DXnclTG7.d.ts} +4 -4
  167. package/dist/shared/{stack.C21-LFX8.d.cts → stack.DaZM10cp.d.cts} +4 -4
  168. package/dist/shared/{stack.Dq4qVr1F.d.mts → stack.DmpPDPxA.d.cts} +1 -1
  169. package/dist/shared/{stack.CL4mKxe7.d.mts → stack.cfCkioTe.d.mts} +4 -4
  170. package/dist/shared/stack.fdi94T4S.d.cts +291 -0
  171. package/dist/shared/stack.fdi94T4S.d.mts +291 -0
  172. package/dist/shared/stack.fdi94T4S.d.ts +291 -0
  173. package/package.json +115 -4
  174. package/src/__tests__/page-component-overrides.test.tsx +147 -0
  175. package/src/components/auto-form/index.ts +12 -0
  176. package/src/components/empty/index.ts +8 -0
  177. package/src/components/form-builder/index.ts +23 -0
  178. package/src/components/kanban/index.ts +9 -0
  179. package/src/components/markdown/index.ts +5 -0
  180. package/src/components/markdown/style.css +3 -0
  181. package/src/components/minimal-tiptap/index.ts +5 -0
  182. package/src/components/minimal-tiptap/style.css +1 -0
  183. package/src/components/multi-select/index.ts +5 -0
  184. package/src/components/search-select/index.ts +1 -0
  185. package/src/components/stepped-auto-form/index.ts +5 -0
  186. package/src/components/ui-builder/index.ts +50 -0
  187. package/src/components/ui-builder/style.css +5 -0
  188. package/src/plugins/ai-chat/client/components/shared/default-error.tsx +1 -1
  189. package/src/plugins/ai-chat/client/plugin.tsx +60 -32
  190. package/src/plugins/blog/client/components/forms/markdown-editor-with-overrides.tsx +29 -0
  191. package/src/plugins/blog/client/components/forms/markdown-editor.tsx +24 -21
  192. package/src/plugins/blog/client/components/forms/post-forms.tsx +2 -2
  193. package/src/plugins/blog/client/components/shared/default-error.tsx +2 -1
  194. package/src/plugins/blog/client/components/shared/posts-list.tsx +1 -1
  195. package/src/plugins/blog/client/components/shared/search-input.tsx +0 -2
  196. package/src/plugins/blog/client/components/shared/search-modal.tsx +0 -2
  197. package/src/plugins/blog/client/hooks/index.tsx +1 -0
  198. package/src/plugins/blog/client/plugin.tsx +41 -6
  199. package/src/plugins/cms/client/components/shared/default-error.tsx +3 -2
  200. package/src/plugins/cms/client/plugin.tsx +65 -32
  201. package/src/plugins/form-builder/client/components/shared/default-error.tsx +3 -2
  202. package/src/plugins/form-builder/client/plugin.tsx +56 -23
  203. package/src/plugins/kanban/client/components/shared/default-error.tsx +3 -2
  204. package/src/plugins/kanban/client/plugin.tsx +23 -3
  205. package/src/plugins/ui-builder/client/components/page-renderer.tsx +5 -3
  206. package/src/plugins/ui-builder/client/components/shared/default-error.tsx +3 -2
  207. package/src/plugins/ui-builder/client/plugin.tsx +41 -15
  208. package/dist/shared/stack.8nldKomx.d.cts +0 -114
  209. package/dist/shared/stack.8nldKomx.d.mts +0 -114
  210. package/dist/shared/stack.8nldKomx.d.ts +0 -114
  211. package/dist/shared/{stack.CxNeGV2z.d.mts → stack.B8D4r97Z.d.mts} +6 -6
  212. package/dist/shared/{stack.BWp0hcm9.d.cts → stack.BQmuNl5p.d.cts} +3 -3
  213. package/dist/shared/{stack.BWp0hcm9.d.mts → stack.BQmuNl5p.d.mts} +3 -3
  214. package/dist/shared/{stack.BWp0hcm9.d.ts → stack.BQmuNl5p.d.ts} +3 -3
  215. package/dist/shared/{stack.BFcg0tDz.d.ts → stack.DgKOwl20.d.ts} +6 -6
  216. package/dist/shared/{stack.DSxTDZBQ.d.cts → stack.uWSqCWAb.d.cts} +6 -6
@@ -0,0 +1,385 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { z } from 'zod';
3
+ import { I as InputPropsByBackingType, c as FieldType, S as SerializableInputProps, J as JSONSchemaPropertyBase, A as AutoFormInputComponentProps } from '../../shared/stack.fdi94T4S.cjs';
4
+ import 'react-hook-form';
5
+
6
+ /**
7
+ * Represents a step in a multi-step form.
8
+ */
9
+ interface FormStep {
10
+ /** Unique identifier for the step */
11
+ id: string;
12
+ /** Display title for the step */
13
+ title: string;
14
+ }
15
+ /**
16
+ * JSON Schema types for form builder I/O.
17
+ * Extends the shared base types with form-builder specific needs.
18
+ */
19
+ interface JSONSchema {
20
+ type: "object";
21
+ properties: Record<string, JSONSchemaProperty>;
22
+ required?: string[];
23
+ $schema?: string;
24
+ /** Step definitions for multi-step forms (stored in schema meta) */
25
+ steps?: FormStep[];
26
+ additionalProperties?: boolean;
27
+ }
28
+ /**
29
+ * JSON Schema property with form-builder metadata.
30
+ * Extends the shared JSONSchemaPropertyBase for compatibility with auto-form.
31
+ */
32
+ interface JSONSchemaProperty extends Omit<JSONSchemaPropertyBase, "type" | "enum" | "properties" | "items"> {
33
+ /** JSON Schema type - required for form-builder fields */
34
+ type: string;
35
+ /** Enum values for select/radio fields (string-only for form-builder) */
36
+ enum?: string[];
37
+ /** Nested properties for object types (self-referential) */
38
+ properties?: Record<string, JSONSchemaProperty>;
39
+ /** Item schema for array types (self-referential) */
40
+ items?: JSONSchemaProperty;
41
+ /** Minimum items for array types */
42
+ minItems?: number;
43
+ /** Maximum items for array types */
44
+ maxItems?: number;
45
+ /** Step group index for multi-step forms (0-indexed) */
46
+ stepGroup?: number;
47
+ }
48
+ /**
49
+ * Internal field representation used by form builder.
50
+ */
51
+ interface FormBuilderField {
52
+ id: string;
53
+ type: string;
54
+ props: FormBuilderFieldProps;
55
+ /** Nested fields for object type containers */
56
+ children?: FormBuilderField[];
57
+ /** Template fields defining the shape of each array item */
58
+ itemTemplate?: FormBuilderField[];
59
+ /** Step group index (0-indexed) for multi-step forms */
60
+ stepGroup?: number;
61
+ }
62
+ /**
63
+ * Backing types supported by form-builder fields.
64
+ */
65
+ type BackingType = keyof InputPropsByBackingType;
66
+ /**
67
+ * Registry mapping component type names to their backing Zod types.
68
+ * This enables compile-time type checking for component definitions.
69
+ */
70
+ declare const COMPONENT_BACKING_TYPES: {
71
+ readonly text: "string";
72
+ readonly email: "string";
73
+ readonly password: "string";
74
+ readonly url: "string";
75
+ readonly phone: "string";
76
+ readonly textarea: "string";
77
+ readonly number: "number";
78
+ readonly checkbox: "boolean";
79
+ readonly switch: "boolean";
80
+ readonly select: "enum";
81
+ readonly radio: "enum";
82
+ readonly date: "date";
83
+ readonly color: "string";
84
+ };
85
+ /**
86
+ * All registered component type names.
87
+ */
88
+ type ComponentType = keyof typeof COMPONENT_BACKING_TYPES;
89
+ /**
90
+ * Base properties shared by all form builder fields.
91
+ */
92
+ interface BaseFieldProps {
93
+ /** Display label for the field */
94
+ label: string;
95
+ /** Description text */
96
+ description?: string;
97
+ /** Whether the field is required */
98
+ required?: boolean;
99
+ /** Field type override (checkbox, date, select, radio, switch, etc.) */
100
+ fieldType?: FieldType;
101
+ /** Additional input props passed through to the field */
102
+ inputProps?: SerializableInputProps;
103
+ }
104
+ /**
105
+ * Props for string-backed fields (text, email, password, url, phone, textarea).
106
+ */
107
+ interface StringFieldProps extends BaseFieldProps {
108
+ /** Placeholder text */
109
+ placeholder?: string;
110
+ /** Minimum length */
111
+ minLength?: number;
112
+ /** Maximum length */
113
+ maxLength?: number;
114
+ /** Regex pattern for validation */
115
+ pattern?: string;
116
+ /** HTML input type (text, email, password, tel, url) */
117
+ inputType?: string;
118
+ /** Default value */
119
+ defaultValue?: string;
120
+ }
121
+ /**
122
+ * Props for number-backed fields.
123
+ */
124
+ interface NumberFieldProps extends BaseFieldProps {
125
+ /** Placeholder text */
126
+ placeholder?: string;
127
+ /** Minimum value */
128
+ min?: number;
129
+ /** Maximum value */
130
+ max?: number;
131
+ /** Default value */
132
+ defaultValue?: number;
133
+ }
134
+ /**
135
+ * Props for boolean-backed fields (checkbox, switch).
136
+ */
137
+ interface BooleanFieldProps extends BaseFieldProps {
138
+ /** Default value */
139
+ defaultValue?: boolean;
140
+ }
141
+ /**
142
+ * Props for date-backed fields.
143
+ */
144
+ interface DateFieldProps extends BaseFieldProps {
145
+ /** Minimum date */
146
+ minDate?: Date | string;
147
+ /** Maximum date */
148
+ maxDate?: Date | string;
149
+ /** Default value */
150
+ defaultValue?: Date | string;
151
+ }
152
+ /**
153
+ * Props for enum-backed fields (select, radio).
154
+ */
155
+ interface EnumFieldProps extends BaseFieldProps {
156
+ /** Placeholder text (for select) */
157
+ placeholder?: string;
158
+ /** Options for the select/radio */
159
+ options?: string[];
160
+ /** Default value (must match one of the options) */
161
+ defaultValue?: string;
162
+ }
163
+ /**
164
+ * Maps backing types to their corresponding field props.
165
+ */
166
+ interface FieldPropsByBackingType {
167
+ string: StringFieldProps;
168
+ number: NumberFieldProps;
169
+ boolean: BooleanFieldProps;
170
+ date: DateFieldProps;
171
+ enum: EnumFieldProps;
172
+ }
173
+ /**
174
+ * Get the correct field props type for a backing type.
175
+ */
176
+ type FieldPropsFor<T extends BackingType> = FieldPropsByBackingType[T];
177
+ /**
178
+ * Union of all discriminated field props.
179
+ */
180
+ type TypedFieldProps = StringFieldProps | NumberFieldProps | BooleanFieldProps | DateFieldProps | EnumFieldProps;
181
+ /**
182
+ * Properties for a form builder field.
183
+ * This is the runtime union type used when the backing type is not known.
184
+ *
185
+ * For type-safe field props, use the discriminated variants:
186
+ * - StringFieldProps for text, email, password, url, phone, textarea
187
+ * - NumberFieldProps for number fields
188
+ * - BooleanFieldProps for checkbox, switch
189
+ * - DateFieldProps for date fields
190
+ * - EnumFieldProps for select, radio
191
+ */
192
+ interface FormBuilderFieldProps extends BaseFieldProps {
193
+ placeholder?: string;
194
+ minLength?: number;
195
+ maxLength?: number;
196
+ pattern?: string;
197
+ inputType?: string;
198
+ min?: number;
199
+ max?: number;
200
+ minDate?: Date | string;
201
+ maxDate?: Date | string;
202
+ options?: string[];
203
+ minItems?: number;
204
+ maxItems?: number;
205
+ defaultValue?: unknown;
206
+ }
207
+ /**
208
+ * Typed component definition for a specific backing type.
209
+ *
210
+ * Use this when defining components to get type-safe field props:
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * const textField: TypedComponentDefinition<"string"> = {
215
+ * type: "text",
216
+ * backingType: "string",
217
+ * defaultProps: { label: "Text", placeholder: "Enter text" }, // ✓ type-safe
218
+ * // ...
219
+ * };
220
+ * ```
221
+ */
222
+ interface TypedComponentDefinition<T extends BackingType> {
223
+ /** Unique identifier for this component type */
224
+ type: ComponentType | string;
225
+ /** The backing Zod type for this component */
226
+ backingType: T;
227
+ /** Display name shown in the palette */
228
+ label: string;
229
+ /** Icon shown in the palette */
230
+ icon?: React.ComponentType<{
231
+ className?: string;
232
+ }>;
233
+ /** Default props when a new field is created - type-safe based on backing type */
234
+ defaultProps: Partial<FieldPropsFor<T>>;
235
+ /** Zod schema for the property panel */
236
+ propertiesSchema: z.ZodObject<z.ZodRawShape>;
237
+ /** Convert field props to JSON Schema property */
238
+ toJSONSchema: (props: FieldPropsFor<T>, isRequired: boolean) => JSONSchemaProperty;
239
+ /** Try to parse a JSON Schema property into this component type */
240
+ fromJSONSchema: (prop: JSONSchemaProperty, key: string, isRequired: boolean) => {
241
+ id: string;
242
+ type: string;
243
+ props: FieldPropsFor<T>;
244
+ } | null;
245
+ /** Optional custom preview component */
246
+ PreviewComponent?: React.ComponentType<{
247
+ field: FormBuilderField;
248
+ }>;
249
+ }
250
+ /**
251
+ * Component definition provided by developers.
252
+ *
253
+ * This is the runtime type used when the backing type is not known at compile time.
254
+ * For type-safe definitions, use `TypedComponentDefinition<T>`.
255
+ */
256
+ interface FormBuilderComponentDefinition {
257
+ /** Unique identifier for this component type */
258
+ type: string;
259
+ /** The backing Zod type for this component (optional for backwards compatibility) */
260
+ backingType?: BackingType;
261
+ /** Display name shown in the palette */
262
+ label: string;
263
+ /** Icon shown in the palette */
264
+ icon?: React.ComponentType<{
265
+ className?: string;
266
+ }>;
267
+ /** Default props when a new field is created */
268
+ defaultProps: Partial<FormBuilderFieldProps>;
269
+ /** Zod schema for the property panel */
270
+ propertiesSchema: z.ZodObject<z.ZodRawShape>;
271
+ /** Convert field props to JSON Schema property */
272
+ toJSONSchema: (props: FormBuilderFieldProps, isRequired: boolean) => JSONSchemaProperty;
273
+ /** Try to parse a JSON Schema property into this component type */
274
+ fromJSONSchema: (prop: JSONSchemaProperty, key: string, isRequired: boolean) => FormBuilderField | null;
275
+ /** Optional custom preview component */
276
+ PreviewComponent?: React.ComponentType<{
277
+ field: FormBuilderField;
278
+ }>;
279
+ }
280
+ /**
281
+ * Helper to create a type-safe component definition.
282
+ * The returned definition is assignable to FormBuilderComponentDefinition.
283
+ */
284
+ declare function defineComponent<T extends BackingType>(def: TypedComponentDefinition<T>): FormBuilderComponentDefinition;
285
+
286
+ /**
287
+ * Object Field (Field Group)
288
+ *
289
+ * A container field that groups other fields together as nested properties.
290
+ * The actual children are stored in field.children and converted by schema-utils.
291
+ */
292
+ declare const objectFieldDefinition: FormBuilderComponentDefinition;
293
+ /**
294
+ * Array Field (Repeating Group)
295
+ *
296
+ * A container field for repeating items. Each item follows a template defined
297
+ * in field.itemTemplate. The template is converted by schema-utils.
298
+ */
299
+ declare const arrayFieldDefinition: FormBuilderComponentDefinition;
300
+ /**
301
+ * All default components in order of specificity (more specific first)
302
+ * This order matters for fromJSONSchema matching
303
+ *
304
+ * Custom field definitions (color, file, image, etc.) should be created by
305
+ * consumers using the exported `defineComponent` utility and passed via the
306
+ * `components` prop.
307
+ */
308
+ declare const defaultComponents: FormBuilderComponentDefinition[];
309
+
310
+ /**
311
+ * Validation Schemas Registry
312
+ *
313
+ * This file defines type-safe validation schemas for the form-builder properties editor.
314
+ * Based on the Zod serialization analysis, only serializable properties are included.
315
+ *
316
+ * Usage:
317
+ * propertiesSchema: baseMetaSchema
318
+ * .merge(VALIDATION_SCHEMAS[backingType])
319
+ * .merge(z.object({ defaultValue: DEFAULT_VALUE_SCHEMAS[backingType] }))
320
+ */
321
+ /**
322
+ * Base meta properties (universal - all field types)
323
+ * Includes: label, description, required
324
+ */
325
+ declare const baseMetaSchema: z.ZodObject<{
326
+ label: z.ZodString;
327
+ description: z.ZodOptional<z.ZodString>;
328
+ required: z.ZodDefault<z.ZodBoolean>;
329
+ }, z.core.$strip>;
330
+ /**
331
+ * Extended base with placeholder (for text-like fields only)
332
+ * Use for: text, email, password, url, phone, textarea, number, select
333
+ */
334
+ declare const baseMetaSchemaWithPlaceholder: z.ZodObject<{
335
+ label: z.ZodString;
336
+ description: z.ZodOptional<z.ZodString>;
337
+ required: z.ZodDefault<z.ZodBoolean>;
338
+ placeholder: z.ZodOptional<z.ZodString>;
339
+ }, z.core.$strip>;
340
+
341
+ interface FormBuilderProps {
342
+ /** Available components to use in the form builder */
343
+ components?: FormBuilderComponentDefinition[];
344
+ /** Current form schema (JSON Schema format) */
345
+ value?: JSONSchema;
346
+ /** Callback when form schema changes */
347
+ onChange?: (schema: JSONSchema) => void;
348
+ /** Additional CSS classes */
349
+ className?: string;
350
+ /**
351
+ * Custom field components for the form preview.
352
+ * Maps fieldType names to React components that render the field.
353
+ * These are merged with the default custom components (like color picker).
354
+ *
355
+ * @example
356
+ * ```tsx
357
+ * <FormBuilder
358
+ * fieldComponents={{
359
+ * rating: RatingComponent,
360
+ * signature: SignatureComponent,
361
+ * }}
362
+ * />
363
+ * ```
364
+ */
365
+ fieldComponents?: Record<string, React.ComponentType<AutoFormInputComponentProps>>;
366
+ /**
367
+ * Default values to pre-populate the form preview with.
368
+ * Useful for edit scenarios where the form should start with existing data.
369
+ *
370
+ * @example
371
+ * ```tsx
372
+ * <FormBuilder
373
+ * defaultValues={{
374
+ * username: "johndoe",
375
+ * email: "john@example.com",
376
+ * }}
377
+ * />
378
+ * ```
379
+ */
380
+ defaultValues?: Record<string, unknown>;
381
+ }
382
+ declare function FormBuilder({ components, value, onChange, className, fieldComponents, defaultValues, }: FormBuilderProps): react_jsx_runtime.JSX.Element;
383
+
384
+ export { FormBuilder, arrayFieldDefinition, baseMetaSchema, baseMetaSchemaWithPlaceholder, defaultComponents, defineComponent, objectFieldDefinition };
385
+ export type { BackingType, ComponentType, FormBuilderComponentDefinition, FormBuilderField, FormBuilderFieldProps, FormStep, JSONSchema, JSONSchemaProperty, StringFieldProps, TypedFieldProps };