@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
@@ -1,56 +1,59 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
- var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
4
  var react$1 = require('@floating-ui/react');
6
5
  var core = require('@react-fabric/core');
7
6
  var utilities = require('@react-fabric/utilities');
8
- var classNames = require('classnames');
9
7
  var react = require('react');
10
8
  var InputWrapper = require('../internal/InputWrapper.js');
9
+ var getProps = require('../utils/getProps.js');
11
10
  var Options = require('./Options.js');
12
11
  var useSelect = require('./useSelect.js');
13
12
  var jsxRuntime = require('react/jsx-runtime');
14
13
 
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"];
16
14
  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
- 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
- var Select = function Select(_ref) {
19
- var _state$query, _refs$reference$curre;
20
- var ref = _ref.ref,
21
- name = _ref.name,
22
- value = _ref.value,
23
- invalid = _ref.invalid,
24
- readOnly = _ref.readOnly,
25
- disabled = _ref.disabled,
26
- required = _ref.required,
27
- placeholder = _ref.placeholder,
28
- autoFocus = _ref.autoFocus,
29
- error = _ref.error,
30
- options = _ref.options,
31
- groupProperty = _ref.groupProperty,
32
- _ref$labelProperty = _ref.labelProperty,
33
- labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
34
- _ref$valueProperty = _ref.valueProperty,
35
- valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
36
- multiple = _ref.multiple,
37
- searchable = _ref.searchable,
38
- allowCreate = _ref.allowCreate,
39
- createOption = _ref.createOption,
40
- matcher = _ref.matcher,
41
- renderer = _ref.renderer,
42
- onQuery = _ref.onQuery,
43
- onChange = _ref.onChange,
44
- onSelect = _ref.onSelect,
45
- onEnterPressed = _ref.onEnterPressed,
46
- rest = _objectWithoutProperties(_ref, _excluded);
15
+ 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; }
16
+ function Select(props) {
17
+ var _state$query, _refs$domReference$cu3, _refs$domReference$cu4, _refs$reference$curre;
18
+ var ref = props.ref,
19
+ name = props.name,
20
+ value = props.value,
21
+ invalid = props.invalid,
22
+ readOnly = props.readOnly,
23
+ disabled = props.disabled,
24
+ placeholder = props.placeholder,
25
+ autoFocus = props.autoFocus,
26
+ options = props.options,
27
+ defaultOpen = props.defaultOpen,
28
+ hideHandle = props.hideHandle,
29
+ groupProperty = props.groupProperty,
30
+ _props$labelProperty = props.labelProperty,
31
+ labelProperty = _props$labelProperty === void 0 ? "label" : _props$labelProperty,
32
+ _props$valueProperty = props.valueProperty,
33
+ valueProperty = _props$valueProperty === void 0 ? "value" : _props$valueProperty,
34
+ sortProperty = props.sortProperty,
35
+ infoProperty = props.infoProperty,
36
+ multiple = props.multiple,
37
+ searchable = props.searchable,
38
+ allowClear = props.allowClear,
39
+ allowCreate = props.allowCreate,
40
+ emptyDisplay = props.emptyDisplay,
41
+ createOption = props.createOption,
42
+ matcher = props.matcher,
43
+ renderer = props.renderer,
44
+ onQuery = props.onQuery,
45
+ onChange = props.onChange,
46
+ onSelect = props.onSelect,
47
+ onEnterPressed = props.onEnterPressed;
47
48
  var _useSelect = useSelect.useSelect({
48
49
  value: value,
49
50
  options: options,
50
51
  multiple: multiple,
52
+ defaultOpen: defaultOpen,
51
53
  groupProperty: groupProperty,
52
54
  labelProperty: labelProperty,
53
55
  valueProperty: valueProperty,
56
+ sortProperty: sortProperty,
54
57
  allowCreate: allowCreate,
55
58
  createOption: createOption,
56
59
  matcher: matcher,
@@ -68,11 +71,11 @@ var Select = function Select(_ref) {
68
71
  handleQuery = _useSelect.handleQuery,
69
72
  setItemRef = _useSelect.setItemRef,
70
73
  setActiveIndex = _useSelect.setActiveIndex;
71
- var dropdownKey = react.useId();
74
+ var dropdownKeyId = react.useId();
72
75
  var _useFloating = react$1.useFloating({
73
76
  open: state.open,
74
- onOpenChange: function onOpenChange(open, evt, reason) {
75
- !open && (listRef.current = []);
77
+ onOpenChange: function onOpenChange(open) {
78
+ if (!open) listRef.current = [];
76
79
  setOpen(open);
77
80
  },
78
81
  strategy: "fixed",
@@ -84,7 +87,8 @@ var Select = function Select(_ref) {
84
87
  }),
85
88
  context = _useFloating.context,
86
89
  floatingStyles = _useFloating.floatingStyles,
87
- refs = _useFloating.refs;
90
+ refs = _useFloating.refs,
91
+ placement = _useFloating.placement;
88
92
 
89
93
  // floating interactions
90
94
  var click = react$1.useClick(context, {});
@@ -110,8 +114,8 @@ var Select = function Select(_ref) {
110
114
  });
111
115
  },
112
116
  onMatch: function onMatch(index) {
113
- state.open && setActiveIndex(index);
114
- !searchable && !multiple && !state.open && handleChange(listContentRef.current[index]);
117
+ if (state.open) setActiveIndex(index);
118
+ if (!searchable && !multiple && !state.open) handleChange(listContentRef.current[index]);
115
119
  }
116
120
  });
117
121
  var _useInteractions = react$1.useInteractions([dismiss, searchable ? undefined : click, navigation, typeahead]),
@@ -123,13 +127,13 @@ var Select = function Select(_ref) {
123
127
  return _objectSpread(_objectSpread({}, props), {}, {
124
128
  onBlur: function onBlur(evt) {
125
129
  var _evt$relatedTarget;
126
- if ((_evt$relatedTarget = evt.relatedTarget) !== null && _evt$relatedTarget !== void 0 && _evt$relatedTarget.closest("[data-select-dropdown=\"".concat(dropdownKey, "\"]"))) {
130
+ if ((_evt$relatedTarget = evt.relatedTarget) !== null && _evt$relatedTarget !== void 0 && _evt$relatedTarget.closest("[data-select-dropdown=\"".concat(dropdownKeyId, "\"]"))) {
127
131
  var _refs$domReference$cu;
128
132
  (_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();
129
133
  return;
130
134
  }
131
135
  handleQuery("");
132
- setOpen(false);
136
+ // setOpen(false);
133
137
  },
134
138
  onKeyDown: function onKeyDown(evt) {
135
139
  if (evt.key === "Enter") {
@@ -140,34 +144,40 @@ var Select = function Select(_ref) {
140
144
  return false;
141
145
  } else if (state.query) {
142
146
  handleQuery("");
147
+ evt.preventDefault();
148
+ evt.stopPropagation();
149
+ return false;
143
150
  } else {
144
151
  onEnterPressed === null || onEnterPressed === void 0 || onEnterPressed(evt);
145
152
  }
146
153
  } else if (evt.key === "Tab" && state.activeIndex !== null) {
147
154
  handleChange(listContentRef.current[state.activeIndex]);
148
155
  } else if (evt.key === "Backspace") {
149
- !state.query && handleRemove();
156
+ if (!state.query) handleRemove();
150
157
  } else if (!searchable || ["ArrowUp", "ArrowDown"].includes(evt.key)) {
151
158
  if (["ArrowUp", "ArrowDown"].includes(evt.key) && state.activeIndex === null) {
152
159
  setActiveIndex(state.selectedIndex);
153
160
  }
154
161
  setTimeout(function () {
155
162
  var _props$onKeyDown;
163
+ // @ts-expect-error ignore
156
164
  (_props$onKeyDown = props.onKeyDown) === null || _props$onKeyDown === void 0 || _props$onKeyDown.call(props, evt);
157
165
  }, 50);
158
166
  }
159
167
  }
160
168
  });
161
- }, [getReferenceProps, onEnterPressed, handleQuery, refs, state.query, state.activeIndex]);
169
+ }, [getReferenceProps, dropdownKeyId, handleQuery, refs.domReference, state.activeIndex, state.query, state.selectedIndex, searchable, handleChange, listContentRef, onEnterPressed, handleRemove, setActiveIndex]);
162
170
  var floatingProps = react.useMemo(function () {
163
171
  return getFloatingProps({
164
- "data-select-dropdown": dropdownKey
172
+ // @ts-expect-error ignore
173
+ "data-select-dropdown": dropdownKeyId
165
174
  });
166
- }, [getFloatingProps]);
175
+ }, [dropdownKeyId, getFloatingProps]);
167
176
  var makeItemProps = react.useCallback(function (item) {
168
177
  var _state$value, _state$value$includes;
169
178
  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;
170
179
  return getItemProps({
180
+ // @ts-expect-error ignore
171
181
  "data-selected": selected ? true : undefined,
172
182
  onClick: function onClick() {
173
183
  handleChange(item);
@@ -177,50 +187,73 @@ var Select = function Select(_ref) {
177
187
  var displayValue = react.useMemo(function () {
178
188
  if (utilities.isArray(state.value)) {
179
189
  return state.value.map(function (item, index) {
180
- var _ref2, _renderer;
181
- return /*#__PURE__*/jsxRuntime.jsx(core.Chip, {
182
- onRemove: function onRemove() {
183
- return handleRemove(index);
184
- },
185
- 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
186
- }, index);
190
+ var _ref, _renderer;
191
+ return (
192
+ /*#__PURE__*/
193
+ // eslint-disable-next-line @eslint-react/no-array-index-key
194
+ jsxRuntime.jsx(core.Chip, {
195
+ onRemove: function onRemove() {
196
+ return handleRemove(index);
197
+ },
198
+ children: (_ref = (_renderer = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer !== void 0 ? _renderer : item[labelProperty]) !== null && _ref !== void 0 ? _ref : item
199
+ }, index)
200
+ );
187
201
  });
188
202
  } else if (!utilities.isEmpty(state.value) && !state.query) {
189
- var _ref3, _renderer2;
203
+ var _ref2, _renderer2;
190
204
  return /*#__PURE__*/jsxRuntime.jsx("span", {
191
- className: "self-center pointer-events-none select-none",
192
- 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
205
+ className: "self-center pointer-events-none select-none truncate leading-tight",
206
+ children: (_ref2 = (_renderer2 = renderer === null || renderer === void 0 ? void 0 : renderer(state.value)) !== null && _renderer2 !== void 0 ? _renderer2 : state.value[labelProperty]) !== null && _ref2 !== void 0 ? _ref2 : state.value
193
207
  });
194
208
  }
195
- }, [state.value, state.query, placeholder, renderer]);
209
+ }, [state.value, state.query, renderer, labelProperty, handleRemove]);
196
210
  var openDropdown = react.useCallback(function () {
197
211
  var _refs$domReference$cu2;
198
212
  setOpen(true);
199
213
  (_refs$domReference$cu2 = refs.domReference.current) === null || _refs$domReference$cu2 === void 0 || (_refs$domReference$cu2 = _refs$domReference$cu2.querySelector("input")) === null || _refs$domReference$cu2 === void 0 || _refs$domReference$cu2.focus();
200
- }, []);
214
+ }, [refs.domReference, setOpen]);
201
215
  react.useLayoutEffect(function () {
202
- state.open && setTimeout(function () {
203
- var _listRef$current$stat;
204
- state.selectedIndex && ((_listRef$current$stat = listRef.current[state.selectedIndex]) === null || _listRef$current$stat === void 0 ? void 0 : _listRef$current$stat.scrollIntoView({
205
- block: "center"
206
- }));
207
- }, 100);
208
- }, [state.open]);
216
+ if (state.open) {
217
+ var tmr = setTimeout(function () {
218
+ var _listRef$current$stat;
219
+ if (state.selectedIndex) (_listRef$current$stat = listRef.current[state.selectedIndex]) === null || _listRef$current$stat === void 0 || _listRef$current$stat.scrollIntoView({
220
+ block: "nearest"
221
+ });
222
+ }, 100);
223
+ return function () {
224
+ clearTimeout(tmr);
225
+ };
226
+ }
227
+ }, [listRef, state.open, state.selectedIndex]);
209
228
  return /*#__PURE__*/jsxRuntime.jsxs(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
210
- showClear: !utilities.isEmpty(state.value),
229
+ showClear: allowClear && !utilities.isEmpty(state.value),
211
230
  onClear: handleChange,
212
- invalid: invalid,
213
- readOnly: readOnly,
214
- disabled: disabled,
215
- required: required,
216
- error: error,
217
- wrapperRef: refs.setReference,
218
- className: state.open ? "!z-[99]" : ""
219
- }, rest), {}, {
231
+ isOpen: state.open,
232
+ ref: function ref(el) {
233
+ return refs.setReference(el);
234
+ },
235
+ className: utilities.cn(state.open ? "z-99!" : "", "rounded-capped", state.open && (placement === "top" ? "rounded-t-none" : "rounded-b-none"))
236
+ }, getProps.getWrapperProps(props)), {}, {
237
+ actionButton: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
238
+ children: [!state.loading && !hideHandle && /*#__PURE__*/jsxRuntime.jsx("button", {
239
+ type: "button",
240
+ className: "size-fit leading-0 cursor-pointer",
241
+ onClick: function onClick() {
242
+ return !disabled && openDropdown();
243
+ },
244
+ children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
245
+ className: utilities.cn("flex-content py-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"),
246
+ icon: "icon-[mdi--chevron-down]"
247
+ })
248
+ }), state.loading && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
249
+ className: utilities.cn("flex-content p-2 z-0 order-9 text-muted pointer-events-none"),
250
+ icon: "icon-[svg-spinners--eclipse]"
251
+ })]
252
+ }),
220
253
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
221
254
  role: "none",
222
255
  "data-select-display": "true",
223
- 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")
256
+ className: utilities.cn("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")
224
257
  }, referenceProps), {}, {
225
258
  onMouseUp: function onMouseUp(e) {
226
259
  var _e$currentTarget$quer;
@@ -235,31 +268,26 @@ var Select = function Select(_ref) {
235
268
  name: name,
236
269
  size: 1,
237
270
  ref: ref,
271
+ autoComplete: "off",
238
272
  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"),
273
+ className: utilities.cn("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
274
  placeholder: utilities.isEmpty(state.value) ? placeholder : "",
241
275
  onChange: function onChange(evt) {
242
276
  return handleQuery(evt.target.value);
243
277
  }
244
278
  })]
245
- })), !state.loading && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
246
- 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
- onClick: function onClick() {
248
- return !disabled && openDropdown();
249
- },
250
- icon: core.CoreIcons.chevronDown
251
- }), state.loading && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
252
- animate: "spin",
253
- className: classNames("flex-content p-2 z-0 order-9 text-muted pointer-events-none"),
254
- icon: core.CoreIcons.spinner
255
- }), state.open && !state.loading && /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingPortal, {
279
+ })), state.open && !state.loading && /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingPortal, {
280
+ root: (_refs$domReference$cu3 = (_refs$domReference$cu4 = refs.domReference.current) === null || _refs$domReference$cu4 === void 0 ? void 0 : _refs$domReference$cu4.closest(".theme-base")) !== null && _refs$domReference$cu3 !== void 0 ? _refs$domReference$cu3 : undefined,
256
281
  children: /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingFocusManager, {
257
282
  context: context,
258
283
  initialFocus: -1,
259
284
  visuallyHiddenDismiss: true,
285
+ closeOnFocusOut: true,
260
286
  children: /*#__PURE__*/jsxRuntime.jsx(Options.Options, _objectSpread(_objectSpread({
261
- ref: refs.setFloating,
262
- className: "outline shadow-lg max-h-[40vh] z-[var(--z-popover)]",
287
+ ref: function ref(el) {
288
+ return refs.setFloating(el);
289
+ },
290
+ className: utilities.cn("outline rounded-capped shadow-lg max-h-[40vh] z-(--z-popover)", state.open && (placement === "top" ? "rounded-b-none" : "rounded-t-none")),
263
291
  style: _objectSpread({
264
292
  width: (_refs$reference$curre = refs.reference.current) === null || _refs$reference$curre === void 0 ? void 0 : _refs$reference$curre.getBoundingClientRect().width
265
293
  }, floatingStyles)
@@ -270,6 +298,8 @@ var Select = function Select(_ref) {
270
298
  labelProperty: labelProperty,
271
299
  itemRef: setItemRef,
272
300
  itemProps: makeItemProps,
301
+ empty: emptyDisplay,
302
+ info: utilities.getByPath(state.activeItem, infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"),
273
303
  children: function children(item, label) {
274
304
  var _renderer3;
275
305
  return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
@@ -278,6 +308,6 @@ var Select = function Select(_ref) {
278
308
  })
279
309
  })]
280
310
  }));
281
- };
311
+ }
282
312
 
283
313
  exports.Select = Select;
@@ -25,17 +25,17 @@ var utilities = require('@react-fabric/utilities');
25
25
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
26
  */
27
27
 
28
- var makeOption = function makeOption(query) {
28
+ function makeOption(query) {
29
29
  return query;
30
- };
31
- var getSelectedValue = function getSelectedValue(value, emptyValue) {
30
+ }
31
+ function getSelectedValue(value, emptyValue) {
32
32
  var _ref, _value$valueProperty;
33
33
  var valueProperty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
34
34
  return utilities.isArray(value) ? value.map(function (val) {
35
35
  var _val$valueProperty;
36
36
  return (_val$valueProperty = val[valueProperty]) !== null && _val$valueProperty !== void 0 ? _val$valueProperty : val;
37
- }) : (_ref = (_value$valueProperty = value === null || value === void 0 ? void 0 : value[valueProperty]) !== null && _value$valueProperty !== void 0 ? _value$valueProperty : value) !== null && _ref !== void 0 ? _ref : emptyValue;
38
- };
37
+ }).filter(Boolean) : (_ref = (_value$valueProperty = value === null || value === void 0 ? void 0 : value[valueProperty]) !== null && _value$valueProperty !== void 0 ? _value$valueProperty : value) !== null && _ref !== void 0 ? _ref : emptyValue;
38
+ }
39
39
 
40
40
  exports.getSelectedValue = getSelectedValue;
41
41
  exports.makeOption = makeOption;