@react-fabric/form 1.0.0-beta.8 → 1.0.1

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,66 +1,60 @@
1
1
  'use client';
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
4
  import { useFloating, autoUpdate, useListNavigation, useTypeahead, useInteractions, FloatingFocusManager } from '@floating-ui/react';
6
5
  import { Chip } from '@react-fabric/core';
7
- import { isArray, isEmpty } from '@react-fabric/utilities';
8
- import classNames from 'classnames';
9
- import { useMemo, Fragment, useId, useCallback } from 'react';
10
- import { FieldWrapper } from '../internal/FieldWrapper.js';
6
+ import { isArray, isEmpty, cn, getByPath } from '@react-fabric/utilities';
7
+ import { useId, useMemo, useCallback, useLayoutEffect } from 'react';
11
8
  import { InputWrapper } from '../internal/InputWrapper.js';
9
+ import { getWrapperProps } from '../utils/getProps.js';
12
10
  import { Options } from './Options.js';
13
11
  import { useSelect } from './useSelect.js';
14
- import { jsx, jsxs } from 'react/jsx-runtime';
12
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
15
13
 
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
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; }
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) {
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 List(props) {
20
17
  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 = useMemo(function () {
52
- return isInner ? Fragment : FieldWrapper;
53
- }, [isInner]);
54
- var wrapperProps = useMemo(function () {
55
- return isInner ? {} : _objectSpread({}, rest);
56
- }, [isInner, rest]);
18
+ var ref = props.ref,
19
+ name = props.name,
20
+ value = props.value,
21
+ readOnly = props.readOnly,
22
+ disabled = props.disabled,
23
+ placeholder = props.placeholder,
24
+ autoFocus = props.autoFocus,
25
+ options = props.options,
26
+ height = props.height,
27
+ groupProperty = props.groupProperty,
28
+ _props$labelProperty = props.labelProperty,
29
+ labelProperty = _props$labelProperty === void 0 ? "label" : _props$labelProperty,
30
+ _props$valueProperty = props.valueProperty,
31
+ valueProperty = _props$valueProperty === void 0 ? "value" : _props$valueProperty,
32
+ infoProperty = props.infoProperty,
33
+ sortProperty = props.sortProperty,
34
+ multiple = props.multiple,
35
+ allowCreate = props.allowCreate,
36
+ allowClear = props.allowClear,
37
+ searchable = props.searchable,
38
+ createOption = props.createOption,
39
+ matcher = props.matcher,
40
+ renderer = props.renderer,
41
+ onQuery = props.onQuery,
42
+ onChange = props.onChange,
43
+ onSelect = props.onSelect,
44
+ onEnterPressed = props.onEnterPressed,
45
+ emptyDisplay = props.emptyDisplay,
46
+ invalid = props.invalid,
47
+ isInner = props["data-inner"],
48
+ hideSelected = props["data-hide-selected"];
57
49
  var _useSelect = useSelect({
58
50
  value: value,
59
51
  options: options,
60
52
  multiple: multiple,
53
+ alwaysOpen: true,
61
54
  groupProperty: groupProperty,
62
55
  labelProperty: labelProperty,
63
56
  valueProperty: valueProperty,
57
+ sortProperty: sortProperty,
64
58
  allowCreate: allowCreate,
65
59
  createOption: createOption,
66
60
  matcher: matcher,
@@ -76,8 +70,9 @@ var List = function List(_ref) {
76
70
  handleRemove = _useSelect.handleRemove,
77
71
  handleQuery = _useSelect.handleQuery,
78
72
  setItemRef = _useSelect.setItemRef,
73
+ clearActiveIndex = _useSelect.clearActiveIndex,
79
74
  setActiveIndex = _useSelect.setActiveIndex;
80
- var dropdownKey = useId();
75
+ var dropdownKeyId = useId();
81
76
  var _useFloating = useFloating({
82
77
  open: true,
83
78
  placement: "bottom",
@@ -107,7 +102,7 @@ var List = function List(_ref) {
107
102
  });
108
103
  },
109
104
  onMatch: function onMatch(index) {
110
- state.open && setActiveIndex(index);
105
+ if (state.open) setActiveIndex(index);
111
106
  }
112
107
  });
113
108
  var _useInteractions = useInteractions([navigation, typeahead]),
@@ -119,7 +114,7 @@ var List = function List(_ref) {
119
114
  return _objectSpread(_objectSpread({}, props), {}, {
120
115
  onBlur: function onBlur(evt) {
121
116
  var _evt$relatedTarget;
122
- if ((_evt$relatedTarget = evt.relatedTarget) !== null && _evt$relatedTarget !== void 0 && _evt$relatedTarget.closest("[data-select-dropdown=\"".concat(dropdownKey, "\"]"))) {
117
+ if ((_evt$relatedTarget = evt.relatedTarget) !== null && _evt$relatedTarget !== void 0 && _evt$relatedTarget.closest("[data-select-dropdown=\"".concat(dropdownKeyId, "\"]"))) {
123
118
  var _refs$domReference$cu;
124
119
  (_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
120
  return;
@@ -137,24 +132,26 @@ var List = function List(_ref) {
137
132
  onEnterPressed === null || onEnterPressed === void 0 || onEnterPressed(evt);
138
133
  }
139
134
  } 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);
135
+ if (!state.query) handleRemove();
136
+ } else if (!searchable || ["ArrowUp", "ArrowDown"].includes(evt.key)) {
137
+ if (["ArrowUp", "ArrowDown"].includes(evt.key) && state.activeIndex === null) {
138
+ var _state$selectedIndex;
139
+ setActiveIndex((_state$selectedIndex = state.selectedIndex) !== null && _state$selectedIndex !== void 0 ? _state$selectedIndex : 0);
144
140
  }
145
141
  setTimeout(function () {
146
142
  var _props$onKeyDown;
143
+ // @ts-expect-error ignore
147
144
  (_props$onKeyDown = props.onKeyDown) === null || _props$onKeyDown === void 0 || _props$onKeyDown.call(props, evt);
148
145
  }, 50);
149
146
  }
150
147
  }
151
148
  });
152
- }, [getReferenceProps, onEnterPressed, handleQuery, refs, state.query, state.activeIndex]);
149
+ }, [getReferenceProps, dropdownKeyId, handleQuery, refs.domReference, searchable, state.activeIndex, state.query, state.selectedIndex, handleChange, listContentRef, onEnterPressed, handleRemove, setActiveIndex]);
153
150
  var floatingProps = useMemo(function () {
154
151
  return getFloatingProps({
155
- "data-select-dropdown": dropdownKey
152
+ "data-select-dropdown": dropdownKeyId
156
153
  });
157
- }, [getFloatingProps]);
154
+ }, [dropdownKeyId, getFloatingProps]);
158
155
  var makeItemProps = useCallback(function (item) {
159
156
  var _state$value, _state$value$includes;
160
157
  var selected = 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,72 +167,108 @@ var List = function List(_ref) {
170
167
  var displayValue = useMemo(function () {
171
168
  if (isArray(state.value)) {
172
169
  return state.value.map(function (item, index) {
173
- var _ref2, _renderer;
174
- return /*#__PURE__*/jsx(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);
170
+ var _ref, _renderer;
171
+ return (
172
+ /*#__PURE__*/
173
+ // eslint-disable-next-line @eslint-react/no-array-index-key
174
+ jsx(Chip, {
175
+ onRemove: function onRemove() {
176
+ return handleRemove(index);
177
+ },
178
+ 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
179
+ }, index)
180
+ );
180
181
  });
181
182
  } else if (!isEmpty(state.value) && !state.query) {
182
- var _ref3, _renderer2;
183
+ var _ref2, _renderer2;
183
184
  return /*#__PURE__*/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
+ className: "self-center pointer-events-none select-none truncate leading-tight",
186
+ 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
185
187
  });
186
188
  }
187
- }, [state.value, state.query, placeholder, renderer]);
188
- return /*#__PURE__*/jsxs(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
189
- children: [/*#__PURE__*/jsx(InputWrapper, {
190
- showClear: !isEmpty(state.value),
189
+ }, [state.value, state.query, renderer, labelProperty, handleRemove]);
190
+ useLayoutEffect(function () {
191
+ if (state.open) {
192
+ var tmr = setTimeout(function () {
193
+ var _listRef$current$stat;
194
+ if (state.selectedIndex) (_listRef$current$stat = listRef.current[state.selectedIndex]) === null || _listRef$current$stat === void 0 || _listRef$current$stat.scrollIntoView({
195
+ block: "nearest"
196
+ });
197
+ }, 100);
198
+ return function () {
199
+ clearTimeout(tmr);
200
+ };
201
+ }
202
+ }, [listRef, state.open, state.selectedIndex]);
203
+ return /*#__PURE__*/jsxs(Fragment, {
204
+ children: [/*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
205
+ showClear: allowClear && !isEmpty(state.value),
191
206
  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__*/jsxs("div", {
207
+ ref: function ref(el) {
208
+ return refs.setReference(el);
209
+ },
210
+ className: "z-1 rounded-capped rounded-b-none outline"
211
+ }, getWrapperProps(props)), {}, {
212
+ borderless: !!isInner,
213
+ children: /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
214
+ role: "none",
201
215
  "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__*/jsx("input", _objectSpread(_objectSpread({
216
+ className: 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")
217
+ }, referenceProps), {}, {
218
+ onMouseUp: function onMouseUp(e) {
219
+ var _e$currentTarget$quer;
220
+ return (_e$currentTarget$quer = e.currentTarget.querySelector("input")) === null || _e$currentTarget$quer === void 0 ? void 0 : _e$currentTarget$quer.focus();
221
+ },
222
+ children: [!hideSelected && displayValue, /*#__PURE__*/jsx("input", {
223
+ readOnly: !searchable || readOnly,
204
224
  disabled: disabled,
205
225
  value: (_state$query = state.query) !== null && _state$query !== void 0 ? _state$query : "",
206
226
  "aria-invalid": invalid,
207
227
  "data-testid": name,
208
228
  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: isEmpty(state.value) ? placeholder : ""
211
- }, referenceProps), {}, {
229
+ size: 1,
230
+ ref: ref,
231
+ autoComplete: "off",
232
+ autoFocus: autoFocus,
233
+ className: cn("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"),
234
+ placeholder: !hideSelected && !isEmpty(state.value) ? "" : placeholder,
212
235
  onChange: function onChange(evt) {
213
236
  return handleQuery(evt.target.value);
214
237
  }
215
- }))]
216
- })
217
- }), /*#__PURE__*/jsx(FloatingFocusManager, {
238
+ })]
239
+ }))
240
+ })), /*#__PURE__*/jsx(FloatingFocusManager, {
218
241
  context: context,
219
242
  initialFocus: -1,
220
243
  visuallyHiddenDismiss: true,
244
+ closeOnFocusOut: true,
221
245
  children: /*#__PURE__*/jsx(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"),
246
+ ref: function ref(el) {
247
+ return refs.setFloating(el);
248
+ },
249
+ onMouseOut: function onMouseOut() {
250
+ return clearActiveIndex();
251
+ },
252
+ className: cn("max-h-96 z-0 rounded-capped! rounded-t-none! outline peer-focus-within:outline-primary-500", disabled && "pointer-events-none opacity-65"),
224
253
  style: {
225
254
  height: height
226
255
  }
227
256
  }, floatingProps), {}, {
228
257
  items: state.items,
229
258
  active: state.activeIndex,
259
+ valueProperty: valueProperty,
260
+ labelProperty: labelProperty,
230
261
  itemRef: setItemRef,
231
262
  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;
263
+ empty: emptyDisplay,
264
+ info: getByPath(state.activeItem, infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"),
265
+ children: function children(item, label) {
266
+ var _renderer3;
267
+ return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
235
268
  }
236
269
  }))
237
270
  })]
238
- }));
239
- };
271
+ });
272
+ }
240
273
 
241
274
  export { List };
@@ -1,76 +1,80 @@
1
1
  'use client';
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
4
  import { EmptyContent } from '@react-fabric/core';
6
- import classNames from 'classnames';
5
+ import { cn, getByPath } from '@react-fabric/utilities';
7
6
  import { Trans } from 'react-i18next';
8
7
  import { jsxs, jsx } from 'react/jsx-runtime';
9
8
 
10
- var _excluded = ["ref", "style", "items", "active", "className", "itemRef", "empty", "valueProperty", "labelProperty", "itemProps", "children"];
11
9
  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) {
10
+ 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; }
11
+ function Options(_ref) {
14
12
  var ref = _ref.ref,
15
13
  style = _ref.style,
16
14
  items = _ref.items,
17
15
  active = _ref.active,
18
16
  className = _ref.className,
19
17
  itemRef = _ref.itemRef,
20
- empty = _ref.empty;
21
- _ref.valueProperty;
22
- var _ref$labelProperty = _ref.labelProperty,
18
+ empty = _ref.empty,
19
+ info = _ref.info,
20
+ _ref$labelProperty = _ref.labelProperty,
23
21
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
24
22
  itemProps = _ref.itemProps,
25
23
  children = _ref.children,
26
- rest = _objectWithoutProperties(_ref, _excluded);
27
- return /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
24
+ onMouseOut = _ref.onMouseOut;
25
+ return /*#__PURE__*/jsxs("div", {
28
26
  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__*/jsx(EmptyContent, {
33
- message: /*#__PURE__*/jsx(Trans, {
34
- i18nKey: "form:select.emptyList"
35
- })
36
- })), items.map(function (item, index) {
37
- var _item$labelProperty;
38
- if (item.___group___) return /*#__PURE__*/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__*/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__*/jsx(Trans, {
52
- i18nKey: "form:select.createOption",
53
- values: {
54
- query: item.value
55
- },
56
- components: [/*#__PURE__*/jsx("strong", {
57
- children: "query"
58
- }, "t0")]
27
+ className: cn("bg-default select-none flex flex-col overflow-hidden", className),
28
+ style: style,
29
+ onMouseLeave: onMouseOut,
30
+ children: [/*#__PURE__*/jsxs("div", {
31
+ className: cn("overflow-x-hidden overflow-y-auto flex-1"),
32
+ children: [items.length === 0 && (empty !== null && empty !== void 0 ? empty : /*#__PURE__*/jsx(EmptyContent, {
33
+ message: /*#__PURE__*/jsx(Trans, {
34
+ i18nKey: "form:select.emptyList"
59
35
  })
60
- }), index);
61
- return /*#__PURE__*/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);
36
+ })), items.map(function (item, index) {
37
+ var _item$value, _getByPath;
38
+ if (item.___group___) return /*#__PURE__*/jsx("p", {
39
+ className: "px-2 py-1 text-muted text-xs sticky -top-px z-2 bg-default border-t",
40
+ children: item.label
41
+ }, index);
42
+ if (item.___create___) return /*#__PURE__*/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: cn("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__*/jsx(Trans, {
52
+ i18nKey: "form:select.createOption",
53
+ values: {
54
+ query: (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : item
55
+ },
56
+ components: [/*#__PURE__*/jsx("strong", {
57
+ children: "query"
58
+ }, "t0")]
59
+ })
60
+ }), index);
61
+ return /*#__PURE__*/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: cn("block text-start truncate px-2 py-1 leading-normal cursor-pointer", "active:bg-primary-200 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, (_getByPath = getByPath(item, labelProperty)) !== null && _getByPath !== void 0 ? _getByPath : "".concat(item))
71
+ }), index);
72
+ })]
73
+ }), info && /*#__PURE__*/jsx("div", {
74
+ className: "px-2 py-1 text-sm bg-dimmed text-muted",
75
+ children: info
72
76
  })]
73
- }));
74
- };
77
+ });
78
+ }
75
79
 
76
80
  export { Options };