@react-fabric/form 1.0.0-beta.9 → 1.0.2

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 (215) hide show
  1. package/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
  2. package/css/_colorPicker.css +95 -0
  3. package/{src/internal/Field.module.css → css/_field.css} +94 -33
  4. package/{src/input/File.module.css → css/_file.css} +21 -6
  5. package/css/styles.css +27 -0
  6. package/dist/cjs/builder/FileField.js +107 -78
  7. package/dist/cjs/builder/FormField.js +60 -39
  8. package/dist/cjs/builder/SchemaEditor.js +72 -0
  9. package/dist/cjs/builder/components/AddSchemaFields.js +64 -0
  10. package/dist/cjs/builder/components/SchemaArrayForm.js +146 -0
  11. package/dist/cjs/builder/components/SchemaField.js +423 -0
  12. package/dist/cjs/form/Controller.js +66 -19
  13. package/dist/cjs/form/Form.js +97 -39
  14. package/dist/cjs/form/useForm.js +32 -0
  15. package/dist/cjs/hooks/useFileUploader.js +74 -45
  16. package/dist/cjs/hooks/useFormBuilder.js +85 -31
  17. package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +5 -4
  18. package/dist/cjs/i18n/{en.json.js → en/form.json.js} +5 -5
  19. package/dist/cjs/i18n/index.js +4 -4
  20. package/dist/cjs/index.js +41 -2
  21. package/dist/cjs/input/ArrayInput.js +259 -135
  22. package/dist/cjs/input/AvatarInput.js +99 -63
  23. package/dist/cjs/input/Checkbox.js +24 -25
  24. package/dist/cjs/input/ColorInput.js +138 -81
  25. package/dist/cjs/input/ColorPicker.js +78 -95
  26. package/dist/cjs/input/DateInput.js +192 -0
  27. package/dist/cjs/input/Field.js +21 -20
  28. package/dist/cjs/input/File.js +85 -80
  29. package/dist/cjs/input/Hidden.js +27 -13
  30. package/dist/cjs/input/Input.js +49 -48
  31. package/dist/cjs/input/Number.js +46 -44
  32. package/dist/cjs/input/Password.js +51 -49
  33. package/dist/cjs/input/Radio.js +26 -16
  34. package/dist/cjs/input/RadioGroup.js +26 -11
  35. package/dist/cjs/input/{Range.js → RangeSlider.js} +61 -66
  36. package/dist/cjs/input/Search.js +58 -64
  37. package/dist/cjs/input/Slider.js +57 -66
  38. package/dist/cjs/input/Switch.js +29 -27
  39. package/dist/cjs/input/Textarea.js +65 -53
  40. package/dist/cjs/internal/ErrorIcon.js +9 -9
  41. package/dist/cjs/internal/FieldWrapper.js +23 -13
  42. package/dist/cjs/internal/InputWrapper.js +85 -87
  43. package/dist/cjs/ranger/index.js +7 -7
  44. package/dist/cjs/ranger/utils.js +9 -4
  45. package/dist/cjs/select/AutoComplete.js +93 -76
  46. package/dist/cjs/select/DualList.js +235 -154
  47. package/dist/cjs/select/List.js +122 -89
  48. package/dist/cjs/select/Options.js +58 -54
  49. package/dist/cjs/select/Select.js +119 -89
  50. package/dist/cjs/select/helpers.js +5 -5
  51. package/dist/cjs/select/useSelect.js +83 -58
  52. package/dist/cjs/types/schema.js +43 -0
  53. package/dist/cjs/utils/eventHandlers.js +16 -6
  54. package/dist/cjs/utils/getColor.js +6 -6
  55. package/dist/cjs/utils/getProps.js +49 -0
  56. package/dist/esm/builder/FileField.js +109 -80
  57. package/dist/esm/builder/FormField.js +60 -39
  58. package/dist/esm/builder/SchemaEditor.js +72 -0
  59. package/dist/esm/builder/components/AddSchemaFields.js +64 -0
  60. package/dist/esm/builder/components/SchemaArrayForm.js +146 -0
  61. package/dist/esm/builder/components/SchemaField.js +423 -0
  62. package/dist/esm/form/Controller.js +66 -19
  63. package/dist/esm/form/Form.js +97 -39
  64. package/dist/esm/form/useForm.js +32 -0
  65. package/dist/esm/hooks/useFileUploader.js +75 -46
  66. package/dist/esm/hooks/useFormBuilder.js +84 -30
  67. package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +5 -4
  68. package/dist/esm/i18n/{en.json.js → en/form.json.js} +5 -5
  69. package/dist/esm/i18n/index.js +2 -2
  70. package/dist/esm/index.js +36 -1
  71. package/dist/esm/input/ArrayInput.js +260 -136
  72. package/dist/esm/input/AvatarInput.js +99 -63
  73. package/dist/esm/input/Checkbox.js +26 -27
  74. package/dist/esm/input/ColorInput.js +141 -84
  75. package/dist/esm/input/ColorPicker.js +80 -97
  76. package/dist/esm/input/DateInput.js +192 -0
  77. package/dist/esm/input/Field.js +21 -20
  78. package/dist/esm/input/File.js +89 -84
  79. package/dist/esm/input/Hidden.js +28 -14
  80. package/dist/esm/input/Input.js +51 -50
  81. package/dist/esm/input/Number.js +48 -46
  82. package/dist/esm/input/Password.js +54 -52
  83. package/dist/esm/input/Radio.js +27 -17
  84. package/dist/esm/input/RadioGroup.js +27 -12
  85. package/dist/esm/input/{Range.js → RangeSlider.js} +62 -67
  86. package/dist/esm/input/Search.js +61 -67
  87. package/dist/esm/input/Slider.js +58 -67
  88. package/dist/esm/input/Switch.js +31 -29
  89. package/dist/esm/input/Textarea.js +67 -55
  90. package/dist/esm/internal/ErrorIcon.js +11 -11
  91. package/dist/esm/internal/FieldWrapper.js +23 -13
  92. package/dist/esm/internal/InputWrapper.js +88 -90
  93. package/dist/esm/ranger/index.js +7 -7
  94. package/dist/esm/ranger/utils.js +9 -4
  95. package/dist/esm/select/AutoComplete.js +95 -78
  96. package/dist/esm/select/DualList.js +233 -152
  97. package/dist/esm/select/List.js +125 -92
  98. package/dist/esm/select/Options.js +58 -54
  99. package/dist/esm/select/Select.js +122 -92
  100. package/dist/esm/select/helpers.js +5 -5
  101. package/dist/esm/select/useSelect.js +84 -59
  102. package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
  103. package/dist/esm/utils/eventHandlers.js +16 -6
  104. package/dist/esm/utils/getColor.js +6 -6
  105. package/dist/esm/utils/getProps.js +49 -0
  106. package/dist/types/builder/FileField.d.ts +7 -4
  107. package/dist/types/builder/FormField.d.ts +4 -2
  108. package/dist/types/builder/SchemaEditor.d.ts +6 -0
  109. package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
  110. package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
  111. package/dist/types/builder/components/SchemaField.d.ts +12 -0
  112. package/dist/types/form/Controller.d.ts +45 -3
  113. package/dist/types/form/Form.d.ts +38 -7
  114. package/dist/types/form/useForm.d.ts +6 -0
  115. package/dist/types/hooks/useFileUploader.d.ts +24 -3
  116. package/dist/types/hooks/useFormBuilder.d.ts +41 -3
  117. package/dist/types/index.d.ts +32 -2
  118. package/dist/types/input/ArrayInput.d.ts +68 -13
  119. package/dist/types/input/AvatarInput.d.ts +23 -6
  120. package/dist/types/input/Checkbox.d.ts +12 -10
  121. package/dist/types/input/ColorInput.d.ts +15 -5
  122. package/dist/types/input/ColorPicker.d.ts +10 -2
  123. package/dist/types/input/DateInput.d.ts +21 -0
  124. package/dist/types/input/Field.d.ts +9 -36
  125. package/dist/types/input/File.d.ts +16 -4
  126. package/dist/types/input/Hidden.d.ts +7 -6
  127. package/dist/types/input/Input.d.ts +11 -4
  128. package/dist/types/input/Number.d.ts +9 -4
  129. package/dist/types/input/Password.d.ts +9 -4
  130. package/dist/types/input/Radio.d.ts +9 -4
  131. package/dist/types/input/RadioGroup.d.ts +14 -6
  132. package/dist/types/input/{Range.d.ts → RangeSlider.d.ts} +11 -6
  133. package/dist/types/input/Search.d.ts +14 -4
  134. package/dist/types/input/Slider.d.ts +9 -6
  135. package/dist/types/input/Switch.d.ts +13 -8
  136. package/dist/types/input/Textarea.d.ts +15 -4
  137. package/dist/types/internal/ErrorIcon.d.ts +4 -1
  138. package/dist/types/internal/FieldWrapper.d.ts +10 -1
  139. package/dist/types/internal/InputWrapper.d.ts +19 -1
  140. package/dist/types/ranger/index.d.ts +7 -3
  141. package/dist/types/ranger/utils.d.ts +2 -2
  142. package/dist/types/select/AutoComplete.d.ts +7 -2
  143. package/dist/types/select/DualList.d.ts +11 -37
  144. package/dist/types/select/List.d.ts +7 -2
  145. package/dist/types/select/Options.d.ts +8 -7
  146. package/dist/types/select/Select.d.ts +7 -2
  147. package/dist/types/select/helpers.d.ts +2 -2
  148. package/dist/types/select/useSelect.d.ts +10 -28
  149. package/dist/types/types/index.d.ts +73 -39
  150. package/dist/types/types/schema.d.ts +78 -32
  151. package/dist/types/utils/eventHandlers.d.ts +4 -4
  152. package/dist/types/utils/getColor.d.ts +4 -4
  153. package/dist/types/utils/getProps.d.ts +26 -0
  154. package/dist/types/utils/index.d.ts +1 -0
  155. package/package.json +25 -25
  156. package/src/builder/FileField.tsx +73 -56
  157. package/src/builder/FormField.tsx +66 -58
  158. package/src/builder/SchemaEditor.tsx +78 -0
  159. package/src/builder/components/AddSchemaFields.tsx +64 -0
  160. package/src/builder/components/SchemaArrayForm.tsx +146 -0
  161. package/src/builder/components/SchemaField.tsx +405 -0
  162. package/src/form/Controller.tsx +61 -24
  163. package/src/form/Form.tsx +74 -50
  164. package/src/form/useForm.ts +53 -0
  165. package/src/hooks/useFileUploader.ts +115 -84
  166. package/src/hooks/useFormBuilder.tsx +80 -41
  167. package/src/i18n/{ar.json → ar/form.json} +5 -4
  168. package/src/i18n/{en.json → en/form.json} +5 -5
  169. package/src/i18n/index.ts +2 -2
  170. package/src/index.ts +34 -20
  171. package/src/input/ArrayInput.tsx +255 -173
  172. package/src/input/AvatarInput.tsx +82 -39
  173. package/src/input/Checkbox.tsx +30 -54
  174. package/src/input/ColorInput.tsx +146 -105
  175. package/src/input/ColorPicker.tsx +76 -102
  176. package/src/input/DateInput.tsx +225 -0
  177. package/src/input/Field.tsx +23 -65
  178. package/src/input/File.tsx +76 -98
  179. package/src/input/Hidden.tsx +36 -24
  180. package/src/input/Input.tsx +55 -53
  181. package/src/input/Number.tsx +49 -54
  182. package/src/input/Password.tsx +61 -66
  183. package/src/input/Radio.tsx +28 -37
  184. package/src/input/RadioGroup.tsx +30 -25
  185. package/src/input/{Range.tsx → RangeSlider.tsx} +81 -109
  186. package/src/input/Search.tsx +64 -77
  187. package/src/input/Slider.tsx +80 -109
  188. package/src/input/Switch.tsx +39 -53
  189. package/src/input/Textarea.tsx +72 -59
  190. package/src/internal/ErrorIcon.tsx +22 -21
  191. package/src/internal/FieldWrapper.tsx +33 -23
  192. package/src/internal/InputWrapper.tsx +132 -143
  193. package/src/ranger/index.tsx +37 -117
  194. package/src/ranger/utils.ts +12 -11
  195. package/src/select/AutoComplete.tsx +113 -123
  196. package/src/select/DualList.tsx +218 -204
  197. package/src/select/List.tsx +130 -97
  198. package/src/select/Options.tsx +59 -57
  199. package/src/select/Select.tsx +148 -122
  200. package/src/select/helpers.ts +13 -8
  201. package/src/select/useSelect.tsx +110 -127
  202. package/src/types/index.ts +76 -45
  203. package/src/types/schema.ts +97 -40
  204. package/src/utils/eventHandlers.ts +24 -26
  205. package/src/utils/getColor.ts +9 -8
  206. package/src/utils/getProps.ts +47 -0
  207. package/src/utils/index.ts +1 -0
  208. package/dist/cjs/input/ArrayInput.module.css +0 -1
  209. package/dist/cjs/input/ColorPicker.module.css +0 -1
  210. package/dist/cjs/input/File.module.css +0 -1
  211. package/dist/cjs/internal/Field.module.css +0 -1
  212. package/dist/esm/input/ArrayInput.module.css +0 -1
  213. package/dist/esm/input/ColorPicker.module.css +0 -1
  214. package/dist/esm/input/File.module.css +0 -1
  215. package/dist/esm/internal/Field.module.css +0 -1
@@ -0,0 +1,423 @@
1
+ 'use strict';
2
+
3
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
+ var sortable = require('@dnd-kit/react/sortable');
8
+ var core = require('@react-fabric/core');
9
+ var utilities = require('@react-fabric/utilities');
10
+ var react = require('react');
11
+ var Controller = require('../../form/Controller.js');
12
+ var ArrayInput = require('../../input/ArrayInput.js');
13
+ var Checkbox = require('../../input/Checkbox.js');
14
+ var DateInput = require('../../input/DateInput.js');
15
+ var Field = require('../../input/Field.js');
16
+ var Hidden = require('../../input/Hidden.js');
17
+ var Input = require('../../input/Input.js');
18
+ var Number = require('../../input/Number.js');
19
+ var Select = require('../../select/Select.js');
20
+ var schema = require('../../types/schema.js');
21
+ var jsxRuntime = require('react/jsx-runtime');
22
+
23
+ var _excluded = ["field"];
24
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
+ function SortableItem(_ref) {
27
+ var id = _ref.id,
28
+ index = _ref.index,
29
+ dynamic = _ref.dynamic,
30
+ children = _ref.children,
31
+ className = _ref.className;
32
+ var _useSortable = sortable.useSortable({
33
+ id: id,
34
+ index: index,
35
+ disabled: !dynamic
36
+ }),
37
+ ref = _useSortable.ref,
38
+ handleRef = _useSortable.handleRef,
39
+ isDragging = _useSortable.isDragging;
40
+ if (dynamic) {
41
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
42
+ className: className,
43
+ ref: ref,
44
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
45
+ ref: handleRef,
46
+ className: utilities.cn("invisible group-hover/field:visible my-2 w-4", isDragging ? "cursor-grabbing bg-default" : "cursor-grab"),
47
+ style: {
48
+ backgroundImage: "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='4'%3E%3Ccircle cx='2' cy='2' r='1' fill='%238888' /%3E%3C/svg%3E \")"
49
+ }
50
+ }), children]
51
+ });
52
+ }
53
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
54
+ className: className,
55
+ children: children
56
+ });
57
+ }
58
+ function OptionModal(_ref2) {
59
+ var field = _ref2.field,
60
+ props = _objectWithoutProperties(_ref2, _excluded);
61
+ return /*#__PURE__*/jsxRuntime.jsxs(core.Modal, _objectSpread(_objectSpread({}, props), {}, {
62
+ children: [/*#__PURE__*/jsxRuntime.jsx(core.Content, {
63
+ children: /*#__PURE__*/jsxRuntime.jsx(ArrayInput.ArrayInput, {
64
+ name: "".concat(field, ".options"),
65
+ onAdd: function onAdd() {
66
+ return String("");
67
+ },
68
+ children: /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
69
+ children: /*#__PURE__*/jsxRuntime.jsx(Input.Input, {})
70
+ })
71
+ })
72
+ }), /*#__PURE__*/jsxRuntime.jsx(core.Footer, {
73
+ flex: true,
74
+ justify: "end",
75
+ className: "sticky bottom-0 border-t bg-default px-6 py-2",
76
+ children: /*#__PURE__*/jsxRuntime.jsx(core.Button, {
77
+ variant: "link",
78
+ onClick: props.onClose,
79
+ children: "Close"
80
+ })
81
+ })]
82
+ }));
83
+ }
84
+ function SchemaField(_ref3) {
85
+ var id = _ref3.id,
86
+ index = _ref3.index,
87
+ field = _ref3.field,
88
+ fieldId = _ref3.fieldId,
89
+ getModel = _ref3.getModel,
90
+ onRemove = _ref3.onRemove,
91
+ _ref3$defaultOpen = _ref3.defaultOpen,
92
+ defaultOpen = _ref3$defaultOpen === void 0 ? true : _ref3$defaultOpen,
93
+ _ref3$optionLists = _ref3.optionLists,
94
+ optionLists = _ref3$optionLists === void 0 ? utilities.EMPTY_ARRAY : _ref3$optionLists,
95
+ dynamic = _ref3.dynamic,
96
+ onTypeChange = _ref3.onTypeChange,
97
+ acceptableTypes = _ref3.acceptableTypes;
98
+ var _useState = react.useState(),
99
+ _useState2 = _slicedToArray(_useState, 2),
100
+ type = _useState2[0],
101
+ setType = _useState2[1];
102
+ var _useState3 = react.useState(false),
103
+ _useState4 = _slicedToArray(_useState3, 2),
104
+ multiple = _useState4[0],
105
+ setMultiple = _useState4[1];
106
+ var _useState5 = react.useState(false),
107
+ _useState6 = _slicedToArray(_useState5, 2),
108
+ hasOptions = _useState6[0],
109
+ setHasOptions = _useState6[1];
110
+ var _useState7 = react.useState(false),
111
+ _useState8 = _slicedToArray(_useState7, 2),
112
+ customOptions = _useState8[0],
113
+ setCustomOptions = _useState8[1];
114
+ var _useOverlayService = core.useOverlayService(OptionModal),
115
+ _useOverlayService2 = _slicedToArray(_useOverlayService, 2),
116
+ renderOptionModal = _useOverlayService2[0],
117
+ openOptionModal = _useOverlayService2[1];
118
+ react.useEffect(function () {
119
+ var tmr = setTimeout(function () {
120
+ var model = getModel();
121
+ setType(model.datatype);
122
+ setMultiple(!!model.multiple);
123
+ if ("optionList" in model) {
124
+ setHasOptions(!!model.optionList);
125
+ setCustomOptions(model.optionList === schema.SCHEMA_CUSTOM_LIST);
126
+ }
127
+ }, 10);
128
+ return function () {
129
+ clearTimeout(tmr);
130
+ };
131
+ // eslint-disable-next-line @eslint-react/exhaustive-deps
132
+ }, []);
133
+ var handleTypeChange = react.useCallback(function (type) {
134
+ if (type) {
135
+ var modelRef = getModel();
136
+ var reset = {
137
+ datatype: type,
138
+ id: id,
139
+ label: modelRef.label,
140
+ defaultValue: modelRef.defaultValue,
141
+ required: modelRef.required,
142
+ multiple: type === schema.DATA_TYPES.AVATAR ? false : modelRef.multiple,
143
+ minItems: modelRef.minItems,
144
+ maxItems: modelRef.maxItems
145
+ };
146
+ if (type === schema.DATA_TYPES.STRING) {
147
+ reset = Object.assign(reset, {
148
+ optionList: modelRef.optionList,
149
+ options: modelRef.options,
150
+ regex: modelRef.regex
151
+ });
152
+ } else if (type === schema.DATA_TYPES.DATE) {
153
+ reset = Object.assign(reset, {
154
+ min: modelRef.min,
155
+ max: modelRef.max
156
+ });
157
+ } else if (type === schema.DATA_TYPES.NUMBER || type === schema.DATA_TYPES.RANGE) {
158
+ reset = Object.assign(reset, {
159
+ min: modelRef.min,
160
+ max: modelRef.max,
161
+ step: modelRef.step
162
+ });
163
+ }
164
+ if (type === schema.DATA_TYPES.AVATAR) {
165
+ setMultiple(false);
166
+ }
167
+ onTypeChange(reset);
168
+ setType(type);
169
+ }
170
+ },
171
+ // eslint-disable-next-line @eslint-react/exhaustive-deps
172
+ [id]);
173
+ return /*#__PURE__*/jsxRuntime.jsx(SortableItem, {
174
+ id: fieldId,
175
+ index: index,
176
+ dynamic: !!dynamic,
177
+ className: "flex flex-nowrap gap-1 group/field",
178
+ children: /*#__PURE__*/jsxRuntime.jsxs(core.Collapsable, {
179
+ open: defaultOpen,
180
+ className: "flex-1",
181
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
182
+ className: "flex flex-nowrap items-center",
183
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
184
+ className: "flex-1 truncate",
185
+ children: id
186
+ }), dynamic && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
187
+ size: "sm",
188
+ color: "danger",
189
+ variant: "link",
190
+ "aria-label": "Delete",
191
+ icon: "icon-[mdi--trash-can-outline]",
192
+ onClick: onRemove,
193
+ className: "invisible group-hover/field:visible"
194
+ })]
195
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
196
+ className: "flex flex-col gap-1 pb-4",
197
+ children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
198
+ name: "".concat(field, ".id"),
199
+ children: /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, {
200
+ hiddenValue: id
201
+ })
202
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
203
+ name: "".concat(field, ".datatype"),
204
+ children: /*#__PURE__*/jsxRuntime.jsx(Select.Select, {
205
+ inline: true,
206
+ label: "Type",
207
+ placeholder: "Data type",
208
+ options: acceptableTypes !== null && acceptableTypes !== void 0 ? acceptableTypes : utilities.EMPTY_ARRAY,
209
+ onChange: function onChange(val) {
210
+ return handleTypeChange(val);
211
+ }
212
+ })
213
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
214
+ name: "".concat(field, ".label"),
215
+ children: /*#__PURE__*/jsxRuntime.jsx(Input.Input, {
216
+ inline: true,
217
+ label: "Label",
218
+ allowClear: true,
219
+ placeholder: "Label...",
220
+ decorateEndShowWhenEmpty: true,
221
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
222
+ className: "text-sm text-tint-300 px-1",
223
+ children: "OPTIONAL"
224
+ })
225
+ })
226
+ }), type === schema.DATA_TYPES.STRING && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
227
+ children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
228
+ name: "".concat(field, ".regex"),
229
+ children: /*#__PURE__*/jsxRuntime.jsx(Input.Input, {
230
+ inline: true,
231
+ label: "Regex validation",
232
+ allowClear: true,
233
+ placeholder: "Regex value...",
234
+ decorateEndShowWhenEmpty: true,
235
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
236
+ className: "text-sm text-tint-300 px-1",
237
+ children: "OPTIONAL"
238
+ })
239
+ })
240
+ }), /*#__PURE__*/jsxRuntime.jsxs(Field.Field, {
241
+ inline: true,
242
+ label: "Option list",
243
+ children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
244
+ name: "".concat(field, ".optionList"),
245
+ children: /*#__PURE__*/jsxRuntime.jsx(Select.Select, {
246
+ allowClear: true,
247
+ options: [schema.SCHEMA_CUSTOM_LIST].concat(_toConsumableArray(optionLists)),
248
+ onChange: function onChange(v) {
249
+ return setCustomOptions(v === schema.SCHEMA_CUSTOM_LIST);
250
+ }
251
+ })
252
+ }), customOptions && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
253
+ icon: "icon-[mdi--list-box-outline]",
254
+ "aria-label": "Custom options",
255
+ onClick: function onClick() {
256
+ void openOptionModal({
257
+ field: field,
258
+ title: "".concat(id, " Options")
259
+ });
260
+ }
261
+ })]
262
+ }), renderOptionModal()]
263
+ }), type === schema.DATA_TYPES.FILE && /*#__PURE__*/jsxRuntime.jsx(react.Fragment, {
264
+ children: /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
265
+ name: "".concat(field, ".accept"),
266
+ children: /*#__PURE__*/jsxRuntime.jsx(Input.Input, {
267
+ inline: true,
268
+ label: "Accept types",
269
+ allowClear: true,
270
+ placeholder: "Accept value...",
271
+ decorateEndShowWhenEmpty: true,
272
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
273
+ className: "text-sm text-tint-300 px-1",
274
+ children: "OPTIONAL"
275
+ })
276
+ })
277
+ })
278
+ }), [schema.DATA_TYPES.NUMBER, schema.DATA_TYPES.RANGE].includes(type) && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
279
+ children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
280
+ name: "".concat(field, ".min"),
281
+ children: /*#__PURE__*/jsxRuntime.jsx(Number.Number, {
282
+ inline: true,
283
+ label: "Min value",
284
+ allowClear: true,
285
+ placeholder: "Minimum value...",
286
+ decorateEndShowWhenEmpty: true,
287
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
288
+ className: "text-sm text-tint-300 px-1 absolute inset-e-4 top-1 pointer-events-none",
289
+ children: "OPTIONAL"
290
+ })
291
+ })
292
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
293
+ name: "".concat(field, ".max"),
294
+ children: /*#__PURE__*/jsxRuntime.jsx(Number.Number, {
295
+ inline: true,
296
+ label: "Max value",
297
+ allowClear: true,
298
+ placeholder: "Maximum value...",
299
+ decorateEndShowWhenEmpty: true,
300
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
301
+ className: "text-sm text-tint-300 px-1 absolute inset-e-4 top-1 pointer-events-none",
302
+ children: "OPTIONAL"
303
+ })
304
+ })
305
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
306
+ name: "".concat(field, ".step"),
307
+ children: /*#__PURE__*/jsxRuntime.jsx(Number.Number, {
308
+ inline: true,
309
+ label: "Step value",
310
+ allowClear: true,
311
+ placeholder: "Step value...",
312
+ decorateEndShowWhenEmpty: true,
313
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
314
+ className: "text-sm text-tint-300 px-1 absolute inset-e-4 top-1 pointer-events-none",
315
+ children: "OPTIONAL"
316
+ })
317
+ })
318
+ })]
319
+ }), type === schema.DATA_TYPES.DATE && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
320
+ children: [/*#__PURE__*/jsxRuntime.jsx(Field.Field, {
321
+ inline: true,
322
+ label: "Type",
323
+ plain: true,
324
+ children: /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
325
+ name: "".concat(field, ".type"),
326
+ children: /*#__PURE__*/jsxRuntime.jsxs(core.ToggleButtonGroup, {
327
+ value: "",
328
+ fullWidth: true,
329
+ className: "flex-1",
330
+ children: [/*#__PURE__*/jsxRuntime.jsx(core.Button, {
331
+ className: "flex-1",
332
+ value: "date",
333
+ children: "Date"
334
+ }), /*#__PURE__*/jsxRuntime.jsx(core.Button, {
335
+ className: "flex-1",
336
+ value: "datetime",
337
+ children: "Date Time"
338
+ })]
339
+ })
340
+ })
341
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
342
+ name: "".concat(field, ".min"),
343
+ children: /*#__PURE__*/jsxRuntime.jsx(DateInput.DateInput, {
344
+ inline: true,
345
+ label: "Min value",
346
+ allowClear: true,
347
+ placeholder: "Minimum value...",
348
+ decorateEndShowWhenEmpty: true,
349
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
350
+ className: "text-sm text-tint-300 px-1",
351
+ children: "OPTIONAL"
352
+ })
353
+ })
354
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
355
+ name: "".concat(field, ".max"),
356
+ children: /*#__PURE__*/jsxRuntime.jsx(DateInput.DateInput, {
357
+ inline: true,
358
+ label: "Max value",
359
+ allowClear: true,
360
+ placeholder: "Maximum value...",
361
+ decorateEndShowWhenEmpty: true,
362
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
363
+ className: "text-sm text-tint-300 px-1",
364
+ children: "OPTIONAL"
365
+ })
366
+ })
367
+ })]
368
+ }), /*#__PURE__*/jsxRuntime.jsxs(Field.Field, {
369
+ label: " ",
370
+ inline: true,
371
+ plain: true,
372
+ children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
373
+ name: "".concat(field, ".required"),
374
+ children: /*#__PURE__*/jsxRuntime.jsx(Checkbox.Checkbox, {
375
+ label: "Required"
376
+ })
377
+ }), type !== schema.DATA_TYPES.AVATAR && /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
378
+ name: "".concat(field, ".multiple"),
379
+ children: /*#__PURE__*/jsxRuntime.jsx(Checkbox.Checkbox, {
380
+ label: "Multiple",
381
+ onChange: setMultiple
382
+ })
383
+ }), hasOptions && /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
384
+ name: "".concat(field, ".allowCustom"),
385
+ children: /*#__PURE__*/jsxRuntime.jsx(Checkbox.Checkbox, {
386
+ label: "Allow custom value"
387
+ })
388
+ })]
389
+ }), multiple && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
390
+ children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
391
+ name: "".concat(field, ".minItems"),
392
+ children: /*#__PURE__*/jsxRuntime.jsx(Number.Number, {
393
+ inline: true,
394
+ label: "Min items",
395
+ allowClear: true,
396
+ placeholder: "Minimum items...",
397
+ decorateEndShowWhenEmpty: true,
398
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
399
+ className: "text-sm text-tint-300 px-1 absolute inset-e-4 top-1 pointer-events-none",
400
+ children: "OPTIONAL"
401
+ })
402
+ })
403
+ }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
404
+ name: "".concat(field, ".maxItems"),
405
+ children: /*#__PURE__*/jsxRuntime.jsx(Number.Number, {
406
+ inline: true,
407
+ label: "Max items",
408
+ allowClear: true,
409
+ placeholder: "Maximum items...",
410
+ decorateEndShowWhenEmpty: true,
411
+ decorateEnd: /*#__PURE__*/jsxRuntime.jsx("span", {
412
+ className: "text-sm text-tint-300 px-1 absolute inset-e-4 top-1 pointer-events-none",
413
+ children: "OPTIONAL"
414
+ })
415
+ })
416
+ })]
417
+ })]
418
+ })]
419
+ }, fieldId)
420
+ });
421
+ }
422
+
423
+ exports.SchemaField = SchemaField;
@@ -9,29 +9,75 @@ var jsxRuntime = require('react/jsx-runtime');
9
9
  var _excluded = ["name", "children"],
10
10
  _excluded2 = ["ref", "onChange"];
11
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
- var Controller = function Controller(_ref) {
14
- var name = _ref.name,
15
- children = _ref.children,
16
- rest = _objectWithoutProperties(_ref, _excluded);
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ /**
14
+ * This component is used to wrap form controls
15
+ * and provide them with the necessary props and state management.
16
+ *
17
+ * It uses the `Controller` component from `react-hook-form`
18
+ * to manage the form state and validation.
19
+ *
20
+ * It accepts a `name` prop to identify the form control,
21
+ * and a `children` prop which can either be a React element
22
+ * or a function that receives the necessary props to render the control.
23
+ *
24
+ * The component will pass down the following props to the child:
25
+ * - `name`: the name of the form control
26
+ * - `error`: any validation error message
27
+ * - `checked`: whether the control is checked (for checkboxes/radios)
28
+ * - `value`: the current value of the control
29
+ * - `invalid`: whether the control is invalid
30
+ * - `readOnly`: whether the control is read-only (disabled during submission)
31
+ * - `disabled`: whether the control is disabled
32
+ * - `onBlur`: function to call when the control loses focus
33
+ * - `onChange`: function to call when the control value changes
34
+ * - `ref`: a ref to the control element
35
+ * * The component also handles the `ref` prop to ensure that it is passed correctly
36
+ * to the child component, allowing for proper focus management and DOM access.
37
+ *
38
+ * @example
39
+ * ```jsx
40
+ * <Controller
41
+ * name="username"
42
+ * children={({ name, error, checked, value, invalid, readOnly, onChange }) => (
43
+ * <input
44
+ * type="text"
45
+ * name={name}
46
+ * onChange={onChange}
47
+ * readOnly={readOnly}
48
+ * aria-invalid={invalid}
49
+ * value={value}
50
+ * />
51
+ * )}
52
+ * />
53
+ * ```
54
+ */
55
+ function Controller(props) {
56
+ var name = props.name,
57
+ children = props.children,
58
+ rest = _objectWithoutProperties(props, _excluded);
17
59
  if (!name) throw Error("Form Controller missing `name` prop");
18
60
  return /*#__PURE__*/jsxRuntime.jsx(reactHookForm.Controller, {
19
61
  name: name,
20
- render: function render(_ref2) {
62
+ render: function render(_ref) {
21
63
  var _error$message;
22
- var _ref2$field = _ref2.field,
23
- _ref3 = _ref2$field.ref,
24
- _onChange = _ref2$field.onChange,
25
- field = _objectWithoutProperties(_ref2$field, _excluded2),
26
- error = _ref2.fieldState.error,
27
- isSubmitting = _ref2.formState.isSubmitting;
28
- return /*#__PURE__*/react.isValidElement(children) ? /*#__PURE__*/react.cloneElement(react.Children.only(children), _objectSpread(_objectSpread(_objectSpread({}, field), rest), {}, {
64
+ var _ref$field = _ref.field,
65
+ _ref2 = _ref$field.ref,
66
+ _onChange = _ref$field.onChange,
67
+ field = _objectWithoutProperties(_ref$field, _excluded2),
68
+ error = _ref.fieldState.error,
69
+ isSubmitting = _ref.formState.isSubmitting;
70
+ return /*#__PURE__*/react.isValidElement(children) ?
71
+ /*#__PURE__*/
72
+ // eslint-disable-next-line @eslint-react/no-children-only
73
+ react.cloneElement(react.Children.only(children), _objectSpread(_objectSpread(_objectSpread({}, field), rest), {}, {
29
74
  ref: function ref(el) {
30
- el && _ref3(el);
75
+ if (el) _ref2(el);
31
76
  try {
32
- var _children$props$ref;
77
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
33
78
  if (children.props.ref && "current" in children.props.ref) children.props.ref.current = el;
34
- if ((_children$props$ref = children.props.ref) !== null && _children$props$ref !== void 0 && _children$props$ref.prototype) children.props.ref(el);
79
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
80
+ if (typeof children.props.ref === "function") children.props.ref(el);
35
81
  } catch (_) {
36
82
  //
37
83
  }
@@ -43,11 +89,12 @@ var Controller = function Controller(_ref) {
43
89
  onChange: function onChange(v) {
44
90
  var _children$props$onCha, _children$props;
45
91
  _onChange(v);
92
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
46
93
  (_children$props$onCha = (_children$props = children.props).onChange) === null || _children$props$onCha === void 0 || _children$props$onCha.call(_children$props, v);
47
94
  }
48
95
  })) : children(_objectSpread(_objectSpread(_objectSpread({}, field), rest), {}, {
49
- inputRef: function inputRef(el) {
50
- el && _ref3(el);
96
+ ref: function ref(el) {
97
+ if (el) _ref2(el);
51
98
  },
52
99
  readOnly: isSubmitting,
53
100
  invalid: !!(error !== null && error !== void 0 && error.message),
@@ -59,6 +106,6 @@ var Controller = function Controller(_ref) {
59
106
  }));
60
107
  }
61
108
  });
62
- };
109
+ }
63
110
 
64
111
  exports.Controller = Controller;