@react-fabric/form 1.0.0-beta.6 → 1.0.0-beta.61

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/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
  2. package/css/_colorPicker.css +65 -0
  3. package/{src/internal/Field.module.css → css/_field.css} +66 -30
  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 +40 -28
  7. package/dist/cjs/builder/FormField.js +50 -34
  8. package/dist/cjs/builder/SchemaEditor.js +72 -0
  9. package/dist/cjs/builder/components/AddSchemaFields.js +63 -0
  10. package/dist/cjs/builder/components/SchemaArrayForm.js +145 -0
  11. package/dist/cjs/builder/components/SchemaField.js +414 -0
  12. package/dist/cjs/form/Controller.js +46 -1
  13. package/dist/cjs/form/Form.js +71 -13
  14. package/dist/cjs/hooks/useFileUploader.js +16 -0
  15. package/dist/cjs/hooks/useFormBuilder.js +67 -18
  16. package/dist/cjs/i18n/ar.json.js +5 -4
  17. package/dist/cjs/i18n/en.json.js +5 -5
  18. package/dist/cjs/index.js +12 -2
  19. package/dist/cjs/input/ArrayInput.js +128 -38
  20. package/dist/cjs/input/AvatarInput.js +43 -23
  21. package/dist/cjs/input/Checkbox.js +18 -8
  22. package/dist/cjs/input/ColorInput.js +114 -59
  23. package/dist/cjs/input/ColorPicker.js +60 -76
  24. package/dist/cjs/input/DateInput.js +197 -0
  25. package/dist/cjs/input/Field.js +10 -4
  26. package/dist/cjs/input/File.js +15 -8
  27. package/dist/cjs/input/Hidden.js +13 -2
  28. package/dist/cjs/input/Input.js +24 -10
  29. package/dist/cjs/input/Number.js +22 -10
  30. package/dist/cjs/input/Password.js +23 -13
  31. package/dist/cjs/input/Radio.js +14 -5
  32. package/dist/cjs/input/RadioGroup.js +10 -1
  33. package/dist/cjs/input/{Range.js → RangeSlider.js} +16 -8
  34. package/dist/cjs/input/Search.js +32 -22
  35. package/dist/cjs/input/Slider.js +12 -6
  36. package/dist/cjs/input/Switch.js +20 -9
  37. package/dist/cjs/input/Textarea.js +29 -8
  38. package/dist/cjs/internal/ErrorIcon.js +2 -2
  39. package/dist/cjs/internal/FieldWrapper.js +11 -4
  40. package/dist/cjs/internal/InputWrapper.js +29 -22
  41. package/dist/cjs/select/AutoComplete.js +22 -13
  42. package/dist/cjs/select/DualList.js +34 -12
  43. package/dist/cjs/select/List.js +49 -21
  44. package/dist/cjs/select/Options.js +49 -42
  45. package/dist/cjs/select/Select.js +21 -10
  46. package/dist/cjs/select/useSelect.js +22 -11
  47. package/dist/cjs/types/schema.js +43 -0
  48. package/dist/cjs/utils/eventHandlers.js +15 -5
  49. package/dist/esm/builder/FileField.js +42 -30
  50. package/dist/esm/builder/FormField.js +50 -34
  51. package/dist/esm/builder/SchemaEditor.js +72 -0
  52. package/dist/esm/builder/components/AddSchemaFields.js +63 -0
  53. package/dist/esm/builder/components/SchemaArrayForm.js +145 -0
  54. package/dist/esm/builder/components/SchemaField.js +414 -0
  55. package/dist/esm/form/Controller.js +46 -1
  56. package/dist/esm/form/Form.js +73 -16
  57. package/dist/esm/hooks/useFileUploader.js +16 -0
  58. package/dist/esm/hooks/useFormBuilder.js +65 -16
  59. package/dist/esm/i18n/ar.json.js +5 -4
  60. package/dist/esm/i18n/en.json.js +5 -5
  61. package/dist/esm/index.js +6 -2
  62. package/dist/esm/input/ArrayInput.js +128 -38
  63. package/dist/esm/input/AvatarInput.js +43 -23
  64. package/dist/esm/input/Checkbox.js +19 -9
  65. package/dist/esm/input/ColorInput.js +116 -61
  66. package/dist/esm/input/ColorPicker.js +60 -76
  67. package/dist/esm/input/DateInput.js +197 -0
  68. package/dist/esm/input/Field.js +11 -5
  69. package/dist/esm/input/File.js +18 -11
  70. package/dist/esm/input/Hidden.js +13 -2
  71. package/dist/esm/input/Input.js +26 -12
  72. package/dist/esm/input/Number.js +24 -12
  73. package/dist/esm/input/Password.js +26 -16
  74. package/dist/esm/input/Radio.js +15 -6
  75. package/dist/esm/input/RadioGroup.js +11 -2
  76. package/dist/esm/input/{Range.js → RangeSlider.js} +16 -8
  77. package/dist/esm/input/Search.js +35 -25
  78. package/dist/esm/input/Slider.js +12 -6
  79. package/dist/esm/input/Switch.js +20 -9
  80. package/dist/esm/input/Textarea.js +30 -9
  81. package/dist/esm/internal/ErrorIcon.js +3 -3
  82. package/dist/esm/internal/FieldWrapper.js +11 -4
  83. package/dist/esm/internal/InputWrapper.js +30 -23
  84. package/dist/esm/select/AutoComplete.js +23 -14
  85. package/dist/esm/select/DualList.js +35 -13
  86. package/dist/esm/select/List.js +50 -22
  87. package/dist/esm/select/Options.js +49 -42
  88. package/dist/esm/select/Select.js +22 -11
  89. package/dist/esm/select/useSelect.js +23 -12
  90. package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
  91. package/dist/esm/utils/eventHandlers.js +15 -5
  92. package/dist/types/builder/FileField.d.ts +4 -2
  93. package/dist/types/builder/FormField.d.ts +3 -1
  94. package/dist/types/builder/SchemaEditor.d.ts +9 -0
  95. package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
  96. package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
  97. package/dist/types/builder/components/SchemaField.d.ts +10 -0
  98. package/dist/types/form/Controller.d.ts +47 -2
  99. package/dist/types/form/Form.d.ts +49 -6
  100. package/dist/types/hooks/useFileUploader.d.ts +16 -0
  101. package/dist/types/hooks/useFormBuilder.d.ts +38 -1
  102. package/dist/types/index.d.ts +6 -3
  103. package/dist/types/input/ArrayInput.d.ts +69 -12
  104. package/dist/types/input/AvatarInput.d.ts +23 -3
  105. package/dist/types/input/Checkbox.d.ts +13 -4
  106. package/dist/types/input/ColorInput.d.ts +15 -2
  107. package/dist/types/input/ColorPicker.d.ts +11 -1
  108. package/dist/types/input/DateInput.d.ts +28 -0
  109. package/dist/types/input/Field.d.ts +5 -1
  110. package/dist/types/input/File.d.ts +9 -0
  111. package/dist/types/input/Hidden.d.ts +13 -1
  112. package/dist/types/input/Input.d.ts +9 -1
  113. package/dist/types/input/Number.d.ts +9 -1
  114. package/dist/types/input/Password.d.ts +7 -1
  115. package/dist/types/input/Radio.d.ts +9 -1
  116. package/dist/types/input/RadioGroup.d.ts +8 -1
  117. package/dist/types/input/RangeSlider.d.ts +67 -0
  118. package/dist/types/input/Search.d.ts +14 -1
  119. package/dist/types/input/Slider.d.ts +8 -2
  120. package/dist/types/input/Switch.d.ts +10 -2
  121. package/dist/types/input/Textarea.d.ts +15 -1
  122. package/dist/types/internal/FieldWrapper.d.ts +1 -1
  123. package/dist/types/internal/InputWrapper.d.ts +1 -1
  124. package/dist/types/ranger/index.d.ts +2 -2
  125. package/dist/types/select/AutoComplete.d.ts +8 -1
  126. package/dist/types/select/DualList.d.ts +21 -7
  127. package/dist/types/select/List.d.ts +9 -1
  128. package/dist/types/select/Options.d.ts +4 -3
  129. package/dist/types/select/Select.d.ts +9 -1
  130. package/dist/types/select/useSelect.d.ts +10 -6
  131. package/dist/types/types/index.d.ts +38 -10
  132. package/dist/types/types/schema.d.ts +78 -33
  133. package/dist/types/utils/eventHandlers.d.ts +2 -2
  134. package/package.json +22 -20
  135. package/src/builder/FileField.tsx +56 -30
  136. package/src/builder/FormField.tsx +52 -32
  137. package/src/builder/SchemaEditor.tsx +79 -0
  138. package/src/builder/components/AddSchemaFields.tsx +75 -0
  139. package/src/builder/components/SchemaArrayForm.tsx +155 -0
  140. package/src/builder/components/SchemaField.tsx +435 -0
  141. package/src/form/Controller.tsx +48 -3
  142. package/src/form/Form.tsx +84 -13
  143. package/src/hooks/useFileUploader.ts +16 -0
  144. package/src/hooks/useFormBuilder.tsx +70 -19
  145. package/src/i18n/ar.json +5 -4
  146. package/src/i18n/en.json +5 -5
  147. package/src/index.ts +12 -3
  148. package/src/input/ArrayInput.tsx +195 -66
  149. package/src/input/AvatarInput.tsx +66 -18
  150. package/src/input/Checkbox.tsx +22 -9
  151. package/src/input/ColorInput.tsx +128 -72
  152. package/src/input/ColorPicker.tsx +54 -72
  153. package/src/input/DateInput.tsx +260 -0
  154. package/src/input/Field.tsx +15 -11
  155. package/src/input/File.tsx +18 -16
  156. package/src/input/Hidden.tsx +17 -2
  157. package/src/input/Input.tsx +27 -13
  158. package/src/input/Number.tsx +22 -13
  159. package/src/input/Password.tsx +28 -18
  160. package/src/input/Radio.tsx +15 -6
  161. package/src/input/RadioGroup.tsx +12 -3
  162. package/src/input/{Range.tsx → RangeSlider.tsx} +17 -9
  163. package/src/input/Search.tsx +36 -25
  164. package/src/input/Slider.tsx +20 -11
  165. package/src/input/Switch.tsx +17 -6
  166. package/src/input/Textarea.tsx +34 -9
  167. package/src/internal/ErrorIcon.tsx +3 -3
  168. package/src/internal/FieldWrapper.tsx +8 -4
  169. package/src/internal/InputWrapper.tsx +56 -30
  170. package/src/select/AutoComplete.tsx +16 -6
  171. package/src/select/DualList.tsx +40 -22
  172. package/src/select/List.tsx +52 -8
  173. package/src/select/Options.tsx +50 -46
  174. package/src/select/Select.tsx +29 -10
  175. package/src/select/useSelect.tsx +26 -9
  176. package/src/types/index.ts +42 -10
  177. package/src/types/schema.ts +96 -41
  178. package/src/utils/eventHandlers.ts +14 -4
  179. package/dist/cjs/input/ArrayInput.module.css +0 -1
  180. package/dist/cjs/input/ColorPicker.module.css +0 -1
  181. package/dist/cjs/input/File.module.css +0 -1
  182. package/dist/cjs/internal/Field.module.css +0 -1
  183. package/dist/esm/input/ArrayInput.module.css +0 -1
  184. package/dist/esm/input/ColorPicker.module.css +0 -1
  185. package/dist/esm/input/File.module.css +0 -1
  186. package/dist/esm/internal/Field.module.css +0 -1
  187. package/dist/types/input/Range.d.ts +0 -59
@@ -4,22 +4,34 @@ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
4
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
5
5
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
6
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
+ var core = require('@dnd-kit/core');
8
+ var modifiers = require('@dnd-kit/modifiers');
7
9
  var core$1 = require('@react-fabric/core');
10
+ var utilities = require('@react-fabric/utilities');
8
11
  var react = require('react');
9
12
  var Field = require('../input/Field.js');
10
13
  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
14
  var jsxRuntime = require('react/jsx-runtime');
15
15
 
16
- var _excluded = ["ref", "value", "options", "groupProperty", "height", "labelProperty", "valueProperty", "renderer", "onChange", "name", "invalid", "readOnly", "disabled", "placeholder", "autoFocus", "error"];
16
+ var _excluded = ["ref", "value", "options", "emptyDisplay", "groupProperty", "height", "labelProperty", "valueProperty", "renderer", "onChange", "name", "invalid", "readOnly", "disabled", "placeholder", "autoFocus", "error"];
17
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
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
+ /**
20
+ * DualList component allows users to select items from two lists.
21
+ * It displays two lists side by side, one for unselected items and one for selected items.
22
+ * Users can move items between the lists using buttons or drag-and-drop functionality.
23
+ * It supports multiple selections and provides options for grouping, labeling, and rendering items.
24
+ * It also includes features for handling empty states and custom rendering of items.
25
+ * This component is useful for scenarios where users need to manage selections from a larger set of options, such as in forms or settings.
26
+ *
27
+ * @param {DualListProps<T>} props - The properties for the DualList component.
28
+ * @returns {JSX.Element} The rendered DualList component.
29
+ */
19
30
  var DualList = function DualList(_ref) {
20
31
  var ref = _ref.ref,
21
32
  value = _ref.value,
22
33
  options = _ref.options,
34
+ emptyDisplay = _ref.emptyDisplay,
23
35
  groupProperty = _ref.groupProperty,
24
36
  _ref$height = _ref.height,
25
37
  height = _ref$height === void 0 ? "18rem" : _ref$height,
@@ -163,6 +175,7 @@ var DualList = function DualList(_ref) {
163
175
  error: error,
164
176
  height: height,
165
177
  options: leftOptions,
178
+ emptyDisplay: emptyDisplay,
166
179
  groupProperty: groupProperty,
167
180
  labelProperty: labelProperty,
168
181
  valueProperty: valueProperty,
@@ -177,36 +190,44 @@ var DualList = function DualList(_ref) {
177
190
  vertical: true,
178
191
  className: "outline overflow-hidden bg-base",
179
192
  children: [/*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
180
- rtlFlip: true,
181
193
  size: "sm",
182
194
  variant: "link",
183
195
  "aria-label": "scroll to top",
184
196
  onClick: moveAllLeft,
185
- icon: core$1.CoreIcons.chevronsLeft,
197
+ icon: {
198
+ icon: "icon-[mdi--chevron-double-left]",
199
+ rtlFlip: true
200
+ },
186
201
  disabled: !rightOptions.length
187
202
  }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
188
- rtlFlip: true,
189
203
  size: "sm",
190
204
  variant: "link",
191
205
  "aria-label": "scroll up",
192
206
  onClick: moveRightSelected,
193
- icon: core$1.CoreIcons.chevronLeft,
207
+ icon: {
208
+ icon: "icon-[mdi--chevron-left]",
209
+ rtlFlip: true
210
+ },
194
211
  disabled: !rightSelected.length
195
212
  }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
196
- rtlFlip: true,
197
213
  size: "sm",
198
214
  variant: "link",
199
215
  "aria-label": "scroll down",
200
216
  onClick: moveLeftSelected,
201
- icon: core$1.CoreIcons.chevronRight,
217
+ icon: {
218
+ icon: "icon-[mdi--chevron-right]",
219
+ rtlFlip: true
220
+ },
202
221
  disabled: !leftSelected.length
203
222
  }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
204
- rtlFlip: true,
205
223
  size: "sm",
206
224
  variant: "link",
207
225
  "aria-label": "scroll to bottom",
208
226
  onClick: moveAllRight,
209
- icon: core$1.CoreIcons.chevronsRight,
227
+ icon: {
228
+ icon: "icon-[mdi--chevron-double-right]",
229
+ rtlFlip: true
230
+ },
210
231
  disabled: !leftOptions.length
211
232
  })]
212
233
  })
@@ -218,6 +239,7 @@ var DualList = function DualList(_ref) {
218
239
  allowClear: true,
219
240
  height: height,
220
241
  options: rightOptions,
242
+ emptyDisplay: emptyDisplay,
221
243
  groupProperty: groupProperty,
222
244
  labelProperty: labelProperty,
223
245
  valueProperty: valueProperty,
@@ -13,26 +13,29 @@ var Options = require('./Options.js');
13
13
  var useSelect = require('./useSelect.js');
14
14
  var jsxRuntime = require('react/jsx-runtime');
15
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"];
16
+ var _excluded = ["ref", "name", "value", "readOnly", "disabled", "required", "placeholder", "autoFocus", "options", "height", "groupProperty", "labelProperty", "valueProperty", "infoProperty", "sortProperty", "multiple", "allowCreate", "searchable", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed", "emptyDisplay", "invalid", "error", "allowClear", "decorateStart", "decorateEnd", "data-inner", "data-hide-selected"];
17
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
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
19
  var List = function List(_ref) {
20
- var _state$query;
21
- _ref.ref;
22
- var name = _ref.name,
20
+ var _state$query, _state$activeItem;
21
+ var ref = _ref.ref,
22
+ name = _ref.name,
23
23
  value = _ref.value,
24
24
  readOnly = _ref.readOnly,
25
25
  disabled = _ref.disabled,
26
26
  required = _ref.required,
27
- placeholder = _ref.placeholder;
28
- _ref.autoFocus;
29
- var options = _ref.options,
27
+ placeholder = _ref.placeholder,
28
+ autoFocus = _ref.autoFocus,
29
+ options = _ref.options,
30
30
  height = _ref.height,
31
31
  groupProperty = _ref.groupProperty,
32
32
  labelProperty = _ref.labelProperty,
33
33
  valueProperty = _ref.valueProperty,
34
+ infoProperty = _ref.infoProperty,
35
+ sortProperty = _ref.sortProperty,
34
36
  multiple = _ref.multiple,
35
37
  allowCreate = _ref.allowCreate,
38
+ searchable = _ref.searchable,
36
39
  createOption = _ref.createOption,
37
40
  matcher = _ref.matcher,
38
41
  renderer = _ref.renderer,
@@ -40,6 +43,7 @@ var List = function List(_ref) {
40
43
  onChange = _ref.onChange,
41
44
  onSelect = _ref.onSelect,
42
45
  onEnterPressed = _ref.onEnterPressed,
46
+ emptyDisplay = _ref.emptyDisplay,
43
47
  invalid = _ref.invalid,
44
48
  error = _ref.error;
45
49
  _ref.allowClear;
@@ -58,9 +62,11 @@ var List = function List(_ref) {
58
62
  value: value,
59
63
  options: options,
60
64
  multiple: multiple,
65
+ alwaysOpen: true,
61
66
  groupProperty: groupProperty,
62
67
  labelProperty: labelProperty,
63
68
  valueProperty: valueProperty,
69
+ sortProperty: sortProperty,
64
70
  allowCreate: allowCreate,
65
71
  createOption: createOption,
66
72
  matcher: matcher,
@@ -138,9 +144,10 @@ var List = function List(_ref) {
138
144
  }
139
145
  } else if (evt.key === "Backspace") {
140
146
  !state.query && handleRemove();
141
- } else if (["ArrowUp", "ArrowDown"].includes(evt.key)) {
142
- if (state.activeIndex === null) {
143
- setActiveIndex(state.selectedIndex);
147
+ } else if (!searchable || ["ArrowUp", "ArrowDown"].includes(evt.key)) {
148
+ if (["ArrowUp", "ArrowDown"].includes(evt.key) && state.activeIndex === null) {
149
+ var _state$selectedIndex;
150
+ setActiveIndex((_state$selectedIndex = state.selectedIndex) !== null && _state$selectedIndex !== void 0 ? _state$selectedIndex : 0);
144
151
  }
145
152
  setTimeout(function () {
146
153
  var _props$onKeyDown;
@@ -185,6 +192,14 @@ var List = function List(_ref) {
185
192
  });
186
193
  }
187
194
  }, [state.value, state.query, placeholder, renderer]);
195
+ react.useLayoutEffect(function () {
196
+ setTimeout(function () {
197
+ var _listRef$current$stat;
198
+ state.selectedIndex && ((_listRef$current$stat = listRef.current[state.selectedIndex]) === null || _listRef$current$stat === void 0 ? void 0 : _listRef$current$stat.scrollIntoView({
199
+ block: "center"
200
+ }));
201
+ }, 100);
202
+ }, [state.selectedIndex]);
188
203
  return /*#__PURE__*/jsxRuntime.jsxs(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
189
204
  children: [/*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, {
190
205
  showClear: !utilities.isEmpty(state.value),
@@ -197,23 +212,32 @@ var List = function List(_ref) {
197
212
  className: "z-1 rounded-b-none",
198
213
  "data-inner": true,
199
214
  wrapperRef: refs.setReference,
200
- children: /*#__PURE__*/jsxRuntime.jsxs("div", {
215
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
216
+ role: "none",
201
217
  "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({
218
+ className: classNames("group flex-1 py-1 px-2 truncate text-start flex gap-1 relative min-h-5 justify-start", multiple ? "flex-wrap" : "flex-nowrap overflow-hidden")
219
+ }, referenceProps), {}, {
220
+ onMouseUp: function onMouseUp(e) {
221
+ var _e$currentTarget$quer;
222
+ return (_e$currentTarget$quer = e.currentTarget.querySelector("input")) === null || _e$currentTarget$quer === void 0 ? void 0 : _e$currentTarget$quer.focus();
223
+ },
224
+ children: [!hideSelected && displayValue, /*#__PURE__*/jsxRuntime.jsx("input", {
225
+ readOnly: !searchable || readOnly,
204
226
  disabled: disabled,
205
227
  value: (_state$query = state.query) !== null && _state$query !== void 0 ? _state$query : "",
206
228
  "aria-invalid": invalid,
207
229
  "data-testid": name,
208
230
  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), {}, {
231
+ size: 1,
232
+ ref: ref,
233
+ autoFocus: autoFocus,
234
+ className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1 min-w-24", disabled && "cursor-not-allowed pointer-events-none", multiple && "min-w-24"),
235
+ placeholder: utilities.isEmpty(state.value) ? placeholder : "",
212
236
  onChange: function onChange(evt) {
213
237
  return handleQuery(evt.target.value);
214
238
  }
215
- }))]
216
- })
239
+ })]
240
+ }))
217
241
  }), /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingFocusManager, {
218
242
  context: context,
219
243
  initialFocus: -1,
@@ -227,11 +251,15 @@ var List = function List(_ref) {
227
251
  }, floatingProps), {}, {
228
252
  items: state.items,
229
253
  active: state.activeIndex,
254
+ valueProperty: valueProperty,
255
+ labelProperty: labelProperty,
230
256
  itemRef: setItemRef,
231
257
  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;
258
+ empty: emptyDisplay,
259
+ info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
260
+ children: function children(item, label) {
261
+ var _renderer3;
262
+ return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
235
263
  }
236
264
  }))
237
265
  })]
@@ -7,7 +7,7 @@ var classNames = require('classnames');
7
7
  var reactI18next = require('react-i18next');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
 
10
- var _excluded = ["ref", "style", "items", "active", "className", "itemRef", "empty", "valueProperty", "labelProperty", "itemProps", "children"];
10
+ var _excluded = ["ref", "style", "items", "active", "className", "itemRef", "empty", "info", "valueProperty", "labelProperty", "itemProps", "children"];
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
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
13
  var Options = function Options(_ref) {
@@ -17,7 +17,8 @@ var Options = function Options(_ref) {
17
17
  active = _ref.active,
18
18
  className = _ref.className,
19
19
  itemRef = _ref.itemRef,
20
- empty = _ref.empty;
20
+ empty = _ref.empty,
21
+ info = _ref.info;
21
22
  _ref.valueProperty;
22
23
  var _ref$labelProperty = _ref.labelProperty,
23
24
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
@@ -26,49 +27,55 @@ var Options = function Options(_ref) {
26
27
  rest = _objectWithoutProperties(_ref, _excluded);
27
28
  return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
28
29
  ref: ref,
29
- className: classNames("bg-base select-none overflow-x-hidden overflow-y-auto", className),
30
+ className: classNames("bg-base select-none flex flex-col", className),
30
31
  style: style
31
32
  }, 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")]
33
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
34
+ className: classNames("overflow-x-hidden overflow-y-auto flex-1"),
35
+ children: [items.length === 0 && (empty !== null && empty !== void 0 ? empty : /*#__PURE__*/jsxRuntime.jsx(core.EmptyContent, {
36
+ message: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
37
+ i18nKey: "form:select.emptyList"
59
38
  })
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);
39
+ })), items.map(function (item, index) {
40
+ var _item$value, _item$labelProperty;
41
+ if (item.___group___) return /*#__PURE__*/jsxRuntime.jsx("p", {
42
+ className: "px-2 py-1 text-muted text-xs sticky -top-px z-2 bg-base border-t",
43
+ children: item.label
44
+ }, index);
45
+ if (item.___create___) return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
46
+ role: "none",
47
+ tabIndex: active === index ? 0 : -1,
48
+ ref: function ref(el) {
49
+ return itemRef(index, el);
50
+ },
51
+ "data-active": active === index ? true : undefined,
52
+ 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")
53
+ }, itemProps(item)), {}, {
54
+ children: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
55
+ i18nKey: "form:select.createOption",
56
+ values: {
57
+ query: (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : item
58
+ },
59
+ components: [/*#__PURE__*/jsxRuntime.jsx("strong", {
60
+ children: "query"
61
+ }, "t0")]
62
+ })
63
+ }), index);
64
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
65
+ role: "none",
66
+ tabIndex: active === index ? 0 : -1,
67
+ ref: function ref(el) {
68
+ return itemRef(index, el);
69
+ },
70
+ "data-active": active === index ? true : undefined,
71
+ 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")
72
+ }, itemProps(item)), {}, {
73
+ children: children(item, (_item$labelProperty = item[labelProperty]) !== null && _item$labelProperty !== void 0 ? _item$labelProperty : item)
74
+ }), index);
75
+ })]
76
+ }), info && /*#__PURE__*/jsxRuntime.jsx("div", {
77
+ className: "px-2 py-1 text-sm bg-dimmed text-muted",
78
+ children: info
72
79
  })]
73
80
  }));
74
81
  };
@@ -12,11 +12,11 @@ var Options = require('./Options.js');
12
12
  var useSelect = require('./useSelect.js');
13
13
  var jsxRuntime = require('react/jsx-runtime');
14
14
 
15
- var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "options", "groupProperty", "labelProperty", "valueProperty", "multiple", "searchable", "allowCreate", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed"];
15
+ var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "options", "defaultOpen", "hideHandle", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "infoProperty", "multiple", "searchable", "allowCreate", "emptyDisplay", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed"];
16
16
  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; }
17
17
  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; }
18
18
  var Select = function Select(_ref) {
19
- var _state$query, _refs$reference$curre;
19
+ var _state$query, _refs$reference$curre, _state$activeItem;
20
20
  var ref = _ref.ref,
21
21
  name = _ref.name,
22
22
  value = _ref.value,
@@ -28,14 +28,19 @@ var Select = function Select(_ref) {
28
28
  autoFocus = _ref.autoFocus,
29
29
  error = _ref.error,
30
30
  options = _ref.options,
31
+ defaultOpen = _ref.defaultOpen,
32
+ hideHandle = _ref.hideHandle,
31
33
  groupProperty = _ref.groupProperty,
32
34
  _ref$labelProperty = _ref.labelProperty,
33
35
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
34
36
  _ref$valueProperty = _ref.valueProperty,
35
37
  valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
38
+ sortProperty = _ref.sortProperty,
39
+ infoProperty = _ref.infoProperty,
36
40
  multiple = _ref.multiple,
37
41
  searchable = _ref.searchable,
38
42
  allowCreate = _ref.allowCreate,
43
+ emptyDisplay = _ref.emptyDisplay,
39
44
  createOption = _ref.createOption,
40
45
  matcher = _ref.matcher,
41
46
  renderer = _ref.renderer,
@@ -48,9 +53,11 @@ var Select = function Select(_ref) {
48
53
  value: value,
49
54
  options: options,
50
55
  multiple: multiple,
56
+ defaultOpen: defaultOpen,
51
57
  groupProperty: groupProperty,
52
58
  labelProperty: labelProperty,
53
59
  valueProperty: valueProperty,
60
+ sortProperty: sortProperty,
54
61
  allowCreate: allowCreate,
55
62
  createOption: createOption,
56
63
  matcher: matcher,
@@ -140,6 +147,9 @@ var Select = function Select(_ref) {
140
147
  return false;
141
148
  } else if (state.query) {
142
149
  handleQuery("");
150
+ evt.preventDefault();
151
+ evt.stopPropagation();
152
+ return false;
143
153
  } else {
144
154
  onEnterPressed === null || onEnterPressed === void 0 || onEnterPressed(evt);
145
155
  }
@@ -188,7 +198,7 @@ var Select = function Select(_ref) {
188
198
  } else if (!utilities.isEmpty(state.value) && !state.query) {
189
199
  var _ref3, _renderer2;
190
200
  return /*#__PURE__*/jsxRuntime.jsx("span", {
191
- className: "self-center pointer-events-none select-none",
201
+ className: "self-center pointer-events-none select-none truncate leading-tight",
192
202
  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
193
203
  });
194
204
  }
@@ -215,7 +225,7 @@ var Select = function Select(_ref) {
215
225
  required: required,
216
226
  error: error,
217
227
  wrapperRef: refs.setReference,
218
- className: state.open ? "!z-[99]" : ""
228
+ className: state.open ? "z-99!" : ""
219
229
  }, rest), {}, {
220
230
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
221
231
  role: "none",
@@ -236,22 +246,21 @@ var Select = function Select(_ref) {
236
246
  size: 1,
237
247
  ref: ref,
238
248
  autoFocus: autoFocus,
239
- className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1", disabled && "cursor-not-allowed pointer-events-none", multiple && "min-w-24"),
249
+ className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1 peer", disabled && "cursor-not-allowed pointer-events-none", multiple ? "min-w-24" : "min-w-2"),
240
250
  placeholder: utilities.isEmpty(state.value) ? placeholder : "",
241
251
  onChange: function onChange(evt) {
242
252
  return handleQuery(evt.target.value);
243
253
  }
244
254
  })]
245
- })), !state.loading && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
255
+ })), !state.loading && !hideHandle && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
246
256
  className: classNames("flex-content p-2 z-0 order-9 text-muted cursor-pointer self-stretch flex items-center h-auto", state.open && "-scale-y-100 pointer-events-none", disabled && "pointer-events-none"),
247
257
  onClick: function onClick() {
248
258
  return !disabled && openDropdown();
249
259
  },
250
- icon: core.CoreIcons.chevronDown
260
+ icon: "icon-[mdi--chevron-down]"
251
261
  }), state.loading && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
252
- animate: "spin",
253
262
  className: classNames("flex-content p-2 z-0 order-9 text-muted pointer-events-none"),
254
- icon: core.CoreIcons.spinner
263
+ icon: "icon-[svg-spinners--eclipse]"
255
264
  }), state.open && !state.loading && /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingPortal, {
256
265
  children: /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingFocusManager, {
257
266
  context: context,
@@ -259,7 +268,7 @@ var Select = function Select(_ref) {
259
268
  visuallyHiddenDismiss: true,
260
269
  children: /*#__PURE__*/jsxRuntime.jsx(Options.Options, _objectSpread(_objectSpread({
261
270
  ref: refs.setFloating,
262
- className: "outline shadow-lg max-h-[40vh] z-[var(--z-popover)]",
271
+ className: "outline shadow-lg max-h-[40vh] z-(--z-popover)",
263
272
  style: _objectSpread({
264
273
  width: (_refs$reference$curre = refs.reference.current) === null || _refs$reference$curre === void 0 ? void 0 : _refs$reference$curre.getBoundingClientRect().width
265
274
  }, floatingStyles)
@@ -270,6 +279,8 @@ var Select = function Select(_ref) {
270
279
  labelProperty: labelProperty,
271
280
  itemRef: setItemRef,
272
281
  itemProps: makeItemProps,
282
+ empty: emptyDisplay,
283
+ info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
273
284
  children: function children(item, label) {
274
285
  var _renderer3;
275
286
  return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
@@ -15,6 +15,10 @@ var useSelect = function useSelect(_ref) {
15
15
  options = _ref$options === void 0 ? utilities.EMPTY_ARRAY : _ref$options,
16
16
  value = _ref.value,
17
17
  autoComplete = _ref.autoComplete,
18
+ _ref$alwaysOpen = _ref.alwaysOpen,
19
+ alwaysOpen = _ref$alwaysOpen === void 0 ? false : _ref$alwaysOpen,
20
+ _ref$defaultOpen = _ref.defaultOpen,
21
+ defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
18
22
  _ref$multiple = _ref.multiple,
19
23
  multiple = _ref$multiple === void 0 ? false : _ref$multiple,
20
24
  _ref$allowCreate = _ref.allowCreate,
@@ -25,6 +29,7 @@ var useSelect = function useSelect(_ref) {
25
29
  valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
26
30
  _ref$labelProperty = _ref.labelProperty,
27
31
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
32
+ sortProperty = _ref.sortProperty,
28
33
  _ref$createOption = _ref.createOption,
29
34
  createOption = _ref$createOption === void 0 ? helpers.makeOption : _ref$createOption,
30
35
  matcher = _ref.matcher,
@@ -63,13 +68,16 @@ var useSelect = function useSelect(_ref) {
63
68
  if (action.type === "close") {
64
69
  return _objectSpread(_objectSpread({}, state), {}, {
65
70
  activeIndex: null,
71
+ activeItem: null,
66
72
  open: false
67
73
  });
68
74
  }
69
75
  if (action.type === "active" && state.open) {
76
+ var _action$index;
70
77
  if (autoComplete && action.index !== null) state.query = state.items[action.index];
71
78
  return _objectSpread(_objectSpread({}, state), {}, {
72
- activeIndex: action.index
79
+ activeIndex: action.index,
80
+ activeItem: state.items[(_action$index = action.index) !== null && _action$index !== void 0 ? _action$index : -1]
73
81
  });
74
82
  }
75
83
  if (action.type === "setValue") {
@@ -83,6 +91,7 @@ var useSelect = function useSelect(_ref) {
83
91
  var newState = _objectSpread(_objectSpread({}, state), {}, {
84
92
  value: state.emptyValue,
85
93
  activeIndex: null,
94
+ activeItem: null,
86
95
  selectedIndex: autoComplete ? state.multiple ? (_action$value = action.value) === null || _action$value === void 0 ? void 0 : _action$value.length : 0 : state.items.indexOf(action.value)
87
96
  });
88
97
  if (action.value !== undefined) {
@@ -100,16 +109,16 @@ var useSelect = function useSelect(_ref) {
100
109
  newState.value = action.value;
101
110
  }
102
111
  }
103
- if (!state.multiple) newState.open = false;
112
+ if (!state.multiple) newState.open = alwaysOpen;
104
113
  fireChange(newState.value);
105
114
  return newState;
106
115
  }
107
116
  if (action.type === "removeItem") {
108
117
  var newValue = state.value;
109
118
  if (state.multiple) {
110
- var _action$index;
119
+ var _action$index2;
111
120
  newValue = _toConsumableArray(newValue);
112
- newValue.splice((_action$index = action.index) !== null && _action$index !== void 0 ? _action$index : -1, 1);
121
+ newValue.splice((_action$index2 = action.index) !== null && _action$index2 !== void 0 ? _action$index2 : -1, 1);
113
122
  } else {
114
123
  newValue = "";
115
124
  }
@@ -133,13 +142,14 @@ var useSelect = function useSelect(_ref) {
133
142
  if (autoComplete && action.query !== undefined) {
134
143
  optionList = utilities.dedupe([action.query].concat(_toConsumableArray(optionList)));
135
144
  }
145
+ if (sortProperty) optionList = optionList.sort(utilities.compareValues("asc", sortProperty));
136
146
  var grouped = utilities.groupBy(optionList, groupProperty, "");
137
147
  if (action.open) _newState.open = true;
138
148
  _newState.items = [];
139
149
  // add new item if allowCreate
140
150
  if (allowCreate && action.query) _newState.items.push({
141
151
  ___create___: true,
142
- value: createOption(action.query)
152
+ value: action.query
143
153
  });
144
154
  Object.entries(grouped).forEach(function (_ref2) {
145
155
  var _newState$items;
@@ -169,9 +179,10 @@ var useSelect = function useSelect(_ref) {
169
179
  }, {
170
180
  multiple: multiple,
171
181
  emptyValue: emptyValue,
172
- open: false,
182
+ open: alwaysOpen || defaultOpen,
173
183
  loading: false,
174
184
  activeIndex: null,
185
+ activeItem: null,
175
186
  selectedIndex: null,
176
187
  value: emptyValue,
177
188
  // filter
@@ -201,7 +212,7 @@ var useSelect = function useSelect(_ref) {
201
212
  });
202
213
  dispatch({
203
214
  type: "setValue",
204
- value: (_ref4 = hasValue !== null && hasValue !== void 0 ? hasValue : newOption) !== null && _ref4 !== void 0 ? _ref4 : ""
215
+ value: (_ref4 = hasValue !== null && hasValue !== void 0 ? hasValue : newOption) !== null && _ref4 !== void 0 ? _ref4 : deferred
205
216
  });
206
217
  }
207
218
  if (multiple) {
@@ -211,12 +222,12 @@ var useSelect = function useSelect(_ref) {
211
222
  var newOption = (allowCreate || autoComplete) && item ? createOption(item) : undefined;
212
223
  var hasValue = options.find(function (opt) {
213
224
  var _opt$valueProperty2;
214
- return ((_opt$valueProperty2 = opt[valueProperty]) !== null && _opt$valueProperty2 !== void 0 ? _opt$valueProperty2 : opt) === deferred;
225
+ return ((_opt$valueProperty2 = opt[valueProperty]) !== null && _opt$valueProperty2 !== void 0 ? _opt$valueProperty2 : opt) === item;
215
226
  });
216
227
  if (!hasValue && newOption) {
217
228
  optionsRef.current.push(newOption);
218
229
  }
219
- return (_ref5 = hasValue !== null && hasValue !== void 0 ? hasValue : newOption) !== null && _ref5 !== void 0 ? _ref5 : "";
230
+ return (_ref5 = hasValue !== null && hasValue !== void 0 ? hasValue : newOption) !== null && _ref5 !== void 0 ? _ref5 : item;
220
231
  });
221
232
  optionsRef.current = [].concat(_toConsumableArray(optionsRef.current), _toConsumableArray(options !== null && options !== void 0 ? options : []));
222
233
  dispatch({
@@ -246,7 +257,7 @@ var useSelect = function useSelect(_ref) {
246
257
  setActive: true
247
258
  });
248
259
  });
249
- }, [onQuery]);
260
+ }, [onQuery], 300);
250
261
 
251
262
  // handlers
252
263
  var handleQuery = react.useCallback(function (query) {
@@ -316,7 +327,7 @@ var useSelect = function useSelect(_ref) {
316
327
  });
317
328
  }, []);
318
329
  var setActiveIndex = react.useCallback(function (index) {
319
- dispatch({
330
+ index && index > -1 && dispatch({
320
331
  type: "active",
321
332
  index: index
322
333
  });