@react-fabric/form 1.0.0-beta.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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/dist/cjs/builder/FileField.js +131 -0
  4. package/dist/cjs/builder/FormField.js +119 -0
  5. package/dist/cjs/form/Controller.js +64 -0
  6. package/dist/cjs/form/Form.js +128 -0
  7. package/dist/cjs/hooks/useFileUploader.js +204 -0
  8. package/dist/cjs/hooks/useFormBuilder.js +87 -0
  9. package/dist/cjs/i18n/ar.json.js +37 -0
  10. package/dist/cjs/i18n/en.json.js +38 -0
  11. package/dist/cjs/i18n/index.js +33 -0
  12. package/dist/cjs/index.js +56 -0
  13. package/dist/cjs/input/ArrayInput.js +189 -0
  14. package/dist/cjs/input/ArrayInput.module.css +1 -0
  15. package/dist/cjs/input/AvatarInput.js +141 -0
  16. package/dist/cjs/input/Checkbox.js +83 -0
  17. package/dist/cjs/input/ColorInput.js +100 -0
  18. package/dist/cjs/input/ColorPicker.js +122 -0
  19. package/dist/cjs/input/ColorPicker.module.css +1 -0
  20. package/dist/cjs/input/Field.js +31 -0
  21. package/dist/cjs/input/File.js +165 -0
  22. package/dist/cjs/input/File.module.css +1 -0
  23. package/dist/cjs/input/Hidden.js +54 -0
  24. package/dist/cjs/input/Input.js +79 -0
  25. package/dist/cjs/input/Number.js +80 -0
  26. package/dist/cjs/input/Password.js +104 -0
  27. package/dist/cjs/input/Radio.js +70 -0
  28. package/dist/cjs/input/RadioGroup.js +31 -0
  29. package/dist/cjs/input/Range.js +169 -0
  30. package/dist/cjs/input/Search.js +109 -0
  31. package/dist/cjs/input/Slider.js +172 -0
  32. package/dist/cjs/input/Switch.js +79 -0
  33. package/dist/cjs/input/Textarea.js +87 -0
  34. package/dist/cjs/internal/ErrorIcon.js +32 -0
  35. package/dist/cjs/internal/Field.module.css +1 -0
  36. package/dist/cjs/internal/FieldWrapper.js +78 -0
  37. package/dist/cjs/internal/InputWrapper.js +113 -0
  38. package/dist/cjs/ranger/index.js +352 -0
  39. package/dist/cjs/ranger/utils.js +49 -0
  40. package/dist/cjs/select/AutoComplete.js +268 -0
  41. package/dist/cjs/select/DualList.js +238 -0
  42. package/dist/cjs/select/List.js +241 -0
  43. package/dist/cjs/select/Options.js +76 -0
  44. package/dist/cjs/select/Select.js +283 -0
  45. package/dist/cjs/select/helpers.js +41 -0
  46. package/dist/cjs/select/useSelect.js +337 -0
  47. package/dist/cjs/utils/eventHandlers.js +50 -0
  48. package/dist/cjs/utils/getColor.js +40 -0
  49. package/dist/esm/builder/FileField.js +131 -0
  50. package/dist/esm/builder/FormField.js +119 -0
  51. package/dist/esm/form/Controller.js +64 -0
  52. package/dist/esm/form/Form.js +128 -0
  53. package/dist/esm/hooks/useFileUploader.js +204 -0
  54. package/dist/esm/hooks/useFormBuilder.js +87 -0
  55. package/dist/esm/i18n/ar.json.js +31 -0
  56. package/dist/esm/i18n/en.json.js +32 -0
  57. package/dist/esm/i18n/index.js +33 -0
  58. package/dist/esm/index.js +28 -0
  59. package/dist/esm/input/ArrayInput.js +189 -0
  60. package/dist/esm/input/ArrayInput.module.css +1 -0
  61. package/dist/esm/input/AvatarInput.js +141 -0
  62. package/dist/esm/input/Checkbox.js +83 -0
  63. package/dist/esm/input/ColorInput.js +100 -0
  64. package/dist/esm/input/ColorPicker.js +122 -0
  65. package/dist/esm/input/ColorPicker.module.css +1 -0
  66. package/dist/esm/input/Field.js +31 -0
  67. package/dist/esm/input/File.js +165 -0
  68. package/dist/esm/input/File.module.css +1 -0
  69. package/dist/esm/input/Hidden.js +54 -0
  70. package/dist/esm/input/Input.js +79 -0
  71. package/dist/esm/input/Number.js +80 -0
  72. package/dist/esm/input/Password.js +104 -0
  73. package/dist/esm/input/Radio.js +70 -0
  74. package/dist/esm/input/RadioGroup.js +31 -0
  75. package/dist/esm/input/Range.js +169 -0
  76. package/dist/esm/input/Search.js +109 -0
  77. package/dist/esm/input/Slider.js +172 -0
  78. package/dist/esm/input/Switch.js +79 -0
  79. package/dist/esm/input/Textarea.js +87 -0
  80. package/dist/esm/internal/ErrorIcon.js +32 -0
  81. package/dist/esm/internal/Field.module.css +1 -0
  82. package/dist/esm/internal/FieldWrapper.js +78 -0
  83. package/dist/esm/internal/InputWrapper.js +113 -0
  84. package/dist/esm/ranger/index.js +352 -0
  85. package/dist/esm/ranger/utils.js +47 -0
  86. package/dist/esm/select/AutoComplete.js +268 -0
  87. package/dist/esm/select/DualList.js +238 -0
  88. package/dist/esm/select/List.js +241 -0
  89. package/dist/esm/select/Options.js +76 -0
  90. package/dist/esm/select/Select.js +283 -0
  91. package/dist/esm/select/helpers.js +40 -0
  92. package/dist/esm/select/useSelect.js +337 -0
  93. package/dist/esm/utils/eventHandlers.js +50 -0
  94. package/dist/esm/utils/getColor.js +39 -0
  95. package/dist/types/builder/FileField.d.ts +8 -0
  96. package/dist/types/builder/FormField.d.ts +9 -0
  97. package/dist/types/form/Controller.d.ts +20 -0
  98. package/dist/types/form/Form.d.ts +33 -0
  99. package/dist/types/hooks/useFileUploader.d.ts +23 -0
  100. package/dist/types/hooks/useFormBuilder.d.ts +16 -0
  101. package/dist/types/i18n/index.d.ts +1 -0
  102. package/dist/types/index.d.ts +27 -0
  103. package/dist/types/input/ArrayInput.d.ts +64 -0
  104. package/dist/types/input/AvatarInput.d.ts +31 -0
  105. package/dist/types/input/Checkbox.d.ts +46 -0
  106. package/dist/types/input/ColorInput.d.ts +10 -0
  107. package/dist/types/input/ColorPicker.d.ts +24 -0
  108. package/dist/types/input/Field.d.ts +41 -0
  109. package/dist/types/input/File.d.ts +17 -0
  110. package/dist/types/input/Hidden.d.ts +16 -0
  111. package/dist/types/input/Input.d.ts +9 -0
  112. package/dist/types/input/Number.d.ts +17 -0
  113. package/dist/types/input/Password.d.ts +13 -0
  114. package/dist/types/input/Radio.d.ts +42 -0
  115. package/dist/types/input/RadioGroup.d.ts +30 -0
  116. package/dist/types/input/Range.d.ts +59 -0
  117. package/dist/types/input/Search.d.ts +17 -0
  118. package/dist/types/input/Slider.d.ts +63 -0
  119. package/dist/types/input/Switch.d.ts +42 -0
  120. package/dist/types/input/Textarea.d.ts +17 -0
  121. package/dist/types/internal/ErrorIcon.d.ts +1 -0
  122. package/dist/types/internal/FieldWrapper.d.ts +1 -0
  123. package/dist/types/internal/InputWrapper.d.ts +1 -0
  124. package/dist/types/ranger/index.d.ts +70 -0
  125. package/dist/types/ranger/utils.d.ts +25 -0
  126. package/dist/types/select/AutoComplete.d.ts +17 -0
  127. package/dist/types/select/DualList.d.ts +38 -0
  128. package/dist/types/select/List.d.ts +4 -0
  129. package/dist/types/select/Options.d.ts +14 -0
  130. package/dist/types/select/Select.d.ts +2 -0
  131. package/dist/types/select/helpers.d.ts +2 -0
  132. package/dist/types/select/useSelect.d.ts +50 -0
  133. package/dist/types/types/index.d.ts +169 -0
  134. package/dist/types/types/schema.d.ts +59 -0
  135. package/dist/types/utils/eventHandlers.d.ts +11 -0
  136. package/dist/types/utils/getColor.d.ts +4 -0
  137. package/dist/types/utils/index.d.ts +2 -0
  138. package/package.json +64 -0
  139. package/src/builder/FileField.tsx +122 -0
  140. package/src/builder/FormField.tsx +161 -0
  141. package/src/form/Controller.tsx +103 -0
  142. package/src/form/Form.tsx +160 -0
  143. package/src/hooks/useFileUploader.ts +234 -0
  144. package/src/hooks/useFormBuilder.tsx +128 -0
  145. package/src/i18n/ar.json +23 -0
  146. package/src/i18n/en.json +24 -0
  147. package/src/i18n/index.ts +28 -0
  148. package/src/index.ts +54 -0
  149. package/src/input/ArrayInput.module.css +41 -0
  150. package/src/input/ArrayInput.tsx +318 -0
  151. package/src/input/AvatarInput.tsx +150 -0
  152. package/src/input/Checkbox.tsx +165 -0
  153. package/src/input/ColorInput.tsx +157 -0
  154. package/src/input/ColorPicker.module.css +51 -0
  155. package/src/input/ColorPicker.tsx +210 -0
  156. package/src/input/Field.tsx +96 -0
  157. package/src/input/File.module.css +42 -0
  158. package/src/input/File.tsx +224 -0
  159. package/src/input/Hidden.tsx +65 -0
  160. package/src/input/Input.tsx +114 -0
  161. package/src/input/Number.tsx +126 -0
  162. package/src/input/Password.tsx +150 -0
  163. package/src/input/Radio.tsx +146 -0
  164. package/src/input/RadioGroup.tsx +75 -0
  165. package/src/input/Range.tsx +276 -0
  166. package/src/input/Search.tsx +160 -0
  167. package/src/input/Slider.tsx +282 -0
  168. package/src/input/Switch.tsx +168 -0
  169. package/src/input/Textarea.tsx +127 -0
  170. package/src/internal/ErrorIcon.tsx +61 -0
  171. package/src/internal/Field.module.css +139 -0
  172. package/src/internal/FieldWrapper.tsx +84 -0
  173. package/src/internal/InputWrapper.tsx +187 -0
  174. package/src/ranger/index.tsx +514 -0
  175. package/src/ranger/utils.ts +48 -0
  176. package/src/select/AutoComplete.tsx +354 -0
  177. package/src/select/DualList.tsx +286 -0
  178. package/src/select/List.tsx +288 -0
  179. package/src/select/Options.tsx +121 -0
  180. package/src/select/Select.tsx +350 -0
  181. package/src/select/helpers.ts +36 -0
  182. package/src/select/useSelect.tsx +413 -0
  183. package/src/types/index.ts +203 -0
  184. package/src/types/schema.ts +100 -0
  185. package/src/utils/eventHandlers.ts +72 -0
  186. package/src/utils/getColor.ts +47 -0
  187. package/src/utils/index.ts +25 -0
@@ -0,0 +1,238 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
5
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
+ var core$1 = require('@react-fabric/core');
8
+ var react = require('react');
9
+ var Field = require('../input/Field.js');
10
+ var List = require('./List.js');
11
+ var modifiers = require('@dnd-kit/modifiers');
12
+ var core = require('@dnd-kit/core');
13
+ var utilities = require('@react-fabric/utilities');
14
+ var jsxRuntime = require('react/jsx-runtime');
15
+
16
+ var _excluded = ["ref", "value", "options", "groupProperty", "height", "labelProperty", "valueProperty", "renderer", "onChange", "name", "invalid", "readOnly", "disabled", "placeholder", "autoFocus", "error"];
17
+ 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; }
18
+ 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; }
19
+ var DualList = function DualList(_ref) {
20
+ var ref = _ref.ref,
21
+ value = _ref.value,
22
+ options = _ref.options,
23
+ groupProperty = _ref.groupProperty,
24
+ _ref$height = _ref.height,
25
+ height = _ref$height === void 0 ? "18rem" : _ref$height,
26
+ _ref$labelProperty = _ref.labelProperty,
27
+ labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
28
+ _ref$valueProperty = _ref.valueProperty,
29
+ valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
30
+ renderer = _ref.renderer,
31
+ onChange = _ref.onChange,
32
+ name = _ref.name,
33
+ invalid = _ref.invalid,
34
+ readOnly = _ref.readOnly,
35
+ disabled = _ref.disabled,
36
+ placeholder = _ref.placeholder,
37
+ autoFocus = _ref.autoFocus,
38
+ error = _ref.error,
39
+ rest = _objectWithoutProperties(_ref, _excluded);
40
+ var _useState = react.useState([]),
41
+ _useState2 = _slicedToArray(_useState, 2),
42
+ actualValue = _useState2[0],
43
+ setActualValue = _useState2[1];
44
+ var _useState3 = react.useState([]),
45
+ _useState4 = _slicedToArray(_useState3, 2),
46
+ leftSelected = _useState4[0],
47
+ setLeftSelected = _useState4[1];
48
+ var _useState5 = react.useState([]),
49
+ _useState6 = _slicedToArray(_useState5, 2),
50
+ rightSelected = _useState6[0],
51
+ setRightSelected = _useState6[1];
52
+ var deferred = react.useDeferredValue(value);
53
+ react.useEffect(function () {
54
+ setActualValue(options.filter(function (opt) {
55
+ var _opt$valueProperty;
56
+ return deferred === null || deferred === void 0 ? void 0 : deferred.includes((_opt$valueProperty = opt[valueProperty]) !== null && _opt$valueProperty !== void 0 ? _opt$valueProperty : opt);
57
+ }));
58
+ }, [deferred, options]);
59
+ var _useMemo = react.useMemo(function () {
60
+ return [options.filter(function (opt) {
61
+ return !(actualValue !== null && actualValue !== void 0 && actualValue.includes(opt));
62
+ }), actualValue];
63
+ }, [options, actualValue]),
64
+ _useMemo2 = _slicedToArray(_useMemo, 2),
65
+ leftOptions = _useMemo2[0],
66
+ rightOptions = _useMemo2[1];
67
+ var moveAllLeft = react.useCallback(function () {
68
+ setLeftSelected([]);
69
+ setRightSelected([]);
70
+ setActualValue([]);
71
+ onChange === null || onChange === void 0 || onChange([]);
72
+ }, [onChange]);
73
+ var moveAllRight = react.useCallback(function () {
74
+ setLeftSelected([]);
75
+ setRightSelected([]);
76
+ setActualValue(options);
77
+ onChange === null || onChange === void 0 || onChange(options.map(function (opt) {
78
+ var _opt$valueProperty2;
79
+ return "".concat((_opt$valueProperty2 = opt[valueProperty]) !== null && _opt$valueProperty2 !== void 0 ? _opt$valueProperty2 : opt);
80
+ }));
81
+ }, [onChange, options, valueProperty]);
82
+ var moveLeftSelected = react.useCallback(function () {
83
+ var selected = [].concat(_toConsumableArray(actualValue), _toConsumableArray(leftSelected));
84
+ setActualValue(selected);
85
+ onChange === null || onChange === void 0 || onChange(selected.map(function (opt) {
86
+ var _opt$valueProperty3;
87
+ return "".concat((_opt$valueProperty3 = opt[valueProperty]) !== null && _opt$valueProperty3 !== void 0 ? _opt$valueProperty3 : opt);
88
+ }));
89
+ setLeftSelected([]);
90
+ }, [onChange, leftSelected, actualValue]);
91
+ var moveRightSelected = react.useCallback(function () {
92
+ var selected = actualValue.filter(function (opt) {
93
+ return !rightSelected.includes(opt);
94
+ });
95
+ setActualValue(selected);
96
+ onChange === null || onChange === void 0 || onChange(selected.map(function (opt) {
97
+ var _opt$valueProperty4;
98
+ return "".concat((_opt$valueProperty4 = opt[valueProperty]) !== null && _opt$valueProperty4 !== void 0 ? _opt$valueProperty4 : opt);
99
+ }));
100
+ setRightSelected([]);
101
+ }, [onChange, rightSelected, actualValue]);
102
+ var _useState7 = react.useState([]),
103
+ _useState8 = _slicedToArray(_useState7, 2),
104
+ dragItems = _useState8[0],
105
+ setDragItems = _useState8[1];
106
+ var dragLeft = core.useDraggable({
107
+ id: "unselected",
108
+ disabled: !leftSelected.length,
109
+ data: {
110
+ supports: ["selected"]
111
+ },
112
+ attributes: {
113
+ role: "none"
114
+ }
115
+ });
116
+ var dragRight = core.useDraggable({
117
+ id: "selected",
118
+ disabled: !rightSelected.length,
119
+ data: {
120
+ supports: ["unselected"]
121
+ },
122
+ attributes: {
123
+ role: "none"
124
+ }
125
+ });
126
+ var dropLeft = core.useDroppable({
127
+ id: "unselected",
128
+ data: {
129
+ accepts: ["selected"]
130
+ }
131
+ });
132
+ var dropRight = core.useDroppable({
133
+ id: "selected",
134
+ data: {
135
+ accepts: ["unselected"]
136
+ }
137
+ });
138
+ return /*#__PURE__*/jsxRuntime.jsx(Field.Field, _objectSpread(_objectSpread({}, rest), {}, {
139
+ noOutline: true,
140
+ plain: true,
141
+ children: /*#__PURE__*/jsxRuntime.jsxs(core.DndContext, {
142
+ modifiers: [modifiers.restrictToHorizontalAxis],
143
+ onDragStart: function onDragStart(e) {
144
+ setDragItems(e.active.id === "selected" ? rightSelected : leftSelected);
145
+ },
146
+ onDragEnd: function onDragEnd(e) {
147
+ setDragItems([]);
148
+ },
149
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread(_objectSpread({
150
+ className: "flex-1 flex flex-col overflow-hidden p-px",
151
+ ref: utilities.mergeRefs(dragLeft.setNodeRef, dropLeft.setNodeRef)
152
+ }, dragLeft.attributes), dragLeft.listeners), {}, {
153
+ children: /*#__PURE__*/jsxRuntime.jsx(List.List, {
154
+ ref: ref,
155
+ multiple: true,
156
+ allowClear: true,
157
+ name: name,
158
+ invalid: invalid,
159
+ readOnly: readOnly,
160
+ disabled: disabled,
161
+ placeholder: placeholder,
162
+ autoFocus: autoFocus,
163
+ error: error,
164
+ height: height,
165
+ options: leftOptions,
166
+ groupProperty: groupProperty,
167
+ labelProperty: labelProperty,
168
+ valueProperty: valueProperty,
169
+ renderer: renderer,
170
+ onSelect: setLeftSelected,
171
+ "data-inner": true,
172
+ "data-hide-selected": true
173
+ })
174
+ })), /*#__PURE__*/jsxRuntime.jsx("div", {
175
+ className: "self-center mx-2",
176
+ children: /*#__PURE__*/jsxRuntime.jsxs(core$1.ButtonGroup, {
177
+ vertical: true,
178
+ className: "outline overflow-hidden bg-base",
179
+ children: [/*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
180
+ rtlFlip: true,
181
+ size: "sm",
182
+ variant: "link",
183
+ "aria-label": "scroll to top",
184
+ onClick: moveAllLeft,
185
+ icon: core$1.CoreIcons.chevronsLeft,
186
+ disabled: !rightOptions.length
187
+ }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
188
+ rtlFlip: true,
189
+ size: "sm",
190
+ variant: "link",
191
+ "aria-label": "scroll up",
192
+ onClick: moveRightSelected,
193
+ icon: core$1.CoreIcons.chevronLeft,
194
+ disabled: !rightSelected.length
195
+ }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
196
+ rtlFlip: true,
197
+ size: "sm",
198
+ variant: "link",
199
+ "aria-label": "scroll down",
200
+ onClick: moveLeftSelected,
201
+ icon: core$1.CoreIcons.chevronRight,
202
+ disabled: !leftSelected.length
203
+ }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
204
+ rtlFlip: true,
205
+ size: "sm",
206
+ variant: "link",
207
+ "aria-label": "scroll to bottom",
208
+ onClick: moveAllRight,
209
+ icon: core$1.CoreIcons.chevronsRight,
210
+ disabled: !leftOptions.length
211
+ })]
212
+ })
213
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
214
+ className: "flex-1 flex flex-col overflow-hidden p-px",
215
+ ref: utilities.mergeRefs(dropRight.setNodeRef, dragRight.setNodeRef),
216
+ children: /*#__PURE__*/jsxRuntime.jsx(List.List, {
217
+ multiple: true,
218
+ allowClear: true,
219
+ height: height,
220
+ options: rightOptions,
221
+ groupProperty: groupProperty,
222
+ labelProperty: labelProperty,
223
+ valueProperty: valueProperty,
224
+ renderer: renderer,
225
+ onSelect: setRightSelected,
226
+ "data-inner": true,
227
+ "data-hide-selected": true
228
+ })
229
+ }), /*#__PURE__*/jsxRuntime.jsx(core.DragOverlay, {
230
+ children: dragItems.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("span", {
231
+ children: [dragItems.length, " Item(s)"]
232
+ })
233
+ })]
234
+ })
235
+ }));
236
+ };
237
+
238
+ exports.DualList = DualList;
@@ -0,0 +1,241 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var react$1 = require('@floating-ui/react');
6
+ var core = require('@react-fabric/core');
7
+ var utilities = require('@react-fabric/utilities');
8
+ var classNames = require('classnames');
9
+ var react = require('react');
10
+ var FieldWrapper = require('../internal/FieldWrapper.js');
11
+ var InputWrapper = require('../internal/InputWrapper.js');
12
+ var Options = require('./Options.js');
13
+ var useSelect = require('./useSelect.js');
14
+ var jsxRuntime = require('react/jsx-runtime');
15
+
16
+ var _excluded = ["ref", "name", "value", "readOnly", "disabled", "required", "placeholder", "autoFocus", "options", "height", "groupProperty", "labelProperty", "valueProperty", "multiple", "allowCreate", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed", "invalid", "error", "allowClear", "decorateStart", "decorateEnd", "data-inner", "data-hide-selected"];
17
+ 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; }
18
+ 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; }
19
+ var List = function List(_ref) {
20
+ var _state$query;
21
+ _ref.ref;
22
+ var name = _ref.name,
23
+ value = _ref.value,
24
+ readOnly = _ref.readOnly,
25
+ disabled = _ref.disabled,
26
+ required = _ref.required,
27
+ placeholder = _ref.placeholder;
28
+ _ref.autoFocus;
29
+ var options = _ref.options,
30
+ height = _ref.height,
31
+ groupProperty = _ref.groupProperty,
32
+ labelProperty = _ref.labelProperty,
33
+ valueProperty = _ref.valueProperty,
34
+ multiple = _ref.multiple,
35
+ allowCreate = _ref.allowCreate,
36
+ createOption = _ref.createOption,
37
+ matcher = _ref.matcher,
38
+ renderer = _ref.renderer,
39
+ onQuery = _ref.onQuery,
40
+ onChange = _ref.onChange,
41
+ onSelect = _ref.onSelect,
42
+ onEnterPressed = _ref.onEnterPressed,
43
+ invalid = _ref.invalid,
44
+ error = _ref.error;
45
+ _ref.allowClear;
46
+ _ref.decorateStart;
47
+ _ref.decorateEnd;
48
+ var isInner = _ref["data-inner"],
49
+ hideSelected = _ref["data-hide-selected"],
50
+ rest = _objectWithoutProperties(_ref, _excluded);
51
+ var Wrapper = react.useMemo(function () {
52
+ return isInner ? react.Fragment : FieldWrapper.FieldWrapper;
53
+ }, [isInner]);
54
+ var wrapperProps = react.useMemo(function () {
55
+ return isInner ? {} : _objectSpread({}, rest);
56
+ }, [isInner, rest]);
57
+ var _useSelect = useSelect.useSelect({
58
+ value: value,
59
+ options: options,
60
+ multiple: multiple,
61
+ groupProperty: groupProperty,
62
+ labelProperty: labelProperty,
63
+ valueProperty: valueProperty,
64
+ allowCreate: allowCreate,
65
+ createOption: createOption,
66
+ matcher: matcher,
67
+ onChange: onChange,
68
+ onSelect: onSelect,
69
+ onQuery: onQuery
70
+ }),
71
+ state = _useSelect.state,
72
+ listRef = _useSelect.listRef,
73
+ listContentRef = _useSelect.listContentRef,
74
+ macthOption = _useSelect.macthOption,
75
+ handleChange = _useSelect.handleChange,
76
+ handleRemove = _useSelect.handleRemove,
77
+ handleQuery = _useSelect.handleQuery,
78
+ setItemRef = _useSelect.setItemRef,
79
+ setActiveIndex = _useSelect.setActiveIndex;
80
+ var dropdownKey = react.useId();
81
+ var _useFloating = react$1.useFloating({
82
+ open: true,
83
+ placement: "bottom",
84
+ whileElementsMounted: react$1.autoUpdate,
85
+ middleware: []
86
+ }),
87
+ context = _useFloating.context,
88
+ refs = _useFloating.refs;
89
+
90
+ // floating interactions
91
+ var navigation = react$1.useListNavigation(context, {
92
+ listRef: listRef,
93
+ activeIndex: state.activeIndex,
94
+ selectedIndex: state.selectedIndex,
95
+ loop: true,
96
+ virtual: true,
97
+ focusItemOnOpen: false,
98
+ onNavigate: setActiveIndex
99
+ });
100
+ var typeahead = react$1.useTypeahead(context, {
101
+ listRef: listContentRef,
102
+ activeIndex: state.activeIndex,
103
+ selectedIndex: state.selectedIndex,
104
+ findMatch: function findMatch(list, typedString) {
105
+ return list.find(function (item) {
106
+ return macthOption(item, typedString);
107
+ });
108
+ },
109
+ onMatch: function onMatch(index) {
110
+ state.open && setActiveIndex(index);
111
+ }
112
+ });
113
+ var _useInteractions = react$1.useInteractions([navigation, typeahead]),
114
+ getReferenceProps = _useInteractions.getReferenceProps,
115
+ getFloatingProps = _useInteractions.getFloatingProps,
116
+ getItemProps = _useInteractions.getItemProps;
117
+ var referenceProps = react.useMemo(function () {
118
+ var props = getReferenceProps();
119
+ return _objectSpread(_objectSpread({}, props), {}, {
120
+ onBlur: function onBlur(evt) {
121
+ var _evt$relatedTarget;
122
+ if ((_evt$relatedTarget = evt.relatedTarget) !== null && _evt$relatedTarget !== void 0 && _evt$relatedTarget.closest("[data-select-dropdown=\"".concat(dropdownKey, "\"]"))) {
123
+ var _refs$domReference$cu;
124
+ (_refs$domReference$cu = refs.domReference.current) === null || _refs$domReference$cu === void 0 || (_refs$domReference$cu = _refs$domReference$cu.querySelector("input")) === null || _refs$domReference$cu === void 0 || _refs$domReference$cu.focus();
125
+ return;
126
+ }
127
+ handleQuery("");
128
+ },
129
+ onKeyDown: function onKeyDown(evt) {
130
+ if (evt.key === "Enter") {
131
+ if (state.activeIndex !== null) {
132
+ handleChange(listContentRef.current[state.activeIndex]);
133
+ evt.preventDefault();
134
+ evt.stopPropagation();
135
+ return false;
136
+ } else if (!state.query) {
137
+ onEnterPressed === null || onEnterPressed === void 0 || onEnterPressed(evt);
138
+ }
139
+ } else if (evt.key === "Backspace") {
140
+ !state.query && handleRemove();
141
+ } else if (["ArrowUp", "ArrowDown"].includes(evt.key)) {
142
+ if (state.activeIndex === null) {
143
+ setActiveIndex(state.selectedIndex);
144
+ }
145
+ setTimeout(function () {
146
+ var _props$onKeyDown;
147
+ (_props$onKeyDown = props.onKeyDown) === null || _props$onKeyDown === void 0 || _props$onKeyDown.call(props, evt);
148
+ }, 50);
149
+ }
150
+ }
151
+ });
152
+ }, [getReferenceProps, onEnterPressed, handleQuery, refs, state.query, state.activeIndex]);
153
+ var floatingProps = react.useMemo(function () {
154
+ return getFloatingProps({
155
+ "data-select-dropdown": dropdownKey
156
+ });
157
+ }, [getFloatingProps]);
158
+ var makeItemProps = react.useCallback(function (item) {
159
+ var _state$value, _state$value$includes;
160
+ var selected = utilities.isArray(state.value) ? (_state$value = state.value) === null || _state$value === void 0 || (_state$value$includes = _state$value.includes) === null || _state$value$includes === void 0 ? void 0 : _state$value$includes.call(_state$value, item) : state.value === item;
161
+ return _objectSpread(_objectSpread({}, getItemProps({
162
+ "data-selected": selected ? true : undefined,
163
+ onClick: function onClick() {
164
+ handleChange(item);
165
+ }
166
+ })), {}, {
167
+ "aria-hidden": undefined
168
+ });
169
+ }, [getItemProps, handleChange, state.value]);
170
+ var displayValue = react.useMemo(function () {
171
+ if (utilities.isArray(state.value)) {
172
+ return state.value.map(function (item, index) {
173
+ var _ref2, _renderer;
174
+ return /*#__PURE__*/jsxRuntime.jsx(core.Chip, {
175
+ onRemove: function onRemove() {
176
+ return handleRemove(index);
177
+ },
178
+ children: (_ref2 = (_renderer = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer !== void 0 ? _renderer : item[labelProperty]) !== null && _ref2 !== void 0 ? _ref2 : item
179
+ }, index);
180
+ });
181
+ } else if (!utilities.isEmpty(state.value) && !state.query) {
182
+ var _ref3, _renderer2;
183
+ return /*#__PURE__*/jsxRuntime.jsx("span", {
184
+ children: (_ref3 = (_renderer2 = renderer === null || renderer === void 0 ? void 0 : renderer(state.value)) !== null && _renderer2 !== void 0 ? _renderer2 : state.value[labelProperty]) !== null && _ref3 !== void 0 ? _ref3 : state.value
185
+ });
186
+ }
187
+ }, [state.value, state.query, placeholder, renderer]);
188
+ return /*#__PURE__*/jsxRuntime.jsxs(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
189
+ children: [/*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, {
190
+ showClear: !utilities.isEmpty(state.value),
191
+ onClear: handleChange,
192
+ invalid: invalid,
193
+ readOnly: readOnly,
194
+ disabled: disabled,
195
+ required: required,
196
+ error: error,
197
+ className: "z-1 rounded-b-none",
198
+ "data-inner": true,
199
+ wrapperRef: refs.setReference,
200
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
201
+ "data-select-display": "true",
202
+ className: "group flex-1 py-1 px-2 truncate text-start flex gap-1 flex-wrap",
203
+ children: [!hideSelected && displayValue, /*#__PURE__*/jsxRuntime.jsx("input", _objectSpread(_objectSpread({
204
+ disabled: disabled,
205
+ value: (_state$query = state.query) !== null && _state$query !== void 0 ? _state$query : "",
206
+ "aria-invalid": invalid,
207
+ "data-testid": name,
208
+ name: name,
209
+ className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1 min-w-24", disabled && "cursor-not-allowed pointer-events-none"),
210
+ placeholder: utilities.isEmpty(state.value) ? placeholder : ""
211
+ }, referenceProps), {}, {
212
+ onChange: function onChange(evt) {
213
+ return handleQuery(evt.target.value);
214
+ }
215
+ }))]
216
+ })
217
+ }), /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingFocusManager, {
218
+ context: context,
219
+ initialFocus: -1,
220
+ visuallyHiddenDismiss: true,
221
+ children: /*#__PURE__*/jsxRuntime.jsx(Options.Options, _objectSpread(_objectSpread({
222
+ ref: refs.setFloating,
223
+ className: classNames("max-h-96 z-0 rounded-capped rounded-t-none outline", disabled && "pointer-events-none opacity-65"),
224
+ style: {
225
+ height: height
226
+ }
227
+ }, floatingProps), {}, {
228
+ items: state.items,
229
+ active: state.activeIndex,
230
+ itemRef: setItemRef,
231
+ itemProps: makeItemProps,
232
+ children: function children(item) {
233
+ var _ref4, _renderer3;
234
+ return (_ref4 = (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : item[labelProperty]) !== null && _ref4 !== void 0 ? _ref4 : item;
235
+ }
236
+ }))
237
+ })]
238
+ }));
239
+ };
240
+
241
+ exports.List = List;
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var core = require('@react-fabric/core');
6
+ var classNames = require('classnames');
7
+ var reactI18next = require('react-i18next');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var _excluded = ["ref", "style", "items", "active", "className", "itemRef", "empty", "valueProperty", "labelProperty", "itemProps", "children"];
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 Options = function Options(_ref) {
14
+ var ref = _ref.ref,
15
+ style = _ref.style,
16
+ items = _ref.items,
17
+ active = _ref.active,
18
+ className = _ref.className,
19
+ itemRef = _ref.itemRef,
20
+ empty = _ref.empty;
21
+ _ref.valueProperty;
22
+ var _ref$labelProperty = _ref.labelProperty,
23
+ labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
24
+ itemProps = _ref.itemProps,
25
+ children = _ref.children,
26
+ rest = _objectWithoutProperties(_ref, _excluded);
27
+ return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
28
+ ref: ref,
29
+ className: classNames("bg-base select-none overflow-x-hidden overflow-y-auto", className),
30
+ style: style
31
+ }, rest), {}, {
32
+ children: [items.length === 0 && (empty !== null && empty !== void 0 ? empty : /*#__PURE__*/jsxRuntime.jsx(core.EmptyContent, {
33
+ message: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
34
+ i18nKey: "form:select.emptyList"
35
+ })
36
+ })), items.map(function (item, index) {
37
+ var _item$labelProperty;
38
+ if (item.___group___) return /*#__PURE__*/jsxRuntime.jsx("p", {
39
+ className: "px-2 py-1 text-muted text-xs sticky -top-px z-2 bg-base border-t",
40
+ children: item.label
41
+ }, index);
42
+ if (item.___create___) return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
43
+ role: "none",
44
+ tabIndex: active === index ? 0 : -1,
45
+ ref: function ref(el) {
46
+ return itemRef(index, el);
47
+ },
48
+ "data-active": active === index ? true : undefined,
49
+ className: classNames("block text-start truncate px-2 py-1 leading-normal cursor-pointer select-none", "data-[active]:bg-primary-200 data-[selected]:bg-primary-600 data-[selected]:text-white data-[active]:data-[selected]:underline")
50
+ }, itemProps(item)), {}, {
51
+ children: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
52
+ i18nKey: "form:select.createOption",
53
+ values: {
54
+ query: item.value
55
+ },
56
+ components: [/*#__PURE__*/jsxRuntime.jsx("strong", {
57
+ children: "query"
58
+ }, "t0")]
59
+ })
60
+ }), index);
61
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
62
+ role: "none",
63
+ tabIndex: active === index ? 0 : -1,
64
+ ref: function ref(el) {
65
+ return itemRef(index, el);
66
+ },
67
+ "data-active": active === index ? true : undefined,
68
+ className: classNames("block text-start truncate px-2 py-1 leading-normal cursor-pointer", "data-[active]:bg-primary-200 data-[selected]:bg-primary-600 data-[selected]:text-white data-[active]:data-[selected]:underline")
69
+ }, itemProps(item)), {}, {
70
+ children: children(item, (_item$labelProperty = item[labelProperty]) !== null && _item$labelProperty !== void 0 ? _item$labelProperty : item)
71
+ }), index);
72
+ })]
73
+ }));
74
+ };
75
+
76
+ exports.Options = Options;