@btst/components 0.0.0-stage → 1.0.0

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 (161) hide show
  1. package/LICENSE.md +17 -0
  2. package/dist/_private/ui/styles/markdown-editor.css +31 -0
  3. package/dist/auto-form/index.cjs +8 -0
  4. package/dist/auto-form/index.d.cts +26 -0
  5. package/dist/auto-form/index.d.mts +26 -0
  6. package/dist/auto-form/index.d.ts +26 -0
  7. package/dist/auto-form/index.mjs +1 -0
  8. package/dist/empty/index.cjs +12 -0
  9. package/dist/empty/index.d.cts +15 -0
  10. package/dist/empty/index.d.mts +15 -0
  11. package/dist/empty/index.d.ts +15 -0
  12. package/dist/empty/index.mjs +1 -0
  13. package/dist/form-builder/index.cjs +16 -0
  14. package/dist/form-builder/index.d.cts +395 -0
  15. package/dist/form-builder/index.d.mts +395 -0
  16. package/dist/form-builder/index.d.ts +395 -0
  17. package/dist/form-builder/index.mjs +4 -0
  18. package/dist/markdown/index.cjs +9 -0
  19. package/dist/markdown/index.d.cts +46 -0
  20. package/dist/markdown/index.d.mts +46 -0
  21. package/dist/markdown/index.d.ts +46 -0
  22. package/dist/markdown/index.mjs +2 -0
  23. package/dist/multi-select/index.cjs +7 -0
  24. package/dist/multi-select/index.d.cts +78 -0
  25. package/dist/multi-select/index.d.mts +78 -0
  26. package/dist/multi-select/index.d.ts +78 -0
  27. package/dist/multi-select/index.mjs +1 -0
  28. package/dist/search-select/index.cjs +7 -0
  29. package/dist/search-select/index.d.cts +16 -0
  30. package/dist/search-select/index.d.mts +16 -0
  31. package/dist/search-select/index.d.ts +16 -0
  32. package/dist/search-select/index.mjs +1 -0
  33. package/dist/shared/components.BdvBiegH.d.cts +291 -0
  34. package/dist/shared/components.BdvBiegH.d.mts +291 -0
  35. package/dist/shared/components.BdvBiegH.d.ts +291 -0
  36. package/dist/shared/components.CZMWR72v.d.cts +10 -0
  37. package/dist/shared/components.CZMWR72v.d.mts +10 -0
  38. package/dist/shared/components.CZMWR72v.d.ts +10 -0
  39. package/dist/stepped-auto-form/index.cjs +7 -0
  40. package/dist/stepped-auto-form/index.d.cts +37 -0
  41. package/dist/stepped-auto-form/index.d.mts +37 -0
  42. package/dist/stepped-auto-form/index.d.ts +37 -0
  43. package/dist/stepped-auto-form/index.mjs +1 -0
  44. package/dist/style.css +440 -0
  45. package/dist/ui/src/components/accordion.cjs +81 -0
  46. package/dist/ui/src/components/accordion.mjs +62 -0
  47. package/dist/ui/src/components/auto-form/common/label.cjs +18 -0
  48. package/dist/ui/src/components/auto-form/common/label.mjs +16 -0
  49. package/dist/ui/src/components/auto-form/common/tooltip.cjs +9 -0
  50. package/dist/ui/src/components/auto-form/common/tooltip.mjs +7 -0
  51. package/dist/ui/src/components/auto-form/config.cjs +40 -0
  52. package/dist/ui/src/components/auto-form/config.mjs +37 -0
  53. package/dist/ui/src/components/auto-form/dependencies.cjs +48 -0
  54. package/dist/ui/src/components/auto-form/dependencies.mjs +46 -0
  55. package/dist/ui/src/components/auto-form/fields/array.cjs +266 -0
  56. package/dist/ui/src/components/auto-form/fields/array.mjs +264 -0
  57. package/dist/ui/src/components/auto-form/fields/checkbox.cjs +38 -0
  58. package/dist/ui/src/components/auto-form/fields/checkbox.mjs +36 -0
  59. package/dist/ui/src/components/auto-form/fields/date.cjs +67 -0
  60. package/dist/ui/src/components/auto-form/fields/date.mjs +65 -0
  61. package/dist/ui/src/components/auto-form/fields/enum.cjs +73 -0
  62. package/dist/ui/src/components/auto-form/fields/enum.mjs +71 -0
  63. package/dist/ui/src/components/auto-form/fields/input.cjs +32 -0
  64. package/dist/ui/src/components/auto-form/fields/input.mjs +30 -0
  65. package/dist/ui/src/components/auto-form/fields/number.cjs +31 -0
  66. package/dist/ui/src/components/auto-form/fields/number.mjs +29 -0
  67. package/dist/ui/src/components/auto-form/fields/object.cjs +233 -0
  68. package/dist/ui/src/components/auto-form/fields/object.mjs +217 -0
  69. package/dist/ui/src/components/auto-form/fields/radio-group.cjs +67 -0
  70. package/dist/ui/src/components/auto-form/fields/radio-group.mjs +65 -0
  71. package/dist/ui/src/components/auto-form/fields/switch.cjs +38 -0
  72. package/dist/ui/src/components/auto-form/fields/switch.mjs +36 -0
  73. package/dist/ui/src/components/auto-form/fields/textarea.cjs +31 -0
  74. package/dist/ui/src/components/auto-form/fields/textarea.mjs +29 -0
  75. package/dist/ui/src/components/auto-form/helpers.cjs +270 -0
  76. package/dist/ui/src/components/auto-form/helpers.mjs +259 -0
  77. package/dist/ui/src/components/auto-form/index.cjs +102 -0
  78. package/dist/ui/src/components/auto-form/index.mjs +93 -0
  79. package/dist/ui/src/components/auto-form/stepped-auto-form.cjs +374 -0
  80. package/dist/ui/src/components/auto-form/stepped-auto-form.mjs +368 -0
  81. package/dist/ui/src/components/auto-form/types.cjs +11 -0
  82. package/dist/ui/src/components/auto-form/types.mjs +9 -0
  83. package/dist/ui/src/components/badge.cjs +42 -0
  84. package/dist/ui/src/components/badge.mjs +39 -0
  85. package/dist/ui/src/components/button.cjs +56 -0
  86. package/dist/ui/src/components/button.mjs +53 -0
  87. package/dist/ui/src/components/calendar.cjs +207 -0
  88. package/dist/ui/src/components/calendar.mjs +190 -0
  89. package/dist/ui/src/components/checkbox.cjs +48 -0
  90. package/dist/ui/src/components/checkbox.mjs +32 -0
  91. package/dist/ui/src/components/command.cjs +118 -0
  92. package/dist/ui/src/components/command.mjs +111 -0
  93. package/dist/ui/src/components/date-picker.cjs +41 -0
  94. package/dist/ui/src/components/date-picker.mjs +39 -0
  95. package/dist/ui/src/components/dialog.cjs +141 -0
  96. package/dist/ui/src/components/dialog.mjs +118 -0
  97. package/dist/ui/src/components/empty.cjs +104 -0
  98. package/dist/ui/src/components/empty.mjs +97 -0
  99. package/dist/ui/src/components/form-builder/canvas.cjs +111 -0
  100. package/dist/ui/src/components/form-builder/canvas.mjs +109 -0
  101. package/dist/ui/src/components/form-builder/components/index.cjs +571 -0
  102. package/dist/ui/src/components/form-builder/components/index.mjs +554 -0
  103. package/dist/ui/src/components/form-builder/edit-field-dialog.cjs +131 -0
  104. package/dist/ui/src/components/form-builder/edit-field-dialog.mjs +129 -0
  105. package/dist/ui/src/components/form-builder/form-preview.cjs +73 -0
  106. package/dist/ui/src/components/form-builder/form-preview.mjs +71 -0
  107. package/dist/ui/src/components/form-builder/index.cjs +350 -0
  108. package/dist/ui/src/components/form-builder/index.mjs +344 -0
  109. package/dist/ui/src/components/form-builder/nested-field-editor-dialog.cjs +263 -0
  110. package/dist/ui/src/components/form-builder/nested-field-editor-dialog.mjs +261 -0
  111. package/dist/ui/src/components/form-builder/palette.cjs +52 -0
  112. package/dist/ui/src/components/form-builder/palette.mjs +49 -0
  113. package/dist/ui/src/components/form-builder/schema-utils.cjs +128 -0
  114. package/dist/ui/src/components/form-builder/schema-utils.mjs +122 -0
  115. package/dist/ui/src/components/form-builder/sortable-field.cjs +151 -0
  116. package/dist/ui/src/components/form-builder/sortable-field.mjs +148 -0
  117. package/dist/ui/src/components/form-builder/step-tabs.cjs +180 -0
  118. package/dist/ui/src/components/form-builder/step-tabs.mjs +178 -0
  119. package/dist/ui/src/components/form-builder/types.cjs +7 -0
  120. package/dist/ui/src/components/form-builder/types.mjs +5 -0
  121. package/dist/ui/src/components/form-builder/validation-schemas.cjs +67 -0
  122. package/dist/ui/src/components/form-builder/validation-schemas.mjs +56 -0
  123. package/dist/ui/src/components/form.cjs +120 -0
  124. package/dist/ui/src/components/form.mjs +98 -0
  125. package/dist/ui/src/components/input.cjs +23 -0
  126. package/dist/ui/src/components/input.mjs +21 -0
  127. package/dist/ui/src/components/label.cjs +39 -0
  128. package/dist/ui/src/components/label.mjs +23 -0
  129. package/dist/ui/src/components/markdown-content.cjs +334 -0
  130. package/dist/ui/src/components/markdown-content.mjs +325 -0
  131. package/dist/ui/src/components/markdown-editor.cjs +180 -0
  132. package/dist/ui/src/components/markdown-editor.mjs +178 -0
  133. package/dist/ui/src/components/multi-select.cjs +555 -0
  134. package/dist/ui/src/components/multi-select.mjs +540 -0
  135. package/dist/ui/src/components/popover.cjs +60 -0
  136. package/dist/ui/src/components/popover.mjs +42 -0
  137. package/dist/ui/src/components/radio-group.cjs +62 -0
  138. package/dist/ui/src/components/radio-group.mjs +45 -0
  139. package/dist/ui/src/components/search-select.cjs +99 -0
  140. package/dist/ui/src/components/search-select.mjs +83 -0
  141. package/dist/ui/src/components/select.cjs +161 -0
  142. package/dist/ui/src/components/select.mjs +139 -0
  143. package/dist/ui/src/components/separator.cjs +43 -0
  144. package/dist/ui/src/components/separator.mjs +27 -0
  145. package/dist/ui/src/components/switch.cjs +48 -0
  146. package/dist/ui/src/components/switch.mjs +32 -0
  147. package/dist/ui/src/components/tabs.cjs +84 -0
  148. package/dist/ui/src/components/tabs.mjs +65 -0
  149. package/dist/ui/src/components/textarea.cjs +20 -0
  150. package/dist/ui/src/components/textarea.mjs +18 -0
  151. package/dist/ui/src/hooks/use-debounce.cjs +16 -0
  152. package/dist/ui/src/hooks/use-debounce.mjs +14 -0
  153. package/dist/ui/src/lib/schema-converter.cjs +94 -0
  154. package/dist/ui/src/lib/schema-converter.mjs +92 -0
  155. package/dist/ui/src/lib/throttle.cjs +56 -0
  156. package/dist/ui/src/lib/throttle.mjs +54 -0
  157. package/dist/ui/src/lib/utils.cjs +10 -0
  158. package/dist/ui/src/lib/utils.mjs +8 -0
  159. package/dist/ui.css +131 -0
  160. package/package.json +176 -3
  161. package/README.md +0 -3
@@ -0,0 +1,7 @@
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
+
3
+ function AutoFormTooltip({ fieldConfigItem }) {
4
+ return /* @__PURE__ */ jsx(Fragment, { children: fieldConfigItem?.description && /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-500 dark:text-white", children: fieldConfigItem.description }) });
5
+ }
6
+
7
+ export { AutoFormTooltip as default };
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ const checkbox = require('./fields/checkbox.cjs');
4
+ const date = require('./fields/date.cjs');
5
+ const _enum = require('./fields/enum.cjs');
6
+ const input = require('./fields/input.cjs');
7
+ const number = require('./fields/number.cjs');
8
+ const radioGroup = require('./fields/radio-group.cjs');
9
+ const _switch = require('./fields/switch.cjs');
10
+ const textarea = require('./fields/textarea.cjs');
11
+
12
+ const INPUT_COMPONENTS = {
13
+ checkbox: checkbox,
14
+ date: date,
15
+ select: _enum,
16
+ radio: radioGroup,
17
+ switch: _switch,
18
+ textarea: textarea,
19
+ number: number,
20
+ fallback: input
21
+ };
22
+ const DEFAULT_ZOD_HANDLERS = {
23
+ // Zod v3 style type names
24
+ ZodBoolean: "checkbox",
25
+ ZodDate: "date",
26
+ ZodEnum: "select",
27
+ ZodNativeEnum: "select",
28
+ ZodNumber: "number",
29
+ // Zod v4 style type names (lowercase, no "Zod" prefix)
30
+ boolean: "checkbox",
31
+ date: "date",
32
+ enum: "select",
33
+ nativeEnum: "select",
34
+ number: "number",
35
+ int: "number",
36
+ float: "number"
37
+ };
38
+
39
+ exports.DEFAULT_ZOD_HANDLERS = DEFAULT_ZOD_HANDLERS;
40
+ exports.INPUT_COMPONENTS = INPUT_COMPONENTS;
@@ -0,0 +1,37 @@
1
+ import AutoFormCheckbox from './fields/checkbox.mjs';
2
+ import AutoFormDate from './fields/date.mjs';
3
+ import AutoFormEnum from './fields/enum.mjs';
4
+ import AutoFormInput from './fields/input.mjs';
5
+ import AutoFormNumber from './fields/number.mjs';
6
+ import AutoFormRadioGroup from './fields/radio-group.mjs';
7
+ import AutoFormSwitch from './fields/switch.mjs';
8
+ import AutoFormTextarea from './fields/textarea.mjs';
9
+
10
+ const INPUT_COMPONENTS = {
11
+ checkbox: AutoFormCheckbox,
12
+ date: AutoFormDate,
13
+ select: AutoFormEnum,
14
+ radio: AutoFormRadioGroup,
15
+ switch: AutoFormSwitch,
16
+ textarea: AutoFormTextarea,
17
+ number: AutoFormNumber,
18
+ fallback: AutoFormInput
19
+ };
20
+ const DEFAULT_ZOD_HANDLERS = {
21
+ // Zod v3 style type names
22
+ ZodBoolean: "checkbox",
23
+ ZodDate: "date",
24
+ ZodEnum: "select",
25
+ ZodNativeEnum: "select",
26
+ ZodNumber: "number",
27
+ // Zod v4 style type names (lowercase, no "Zod" prefix)
28
+ boolean: "checkbox",
29
+ date: "date",
30
+ enum: "select",
31
+ nativeEnum: "select",
32
+ number: "number",
33
+ int: "number",
34
+ float: "number"
35
+ };
36
+
37
+ export { DEFAULT_ZOD_HANDLERS, INPUT_COMPONENTS };
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ const types = require('./types.cjs');
4
+
5
+ function resolveDependencies(dependencies, currentFieldName, watch) {
6
+ let isDisabled = false;
7
+ let isHidden = false;
8
+ let isRequired = false;
9
+ let overrideOptions;
10
+ const currentFieldValue = watch(currentFieldName);
11
+ const currentFieldDependencies = dependencies.filter(
12
+ (dependency) => dependency.targetField === currentFieldName
13
+ );
14
+ for (const dependency of currentFieldDependencies) {
15
+ const watchedValue = watch(dependency.sourceField);
16
+ const conditionMet = dependency.when(watchedValue, currentFieldValue);
17
+ switch (dependency.type) {
18
+ case types.DependencyType.DISABLES:
19
+ if (conditionMet) {
20
+ isDisabled = true;
21
+ }
22
+ break;
23
+ case types.DependencyType.REQUIRES:
24
+ if (conditionMet) {
25
+ isRequired = true;
26
+ }
27
+ break;
28
+ case types.DependencyType.HIDES:
29
+ if (conditionMet) {
30
+ isHidden = true;
31
+ }
32
+ break;
33
+ case types.DependencyType.SETS_OPTIONS:
34
+ if (conditionMet) {
35
+ overrideOptions = dependency.options;
36
+ }
37
+ break;
38
+ }
39
+ }
40
+ return {
41
+ isDisabled,
42
+ isHidden,
43
+ isRequired,
44
+ overrideOptions
45
+ };
46
+ }
47
+
48
+ module.exports = resolveDependencies;
@@ -0,0 +1,46 @@
1
+ import { DependencyType } from './types.mjs';
2
+
3
+ function resolveDependencies(dependencies, currentFieldName, watch) {
4
+ let isDisabled = false;
5
+ let isHidden = false;
6
+ let isRequired = false;
7
+ let overrideOptions;
8
+ const currentFieldValue = watch(currentFieldName);
9
+ const currentFieldDependencies = dependencies.filter(
10
+ (dependency) => dependency.targetField === currentFieldName
11
+ );
12
+ for (const dependency of currentFieldDependencies) {
13
+ const watchedValue = watch(dependency.sourceField);
14
+ const conditionMet = dependency.when(watchedValue, currentFieldValue);
15
+ switch (dependency.type) {
16
+ case DependencyType.DISABLES:
17
+ if (conditionMet) {
18
+ isDisabled = true;
19
+ }
20
+ break;
21
+ case DependencyType.REQUIRES:
22
+ if (conditionMet) {
23
+ isRequired = true;
24
+ }
25
+ break;
26
+ case DependencyType.HIDES:
27
+ if (conditionMet) {
28
+ isHidden = true;
29
+ }
30
+ break;
31
+ case DependencyType.SETS_OPTIONS:
32
+ if (conditionMet) {
33
+ overrideOptions = dependency.options;
34
+ }
35
+ break;
36
+ }
37
+ }
38
+ return {
39
+ isDisabled,
40
+ isHidden,
41
+ isRequired,
42
+ overrideOptions
43
+ };
44
+ }
45
+
46
+ export { resolveDependencies as default };
@@ -0,0 +1,266 @@
1
+ 'use strict';
2
+
3
+ const jsxRuntime = require('react/jsx-runtime');
4
+ const accordion = require('../../accordion.cjs');
5
+ const button = require('../../button.cjs');
6
+ const form = require('../../form.cjs');
7
+ const input = require('../../input.cjs');
8
+ const separator = require('../../separator.cjs');
9
+ const lucideReact = require('lucide-react');
10
+ const reactHookForm = require('react-hook-form');
11
+ const helpers = require('../helpers.cjs');
12
+ const object = require('./object.cjs');
13
+
14
+ function getDefType(schema) {
15
+ return schema._zod?.def?.type || "";
16
+ }
17
+ function getArrayElementType(item) {
18
+ const def = item._zod?.def;
19
+ const defType = getDefType(item);
20
+ if (defType === "array") {
21
+ return def?.element || null;
22
+ }
23
+ if (["default", "optional", "nullable"].includes(defType)) {
24
+ const innerType = def?.innerType;
25
+ if (innerType) {
26
+ return getArrayElementType(innerType);
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ function getPrimitiveDefault(itemSchema) {
32
+ const base = helpers.getBaseSchema(itemSchema);
33
+ if (!base) return "";
34
+ switch (helpers.getBaseType(base)) {
35
+ case "ZodBoolean":
36
+ return false;
37
+ case "ZodNumber":
38
+ return 0;
39
+ default:
40
+ return "";
41
+ }
42
+ }
43
+ function AutoFormArray({
44
+ name,
45
+ item,
46
+ form,
47
+ path = [],
48
+ fieldConfig
49
+ }) {
50
+ const itemDefType = getArrayElementType(item);
51
+ const elementBaseSchema = itemDefType ? helpers.getBaseSchema(itemDefType) : null;
52
+ const elementPrimitiveType = elementBaseSchema ? helpers.getBaseType(elementBaseSchema) : "";
53
+ const isObjectArray = !!itemDefType && elementPrimitiveType === "ZodObject";
54
+ const title = fieldConfig?.label ?? helpers.beautifyObjectName(name);
55
+ if (isObjectArray) {
56
+ return /* @__PURE__ */ jsxRuntime.jsx(
57
+ ObjectAutoFormArray,
58
+ {
59
+ name,
60
+ item,
61
+ form,
62
+ path,
63
+ fieldConfig,
64
+ itemDefType,
65
+ title
66
+ }
67
+ );
68
+ }
69
+ return /* @__PURE__ */ jsxRuntime.jsx(
70
+ PrimitiveAutoFormArray,
71
+ {
72
+ name,
73
+ item,
74
+ form,
75
+ path,
76
+ fieldConfig,
77
+ itemDefType,
78
+ title
79
+ }
80
+ );
81
+ }
82
+ function ObjectAutoFormArray({
83
+ name,
84
+ form,
85
+ path = [],
86
+ fieldConfig,
87
+ itemDefType,
88
+ title
89
+ }) {
90
+ const fieldPath = path.join(".");
91
+ const { fields, append, remove } = reactHookForm.useFieldArray({
92
+ control: form.control,
93
+ name: fieldPath
94
+ });
95
+ return /* @__PURE__ */ jsxRuntime.jsxs(accordion.AccordionItem, { value: name, className: "border-none", children: [
96
+ /* @__PURE__ */ jsxRuntime.jsx(accordion.AccordionTrigger, { children: title }),
97
+ /* @__PURE__ */ jsxRuntime.jsxs(accordion.AccordionContent, { children: [
98
+ fields.map((_field, index) => {
99
+ const key = _field.id;
100
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex flex-col", children: [
101
+ /* @__PURE__ */ jsxRuntime.jsx(
102
+ object,
103
+ {
104
+ schema: itemDefType,
105
+ form,
106
+ fieldConfig,
107
+ path: [...path, index.toString()]
108
+ }
109
+ ),
110
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "my-4 flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
111
+ button.Button,
112
+ {
113
+ variant: "secondary",
114
+ size: "icon",
115
+ type: "button",
116
+ className: "hover:bg-zinc-300 hover:text-black focus:ring-0 focus:ring-offset-0 focus-visible:ring-0 focus-visible:ring-offset-0 dark:bg-white dark:text-black dark:hover:bg-zinc-300 dark:hover:text-black dark:hover:ring-0 dark:hover:ring-offset-0 dark:focus-visible:ring-0 dark:focus-visible:ring-offset-0",
117
+ onClick: () => remove(index),
118
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash, { className: "size-4" })
119
+ }
120
+ ) }),
121
+ /* @__PURE__ */ jsxRuntime.jsx(separator.Separator, {})
122
+ ] }, key);
123
+ }),
124
+ /* @__PURE__ */ jsxRuntime.jsxs(
125
+ button.Button,
126
+ {
127
+ type: "button",
128
+ variant: "secondary",
129
+ onClick: () => append({}),
130
+ className: "mt-4 flex items-center",
131
+ children: [
132
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-2", size: 16 }),
133
+ "Add"
134
+ ]
135
+ }
136
+ )
137
+ ] })
138
+ ] });
139
+ }
140
+ function PrimitiveAutoFormArray({
141
+ name,
142
+ item,
143
+ form,
144
+ path = [],
145
+ fieldConfig,
146
+ itemDefType,
147
+ title
148
+ }) {
149
+ const fieldPath = path.join(".");
150
+ const rawValues = reactHookForm.useWatch({ control: form.control, name: fieldPath }) ?? [];
151
+ const values = Array.isArray(rawValues) ? rawValues : [];
152
+ const appendItem = () => {
153
+ const def = itemDefType ? getPrimitiveDefault(itemDefType) : "";
154
+ form.setValue(fieldPath, [...values, def], {
155
+ shouldDirty: true,
156
+ shouldValidate: false
157
+ });
158
+ };
159
+ const removeItem = (index) => {
160
+ const next = values.filter((_, i) => i !== index);
161
+ form.setValue(fieldPath, next, {
162
+ shouldDirty: true,
163
+ shouldValidate: false
164
+ });
165
+ };
166
+ return /* @__PURE__ */ jsxRuntime.jsxs(accordion.AccordionItem, { value: name, className: "border-none", children: [
167
+ /* @__PURE__ */ jsxRuntime.jsx(accordion.AccordionTrigger, { children: title }),
168
+ /* @__PURE__ */ jsxRuntime.jsxs(accordion.AccordionContent, { children: [
169
+ values.map((_, index) => {
170
+ const cellPath = `${fieldPath}.${index}`;
171
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex flex-col", children: [
172
+ itemDefType ? /* @__PURE__ */ jsxRuntime.jsx(
173
+ PrimitiveArrayRow,
174
+ {
175
+ form,
176
+ itemSchema: itemDefType,
177
+ cellPath
178
+ }
179
+ ) : null,
180
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "my-4 flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
181
+ button.Button,
182
+ {
183
+ variant: "secondary",
184
+ size: "icon",
185
+ type: "button",
186
+ className: "hover:bg-zinc-300 hover:text-black focus:ring-0 focus:ring-offset-0 focus-visible:ring-0 focus-visible:ring-offset-0 dark:bg-white dark:text-black dark:hover:bg-zinc-300 dark:hover:text-black dark:hover:ring-0 dark:hover:ring-offset-0 dark:focus-visible:ring-0 dark:focus-visible:ring-offset-0",
187
+ onClick: () => removeItem(index),
188
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash, { className: "size-4" })
189
+ }
190
+ ) }),
191
+ /* @__PURE__ */ jsxRuntime.jsx(separator.Separator, {})
192
+ ] }, `${fieldPath}-${index}`);
193
+ }),
194
+ /* @__PURE__ */ jsxRuntime.jsxs(
195
+ button.Button,
196
+ {
197
+ type: "button",
198
+ variant: "secondary",
199
+ onClick: appendItem,
200
+ className: "mt-4 flex items-center",
201
+ children: [
202
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-2", size: 16 }),
203
+ "Add"
204
+ ]
205
+ }
206
+ )
207
+ ] })
208
+ ] });
209
+ }
210
+ function PrimitiveArrayRow({
211
+ form: form$1,
212
+ itemSchema,
213
+ cellPath
214
+ }) {
215
+ const baseSchema = helpers.getBaseSchema(itemSchema);
216
+ const t = baseSchema ? helpers.getBaseType(baseSchema) : "";
217
+ if (t === "ZodBoolean") {
218
+ return /* @__PURE__ */ jsxRuntime.jsx(
219
+ form.FormField,
220
+ {
221
+ control: form$1.control,
222
+ name: cellPath,
223
+ render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(form.FormItem, { className: "flex flex-row items-center gap-2 space-y-0", children: [
224
+ /* @__PURE__ */ jsxRuntime.jsx(form.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsx(
225
+ "input",
226
+ {
227
+ type: "checkbox",
228
+ "aria-label": "Toggle",
229
+ checked: Boolean(field.value),
230
+ onChange: (e) => field.onChange(e.target.checked)
231
+ }
232
+ ) }),
233
+ /* @__PURE__ */ jsxRuntime.jsx(form.FormLabel, { className: "font-normal cursor-pointer", children: field.value ? "Selected" : "Not selected" }),
234
+ /* @__PURE__ */ jsxRuntime.jsx(form.FormMessage, {})
235
+ ] })
236
+ }
237
+ );
238
+ }
239
+ const inputType = t === "ZodNumber" ? "number" : "text";
240
+ return /* @__PURE__ */ jsxRuntime.jsx(
241
+ form.FormField,
242
+ {
243
+ control: form$1.control,
244
+ name: cellPath,
245
+ render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(form.FormItem, { className: "space-y-2", children: [
246
+ /* @__PURE__ */ jsxRuntime.jsx(form.FormLabel, { className: "sr-only", children: "Row value" }),
247
+ /* @__PURE__ */ jsxRuntime.jsx(form.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsx(
248
+ input.Input,
249
+ {
250
+ type: inputType,
251
+ name: field.name,
252
+ ref: field.ref,
253
+ onBlur: field.onBlur,
254
+ value: field.value === void 0 || field.value === null ? "" : String(field.value),
255
+ onChange: (ev) => field.onChange(
256
+ inputType === "number" ? Number.isNaN(ev.target.valueAsNumber) ? void 0 : ev.target.valueAsNumber : ev.target.value
257
+ )
258
+ }
259
+ ) }),
260
+ /* @__PURE__ */ jsxRuntime.jsx(form.FormMessage, {})
261
+ ] })
262
+ }
263
+ );
264
+ }
265
+
266
+ module.exports = AutoFormArray;