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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
  2. package/css/_colorPicker.css +65 -0
  3. package/{src/internal/Field.module.css → css/_field.css} +66 -30
  4. package/{src/input/File.module.css → css/_file.css} +21 -6
  5. package/css/styles.css +27 -0
  6. package/dist/cjs/builder/FileField.js +40 -28
  7. package/dist/cjs/builder/FormField.js +50 -34
  8. package/dist/cjs/builder/SchemaEditor.js +72 -0
  9. package/dist/cjs/builder/components/AddSchemaFields.js +63 -0
  10. package/dist/cjs/builder/components/SchemaArrayForm.js +145 -0
  11. package/dist/cjs/builder/components/SchemaField.js +414 -0
  12. package/dist/cjs/form/Controller.js +46 -1
  13. package/dist/cjs/form/Form.js +71 -13
  14. package/dist/cjs/hooks/useFileUploader.js +16 -0
  15. package/dist/cjs/hooks/useFormBuilder.js +67 -18
  16. package/dist/cjs/i18n/ar.json.js +5 -4
  17. package/dist/cjs/i18n/en.json.js +5 -5
  18. package/dist/cjs/index.js +12 -2
  19. package/dist/cjs/input/ArrayInput.js +128 -38
  20. package/dist/cjs/input/AvatarInput.js +43 -23
  21. package/dist/cjs/input/Checkbox.js +18 -8
  22. package/dist/cjs/input/ColorInput.js +114 -59
  23. package/dist/cjs/input/ColorPicker.js +60 -76
  24. package/dist/cjs/input/DateInput.js +197 -0
  25. package/dist/cjs/input/Field.js +10 -4
  26. package/dist/cjs/input/File.js +15 -8
  27. package/dist/cjs/input/Hidden.js +13 -2
  28. package/dist/cjs/input/Input.js +24 -10
  29. package/dist/cjs/input/Number.js +22 -10
  30. package/dist/cjs/input/Password.js +23 -13
  31. package/dist/cjs/input/Radio.js +14 -5
  32. package/dist/cjs/input/RadioGroup.js +10 -1
  33. package/dist/cjs/input/{Range.js → RangeSlider.js} +16 -8
  34. package/dist/cjs/input/Search.js +32 -22
  35. package/dist/cjs/input/Slider.js +12 -6
  36. package/dist/cjs/input/Switch.js +20 -9
  37. package/dist/cjs/input/Textarea.js +29 -8
  38. package/dist/cjs/internal/ErrorIcon.js +2 -2
  39. package/dist/cjs/internal/FieldWrapper.js +11 -4
  40. package/dist/cjs/internal/InputWrapper.js +29 -22
  41. package/dist/cjs/select/AutoComplete.js +22 -13
  42. package/dist/cjs/select/DualList.js +34 -12
  43. package/dist/cjs/select/List.js +49 -21
  44. package/dist/cjs/select/Options.js +49 -42
  45. package/dist/cjs/select/Select.js +21 -10
  46. package/dist/cjs/select/useSelect.js +22 -11
  47. package/dist/cjs/types/schema.js +43 -0
  48. package/dist/cjs/utils/eventHandlers.js +15 -5
  49. package/dist/esm/builder/FileField.js +42 -30
  50. package/dist/esm/builder/FormField.js +50 -34
  51. package/dist/esm/builder/SchemaEditor.js +72 -0
  52. package/dist/esm/builder/components/AddSchemaFields.js +63 -0
  53. package/dist/esm/builder/components/SchemaArrayForm.js +145 -0
  54. package/dist/esm/builder/components/SchemaField.js +414 -0
  55. package/dist/esm/form/Controller.js +46 -1
  56. package/dist/esm/form/Form.js +73 -16
  57. package/dist/esm/hooks/useFileUploader.js +16 -0
  58. package/dist/esm/hooks/useFormBuilder.js +65 -16
  59. package/dist/esm/i18n/ar.json.js +5 -4
  60. package/dist/esm/i18n/en.json.js +5 -5
  61. package/dist/esm/index.js +6 -2
  62. package/dist/esm/input/ArrayInput.js +128 -38
  63. package/dist/esm/input/AvatarInput.js +43 -23
  64. package/dist/esm/input/Checkbox.js +19 -9
  65. package/dist/esm/input/ColorInput.js +116 -61
  66. package/dist/esm/input/ColorPicker.js +60 -76
  67. package/dist/esm/input/DateInput.js +197 -0
  68. package/dist/esm/input/Field.js +11 -5
  69. package/dist/esm/input/File.js +18 -11
  70. package/dist/esm/input/Hidden.js +13 -2
  71. package/dist/esm/input/Input.js +26 -12
  72. package/dist/esm/input/Number.js +24 -12
  73. package/dist/esm/input/Password.js +26 -16
  74. package/dist/esm/input/Radio.js +15 -6
  75. package/dist/esm/input/RadioGroup.js +11 -2
  76. package/dist/esm/input/{Range.js → RangeSlider.js} +16 -8
  77. package/dist/esm/input/Search.js +35 -25
  78. package/dist/esm/input/Slider.js +12 -6
  79. package/dist/esm/input/Switch.js +20 -9
  80. package/dist/esm/input/Textarea.js +30 -9
  81. package/dist/esm/internal/ErrorIcon.js +3 -3
  82. package/dist/esm/internal/FieldWrapper.js +11 -4
  83. package/dist/esm/internal/InputWrapper.js +30 -23
  84. package/dist/esm/select/AutoComplete.js +23 -14
  85. package/dist/esm/select/DualList.js +35 -13
  86. package/dist/esm/select/List.js +50 -22
  87. package/dist/esm/select/Options.js +49 -42
  88. package/dist/esm/select/Select.js +22 -11
  89. package/dist/esm/select/useSelect.js +23 -12
  90. package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
  91. package/dist/esm/utils/eventHandlers.js +15 -5
  92. package/dist/types/builder/FileField.d.ts +4 -2
  93. package/dist/types/builder/FormField.d.ts +3 -1
  94. package/dist/types/builder/SchemaEditor.d.ts +9 -0
  95. package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
  96. package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
  97. package/dist/types/builder/components/SchemaField.d.ts +10 -0
  98. package/dist/types/form/Controller.d.ts +47 -2
  99. package/dist/types/form/Form.d.ts +49 -6
  100. package/dist/types/hooks/useFileUploader.d.ts +16 -0
  101. package/dist/types/hooks/useFormBuilder.d.ts +38 -1
  102. package/dist/types/index.d.ts +6 -3
  103. package/dist/types/input/ArrayInput.d.ts +69 -12
  104. package/dist/types/input/AvatarInput.d.ts +23 -3
  105. package/dist/types/input/Checkbox.d.ts +13 -4
  106. package/dist/types/input/ColorInput.d.ts +15 -2
  107. package/dist/types/input/ColorPicker.d.ts +11 -1
  108. package/dist/types/input/DateInput.d.ts +28 -0
  109. package/dist/types/input/Field.d.ts +5 -1
  110. package/dist/types/input/File.d.ts +9 -0
  111. package/dist/types/input/Hidden.d.ts +13 -1
  112. package/dist/types/input/Input.d.ts +9 -1
  113. package/dist/types/input/Number.d.ts +9 -1
  114. package/dist/types/input/Password.d.ts +7 -1
  115. package/dist/types/input/Radio.d.ts +9 -1
  116. package/dist/types/input/RadioGroup.d.ts +8 -1
  117. package/dist/types/input/RangeSlider.d.ts +67 -0
  118. package/dist/types/input/Search.d.ts +14 -1
  119. package/dist/types/input/Slider.d.ts +8 -2
  120. package/dist/types/input/Switch.d.ts +10 -2
  121. package/dist/types/input/Textarea.d.ts +15 -1
  122. package/dist/types/internal/FieldWrapper.d.ts +1 -1
  123. package/dist/types/internal/InputWrapper.d.ts +1 -1
  124. package/dist/types/ranger/index.d.ts +2 -2
  125. package/dist/types/select/AutoComplete.d.ts +8 -1
  126. package/dist/types/select/DualList.d.ts +21 -7
  127. package/dist/types/select/List.d.ts +9 -1
  128. package/dist/types/select/Options.d.ts +4 -3
  129. package/dist/types/select/Select.d.ts +9 -1
  130. package/dist/types/select/useSelect.d.ts +10 -6
  131. package/dist/types/types/index.d.ts +38 -10
  132. package/dist/types/types/schema.d.ts +78 -33
  133. package/dist/types/utils/eventHandlers.d.ts +2 -2
  134. package/package.json +22 -20
  135. package/src/builder/FileField.tsx +56 -30
  136. package/src/builder/FormField.tsx +52 -32
  137. package/src/builder/SchemaEditor.tsx +79 -0
  138. package/src/builder/components/AddSchemaFields.tsx +75 -0
  139. package/src/builder/components/SchemaArrayForm.tsx +155 -0
  140. package/src/builder/components/SchemaField.tsx +435 -0
  141. package/src/form/Controller.tsx +48 -3
  142. package/src/form/Form.tsx +84 -13
  143. package/src/hooks/useFileUploader.ts +16 -0
  144. package/src/hooks/useFormBuilder.tsx +70 -19
  145. package/src/i18n/ar.json +5 -4
  146. package/src/i18n/en.json +5 -5
  147. package/src/index.ts +12 -3
  148. package/src/input/ArrayInput.tsx +195 -66
  149. package/src/input/AvatarInput.tsx +66 -18
  150. package/src/input/Checkbox.tsx +22 -9
  151. package/src/input/ColorInput.tsx +128 -72
  152. package/src/input/ColorPicker.tsx +54 -72
  153. package/src/input/DateInput.tsx +260 -0
  154. package/src/input/Field.tsx +15 -11
  155. package/src/input/File.tsx +18 -16
  156. package/src/input/Hidden.tsx +17 -2
  157. package/src/input/Input.tsx +27 -13
  158. package/src/input/Number.tsx +22 -13
  159. package/src/input/Password.tsx +28 -18
  160. package/src/input/Radio.tsx +15 -6
  161. package/src/input/RadioGroup.tsx +12 -3
  162. package/src/input/{Range.tsx → RangeSlider.tsx} +17 -9
  163. package/src/input/Search.tsx +36 -25
  164. package/src/input/Slider.tsx +20 -11
  165. package/src/input/Switch.tsx +17 -6
  166. package/src/input/Textarea.tsx +34 -9
  167. package/src/internal/ErrorIcon.tsx +3 -3
  168. package/src/internal/FieldWrapper.tsx +8 -4
  169. package/src/internal/InputWrapper.tsx +56 -30
  170. package/src/select/AutoComplete.tsx +16 -6
  171. package/src/select/DualList.tsx +40 -22
  172. package/src/select/List.tsx +52 -8
  173. package/src/select/Options.tsx +50 -46
  174. package/src/select/Select.tsx +29 -10
  175. package/src/select/useSelect.tsx +26 -9
  176. package/src/types/index.ts +42 -10
  177. package/src/types/schema.ts +96 -41
  178. package/src/utils/eventHandlers.ts +14 -4
  179. package/dist/cjs/input/ArrayInput.module.css +0 -1
  180. package/dist/cjs/input/ColorPicker.module.css +0 -1
  181. package/dist/cjs/input/File.module.css +0 -1
  182. package/dist/cjs/internal/Field.module.css +0 -1
  183. package/dist/esm/input/ArrayInput.module.css +0 -1
  184. package/dist/esm/input/ColorPicker.module.css +0 -1
  185. package/dist/esm/input/File.module.css +0 -1
  186. package/dist/esm/internal/Field.module.css +0 -1
  187. package/dist/types/input/Range.d.ts +0 -59
@@ -9,9 +9,18 @@ var react = require('react');
9
9
  var ErrorIcon = require('../internal/ErrorIcon.js');
10
10
  var jsxRuntime = require('react/jsx-runtime');
11
11
 
12
- var _excluded = ["ref", "label", "value", "name", "checked", "invalid", "disabled", "error", "width", "icon", "iconChecked", "onChange"];
12
+ var _excluded = ["ref", "label", "value", "name", "checked", "invalid", "disabled", "error", "width", "icon", "iconChecked", "required", "onChange"];
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
+ * Checkbox component for rendering a checkbox input with label and error handling.
17
+ * It supports custom icons for checked and unchecked states, and handles disabled and invalid states.
18
+ * The component uses a deferred value to manage the checked state, ensuring smooth updates.
19
+ * It also provides an error icon to indicate validation errors.
20
+ *
21
+ * @param {CheckboxProps} props - The properties for the Checkbox component.
22
+ * @returns {JSX.Element} The rendered Checkbox component.
23
+ */
15
24
  var Checkbox = function Checkbox(_ref) {
16
25
  var ref = _ref.ref,
17
26
  label = _ref.label,
@@ -23,8 +32,9 @@ var Checkbox = function Checkbox(_ref) {
23
32
  error = _ref.error,
24
33
  width = _ref.width,
25
34
  icon = _ref.icon,
26
- iconChecked = _ref.iconChecked,
27
- onChange = _ref.onChange,
35
+ iconChecked = _ref.iconChecked;
36
+ _ref.required;
37
+ var onChange = _ref.onChange,
28
38
  rest = _objectWithoutProperties(_ref, _excluded);
29
39
  var _useState = react.useState(false),
30
40
  _useState2 = _slicedToArray(_useState, 2),
@@ -33,10 +43,10 @@ var Checkbox = function Checkbox(_ref) {
33
43
  var deferred = react.useDeferredValue(!!checked);
34
44
  var iconOn = react.useMemo(function () {
35
45
  var _ref2;
36
- return (_ref2 = iconChecked !== null && iconChecked !== void 0 ? iconChecked : icon) !== null && _ref2 !== void 0 ? _ref2 : core.CoreIcons.checkboxOn;
46
+ return (_ref2 = iconChecked !== null && iconChecked !== void 0 ? iconChecked : icon) !== null && _ref2 !== void 0 ? _ref2 : "icon-[mdi--checkbox-marked]";
37
47
  }, [icon, iconChecked]);
38
48
  var iconOff = react.useMemo(function () {
39
- return icon !== null && icon !== void 0 ? icon : core.CoreIcons.checkboxOff;
49
+ return icon !== null && icon !== void 0 ? icon : "icon-[mdi--checkbox-blank-outline]";
40
50
  }, [icon]);
41
51
  react.useEffect(function () {
42
52
  setActualValue(deferred);
@@ -47,7 +57,7 @@ var Checkbox = function Checkbox(_ref) {
47
57
  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);
48
58
  }, [onChange, value]);
49
59
  return /*#__PURE__*/jsxRuntime.jsxs("label", {
50
- className: classNames(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"),
60
+ className: classNames(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"),
51
61
  style: {
52
62
  width: width
53
63
  },
@@ -66,7 +76,7 @@ var Checkbox = function Checkbox(_ref) {
66
76
  checked: actualValue,
67
77
  onChange: handleChange
68
78
  }, rest)), /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
69
- className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white"),
79
+ className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white!"),
70
80
  size: "1.25em",
71
81
  color: invalid ? "danger" : "primary",
72
82
  icon: actualValue ? iconOn : iconOff
@@ -74,7 +84,7 @@ var Checkbox = function Checkbox(_ref) {
74
84
  invalid: invalid,
75
85
  error: error
76
86
  }), label && /*#__PURE__*/jsxRuntime.jsx("span", {
77
- className: "flex-initial leading-none truncate",
87
+ className: "flex-initial leading-tight truncate",
78
88
  children: label
79
89
  })]
80
90
  });
@@ -3,32 +3,45 @@
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');
6
7
  var core = require('@react-fabric/core');
7
- var utilities = require('@react-fabric/utilities');
8
- var classNames = require('classnames');
9
8
  var react = require('react');
9
+ var InputWrapper = require('../internal/InputWrapper.js');
10
10
  var ColorPicker = require('./ColorPicker.js');
11
11
  var jsxRuntime = require('react/jsx-runtime');
12
12
 
13
- var _excluded = ["ref", "required", "disabled", "allowClear", "invalid", "error", "value", "showPicker", "defaultColor", "decorateEnd", "decorateStart", "onChange", "noOutline"];
13
+ var _excluded = ["ref", "required", "disabled", "readOnly", "invalid", "error", "value", "showPicker", "defaultColor", "onBlur", "onFocus", "onChange", "noOutline"];
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
+ * Color input component that allows users to select a color
18
+ * and optionally use an eye dropper to pick a color from the screen.
19
+ * It uses the Floating UI library for positioning the color picker.
20
+ * It also provides a button to clear the selected color.
21
+ *
22
+ * This component is a wrapper around the `ColorPicker` component
23
+ * and provides additional functionality such as showing an eye dropper
24
+ * and handling the color selection state.
25
+ *
26
+ * @param {ColorInputProps} props - The properties for the ColorInput component.
27
+ * @returns {JSX.Element} - The rendered ColorInput component.
28
+ */
16
29
  var ColorInput = function ColorInput(_ref) {
17
30
  _ref.ref;
18
- _ref.required;
19
- var disabled = _ref.disabled,
20
- allowClear = _ref.allowClear;
21
- _ref.invalid;
22
- _ref.error;
23
- var value = _ref.value,
31
+ var required = _ref.required,
32
+ disabled = _ref.disabled,
33
+ readOnly = _ref.readOnly,
34
+ invalid = _ref.invalid,
35
+ error = _ref.error,
36
+ value = _ref.value,
24
37
  showPicker = _ref.showPicker,
25
38
  _ref$defaultColor = _ref.defaultColor,
26
39
  defaultColor = _ref$defaultColor === void 0 ? "" : _ref$defaultColor,
27
- decorateEnd = _ref.decorateEnd,
28
- decorateStart = _ref.decorateStart,
29
- onChange = _ref.onChange,
30
- noOutline = _ref.noOutline,
31
- rest = _objectWithoutProperties(_ref, _excluded);
40
+ onBlur = _ref.onBlur,
41
+ onFocus = _ref.onFocus,
42
+ onChange = _ref.onChange;
43
+ _ref.noOutline;
44
+ var rest = _objectWithoutProperties(_ref, _excluded);
32
45
  var _useState = react.useState(""),
33
46
  _useState2 = _slicedToArray(_useState, 2),
34
47
  actualValue = _useState2[0],
@@ -38,63 +51,105 @@ var ColorInput = function ColorInput(_ref) {
38
51
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
39
52
  }, [deferred]);
40
53
  var handleChange = react.useCallback(function (e) {
41
- setActualValue(e !== null && e !== void 0 ? e : defaultColor);
54
+ var value = e !== null && e !== void 0 ? e : defaultColor;
55
+ setActualValue(value);
42
56
  onChange != null && react.startTransition(function () {
43
- return onChange(e);
57
+ return onChange(value !== null && value !== void 0 ? value : null);
44
58
  });
45
- }, [onChange]);
46
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
47
- className: classNames("flex-content min-h-[1.5em] min-w-[3.5em] self-stretch flex items-center outline-tint-200 rounded", !disabled && "bg-base", !noOutline && "bg-[var(--fabric-input)] outline overflow-hidden"),
48
- children: [decorateStart && /*#__PURE__*/jsxRuntime.jsx("div", {
49
- className: classNames("text-muted leading-none flex-content", utilities.isString(decorateStart) && "px-2"),
50
- children: decorateStart
51
- }), /*#__PURE__*/jsxRuntime.jsxs(core.Dropdown, {
52
- showArrow: true,
53
- disabled: disabled,
54
- children: [/*#__PURE__*/jsxRuntime.jsx("button", {
55
- "data-ref": "button",
56
- className: "flex-1 flex items-center",
57
- children: /*#__PURE__*/jsxRuntime.jsx("div", {
58
- role: "none",
59
- className: "h-[1.5em] min-w-[1.5em] flex-1 flex items-center justify-center self-stretch cursor-pointer m-[0.25em] rounded outline outline-tint-100",
60
- style: {
61
- backgroundColor: actualValue,
62
- opacity: disabled ? 0.65 : 1,
63
- pointerEvents: disabled ? "none" : undefined
64
- },
65
- onClick: function onClick(e) {
66
- var _e$currentTarget$next;
67
- return (_e$currentTarget$next = e.currentTarget.nextElementSibling) === null || _e$currentTarget$next === void 0 ? void 0 : _e$currentTarget$next.focus();
68
- },
69
- children: !actualValue && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
70
- size: "md",
71
- className: "text-muted",
72
- icon: core.CoreIcons.colorSwatch
73
- })
59
+ }, [onChange, defaultColor]);
60
+ var arrowRef = react.useRef(null);
61
+ var _useState3 = react.useState(false),
62
+ _useState4 = _slicedToArray(_useState3, 2),
63
+ isOpen = _useState4[0],
64
+ setIsOpen = _useState4[1];
65
+ var _useFloating = react$1.useFloating({
66
+ open: isOpen,
67
+ onOpenChange: function onOpenChange(open, _, reason) {
68
+ if (reason === "reference-press") return;
69
+ setIsOpen(open);
70
+ },
71
+ strategy: "fixed",
72
+ placement: "bottom",
73
+ whileElementsMounted: react$1.autoUpdate,
74
+ middleware: [react$1.shift({
75
+ padding: 8
76
+ }), react$1.flip(), react$1.offset(9), react$1.arrow({
77
+ element: arrowRef
78
+ })]
79
+ }),
80
+ refs = _useFloating.refs,
81
+ floatingStyles = _useFloating.floatingStyles,
82
+ context = _useFloating.context;
83
+ var click = react$1.useClick(context, {
84
+ enabled: !disabled && !readOnly
85
+ });
86
+ var dismiss = react$1.useDismiss(context, {
87
+ referencePress: true
88
+ });
89
+ var _useInteractions = react$1.useInteractions([dismiss, click]),
90
+ getReferenceProps = _useInteractions.getReferenceProps,
91
+ getFloatingProps = _useInteractions.getFloatingProps;
92
+ return /*#__PURE__*/jsxRuntime.jsxs(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
93
+ showClear: actualValue !== defaultColor && !disabled && !readOnly,
94
+ onClear: handleChange,
95
+ invalid: invalid,
96
+ readOnly: readOnly,
97
+ disabled: disabled,
98
+ required: required,
99
+ error: error
100
+ }, rest), {}, {
101
+ children: [/*#__PURE__*/jsxRuntime.jsx("button", _objectSpread(_objectSpread({
102
+ "data-ref": "button",
103
+ type: "button",
104
+ className: "flex-1 flex items-center",
105
+ ref: refs.setReference
106
+ }, getReferenceProps({
107
+ onBlur: onBlur,
108
+ onFocus: onFocus
109
+ })), {}, {
110
+ "data-inner-clickable": "true",
111
+ "data-dropdown-open": isOpen ? true : undefined,
112
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
113
+ role: "none",
114
+ className: "h-[1.5em] min-w-[1.5em] flex-1 flex items-center justify-center self-stretch cursor-pointer m-[0.25em] rounded outline outline-tint-100",
115
+ style: {
116
+ backgroundColor: actualValue,
117
+ opacity: disabled ? 0.65 : 1,
118
+ pointerEvents: disabled ? "none" : undefined
119
+ },
120
+ children: !actualValue && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
121
+ size: "md",
122
+ className: "text-muted",
123
+ icon: "icon-[mdi--palette]"
74
124
  })
75
- }), /*#__PURE__*/jsxRuntime.jsx(ColorPicker.ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
125
+ })
126
+ })), isOpen && /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
127
+ ref: refs.setFloating,
128
+ style: _objectSpread({
129
+ zIndex: "var(--z-popover)"
130
+ }, floatingStyles),
131
+ "data-ref": "dropdownBody"
132
+ }, getFloatingProps()), {}, {
133
+ children: [/*#__PURE__*/jsxRuntime.jsx(ColorPicker.ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
76
134
  onChange: handleChange,
77
135
  defaultColor: defaultColor,
78
136
  value: actualValue
79
- }))]
80
- }), !disabled && showPicker && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
81
- icon: core.CoreIcons.colorPicker,
137
+ })), /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingArrow, {
138
+ ref: arrowRef,
139
+ context: context,
140
+ strokeWidth: 0.5,
141
+ className: "fill-base stroke-muted"
142
+ })]
143
+ })), !disabled && showPicker && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
144
+ className: "flex-content p-1",
145
+ icon: "icon-[mdi--eyedropper]",
82
146
  onClick: function onClick() {
83
147
  return window.EyeDropper && new window.EyeDropper().open().then(function (resp) {
84
148
  return handleChange(resp.sRGBHex);
85
149
  });
86
150
  }
87
- }), decorateEnd && /*#__PURE__*/jsxRuntime.jsx("div", {
88
- className: classNames("text-muted leading-none flex-content", utilities.isString(decorateEnd) && "px-2"),
89
- children: decorateEnd
90
- }), !disabled && allowClear && actualValue !== defaultColor && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
91
- icon: core.CoreIcons.close,
92
- onClick: function onClick() {
93
- return handleChange();
94
- },
95
- className: classNames("text-tint-500 hover:text-tint-700 p-[0.25em] flex-content")
96
151
  })]
97
- });
152
+ }));
98
153
  };
99
154
 
100
155
  exports.ColorInput = ColorInput;
@@ -5,13 +5,22 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
5
  var Color = require('color');
6
6
  var react = require('react');
7
7
  var reactColor = require('react-color');
8
- var ColorPicker_module = require('./ColorPicker.module.css');
9
8
  var jsxRuntime = require('react/jsx-runtime');
10
9
 
11
10
  var _excluded = ["a"],
12
11
  _excluded2 = ["a"];
13
12
  var DEFAULT_SWATCHES = [Color("#d7323a").mix(Color("#171a1c"), 0.5).hex(), Color("#ff781c").mix(Color("#171a1c"), 0.5).hex(), Color("#f7b731").mix(Color("#171a1c"), 0.5).hex(), Color("#88ab1b").mix(Color("#171a1c"), 0.5).hex(), Color("#22aa85").mix(Color("#171a1c"), 0.5).hex(), Color("#399bec").mix(Color("#171a1c"), 0.5).hex(), Color("#4862c8").mix(Color("#171a1c"), 0.5).hex(), Color("#aa66cf").mix(Color("#171a1c"), 0.5).hex(), Color("#f43f7b").mix(Color("#171a1c"), 0.5).hex(), Color("#a37f4f").mix(Color("#171a1c"), 0.5).hex(), "#d7323a", "#ff781c", "#f7b731", "#88ab1b", "#22aa85", "#399bec", "#4862c8", "#aa66cf", "#f43f7b", "#a37f4f", Color("#d7323a").mix(Color("#f1f3f4"), 0.5).hex(), Color("#ff781c").mix(Color("#f1f3f4"), 0.5).hex(), Color("#f7b731").mix(Color("#f1f3f4"), 0.5).hex(), Color("#88ab1b").mix(Color("#f1f3f4"), 0.5).hex(), Color("#22aa85").mix(Color("#f1f3f4"), 0.5).hex(), Color("#399bec").mix(Color("#f1f3f4"), 0.5).hex(), Color("#4862c8").mix(Color("#f1f3f4"), 0.5).hex(), Color("#aa66cf").mix(Color("#f1f3f4"), 0.5).hex(), Color("#f43f7b").mix(Color("#f1f3f4"), 0.5).hex(), Color("#a37f4f").mix(Color("#f1f3f4"), 0.5).hex(), "#171a1c", "#2d3439", "#444e55", "#5b6971", "#71838e", "#86959e", "#9ca8b0", "#b8c1c6", "#d5dadd", "#f1f3f4"];
14
13
 
14
+ /**
15
+ * ColorPicker component allows users to select a color using a color picker UI.
16
+ * It supports swatches, alpha transparency, and custom styles.
17
+ * The component uses the `react-color` library for the color picker functionality.
18
+ *
19
+ * @param {ColorProps} props - The properties for the ColorPicker component.
20
+ * @returns {JSX.Element} The rendered ColorPicker component.
21
+ *
22
+ * @see {@link https://react-color.github.io/react-color/} for more details on the color picker library.
23
+ */
15
24
  // eslint-disable-next-line react/display-name
16
25
  var ColorPicker = /*#__PURE__*/react.memo(function (_ref) {
17
26
  var value = _ref.value,
@@ -35,87 +44,62 @@ var ColorPicker = /*#__PURE__*/react.memo(function (_ref) {
35
44
  return onChange(e);
36
45
  });
37
46
  }, [onChange]);
38
- return /*#__PURE__*/jsxRuntime.jsx(reactColor.SketchPicker, {
39
- width: "16rem",
40
- className: ColorPicker_module.colorPicker,
41
- styles: {
42
- "default": {
43
- hue: {
44
- borderRadius: "99px",
45
- boxShadow: "0 0 1px 1px var(--color-shadow)"
46
- },
47
- alpha: {
48
- height: "1rem",
49
- borderRadius: "99px",
50
- backgroundColor: "var(--fabric-bg)",
51
- boxShadow: "0 0 1px 1px var(--color-shadow)"
52
- },
53
- color: {
54
- boxShadow: "0 0 1px 1px var(--color-shadow)"
55
- },
56
- saturation: {
57
- boxShadow: "0 0 1px 1px var(--color-shadow)"
58
- },
59
- activeColor: {
60
- boxShadow: "0 0 1px 1px var(--color-shadow)"
61
- },
62
- picker: {
63
- backgroundColor: "var(--fabric-bg)",
64
- boxShadow: "0 0 0 1px var(--color-shadow), 0 0 8px var(--fabric-shadow)"
65
- },
66
- Alpha: {
47
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
48
+ role: "none"
49
+ // prevent default on mouse down to avoid selection issues
50
+ ,
51
+ onMouseDown: function onMouseDown(e) {
52
+ return e.preventDefault();
53
+ },
54
+ children: /*#__PURE__*/jsxRuntime.jsx(reactColor.SketchPicker, {
55
+ width: "16rem",
56
+ className: "fabric-colorPicker",
57
+ styles: {
58
+ "default": {
59
+ hue: {
60
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
61
+ },
67
62
  alpha: {
68
- paddingRight: "calc(1rem - 2px)"
63
+ backgroundColor: "var(--fabric-bg)",
64
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
69
65
  },
70
- slider: {
71
- width: "calc(1rem - 2px)",
72
- borderRadius: "99px",
73
- height: "calc(1rem - 2px)",
74
- transform: "none"
75
- }
76
- },
77
- Hue: {
78
- hue: {
79
- paddingRight: "calc(1rem - 2px)"
66
+ color: {
67
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
80
68
  },
81
- slider: {
82
- width: "calc(1rem - 2px)",
83
- borderRadius: "99px",
84
- height: "calc(1rem - 2px)",
85
- transform: "none"
86
- }
87
- },
88
- Saturation: {
89
- circle: {
90
- width: "0.5rem",
91
- borderRadius: "99px",
92
- height: "0.5rem",
93
- transform: "translate(-0.25rem, -0.25rem)"
69
+ saturation: {
70
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
71
+ },
72
+ activeColor: {
73
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
74
+ },
75
+ picker: {
76
+ backgroundColor: "var(--fabric-bg)",
77
+ boxShadow: "0 0 0 1px var(--color-shadow), 0 0 8px var(--fabric-shadow)"
78
+ },
79
+ checkboard: {
80
+ white: "transparent",
81
+ black: "red"
94
82
  }
95
- },
96
- checkboard: {
97
- white: "transparent",
98
- black: "red"
99
83
  }
84
+ },
85
+ color: actualValue,
86
+ presetColors: swatches,
87
+ disableAlpha: hideAlpha,
88
+ onChange: function onChange(_ref2) {
89
+ var _ref2$rgb = _ref2.rgb,
90
+ _ref2$rgb$a = _ref2$rgb.a,
91
+ a = _ref2$rgb$a === void 0 ? 1 : _ref2$rgb$a,
92
+ rgb = _objectWithoutProperties(_ref2$rgb, _excluded);
93
+ return setActualValue(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
94
+ },
95
+ onChangeComplete: function onChangeComplete(_ref3) {
96
+ var _ref3$rgb = _ref3.rgb,
97
+ _ref3$rgb$a = _ref3$rgb.a,
98
+ a = _ref3$rgb$a === void 0 ? 1 : _ref3$rgb$a,
99
+ rgb = _objectWithoutProperties(_ref3$rgb, _excluded2);
100
+ return handleChange(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
100
101
  }
101
- },
102
- color: actualValue,
103
- presetColors: swatches,
104
- disableAlpha: hideAlpha,
105
- onChange: function onChange(_ref2) {
106
- var _ref2$rgb = _ref2.rgb,
107
- _ref2$rgb$a = _ref2$rgb.a,
108
- a = _ref2$rgb$a === void 0 ? 1 : _ref2$rgb$a,
109
- rgb = _objectWithoutProperties(_ref2$rgb, _excluded);
110
- return setActualValue(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
111
- },
112
- onChangeComplete: function onChangeComplete(_ref3) {
113
- var _ref3$rgb = _ref3.rgb,
114
- _ref3$rgb$a = _ref3$rgb.a,
115
- a = _ref3$rgb$a === void 0 ? 1 : _ref3$rgb$a,
116
- rgb = _objectWithoutProperties(_ref3$rgb, _excluded2);
117
- return handleChange(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
118
- }
102
+ })
119
103
  });
120
104
  });
121
105
 
@@ -0,0 +1,197 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
+ var react$1 = require('@floating-ui/react');
7
+ var date = require('@react-fabric/date');
8
+ var utilities = require('@react-fabric/utilities');
9
+ var classNames = require('classnames');
10
+ var react = require('react');
11
+ var InputWrapper = require('../internal/InputWrapper.js');
12
+ var eventHandlers = require('../utils/eventHandlers.js');
13
+ var jsxRuntime = require('react/jsx-runtime');
14
+
15
+ var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "defaultValue", "autoFocus", "error", "type", "onBlur", "onFocus", "onChange", "onEnterPressed", "format", "min", "max"];
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
+ 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
+ * Date input component that allows users to select a date or datetime.
20
+ * It uses the Floating UI library for positioning the date picker.
21
+ * It also provides a button to clear the selected date.
22
+ * The component supports both date and datetime types, with appropriate formatting.
23
+ *
24
+ * @param {DateProps} props - The properties for the DateInput component.
25
+ * @returns {JSX.Element} - The rendered DateInput component.
26
+ */
27
+ var DateInput = function DateInput(_ref) {
28
+ var ref = _ref.ref,
29
+ name = _ref.name,
30
+ value = _ref.value,
31
+ invalid = _ref.invalid,
32
+ readOnly = _ref.readOnly,
33
+ disabled = _ref.disabled,
34
+ required = _ref.required,
35
+ placeholder = _ref.placeholder,
36
+ defaultValue = _ref.defaultValue,
37
+ autoFocus = _ref.autoFocus,
38
+ error = _ref.error,
39
+ _ref$type = _ref.type,
40
+ type = _ref$type === void 0 ? "date" : _ref$type,
41
+ onBlur = _ref.onBlur,
42
+ onFocus = _ref.onFocus,
43
+ onChange = _ref.onChange,
44
+ onEnterPressed = _ref.onEnterPressed;
45
+ _ref.format;
46
+ var min = _ref.min,
47
+ max = _ref.max,
48
+ rest = _objectWithoutProperties(_ref, _excluded);
49
+ var _useState = react.useState(""),
50
+ _useState2 = _slicedToArray(_useState, 2),
51
+ actualValue = _useState2[0],
52
+ setActualValue = _useState2[1];
53
+ var _useState3 = react.useState(""),
54
+ _useState4 = _slicedToArray(_useState3, 2),
55
+ inputValue = _useState4[0],
56
+ setInputValue = _useState4[1];
57
+ var deferred = react.useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
58
+ var inputFormat = react.useMemo(function () {
59
+ return type === "datetime" ? "yyyy-MM-dd HH:mm" : "yyyy-MM-dd";
60
+ }, [type]);
61
+ react.useEffect(function () {
62
+ setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
63
+ setInputValue(deferred ? date.DateUtil.format(deferred, inputFormat) : "");
64
+ }, [deferred, inputFormat]);
65
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
66
+ var handleChange = react.useCallback(function (e) {
67
+ var _e$currentTarget$valu;
68
+ var value = (_e$currentTarget$valu = e === null || e === void 0 ? void 0 : e.currentTarget.value) !== null && _e$currentTarget$valu !== void 0 ? _e$currentTarget$valu : defaultValue;
69
+ if (value) {
70
+ var _parsed$toISOString;
71
+ var parsed = date.DateUtil.parseDate(value);
72
+ setActualValue(parsed === null || parsed === void 0 || (_parsed$toISOString = parsed.toISOString) === null || _parsed$toISOString === void 0 ? void 0 : _parsed$toISOString.call(parsed));
73
+ setInputValue(date.DateUtil.format(parsed, inputFormat));
74
+ onChange != null && react.startTransition(function () {
75
+ var _parsed$toISOString2;
76
+ return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString2 = parsed.toISOString) === null || _parsed$toISOString2 === void 0 ? void 0 : _parsed$toISOString2.call(parsed));
77
+ });
78
+ } else {
79
+ setActualValue("");
80
+ setInputValue("");
81
+ onChange != null && react.startTransition(function () {
82
+ return onChange(null);
83
+ });
84
+ }
85
+ }, [onChange, inputFormat, defaultValue]);
86
+ var handleDateChange = react.useCallback(function (value) {
87
+ if (value) {
88
+ var _parsed$toISOString3;
89
+ var parsed = date.DateUtil.parseDate(value);
90
+ setActualValue(parsed === null || parsed === void 0 || (_parsed$toISOString3 = parsed.toISOString) === null || _parsed$toISOString3 === void 0 ? void 0 : _parsed$toISOString3.call(parsed));
91
+ setInputValue(date.DateUtil.format(parsed, inputFormat));
92
+ onChange != null && react.startTransition(function () {
93
+ var _parsed$toISOString4;
94
+ return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString4 = parsed.toISOString) === null || _parsed$toISOString4 === void 0 ? void 0 : _parsed$toISOString4.call(parsed));
95
+ });
96
+ } else {
97
+ setActualValue("");
98
+ setInputValue("");
99
+ onChange != null && react.startTransition(function () {
100
+ return onChange(null);
101
+ });
102
+ }
103
+ }, [onChange, inputFormat]);
104
+ var arrowRef = react.useRef(null);
105
+ var _useState5 = react.useState(false),
106
+ _useState6 = _slicedToArray(_useState5, 2),
107
+ isOpen = _useState6[0],
108
+ setIsOpen = _useState6[1];
109
+ var _useFloating = react$1.useFloating({
110
+ open: isOpen,
111
+ onOpenChange: function onOpenChange(open, _, reason) {
112
+ console.log(reason);
113
+ if (reason === "reference-press") return;
114
+ setIsOpen(open);
115
+ },
116
+ strategy: "fixed",
117
+ placement: "bottom-start",
118
+ whileElementsMounted: react$1.autoUpdate,
119
+ middleware: [react$1.shift({
120
+ padding: 8
121
+ }), react$1.flip(), react$1.offset(9), react$1.arrow({
122
+ element: arrowRef
123
+ })]
124
+ }),
125
+ refs = _useFloating.refs,
126
+ floatingStyles = _useFloating.floatingStyles,
127
+ context = _useFloating.context;
128
+ var focus = react$1.useFocus(context, {
129
+ enabled: !disabled
130
+ });
131
+ var click = react$1.useClick(context, {
132
+ enabled: !disabled,
133
+ toggle: false
134
+ });
135
+ var dismiss = react$1.useDismiss(context, {
136
+ referencePress: true
137
+ });
138
+ var _useInteractions = react$1.useInteractions([dismiss, click, focus]),
139
+ getReferenceProps = _useInteractions.getReferenceProps,
140
+ getFloatingProps = _useInteractions.getFloatingProps;
141
+ return /*#__PURE__*/jsxRuntime.jsxs(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
142
+ showClear: !!actualValue && !disabled && !readOnly,
143
+ onClear: handleChange,
144
+ invalid: invalid,
145
+ readOnly: readOnly,
146
+ disabled: disabled,
147
+ required: required,
148
+ error: error
149
+ }, rest), {}, {
150
+ children: [/*#__PURE__*/jsxRuntime.jsx("input", _objectSpread(_objectSpread({
151
+ className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer", !value && "empty"),
152
+ "aria-invalid": invalid,
153
+ "aria-disabled": disabled,
154
+ "aria-readonly": readOnly,
155
+ "aria-errormessage": error,
156
+ placeholder: placeholder,
157
+ disabled: disabled,
158
+ readOnly: readOnly,
159
+ "data-testid": name,
160
+ name: name,
161
+ size: 1,
162
+ type: type === "datetime" ? "datetime-local" : "date",
163
+ autoComplete: "off",
164
+ autoFocus: autoFocus,
165
+ value: inputValue,
166
+ ref: utilities.mergeRefs(ref, refs.setReference)
167
+ }, getReferenceProps({
168
+ onBlur: onBlur,
169
+ onFocus: onFocus
170
+ })), {}, {
171
+ onChange: handleChange,
172
+ onKeyDown: handleEnterPressed
173
+ })), isOpen && /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
174
+ ref: refs.setFloating,
175
+ style: _objectSpread({
176
+ zIndex: "var(--z-popover)"
177
+ }, floatingStyles),
178
+ className: "shadow-lg bg-base ring-1 ring-tint-100",
179
+ "data-ref": "dropdownBody"
180
+ }, getFloatingProps()), {}, {
181
+ children: [/*#__PURE__*/jsxRuntime.jsx(date.DatePanel, {
182
+ withTime: type === "datetime",
183
+ value: actualValue,
184
+ max: max,
185
+ min: min,
186
+ onChange: handleDateChange
187
+ }), /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingArrow, {
188
+ ref: arrowRef,
189
+ context: context,
190
+ strokeWidth: 0.5,
191
+ className: "fill-base stroke-muted"
192
+ })]
193
+ }))]
194
+ }));
195
+ };
196
+
197
+ exports.DateInput = DateInput;