@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,91 +1,83 @@
1
1
  'use client';
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
6
- import { useDebounce, Icon, CoreIcons, Button } from '@react-fabric/core';
7
- import { useState, useDeferredValue, useRef, useMemo, useEffect, useCallback, Fragment } from 'react';
4
+ import { useControlledValue, useDebounce, Icon, Button } from '@react-fabric/core';
5
+ import { useId, useRef, useCallback, Fragment } from 'react';
8
6
  import { InputWrapper } from '../internal/InputWrapper.js';
9
- import { handleEnter } from '../utils/eventHandlers.js';
7
+ import { useHandleEnter } from '../utils/eventHandlers.js';
10
8
  import '@react-fabric/utilities';
9
+ import { getWrapperProps } from '../utils/getProps.js';
11
10
  import { jsx, jsxs } from 'react/jsx-runtime';
12
11
 
13
- var _excluded = ["ref", "value", "name", "invalid", "readOnly", "disabled", "required", "searching", "placeholder", "autoFocus", "allowClear", "searchOnChange", "decorateEnd", "decorateStart", "onSearch", "onChange", "onEnterPressed"];
14
12
  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
- 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
- var Search = function Search(_ref) {
17
- var ref = _ref.ref,
18
- value = _ref.value,
19
- name = _ref.name,
20
- invalid = _ref.invalid,
21
- readOnly = _ref.readOnly,
22
- disabled = _ref.disabled,
23
- required = _ref.required,
24
- searching = _ref.searching,
25
- placeholder = _ref.placeholder,
26
- autoFocus = _ref.autoFocus,
27
- _ref$allowClear = _ref.allowClear,
28
- allowClear = _ref$allowClear === void 0 ? true : _ref$allowClear,
29
- _ref$searchOnChange = _ref.searchOnChange,
30
- searchOnChange = _ref$searchOnChange === void 0 ? true : _ref$searchOnChange,
31
- decorateEnd = _ref.decorateEnd,
32
- decorateStart = _ref.decorateStart,
33
- onSearch = _ref.onSearch,
34
- onChange = _ref.onChange;
35
- _ref.onEnterPressed;
36
- var rest = _objectWithoutProperties(_ref, _excluded);
37
- var _useState = useState(""),
38
- _useState2 = _slicedToArray(_useState, 2),
39
- actualValue = _useState2[0],
40
- setActualValue = _useState2[1];
41
- var deferred = useDeferredValue(value);
42
- var refValue = useRef("");
13
+ 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; }
14
+ /**
15
+ * Search input component with optional searching state and search handler.
16
+ * This component allows users to input search queries and trigger a search action.
17
+ * It supports features like searching on value change, showing a search handle,
18
+ * and handling search actions with a debounce mechanism.
19
+ */
20
+ function Search(props) {
21
+ var value = props.value,
22
+ defaultValue = props.defaultValue,
23
+ onSearch = props.onSearch,
24
+ onChange = props.onChange,
25
+ onBlur = props.onBlur,
26
+ onFocus = props.onFocus,
27
+ hideHandle = props.hideHandle,
28
+ disabled = props.disabled,
29
+ readOnly = props.readOnly,
30
+ invalid = props.invalid,
31
+ searching = props.searching,
32
+ searchOnChange = props.searchOnChange,
33
+ placeholder = props.placeholder,
34
+ name = props.name,
35
+ autoFocus = props.autoFocus,
36
+ allowClear = props.allowClear,
37
+ ref = props.ref;
38
+ var id = useId();
39
+ var _useControlledValue = useControlledValue(value, defaultValue),
40
+ currentValue = _useControlledValue.currentValue,
41
+ updateValue = _useControlledValue.updateValue;
42
+ var valueRef = useRef("");
43
43
  var handleSearch = useDebounce(function () {
44
- return onSearch === null || onSearch === void 0 ? void 0 : onSearch(refValue.current);
44
+ return onSearch === null || onSearch === void 0 ? void 0 : onSearch(valueRef.current);
45
45
  }, [onSearch], 250);
46
- var handleEnterPressed = useMemo(function () {
47
- return handleEnter(handleSearch);
48
- }, [handleSearch]);
49
- useEffect(function () {
50
- setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
51
- }, [deferred]);
46
+ var handleEnterPressed = useHandleEnter(handleSearch);
52
47
  var handleChange = useCallback(function (e) {
53
- var value = e === null || e === void 0 ? void 0 : e.target.value;
54
- refValue.current = value !== null && value !== void 0 ? value : "";
55
- setActualValue(value !== null && value !== void 0 ? value : "");
56
- onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : undefined);
48
+ var _e$target$value;
49
+ 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;
50
+ valueRef.current = value !== null && value !== void 0 ? value : "";
51
+ updateValue(value);
52
+ onChange === null || onChange === void 0 || onChange(value);
57
53
 
58
- // value was cleared so force fire onSearch
59
- if (searchOnChange) {
54
+ // when e is undefined value was cleared so force fire onSearch
55
+ if (!e || searchOnChange) {
60
56
  handleSearch();
61
57
  }
62
- }, [onChange, searchOnChange, handleSearch]);
58
+ }, [defaultValue, updateValue, onChange, searchOnChange, handleSearch]);
63
59
  return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
64
- showClear: !!actualValue,
60
+ id: id,
61
+ showClear: allowClear && (currentValue !== null && currentValue !== void 0 ? currentValue : "") !== (defaultValue !== null && defaultValue !== void 0 ? defaultValue : "") && !disabled && !readOnly,
65
62
  onClear: handleChange,
66
- allowClear: allowClear,
67
- invalid: invalid,
68
- readOnly: readOnly,
69
- disabled: disabled,
70
- required: required,
71
- decorateStart: decorateStart,
72
- decorateEnd: /*#__PURE__*/jsxs(Fragment, {
73
- children: [decorateEnd, searching && /*#__PURE__*/jsx(Icon, {
63
+ hasStepper: true
64
+ }, getWrapperProps(props)), {}, {
65
+ actionButton: /*#__PURE__*/jsxs(Fragment, {
66
+ children: [searching && /*#__PURE__*/jsx(Icon, {
74
67
  className: "p-2",
75
- icon: CoreIcons.spinner,
76
- animate: "spin"
77
- }), !searching && /*#__PURE__*/jsx(Button, {
68
+ icon: "icon-[svg-spinners--eclipse]"
69
+ }), !searching && !hideHandle && /*#__PURE__*/jsx(Button, {
78
70
  tabIndex: -1,
79
71
  variant: "link",
80
72
  "aria-label": "search",
81
- disabled: !actualValue,
82
- icon: CoreIcons.search,
73
+ disabled: !currentValue,
74
+ icon: "icon-[mdi--magnify]",
83
75
  onClick: handleSearch
84
76
  })]
85
- })
86
- }, rest), {}, {
77
+ }),
87
78
  children: /*#__PURE__*/jsx("input", {
88
- className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0",
79
+ id: id,
80
+ className: "appearance-none bg-transparent py-1 px-4 not-first:ps-2 not-last:pe-2 flex-1 border-none outline-none ring-0 peer",
89
81
  "aria-invalid": invalid,
90
82
  "aria-disabled": disabled,
91
83
  "aria-readonly": readOnly,
@@ -99,11 +91,13 @@ var Search = function Search(_ref) {
99
91
  ref: ref,
100
92
  autoComplete: "off",
101
93
  autoFocus: autoFocus,
102
- value: actualValue,
94
+ value: currentValue !== null && currentValue !== void 0 ? currentValue : "",
95
+ onBlur: onBlur,
96
+ onFocus: onFocus,
103
97
  onChange: handleChange,
104
98
  onKeyDown: handleEnterPressed
105
99
  })
106
100
  }));
107
- };
101
+ }
108
102
 
109
103
  export { Search };
@@ -2,51 +2,45 @@
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
6
- import { Format } from '@react-fabric/utilities';
7
- import classNames from 'classnames';
5
+ import { Format, cn } from '@react-fabric/utilities';
8
6
  import { useState, useDeferredValue, useMemo, useEffect, useCallback, Fragment } from 'react';
9
7
  import { InputWrapper } from '../internal/InputWrapper.js';
10
8
  import { useRanger } from '../ranger/index.js';
9
+ import '@floating-ui/react';
10
+ import '@react-fabric/core';
11
+ import { getWrapperProps } from '../utils/getProps.js';
11
12
  import { jsx, jsxs } from 'react/jsx-runtime';
12
13
 
13
- var _excluded = ["error", "name", "value", "step", "min", "max", "height", "color", "vertical", "showLabels", "showValue", "minLabel", "maxLabel", "ranges", "useInfinity", "format", "invalid", "autoFocus", "disabled", "readOnly", "onBlur", "onChange", "onEnterPressed", "onFocus", "onSlide"];
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
- 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
+ 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
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.
18
21
  */
19
- var Slider = function Slider(_ref) {
20
- var error = _ref.error;
21
- _ref.name;
22
- var value = _ref.value,
23
- _ref$step = _ref.step,
24
- step = _ref$step === void 0 ? 1 : _ref$step,
25
- _ref$min = _ref.min,
26
- min = _ref$min === void 0 ? 0 : _ref$min,
27
- _ref$max = _ref.max,
28
- max = _ref$max === void 0 ? 100 : _ref$max,
29
- _ref$height = _ref.height,
30
- height = _ref$height === void 0 ? 192 : _ref$height,
31
- color = _ref.color,
32
- vertical = _ref.vertical,
33
- showLabels = _ref.showLabels,
34
- showValue = _ref.showValue,
35
- minLabel = _ref.minLabel,
36
- maxLabel = _ref.maxLabel,
37
- ranges = _ref.ranges,
38
- useInfinity = _ref.useInfinity,
39
- format = _ref.format,
40
- invalid = _ref.invalid;
41
- _ref.autoFocus;
42
- var disabled = _ref.disabled,
43
- readOnly = _ref.readOnly;
44
- _ref.onBlur;
45
- var onChange = _ref.onChange;
46
- _ref.onEnterPressed;
47
- _ref.onFocus;
48
- var onSlide = _ref.onSlide,
49
- rest = _objectWithoutProperties(_ref, _excluded);
22
+ function Slider(props) {
23
+ var value = props.value,
24
+ showLabels = props.showLabels,
25
+ showValue = props.showValue,
26
+ onChange = props.onChange,
27
+ onSlide = props.onSlide,
28
+ ranges = props.ranges,
29
+ useInfinity = props.useInfinity,
30
+ invalid = props.invalid,
31
+ _props$step = props.step,
32
+ step = _props$step === void 0 ? 1 : _props$step,
33
+ _props$min = props.min,
34
+ min = _props$min === void 0 ? 0 : _props$min,
35
+ _props$max = props.max,
36
+ max = _props$max === void 0 ? 100 : _props$max,
37
+ _props$height = props.height,
38
+ height = _props$height === void 0 ? 192 : _props$height,
39
+ vertical = props.vertical,
40
+ minLabel = props.minLabel,
41
+ maxLabel = props.maxLabel,
42
+ format = props.format,
43
+ color = props.color;
50
44
  var _useState = useState(0),
51
45
  _useState2 = _slicedToArray(_useState, 2),
52
46
  actualValue = _useState2[0],
@@ -65,15 +59,17 @@ var Slider = function Slider(_ref) {
65
59
  return (_ranges$slice$ = ranges === null || ranges === void 0 ? void 0 : ranges.slice(-1)[0]) !== null && _ranges$slice$ !== void 0 ? _ranges$slice$ : max;
66
60
  }, [max, ranges]);
67
61
  useEffect(function () {
62
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
68
63
  setActualValue(useInfinity && deferred === Infinity ? max : deferred !== null && deferred !== void 0 ? deferred : min);
69
64
  }, [deferred, min, max, useInfinity]);
70
65
  useEffect(function () {
66
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
71
67
  setDisplayValue(!!showValue);
72
68
  }, [showValue]);
73
69
  var handleChange = useCallback(function (value) {
74
70
  var val = useInfinity && value === max ? Infinity : value;
75
71
  setActualValue(val !== null && val !== void 0 ? val : 0);
76
- onChange === null || onChange === void 0 || onChange(val !== null && val !== void 0 ? val : undefined);
72
+ onChange === null || onChange === void 0 || onChange(val !== null && val !== void 0 ? val : null);
77
73
  }, [onChange, max, useInfinity]);
78
74
  var minDisplay = useMemo(function () {
79
75
  return /*#__PURE__*/jsx("span", {
@@ -108,56 +104,51 @@ var Slider = function Slider(_ref) {
108
104
  return handleChange(values[0]);
109
105
  }
110
106
  });
111
- return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({}, rest), {}, {
112
- noOutline: true,
113
- error: error,
114
- invalid: invalid,
115
- isDisabled: disabled,
116
- isReadOnly: readOnly,
117
- canClear: !!actualValue,
107
+ return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({}, getWrapperProps(props)), {}, {
108
+ borderless: true,
109
+ focusRing: true,
118
110
  children: /*#__PURE__*/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"),
111
+ className: cn("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
112
  "data-vertical": !!vertical,
121
113
  style: invalid ? undefined : {
122
114
  color: color
123
115
  },
124
116
  children: [showLabels && (vertical ? maxDisplay : minDisplay), /*#__PURE__*/jsxs("div", {
125
117
  ref: rangerInstance.trackElRef,
126
- className: classNames("flex-auto relative flex items-center", vertical ? "my-2 w-8" : "mx-2 h-8"),
118
+ className: cn("relative flex items-center", vertical ? "my-2 w-8" : "flex-1 mx-2 h-8"),
127
119
  style: {
128
120
  height: vertical ? height : undefined
129
121
  },
130
- children: [rangerInstance.ticks.map(function (_ref2) {
131
- _ref2.value;
132
- var key = _ref2.key,
133
- styles = _ref2.styles;
122
+ children: [rangerInstance.ticks.map(function (_ref) {
123
+ var key = _ref.key,
124
+ styles = _ref.styles;
134
125
  return /*#__PURE__*/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"),
126
+ className: cn("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
127
  style: styles
137
128
  }, key);
138
- }), rangerInstance.segments.map(function (_ref3) {
139
- var key = _ref3.key,
140
- styles = _ref3.styles,
141
- active = _ref3.active;
129
+ }), rangerInstance.segments.map(function (_ref2) {
130
+ var key = _ref2.key,
131
+ styles = _ref2.styles,
132
+ active = _ref2.active;
142
133
  return /*#__PURE__*/jsx("div", {
143
- className: classNames("absolute", active ? "bg-current z-1 opacity-90" : "bg-invert opacity-5 z-0", vertical ? "-bottom-1 left-1/2 -translate-x-1/2" : "top-1/2 -translate-y-1/2", !vertical && (active ? "h-1" : "h-0.5"), vertical && (active ? "w-1" : "w-0.5")),
134
+ className: cn("absolute", active ? "bg-current z-1 opacity-90" : "bg-invert opacity-5 z-0", vertical ? "-bottom-1 left-1/2 -translate-x-1/2" : "top-1/2 -translate-y-1/2", !vertical && (active ? "h-1" : "h-0.5"), vertical && (active ? "w-1" : "w-0.5")),
144
135
  style: styles
145
136
  }, key);
146
- }), rangerInstance.handles.map(function (_ref4) {
147
- var key = _ref4.key,
148
- value = _ref4.value,
149
- props = _ref4.props,
150
- styles = _ref4.styles,
151
- percentage = _ref4.percentage,
152
- valueStyles = _ref4.valueStyles;
137
+ }), rangerInstance.handles.map(function (_ref3) {
138
+ var key = _ref3.key,
139
+ value = _ref3.value,
140
+ props = _ref3.props,
141
+ styles = _ref3.styles,
142
+ percentage = _ref3.percentage,
143
+ valueStyles = _ref3.valueStyles;
153
144
  return /*#__PURE__*/jsxs(Fragment, {
154
145
  children: [/*#__PURE__*/jsx("button", _objectSpread(_objectSpread({
155
146
  type: "button",
156
- className: classNames("bg-current cursor-pointer appearance-none h-3 w-3 rounded-full z-3 absolute", "focus:ring-2 focus:ring-offset-2", vertical && "left-1/2 -ml-1.5")
147
+ className: cn("bg-current cursor-pointer appearance-none h-3 w-3 rounded-full z-3 absolute", "focus:ring-2 focus:ring-offset-2", vertical && "left-1/2 -ml-1.5")
157
148
  }, props), {}, {
158
149
  style: styles
159
150
  })), displayValue && /*#__PURE__*/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")),
151
+ className: cn("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 ? "inset-e-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:inset-s-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:inset-e-0" : "ms-3 ltr:before:-translate-x-0.5 rtl:before:translate-x-0.5 before:inset-s-0")),
161
152
  "data-align": percentage > 50 ? "start" : "end",
162
153
  style: valueStyles,
163
154
  children: value === Infinity || useInfinity && value === max ? maxLabel !== null && maxLabel !== void 0 ? maxLabel : "∞" : Format.number(value, format)
@@ -167,6 +158,6 @@ var Slider = function Slider(_ref) {
167
158
  }), showLabels && (vertical ? minDisplay : maxDisplay)]
168
159
  })
169
160
  }));
170
- };
161
+ }
171
162
 
172
163
  export { Slider };
@@ -1,19 +1,25 @@
1
1
  'use client';
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
4
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
6
- import classNames from 'classnames';
7
- import { useState, useDeferredValue, useEffect, useCallback, Fragment } from 'react';
5
+ import { useControlledValue } from '@react-fabric/core';
6
+ import { cn } from '@react-fabric/utilities';
7
+ import { useCallback, Fragment } from 'react';
8
8
  import { ErrorIcon } from '../internal/ErrorIcon.js';
9
- import '@react-fabric/utilities';
10
- import { getBgClass, getColor, getColorClass } from '../utils/getColor.js';
9
+ import '@floating-ui/react';
10
+ import { getColor, getColorClass, getBgClass } from '../utils/getColor.js';
11
11
  import { jsxs, jsx } from 'react/jsx-runtime';
12
12
 
13
13
  var _excluded = ["ref", "label", "checked", "invalid", "disabled", "error", "width", "color", "name", "onLabel", "offLabel", "onLabelColor", "offLabelColor", "defaultColor", "onChange"];
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
- 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
- var Switch = function Switch(_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
+ /**
17
+ * Switch input component with custom labels and colors.
18
+ * This component renders a switch input with optional labels for the "on" and "off" states,
19
+ * and allows for custom colors for the switch background and labels.
20
+ * It supports disabled and invalid states, and handles change events.
21
+ */
22
+ function Switch(_ref) {
17
23
  var ref = _ref.ref,
18
24
  label = _ref.label,
19
25
  checked = _ref.checked,
@@ -21,56 +27,52 @@ var Switch = function Switch(_ref) {
21
27
  disabled = _ref.disabled,
22
28
  error = _ref.error,
23
29
  width = _ref.width,
24
- color = _ref.color;
25
- _ref.name;
26
- var onLabel = _ref.onLabel,
30
+ color = _ref.color,
31
+ name = _ref.name,
32
+ onLabel = _ref.onLabel,
27
33
  offLabel = _ref.offLabel,
28
34
  onLabelColor = _ref.onLabelColor,
29
35
  offLabelColor = _ref.offLabelColor,
30
36
  defaultColor = _ref.defaultColor,
31
37
  onChange = _ref.onChange,
32
38
  rest = _objectWithoutProperties(_ref, _excluded);
33
- var _useState = useState(false),
34
- _useState2 = _slicedToArray(_useState, 2),
35
- actualValue = _useState2[0],
36
- setActualValue = _useState2[1];
37
- var deferred = useDeferredValue(!!checked);
38
- useEffect(function () {
39
- setActualValue(deferred);
40
- }, [deferred]);
39
+ var _useControlledValue = useControlledValue(!!checked, false),
40
+ currentValue = _useControlledValue.currentValue,
41
+ updateValue = _useControlledValue.updateValue;
41
42
  var handleChange = useCallback(function (e) {
42
43
  var _e$target$checked, _e$target$checked2;
43
- setActualValue((_e$target$checked = e === null || e === void 0 ? void 0 : e.target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : false);
44
+ updateValue((_e$target$checked = e === null || e === void 0 ? void 0 : e.target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : false);
44
45
  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
- }, [onChange]);
46
+ }, [onChange, updateValue]);
46
47
  return /*#__PURE__*/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"),
48
+ className: cn(invalid ? "ring-danger-500" : "ring-primary-500", disabled ? "opacity-50 cursor-not-allowed" : "opacity-85 hover:opacity-100 cursor-pointer", "inline-flex gap-1 py-1 items-center relative rounded ring-offset-2 has-focus-visible:ring-1"),
48
49
  style: {
49
50
  width: width
50
51
  },
51
52
  children: [/*#__PURE__*/jsxs("div", {
52
- className: classNames(actualValue && getBgClass(color ? "".concat(color, "-500") : "primary-500"), !actualValue && (defaultColor ? 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"),
53
+ className: cn(currentValue && getBgClass(color ? "".concat(color, "-500") : "primary-500"), !currentValue && (defaultColor ? getBgClass("".concat(defaultColor, "-500")) : "bg-tint-200"), "relative grid grid-cols-2 items-center h-[1.5em] min-w-[2.5em] rounded-full p-[0.25em] transition-colors duration-200 ease-in-out"),
53
54
  style: {
54
- backgroundColor: actualValue ? getColor(color) : getColor(defaultColor)
55
+ backgroundColor: currentValue ? getColor(color) : getColor(defaultColor)
55
56
  },
56
57
  children: [/*#__PURE__*/jsx("input", _objectSpread({
57
- className: classNames("appearance-none absolute opacity-0 inset-0 bg-transparent border-none outline-none ring-0"),
58
+ className: cn("appearance-none absolute opacity-0 inset-0 bg-transparent border-none cursor-[inherit] outline-none ring-0"),
58
59
  "aria-invalid": invalid,
59
60
  "aria-disabled": disabled,
60
61
  disabled: disabled,
61
62
  "aria-errormessage": error,
62
63
  type: "checkbox",
64
+ name: name,
63
65
  ref: ref,
64
66
  size: 1,
65
67
  tabIndex: 0,
66
68
  autoComplete: "off",
67
- checked: actualValue,
69
+ checked: !!currentValue,
68
70
  onChange: handleChange
69
71
  }, rest)), /*#__PURE__*/jsx("span", {
70
72
  "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"),
73
+ className: cn(!disabled && "shadow-sm", currentValue ? "translate-x-full" : "translate-x-0", "pointer-events-none inline-block h-[1em] inset-s-[0.25em] absolute rounded-full bg-white ring-0 transition duration-200 ease-in-out"),
72
74
  style: {
73
- width: "calc(50% - 0.25rem)"
75
+ width: "calc(50% - 0.25em)"
74
76
  }
75
77
  }), (!!onLabel || !!offLabel) && /*#__PURE__*/jsxs(Fragment, {
76
78
  children: [/*#__PURE__*/jsx("span", {
@@ -91,10 +93,10 @@ var Switch = function Switch(_ref) {
91
93
  invalid: invalid,
92
94
  error: error
93
95
  }), label && /*#__PURE__*/jsx("span", {
94
- className: "flex-initial leading-5 truncate",
96
+ className: "flex-initial leading-tight truncate",
95
97
  children: label
96
98
  })]
97
99
  });
98
- };
100
+ }
99
101
 
100
102
  export { Switch };