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

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 +62 -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 +70 -9
  14. package/dist/cjs/hooks/useFileUploader.js +16 -0
  15. package/dist/cjs/hooks/useFormBuilder.js +57 -15
  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 +126 -36
  20. package/dist/cjs/input/AvatarInput.js +43 -23
  21. package/dist/cjs/input/Checkbox.js +16 -6
  22. package/dist/cjs/input/ColorInput.js +113 -58
  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 +14 -7
  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 +22 -12
  31. package/dist/cjs/input/Radio.js +12 -3
  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 +30 -19
  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 +1 -1
  39. package/dist/cjs/internal/FieldWrapper.js +11 -4
  40. package/dist/cjs/internal/InputWrapper.js +27 -20
  41. package/dist/cjs/select/AutoComplete.js +21 -11
  42. package/dist/cjs/select/DualList.js +34 -12
  43. package/dist/cjs/select/List.js +68 -22
  44. package/dist/cjs/select/Options.js +49 -42
  45. package/dist/cjs/select/Select.js +40 -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 +62 -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 +72 -12
  57. package/dist/esm/hooks/useFileUploader.js +16 -0
  58. package/dist/esm/hooks/useFormBuilder.js +55 -13
  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 +126 -36
  63. package/dist/esm/input/AvatarInput.js +44 -24
  64. package/dist/esm/input/Checkbox.js +16 -6
  65. package/dist/esm/input/ColorInput.js +115 -60
  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 +16 -9
  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 +24 -14
  74. package/dist/esm/input/Radio.js +12 -3
  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 +32 -21
  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 +1 -1
  82. package/dist/esm/internal/FieldWrapper.js +11 -4
  83. package/dist/esm/internal/InputWrapper.js +27 -20
  84. package/dist/esm/select/AutoComplete.js +21 -11
  85. package/dist/esm/select/DualList.js +34 -12
  86. package/dist/esm/select/List.js +69 -23
  87. package/dist/esm/select/Options.js +49 -42
  88. package/dist/esm/select/Select.js +40 -10
  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 +48 -2
  100. package/dist/types/hooks/useFileUploader.d.ts +16 -0
  101. package/dist/types/hooks/useFormBuilder.d.ts +32 -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 +17 -2
  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 +34 -5
  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 +62 -30
  136. package/src/builder/FormField.tsx +52 -32
  137. package/src/builder/SchemaEditor.tsx +79 -0
  138. package/src/builder/components/AddSchemaFields.tsx +74 -0
  139. package/src/builder/components/SchemaArrayForm.tsx +161 -0
  140. package/src/builder/components/SchemaField.tsx +436 -0
  141. package/src/form/Controller.tsx +48 -3
  142. package/src/form/Form.tsx +80 -8
  143. package/src/hooks/useFileUploader.ts +16 -0
  144. package/src/hooks/useFormBuilder.tsx +58 -15
  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 +199 -64
  149. package/src/input/AvatarInput.tsx +67 -19
  150. package/src/input/Checkbox.tsx +16 -6
  151. package/src/input/ColorInput.tsx +131 -71
  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 +16 -14
  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 +24 -16
  160. package/src/input/Radio.tsx +12 -3
  161. package/src/input/RadioGroup.tsx +12 -3
  162. package/src/input/{Range.tsx → RangeSlider.tsx} +17 -9
  163. package/src/input/Search.tsx +33 -22
  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 +1 -1
  168. package/src/internal/FieldWrapper.tsx +8 -4
  169. package/src/internal/InputWrapper.tsx +49 -27
  170. package/src/select/AutoComplete.tsx +14 -3
  171. package/src/select/DualList.tsx +31 -16
  172. package/src/select/List.tsx +52 -8
  173. package/src/select/Options.tsx +50 -46
  174. package/src/select/Select.tsx +25 -5
  175. package/src/select/useSelect.tsx +26 -9
  176. package/src/types/index.ts +37 -6
  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
@@ -10,9 +10,18 @@ var eventHandlers = require('../utils/eventHandlers.js');
10
10
  require('@react-fabric/utilities');
11
11
  var jsxRuntime = require('react/jsx-runtime');
12
12
 
13
- var _excluded = ["ref", "value", "name", "invalid", "readOnly", "disabled", "required", "searching", "placeholder", "autoFocus", "allowClear", "searchOnChange", "decorateEnd", "decorateStart", "onSearch", "onChange", "onEnterPressed"];
13
+ var _excluded = ["ref", "value", "name", "invalid", "readOnly", "disabled", "required", "searching", "placeholder", "defaultValue", "autoFocus", "hideHandle", "allowClear", "searchOnChange", "onBlur", "onFocus", "onSearch", "onChange", "onEnterPressed"];
14
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; }
15
15
  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; }
16
+ /**
17
+ * Search input component with optional searching state and search handler.
18
+ * This component allows users to input search queries and trigger a search action.
19
+ * It supports features like searching on value change, showing a search handle,
20
+ * and handling search actions with a debounce mechanism.
21
+ *
22
+ * @param {SearchProps} props - The properties for the Search component.
23
+ * @returns {JSX.Element} The rendered Search input component.
24
+ */
16
25
  var Search = function Search(_ref) {
17
26
  var ref = _ref.ref,
18
27
  value = _ref.value,
@@ -23,13 +32,15 @@ var Search = function Search(_ref) {
23
32
  required = _ref.required,
24
33
  searching = _ref.searching,
25
34
  placeholder = _ref.placeholder,
35
+ defaultValue = _ref.defaultValue,
26
36
  autoFocus = _ref.autoFocus,
37
+ hideHandle = _ref.hideHandle,
27
38
  _ref$allowClear = _ref.allowClear,
28
39
  allowClear = _ref$allowClear === void 0 ? true : _ref$allowClear,
29
40
  _ref$searchOnChange = _ref.searchOnChange,
30
- searchOnChange = _ref$searchOnChange === void 0 ? true : _ref$searchOnChange,
31
- decorateEnd = _ref.decorateEnd,
32
- decorateStart = _ref.decorateStart,
41
+ searchOnChange = _ref$searchOnChange === void 0 ? false : _ref$searchOnChange,
42
+ onBlur = _ref.onBlur,
43
+ onFocus = _ref.onFocus,
33
44
  onSearch = _ref.onSearch,
34
45
  onChange = _ref.onChange;
35
46
  _ref.onEnterPressed;
@@ -38,43 +49,41 @@ var Search = function Search(_ref) {
38
49
  _useState2 = _slicedToArray(_useState, 2),
39
50
  actualValue = _useState2[0],
40
51
  setActualValue = _useState2[1];
41
- var deferred = react.useDeferredValue(value);
52
+ var deferred = react.useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
42
53
  var refValue = react.useRef("");
43
54
  var handleSearch = core.useDebounce(function () {
44
55
  return onSearch === null || onSearch === void 0 ? void 0 : onSearch(refValue.current);
45
56
  }, [onSearch], 250);
46
- var handleEnterPressed = react.useMemo(function () {
47
- return eventHandlers.handleEnter(handleSearch);
48
- }, [handleSearch]);
57
+ var handleEnterPressed = eventHandlers.useHandleEnter(handleSearch);
49
58
  react.useEffect(function () {
50
59
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
51
60
  }, [deferred]);
52
61
  var handleChange = react.useCallback(function (e) {
53
- var value = e === null || e === void 0 ? void 0 : e.target.value;
62
+ var _e$target$value;
63
+ var value = (_e$target$value = e === null || e === void 0 ? void 0 : e.target.value) !== null && _e$target$value !== void 0 ? _e$target$value : defaultValue;
54
64
  refValue.current = value !== null && value !== void 0 ? value : "";
55
65
  setActualValue(value !== null && value !== void 0 ? value : "");
56
- onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : undefined);
66
+ onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
57
67
 
58
- // value was cleared so force fire onSearch
59
- if (searchOnChange) {
68
+ // when e is undefined value was cleared so force fire onSearch
69
+ if (!e || searchOnChange) {
60
70
  handleSearch();
61
71
  }
62
- }, [onChange, searchOnChange, handleSearch]);
72
+ }, [onChange, searchOnChange, handleSearch, defaultValue]);
63
73
  return /*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
64
- showClear: !!actualValue,
74
+ showClear: !!actualValue && !disabled && !readOnly,
65
75
  onClear: handleChange,
66
76
  allowClear: allowClear,
67
77
  invalid: invalid,
68
78
  readOnly: readOnly,
69
79
  disabled: disabled,
70
80
  required: required,
71
- decorateStart: decorateStart,
72
- decorateEnd: /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
73
- children: [decorateEnd, searching && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
81
+ actionButton: /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
82
+ children: [searching && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
74
83
  className: "p-2",
75
84
  icon: core.CoreIcons.spinner,
76
85
  animate: "spin"
77
- }), !searching && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
86
+ }), !searching && !hideHandle && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
78
87
  tabIndex: -1,
79
88
  variant: "link",
80
89
  "aria-label": "search",
@@ -85,7 +94,7 @@ var Search = function Search(_ref) {
85
94
  })
86
95
  }, rest), {}, {
87
96
  children: /*#__PURE__*/jsxRuntime.jsx("input", {
88
- className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0",
97
+ className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer",
89
98
  "aria-invalid": invalid,
90
99
  "aria-disabled": disabled,
91
100
  "aria-readonly": readOnly,
@@ -100,6 +109,8 @@ var Search = function Search(_ref) {
100
109
  autoComplete: "off",
101
110
  autoFocus: autoFocus,
102
111
  value: actualValue,
112
+ onBlur: onBlur,
113
+ onFocus: onFocus,
103
114
  onChange: handleChange,
104
115
  onKeyDown: handleEnterPressed
105
116
  })
@@ -14,7 +14,13 @@ var _excluded = ["error", "name", "value", "step", "min", "max", "height", "colo
14
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; }
15
15
  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; }
16
16
  /**
17
- * Number slider input
17
+ * Slider component for rendering a slider input with labels and value display.
18
+ * It supports vertical orientation, custom min/max labels, and step ranges.
19
+ * The component handles value changes, displays tooltips, and integrates with ranger for slider functionality.
20
+ * It also supports deferred value updates for smoother interactions.
21
+ *
22
+ * @param {SliderProps} props - The properties for the Slider component.
23
+ * @returns {JSX.Element} The rendered Slider component.
18
24
  */
19
25
  var Slider = function Slider(_ref) {
20
26
  var error = _ref.error;
@@ -73,7 +79,7 @@ var Slider = function Slider(_ref) {
73
79
  var handleChange = react.useCallback(function (value) {
74
80
  var val = useInfinity && value === max ? Infinity : value;
75
81
  setActualValue(val !== null && val !== void 0 ? val : 0);
76
- onChange === null || onChange === void 0 || onChange(val !== null && val !== void 0 ? val : undefined);
82
+ onChange === null || onChange === void 0 || onChange(val !== null && val !== void 0 ? val : null);
77
83
  }, [onChange, max, useInfinity]);
78
84
  var minDisplay = react.useMemo(function () {
79
85
  return /*#__PURE__*/jsxRuntime.jsx("span", {
@@ -116,14 +122,14 @@ var Slider = function Slider(_ref) {
116
122
  isReadOnly: readOnly,
117
123
  canClear: !!actualValue,
118
124
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
119
- className: classNames("flex-auto order-3 flex items-center select-none relative z-0", vertical && "flex-col w-8", invalid ? "text-danger-500" : "text-primary-600"),
125
+ className: classNames("flex-1 order-3 flex items-center select-none relative z-0", vertical && "flex-col w-8", invalid ? "text-danger-500" : "text-primary-600"),
120
126
  "data-vertical": !!vertical,
121
127
  style: invalid ? undefined : {
122
128
  color: color
123
129
  },
124
130
  children: [showLabels && (vertical ? maxDisplay : minDisplay), /*#__PURE__*/jsxRuntime.jsxs("div", {
125
131
  ref: rangerInstance.trackElRef,
126
- className: classNames("flex-auto relative flex items-center", vertical ? "my-2 w-8" : "mx-2 h-8"),
132
+ className: classNames("relative flex items-center", vertical ? "my-2 w-8" : "flex-1 mx-2 h-8"),
127
133
  style: {
128
134
  height: vertical ? height : undefined
129
135
  },
@@ -132,7 +138,7 @@ var Slider = function Slider(_ref) {
132
138
  var key = _ref2.key,
133
139
  styles = _ref2.styles;
134
140
  return /*#__PURE__*/jsxRuntime.jsx("div", {
135
- className: classNames("absolute inline-block h-1 w-1 rounded-sm bg-invert opacity-30 leading-[0] z-1", vertical && "left-1/2 -ml-0.5"),
141
+ className: classNames("absolute inline-block h-1 w-1 rounded-sm bg-invert opacity-30 leading-0 z-1", vertical && "left-1/2 -ml-0.5"),
136
142
  style: styles
137
143
  }, key);
138
144
  }), rangerInstance.segments.map(function (_ref3) {
@@ -157,7 +163,7 @@ var Slider = function Slider(_ref) {
157
163
  }, props), {}, {
158
164
  style: styles
159
165
  })), displayValue && /*#__PURE__*/jsxRuntime.jsx("div", {
160
- className: classNames("bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap", "before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45", vertical ? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2" : "top-1/2 -translate-y-1/2", !vertical && (percentage > 50 ? "-ms-3 ltr:-translate-x-full rtl:translate-x-full ltr:before:translate-x-[0.125rem] rtl:before:-translate-x-[0.125rem] before:end-0" : "ms-3 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0")),
166
+ className: classNames("bg-invert text-invert py-px px-2 text-xs absolute rounded z-5 whitespace-nowrap pointer-events-none", "before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45", vertical ? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2 ltr:before:-translate-x-0.5 rtl:before:translate-x-0.5 before:start-0" : "top-1/2 -translate-y-1/2", !vertical && (percentage > 50 ? "-ms-3 ltr:-translate-x-full rtl:translate-x-full ltr:before:translate-x-0.5 rtl:before:-translate-x-0.5 before:end-0" : "ms-3 ltr:before:-translate-x-0.5 rtl:before:translate-x-0.5 before:start-0")),
161
167
  "data-align": percentage > 50 ? "start" : "end",
162
168
  style: valueStyles,
163
169
  children: value === Infinity || useInfinity && value === max ? maxLabel !== null && maxLabel !== void 0 ? maxLabel : "∞" : utilities.Format.number(value, format)
@@ -6,13 +6,23 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
6
6
  var classNames = require('classnames');
7
7
  var react = require('react');
8
8
  var ErrorIcon = require('../internal/ErrorIcon.js');
9
- require('@react-fabric/utilities');
9
+ require('@floating-ui/react');
10
+ require('@react-fabric/core');
10
11
  var getColor = require('../utils/getColor.js');
11
12
  var jsxRuntime = require('react/jsx-runtime');
12
13
 
13
- var _excluded = ["ref", "label", "checked", "invalid", "disabled", "error", "width", "color", "name", "onLabel", "offLabel", "onLabelColor", "offLabelColor", "defaultColor", "onChange"];
14
+ var _excluded = ["ref", "label", "checked", "invalid", "disabled", "error", "width", "color", "name", "onLabel", "offLabel", "onLabelColor", "offLabelColor", "defaultColor", "required", "onChange"];
14
15
  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; }
15
16
  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; }
17
+ /**
18
+ * Switch input component with custom labels and colors.
19
+ * This component renders a switch input with optional labels for the "on" and "off" states,
20
+ * and allows for custom colors for the switch background and labels.
21
+ * It supports disabled and invalid states, and handles change events.
22
+ *
23
+ * @param {SwitchProps} props - The properties for the Switch component.
24
+ * @returns {JSX.Element} The rendered Switch input component.
25
+ */
16
26
  var Switch = function Switch(_ref) {
17
27
  var ref = _ref.ref,
18
28
  label = _ref.label,
@@ -27,8 +37,9 @@ var Switch = function Switch(_ref) {
27
37
  offLabel = _ref.offLabel,
28
38
  onLabelColor = _ref.onLabelColor,
29
39
  offLabelColor = _ref.offLabelColor,
30
- defaultColor = _ref.defaultColor,
31
- onChange = _ref.onChange,
40
+ defaultColor = _ref.defaultColor;
41
+ _ref.required;
42
+ var onChange = _ref.onChange,
32
43
  rest = _objectWithoutProperties(_ref, _excluded);
33
44
  var _useState = react.useState(false),
34
45
  _useState2 = _slicedToArray(_useState, 2),
@@ -44,12 +55,12 @@ var Switch = function Switch(_ref) {
44
55
  onChange === null || onChange === void 0 || onChange((_e$target$checked2 = e === null || e === void 0 ? void 0 : e.target.checked) !== null && _e$target$checked2 !== void 0 ? _e$target$checked2 : false);
45
56
  }, [onChange]);
46
57
  return /*#__PURE__*/jsxRuntime.jsxs("label", {
47
- className: classNames(invalid ? "ring-danger-500" : "ring-primary-500", disabled ? "opacity-50 cursor-not-allowed" : "hover:opacity-100 cursor-pointer", "inline-flex gap-1 py-1 items-center relative cursor-pointer opacity-85 rounded ring-offset-2 has-[:focus-visible]:ring-1"),
58
+ className: classNames(invalid ? "ring-danger-500" : "ring-primary-500", disabled ? "opacity-50 cursor-not-allowed" : "hover:opacity-100 cursor-pointer", "inline-flex gap-1 py-1 items-center relative cursor-pointer opacity-85 rounded ring-offset-2 has-focus-visible:ring-1"),
48
59
  style: {
49
60
  width: width
50
61
  },
51
62
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
52
- className: classNames(actualValue && getColor.getBgClass(color ? "".concat(color, "-500") : "primary-500"), !actualValue && (defaultColor ? getColor.getBgClass("".concat(defaultColor, "-500")) : "bg-tint-200"), "relative grid grid-cols-2 items-center h-6 min-w-10 cursor-pointer rounded-full p-1 transition-colors duration-200 ease-in-out"),
63
+ className: classNames(actualValue && getColor.getBgClass(color ? "".concat(color, "-500") : "primary-500"), !actualValue && (defaultColor ? getColor.getBgClass("".concat(defaultColor, "-500")) : "bg-tint-200"), "relative grid grid-cols-2 items-center h-[1.5em] min-w-[2.5em] cursor-pointer rounded-full p-[0.25em] transition-colors duration-200 ease-in-out"),
53
64
  style: {
54
65
  backgroundColor: actualValue ? getColor.getColor(color) : getColor.getColor(defaultColor)
55
66
  },
@@ -68,9 +79,9 @@ var Switch = function Switch(_ref) {
68
79
  onChange: handleChange
69
80
  }, rest)), /*#__PURE__*/jsxRuntime.jsx("span", {
70
81
  "aria-hidden": "true",
71
- className: classNames(!disabled && "shadow-sm", actualValue ? "translate-x-[100%]" : "translate-x-0", "pointer-events-none inline-block h-4 start-1 absolute rounded-full bg-white ring-0 transition duration-200 ease-in-out"),
82
+ className: classNames(!disabled && "shadow-sm", actualValue ? "translate-x-full" : "translate-x-0", "pointer-events-none inline-block h-[1em] start-[0.25em] absolute rounded-full bg-white ring-0 transition duration-200 ease-in-out"),
72
83
  style: {
73
- width: "calc(50% - 0.25rem)"
84
+ width: "calc(50% - 0.25em)"
74
85
  }
75
86
  }), (!!onLabel || !!offLabel) && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
76
87
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
@@ -91,7 +102,7 @@ var Switch = function Switch(_ref) {
91
102
  invalid: invalid,
92
103
  error: error
93
104
  }), label && /*#__PURE__*/jsxRuntime.jsx("span", {
94
- className: "flex-initial leading-5 truncate",
105
+ className: "flex-initial leading-tight truncate",
95
106
  children: label
96
107
  })]
97
108
  });
@@ -9,9 +9,19 @@ var eventHandlers = require('../utils/eventHandlers.js');
9
9
  require('@react-fabric/utilities');
10
10
  var jsxRuntime = require('react/jsx-runtime');
11
11
 
12
- var _excluded = ["ref", "value", "name", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "rows", "maxRows", "variableRows", "onChange", "onEnterPressed"];
12
+ var _excluded = ["ref", "value", "name", "invalid", "readOnly", "disabled", "required", "placeholder", "defaultValue", "autoFocus", "rows", "maxRows", "variableRows", "expandable", "onBlur", "onFocus", "onChange", "onEnterPressed"];
13
13
  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; }
14
14
  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; }
15
+ /**
16
+ * Textarea component that allows users to input multi-line text.
17
+ * It supports features like variable row count, expandable behavior,
18
+ * and handling of focus, blur, and change events.
19
+ * This component is designed to be flexible and user-friendly,
20
+ * providing a clear interface for text input with optional validation and accessibility features.
21
+ *
22
+ * @param {TextareaProps} props - The properties for the Textarea component.
23
+ * @returns {JSX.Element} The rendered Textarea component.
24
+ */
15
25
  var Textarea = function Textarea(_ref) {
16
26
  var ref = _ref.ref,
17
27
  value = _ref.value,
@@ -21,12 +31,16 @@ var Textarea = function Textarea(_ref) {
21
31
  disabled = _ref.disabled,
22
32
  required = _ref.required,
23
33
  placeholder = _ref.placeholder,
34
+ defaultValue = _ref.defaultValue,
24
35
  autoFocus = _ref.autoFocus,
25
36
  _ref$rows = _ref.rows,
26
37
  rows = _ref$rows === void 0 ? 5 : _ref$rows,
27
38
  _ref$maxRows = _ref.maxRows,
28
39
  maxRows = _ref$maxRows === void 0 ? 12 : _ref$maxRows,
29
40
  variableRows = _ref.variableRows,
41
+ expandable = _ref.expandable,
42
+ onBlur = _ref.onBlur,
43
+ onFocus = _ref.onFocus,
30
44
  onChange = _ref.onChange,
31
45
  onEnterPressed = _ref.onEnterPressed,
32
46
  rest = _objectWithoutProperties(_ref, _excluded);
@@ -38,16 +52,17 @@ var Textarea = function Textarea(_ref) {
38
52
  _useState4 = _slicedToArray(_useState3, 2),
39
53
  fixedRows = _useState4[0],
40
54
  setFixedRows = _useState4[1];
41
- var deferred = react.useDeferredValue(value);
55
+ var deferred = react.useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
42
56
  var wrapperRef = react.useRef(null);
43
57
  react.useEffect(function () {
44
58
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
45
59
  }, [deferred]);
46
60
  var handleChange = react.useCallback(function (e) {
47
- var value = e === null || e === void 0 ? void 0 : e.target.value;
61
+ var _e$target$value;
62
+ var value = (_e$target$value = e === null || e === void 0 ? void 0 : e.target.value) !== null && _e$target$value !== void 0 ? _e$target$value : defaultValue;
48
63
  setActualValue(value !== null && value !== void 0 ? value : "");
49
- onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : undefined);
50
- }, [onChange]);
64
+ onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
65
+ }, [onChange, defaultValue]);
51
66
  react.useEffect(function () {
52
67
  if (variableRows) {
53
68
  var _actualValue$split$le;
@@ -57,18 +72,22 @@ var Textarea = function Textarea(_ref) {
57
72
  setFixedRows(rows);
58
73
  }
59
74
  }, [actualValue, variableRows, rows, maxRows]);
75
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed, {
76
+ preventDefault: !!onEnterPressed
77
+ });
60
78
  return /*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
61
- showClear: !!actualValue,
79
+ showClear: !!actualValue && !disabled && !readOnly,
62
80
  onClear: handleChange,
63
81
  invalid: invalid,
64
82
  readOnly: readOnly,
65
83
  disabled: disabled,
66
84
  required: required,
67
85
  wrapperRef: wrapperRef,
86
+ textareaExpandable: expandable,
68
87
  textarea: true
69
88
  }, rest), {}, {
70
89
  children: /*#__PURE__*/jsxRuntime.jsx("textarea", {
71
- className: "appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-20 resize-none",
90
+ className: "appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-12 resize-none",
72
91
  "aria-invalid": invalid,
73
92
  "aria-disabled": disabled,
74
93
  "aria-readonly": readOnly,
@@ -82,8 +101,10 @@ var Textarea = function Textarea(_ref) {
82
101
  autoComplete: "off",
83
102
  autoFocus: autoFocus,
84
103
  value: actualValue,
104
+ onBlur: onBlur,
105
+ onFocus: onFocus,
85
106
  onChange: handleChange,
86
- onKeyDown: eventHandlers.handleEnter(onEnterPressed)
107
+ onKeyDown: handleEnterPressed
87
108
  })
88
109
  }));
89
110
  };
@@ -20,7 +20,7 @@ var ErrorIcon = function ErrorIcon(_ref) {
20
20
  label: t((_error$values$label = (_error$values = error.values) === null || _error$values === void 0 ? void 0 : _error$values.label) !== null && _error$values$label !== void 0 ? _error$values$label : "form:badkey", (_error$values2 = error.values) === null || _error$values2 === void 0 ? void 0 : _error$values2.path)
21
21
  }) : {}),
22
22
  placement: "bottom",
23
- color: "danger",
23
+ color: "danger-200",
24
24
  children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
25
25
  className: "flex-content first:ms-2 self-center",
26
26
  color: "danger",
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var classNames = require('classnames');
4
- var Field_module = require('./Field.module.css');
4
+ var ErrorIcon = require('./ErrorIcon.js');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
7
7
  /*
@@ -40,16 +40,18 @@ var FieldWrapper = function FieldWrapper(_ref) {
40
40
  children = _ref.children,
41
41
  listing = _ref.listing,
42
42
  className = _ref.className,
43
+ invalid = _ref.invalid,
44
+ error = _ref.error,
43
45
  isInner = _ref["data-inner"];
44
46
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
45
- className: classNames(Field_module.fieldWrapper, className, inline ? "flex flex-nowrap gap-1" : "block"),
47
+ className: classNames("fabric-fieldWrapper", className, inline ? "flex flex-nowrap gap-1" : "block"),
46
48
  "data-ref": "fieldWrapper",
47
49
  style: {
48
50
  width: width,
49
51
  flexBasis: width
50
52
  },
51
- children: [!isInner && /*#__PURE__*/jsxRuntime.jsxs("div", {
52
- className: "flex flex-nowrap flex-content gap-1 py-0.5 px-2",
53
+ children: [!isInner && label && /*#__PURE__*/jsxRuntime.jsxs("div", {
54
+ className: "flex flex-nowrap flex-content items-end gap-1 py-0.5 px-2",
53
55
  style: {
54
56
  width: inline ? labelWidth : undefined
55
57
  },
@@ -64,6 +66,11 @@ var FieldWrapper = function FieldWrapper(_ref) {
64
66
  }), required && /*#__PURE__*/jsxRuntime.jsx("span", {
65
67
  className: "text-danger-500 select-none flex-content text-[10px]",
66
68
  children: "\u273D"
69
+ }), /*#__PURE__*/jsxRuntime.jsx(ErrorIcon.ErrorIcon, {
70
+ invalid: invalid,
71
+ error: error
72
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
73
+ className: "flex-1"
67
74
  }), appendLabel && /*#__PURE__*/jsxRuntime.jsx("span", {
68
75
  className: "flex-content",
69
76
  children: appendLabel
@@ -3,33 +3,35 @@
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
4
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
5
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
- var react$1 = require('@floating-ui/react');
7
6
  var core = require('@react-fabric/core');
8
7
  var utilities = require('@react-fabric/utilities');
9
8
  var classNames = require('classnames');
10
9
  var react = require('react');
11
10
  var jsxRuntime = require('react/jsx-runtime');
12
11
  var ErrorIcon = require('./ErrorIcon.js');
13
- var Field_module = require('./Field.module.css');
14
12
  var FieldWrapper = require('./FieldWrapper.js');
15
13
 
16
- var _excluded = ["invalid", "error", "allowClear", "showClear", "decorateStart", "decorateEnd", "children", "onClear", "noOutline", "noBorder", "textarea", "data-inner", "data-open", "floatingExpand", "wrapperRef", "width"];
14
+ var _excluded = ["invalid", "error", "allowClear", "showClear", "decorateStart", "decorateEnd", "decorateEndShowWhenEmpty", "decorateEndHideWhenEmpty", "children", "onClear", "noOutline", "noBorder", "actionButton", "textarea", "textareaExpandable", "data-inner", "data-open", "floatingExpand", "wrapperRef", "width"];
17
15
  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
16
  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
17
  var InputWrapper = function InputWrapper(_ref) {
20
- var _elRef$current;
21
18
  var invalid = _ref.invalid,
22
19
  error = _ref.error,
23
20
  allowClear = _ref.allowClear,
24
21
  showClear = _ref.showClear,
25
22
  decorateStart = _ref.decorateStart,
26
23
  decorateEnd = _ref.decorateEnd,
24
+ decorateEndShowWhenEmpty = _ref.decorateEndShowWhenEmpty,
25
+ decorateEndHideWhenEmpty = _ref.decorateEndHideWhenEmpty,
27
26
  children = _ref.children,
28
27
  onClear = _ref.onClear,
29
28
  noOutline = _ref.noOutline,
30
29
  noBorder = _ref.noBorder,
30
+ actionButton = _ref.actionButton,
31
31
  _ref$textarea = _ref.textarea,
32
32
  textarea = _ref$textarea === void 0 ? false : _ref$textarea,
33
+ _ref$textareaExpandab = _ref.textareaExpandable,
34
+ textareaExpandable = _ref$textareaExpandab === void 0 ? false : _ref$textareaExpandab,
33
35
  isInner = _ref["data-inner"];
34
36
  _ref["data-open"];
35
37
  var floatingExpand = _ref.floatingExpand,
@@ -50,13 +52,17 @@ var InputWrapper = function InputWrapper(_ref) {
50
52
  });
51
53
  }, [isInner, rest, width]);
52
54
  var handleClear = react.useCallback(function (e) {
53
- var _e$currentTarget$pare;
54
- (_e$currentTarget$pare = e.currentTarget.parentElement) === null || _e$currentTarget$pare === void 0 || (_e$currentTarget$pare = _e$currentTarget$pare.querySelector("input,textarea,button")) === null || _e$currentTarget$pare === void 0 || _e$currentTarget$pare.focus();
55
+ var _e$currentTarget$pare, _parent$querySelector;
56
+ var parent = (_e$currentTarget$pare = e.currentTarget.parentElement) === null || _e$currentTarget$pare === void 0 ? void 0 : _e$currentTarget$pare.querySelector("& > :not(.fabric-decorate)");
57
+ var el = (_parent$querySelector = parent === null || parent === void 0 ? void 0 : parent.querySelector("input,textarea,button")) !== null && _parent$querySelector !== void 0 ? _parent$querySelector : parent;
58
+ el === null || el === void 0 || el.focus();
55
59
  onClear === null || onClear === void 0 || onClear();
56
60
  }, [onClear]);
57
61
  var doFocus = react.useCallback(function (e) {
58
- var _e$currentTarget$pare2;
59
- (_e$currentTarget$pare2 = e.currentTarget.parentElement) === null || _e$currentTarget$pare2 === void 0 || (_e$currentTarget$pare2 = _e$currentTarget$pare2.querySelector("input,textarea,button")) === null || _e$currentTarget$pare2 === void 0 || _e$currentTarget$pare2.focus();
62
+ var _e$currentTarget$pare2, _parent$querySelector2;
63
+ var parent = (_e$currentTarget$pare2 = e.currentTarget.parentElement) === null || _e$currentTarget$pare2 === void 0 ? void 0 : _e$currentTarget$pare2.querySelector("& > :not(.fabric-decorate)");
64
+ var el = (_parent$querySelector2 = parent === null || parent === void 0 ? void 0 : parent.querySelector("input,textarea,button")) !== null && _parent$querySelector2 !== void 0 ? _parent$querySelector2 : parent;
65
+ el === null || el === void 0 || el.focus();
60
66
  }, [onClear]);
61
67
  react.useEffect(function () {
62
68
  isExpanded && setTimeout(function () {
@@ -67,13 +73,13 @@ var InputWrapper = function InputWrapper(_ref) {
67
73
  var el = /*#__PURE__*/jsxRuntime.jsxs("div", {
68
74
  role: "none",
69
75
  ref: wrapperRef,
70
- className: classNames(Field_module.inputWrapper, invalid && Field_module.invalidWrapper, !noOutline && !noBorder && "bg-[var(--fabric-input)] outline overflow-hidden", "flex flex-nowrap items-center", textarea ? "rounded-capped group" : "rounded", isExpanded ? "fixed inset-4 z-[99]" : floatingExpand ? "absolute inset-x-0" : "relative", !noOutline && "after:absolute after:bottom-0 after:h-px after:bg-primary-500 after:mx-auto"),
76
+ className: classNames("fabric-inputWrapper", invalid && "fabric-invalidWrapper", !noOutline && !noBorder && "bg-(--fabric-input) outline overflow-hidden", "flex flex-nowrap items-center flex-1", textarea ? "rounded-capped group" : "rounded", isExpanded ? "fixed inset-4 z-99" : floatingExpand ? "absolute inset-x-0" : "relative", !noOutline && "after:absolute after:bottom-0 after:h-px after:bg-primary-500 after:mx-auto"),
71
77
  onKeyDown: function onKeyDown(e) {
72
- return e.key === "Escape" && setExpanded(false);
78
+ return e.key === "Escape" && isExpanded && (setExpanded(false), e.stopPropagation());
73
79
  },
74
80
  children: [decorateStart && /*#__PURE__*/jsxRuntime.jsx("div", {
75
81
  onClickCapture: doFocus,
76
- className: classNames(Field_module.decorate, "text-muted leading-none flex-content", utilities.isString(decorateStart) && "px-1"),
82
+ className: classNames("fabric-decorate", "text-muted leading-none flex-content", utilities.isString(decorateStart) && "px-1"),
77
83
  children: decorateStart
78
84
  }), /*#__PURE__*/jsxRuntime.jsx(ErrorIcon.ErrorIcon, {
79
85
  invalid: invalid,
@@ -81,12 +87,16 @@ var InputWrapper = function InputWrapper(_ref) {
81
87
  }), children, allowClear && showClear && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
82
88
  icon: core.CoreIcons.close,
83
89
  onClick: handleClear,
84
- className: classNames("text-tint-500 hover:text-tint-700 p-1 z-1 flex-content", Field_module.inputClear, textarea && "self-start mt-1 me-1")
90
+ className: classNames("text-tint-500 hover:text-tint-700 p-1 z-1 flex-content", "fabric-inputClear", textarea && "self-start mt-1 me-1")
85
91
  }), decorateEnd && /*#__PURE__*/jsxRuntime.jsx("div", {
86
92
  onClickCapture: doFocus,
87
- className: classNames(Field_module.decorate, "text-muted leading-none flex-content", utilities.isString(decorateEnd) && "px-1"),
93
+ className: classNames("fabric-decorate", "text-muted leading-none flex-content", utilities.isString(decorateEnd) && "px-1", decorateEndHideWhenEmpty && "peer-placeholder-shown:hidden", decorateEndShowWhenEmpty && "hidden peer-placeholder-shown:inline-block"),
88
94
  children: decorateEnd
89
- }), textarea && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
95
+ }), actionButton && /*#__PURE__*/jsxRuntime.jsx("div", {
96
+ onClickCapture: doFocus,
97
+ className: classNames("fabric-decorate", "text-muted leading-none flex-content"),
98
+ children: actionButton
99
+ }), textareaExpandable && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
90
100
  onClick: function onClick() {
91
101
  return setExpanded(!isExpanded);
92
102
  },
@@ -95,17 +105,14 @@ var InputWrapper = function InputWrapper(_ref) {
95
105
  })]
96
106
  });
97
107
  return /*#__PURE__*/jsxRuntime.jsx(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
98
- children: /*#__PURE__*/jsxRuntime.jsxs("div", {
108
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
99
109
  ref: elRef,
100
- className: "flex-1 relative min-h-8",
110
+ className: classNames("relative min-h-8 flex flex-col flex-nowrap", width ? "flex-auto" : "flex-1"),
101
111
  style: {
102
112
  width: width,
103
113
  flexBasis: width
104
114
  },
105
- children: [!isExpanded && el, isExpanded && /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingPortal, {
106
- root: (_elRef$current = elRef.current) === null || _elRef$current === void 0 ? void 0 : _elRef$current.closest(".theme-base"),
107
- children: el
108
- })]
115
+ children: el
109
116
  })
110
117
  }));
111
118
  };
@@ -12,21 +12,28 @@ 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", "expandOnEdit", "error", "history", "multiple", "onChange", "onSelect", "onInput", "onFocus", "onBlur", "onEnterPressed"];
15
+ var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "expandOnEdit", "error", "history", "multiple", "onChange", "onSelect", "onInput", "onFocus", "onBlur", "onQuery", "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
+ /**
19
+ * AutoComplete component for selecting or entering values with history suggestions.
20
+ * It supports multiple selections, history suggestions, and custom styling.
21
+ *
22
+ * @param {AutoCompleteProps} props - The properties for the AutoComplete component.
23
+ * @returns {JSX.Element} The rendered AutoComplete component.
24
+ */
18
25
  var AutoComplete = function AutoComplete(_ref) {
19
26
  var _refs$reference$curre;
20
- _ref.ref;
21
- var name = _ref.name,
27
+ var ref = _ref.ref,
28
+ name = _ref.name,
22
29
  value = _ref.value,
23
30
  invalid = _ref.invalid,
24
31
  readOnly = _ref.readOnly,
25
32
  disabled = _ref.disabled,
26
33
  required = _ref.required,
27
- placeholder = _ref.placeholder;
28
- _ref.autoFocus;
29
- var expandOnEdit = _ref.expandOnEdit,
34
+ placeholder = _ref.placeholder,
35
+ autoFocus = _ref.autoFocus,
36
+ expandOnEdit = _ref.expandOnEdit,
30
37
  error = _ref.error,
31
38
  history = _ref.history,
32
39
  multiple = _ref.multiple,
@@ -35,6 +42,7 @@ var AutoComplete = function AutoComplete(_ref) {
35
42
  onInput = _ref.onInput,
36
43
  onFocus = _ref.onFocus,
37
44
  _onBlur = _ref.onBlur,
45
+ onQuery = _ref.onQuery,
38
46
  onEnterPressed = _ref.onEnterPressed,
39
47
  rest = _objectWithoutProperties(_ref, _excluded);
40
48
  var options = react.useRef(history);
@@ -45,7 +53,8 @@ var AutoComplete = function AutoComplete(_ref) {
45
53
  options: options.current,
46
54
  multiple: multiple,
47
55
  onChange: onChange,
48
- onSelect: onSelect
56
+ onSelect: onSelect,
57
+ onQuery: onQuery
49
58
  }),
50
59
  state = _useSelect.state,
51
60
  listRef = _useSelect.listRef,
@@ -132,9 +141,8 @@ var AutoComplete = function AutoComplete(_ref) {
132
141
  handleChange("");
133
142
  return false;
134
143
  } else {
135
- var _submitRef$current;
136
144
  onEnterPressed === null || onEnterPressed === void 0 || onEnterPressed(evt);
137
- (_submitRef$current = submitRef.current) === null || _submitRef$current === void 0 || _submitRef$current.click();
145
+ setOpen(false);
138
146
  }
139
147
  } else if (evt.key === "Backspace") {
140
148
  !state.query && multiple && handleRemove();
@@ -199,7 +207,7 @@ var AutoComplete = function AutoComplete(_ref) {
199
207
  required: required,
200
208
  error: error,
201
209
  wrapperRef: refs.setReference,
202
- className: !multiple && expandOnEdit && state.open ? "!z-[99]" : "",
210
+ className: !multiple && expandOnEdit && state.open ? "z-99!" : "",
203
211
  floatingExpand: !multiple && expandOnEdit && state.open
204
212
  }, rest), {}, {
205
213
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -218,7 +226,9 @@ var AutoComplete = function AutoComplete(_ref) {
218
226
  "data-testid": name,
219
227
  name: name,
220
228
  size: 1,
229
+ ref: ref,
221
230
  onInput: onInput,
231
+ autoFocus: autoFocus,
222
232
  rows: !multiple && expandOnEdit && state.open ? 5 : 1,
223
233
  className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1 resize-none", disabled && "cursor-not-allowed pointer-events-none", multiple && "min-w-24 overflow-hidden", !state.open && "overflow-hidden whitespace-nowrap"),
224
234
  placeholder: utilities.isEmpty(state.value) ? placeholder : ""
@@ -243,7 +253,7 @@ var AutoComplete = function AutoComplete(_ref) {
243
253
  visuallyHiddenDismiss: true,
244
254
  children: /*#__PURE__*/jsxRuntime.jsx(Options.Options, _objectSpread(_objectSpread({
245
255
  ref: refs.setFloating,
246
- className: "outline shadow-lg max-h-[40vh] z-[var(--z-popover)]",
256
+ className: "outline shadow-lg max-h-[40vh] z-(--z-popover)",
247
257
  style: _objectSpread({
248
258
  width: (_refs$reference$curre = refs.reference.current) === null || _refs$reference$curre === void 0 ? void 0 : _refs$reference$curre.getBoundingClientRect().width
249
259
  }, floatingStyles)