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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
  2. package/css/_colorPicker.css +95 -0
  3. package/{src/internal/Field.module.css → css/_field.css} +94 -33
  4. package/{src/input/File.module.css → css/_file.css} +21 -6
  5. package/css/styles.css +27 -0
  6. package/dist/cjs/builder/FileField.js +107 -78
  7. package/dist/cjs/builder/FormField.js +60 -39
  8. package/dist/cjs/builder/SchemaEditor.js +72 -0
  9. package/dist/cjs/builder/components/AddSchemaFields.js +64 -0
  10. package/dist/cjs/builder/components/SchemaArrayForm.js +146 -0
  11. package/dist/cjs/builder/components/SchemaField.js +423 -0
  12. package/dist/cjs/form/Controller.js +66 -19
  13. package/dist/cjs/form/Form.js +97 -39
  14. package/dist/cjs/form/useForm.js +32 -0
  15. package/dist/cjs/hooks/useFileUploader.js +74 -45
  16. package/dist/cjs/hooks/useFormBuilder.js +85 -31
  17. package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +5 -4
  18. package/dist/cjs/i18n/{en.json.js → en/form.json.js} +5 -5
  19. package/dist/cjs/i18n/index.js +4 -4
  20. package/dist/cjs/index.js +41 -2
  21. package/dist/cjs/input/ArrayInput.js +259 -135
  22. package/dist/cjs/input/AvatarInput.js +99 -63
  23. package/dist/cjs/input/Checkbox.js +24 -25
  24. package/dist/cjs/input/ColorInput.js +138 -81
  25. package/dist/cjs/input/ColorPicker.js +78 -95
  26. package/dist/cjs/input/DateInput.js +192 -0
  27. package/dist/cjs/input/Field.js +21 -20
  28. package/dist/cjs/input/File.js +85 -80
  29. package/dist/cjs/input/Hidden.js +27 -13
  30. package/dist/cjs/input/Input.js +49 -48
  31. package/dist/cjs/input/Number.js +46 -44
  32. package/dist/cjs/input/Password.js +51 -49
  33. package/dist/cjs/input/Radio.js +26 -16
  34. package/dist/cjs/input/RadioGroup.js +26 -11
  35. package/dist/cjs/input/{Range.js → RangeSlider.js} +61 -66
  36. package/dist/cjs/input/Search.js +58 -64
  37. package/dist/cjs/input/Slider.js +57 -66
  38. package/dist/cjs/input/Switch.js +29 -27
  39. package/dist/cjs/input/Textarea.js +65 -53
  40. package/dist/cjs/internal/ErrorIcon.js +9 -9
  41. package/dist/cjs/internal/FieldWrapper.js +23 -13
  42. package/dist/cjs/internal/InputWrapper.js +85 -87
  43. package/dist/cjs/ranger/index.js +7 -7
  44. package/dist/cjs/ranger/utils.js +9 -4
  45. package/dist/cjs/select/AutoComplete.js +93 -76
  46. package/dist/cjs/select/DualList.js +235 -154
  47. package/dist/cjs/select/List.js +122 -89
  48. package/dist/cjs/select/Options.js +58 -54
  49. package/dist/cjs/select/Select.js +119 -89
  50. package/dist/cjs/select/helpers.js +5 -5
  51. package/dist/cjs/select/useSelect.js +83 -58
  52. package/dist/cjs/types/schema.js +43 -0
  53. package/dist/cjs/utils/eventHandlers.js +16 -6
  54. package/dist/cjs/utils/getColor.js +6 -6
  55. package/dist/cjs/utils/getProps.js +49 -0
  56. package/dist/esm/builder/FileField.js +109 -80
  57. package/dist/esm/builder/FormField.js +60 -39
  58. package/dist/esm/builder/SchemaEditor.js +72 -0
  59. package/dist/esm/builder/components/AddSchemaFields.js +64 -0
  60. package/dist/esm/builder/components/SchemaArrayForm.js +146 -0
  61. package/dist/esm/builder/components/SchemaField.js +423 -0
  62. package/dist/esm/form/Controller.js +66 -19
  63. package/dist/esm/form/Form.js +97 -39
  64. package/dist/esm/form/useForm.js +32 -0
  65. package/dist/esm/hooks/useFileUploader.js +75 -46
  66. package/dist/esm/hooks/useFormBuilder.js +84 -30
  67. package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +5 -4
  68. package/dist/esm/i18n/{en.json.js → en/form.json.js} +5 -5
  69. package/dist/esm/i18n/index.js +2 -2
  70. package/dist/esm/index.js +36 -1
  71. package/dist/esm/input/ArrayInput.js +260 -136
  72. package/dist/esm/input/AvatarInput.js +99 -63
  73. package/dist/esm/input/Checkbox.js +26 -27
  74. package/dist/esm/input/ColorInput.js +141 -84
  75. package/dist/esm/input/ColorPicker.js +80 -97
  76. package/dist/esm/input/DateInput.js +192 -0
  77. package/dist/esm/input/Field.js +21 -20
  78. package/dist/esm/input/File.js +89 -84
  79. package/dist/esm/input/Hidden.js +28 -14
  80. package/dist/esm/input/Input.js +51 -50
  81. package/dist/esm/input/Number.js +48 -46
  82. package/dist/esm/input/Password.js +54 -52
  83. package/dist/esm/input/Radio.js +27 -17
  84. package/dist/esm/input/RadioGroup.js +27 -12
  85. package/dist/esm/input/{Range.js → RangeSlider.js} +62 -67
  86. package/dist/esm/input/Search.js +61 -67
  87. package/dist/esm/input/Slider.js +58 -67
  88. package/dist/esm/input/Switch.js +31 -29
  89. package/dist/esm/input/Textarea.js +67 -55
  90. package/dist/esm/internal/ErrorIcon.js +11 -11
  91. package/dist/esm/internal/FieldWrapper.js +23 -13
  92. package/dist/esm/internal/InputWrapper.js +88 -90
  93. package/dist/esm/ranger/index.js +7 -7
  94. package/dist/esm/ranger/utils.js +9 -4
  95. package/dist/esm/select/AutoComplete.js +95 -78
  96. package/dist/esm/select/DualList.js +233 -152
  97. package/dist/esm/select/List.js +125 -92
  98. package/dist/esm/select/Options.js +58 -54
  99. package/dist/esm/select/Select.js +122 -92
  100. package/dist/esm/select/helpers.js +5 -5
  101. package/dist/esm/select/useSelect.js +84 -59
  102. package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
  103. package/dist/esm/utils/eventHandlers.js +16 -6
  104. package/dist/esm/utils/getColor.js +6 -6
  105. package/dist/esm/utils/getProps.js +49 -0
  106. package/dist/types/builder/FileField.d.ts +7 -4
  107. package/dist/types/builder/FormField.d.ts +4 -2
  108. package/dist/types/builder/SchemaEditor.d.ts +6 -0
  109. package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
  110. package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
  111. package/dist/types/builder/components/SchemaField.d.ts +12 -0
  112. package/dist/types/form/Controller.d.ts +45 -3
  113. package/dist/types/form/Form.d.ts +38 -7
  114. package/dist/types/form/useForm.d.ts +6 -0
  115. package/dist/types/hooks/useFileUploader.d.ts +24 -3
  116. package/dist/types/hooks/useFormBuilder.d.ts +41 -3
  117. package/dist/types/index.d.ts +32 -2
  118. package/dist/types/input/ArrayInput.d.ts +68 -13
  119. package/dist/types/input/AvatarInput.d.ts +23 -6
  120. package/dist/types/input/Checkbox.d.ts +12 -10
  121. package/dist/types/input/ColorInput.d.ts +15 -5
  122. package/dist/types/input/ColorPicker.d.ts +10 -2
  123. package/dist/types/input/DateInput.d.ts +21 -0
  124. package/dist/types/input/Field.d.ts +9 -36
  125. package/dist/types/input/File.d.ts +16 -4
  126. package/dist/types/input/Hidden.d.ts +7 -6
  127. package/dist/types/input/Input.d.ts +11 -4
  128. package/dist/types/input/Number.d.ts +9 -4
  129. package/dist/types/input/Password.d.ts +9 -4
  130. package/dist/types/input/Radio.d.ts +9 -4
  131. package/dist/types/input/RadioGroup.d.ts +14 -6
  132. package/dist/types/input/{Range.d.ts → RangeSlider.d.ts} +11 -6
  133. package/dist/types/input/Search.d.ts +14 -4
  134. package/dist/types/input/Slider.d.ts +9 -6
  135. package/dist/types/input/Switch.d.ts +13 -8
  136. package/dist/types/input/Textarea.d.ts +15 -4
  137. package/dist/types/internal/ErrorIcon.d.ts +4 -1
  138. package/dist/types/internal/FieldWrapper.d.ts +10 -1
  139. package/dist/types/internal/InputWrapper.d.ts +19 -1
  140. package/dist/types/ranger/index.d.ts +7 -3
  141. package/dist/types/ranger/utils.d.ts +2 -2
  142. package/dist/types/select/AutoComplete.d.ts +7 -2
  143. package/dist/types/select/DualList.d.ts +11 -37
  144. package/dist/types/select/List.d.ts +7 -2
  145. package/dist/types/select/Options.d.ts +8 -7
  146. package/dist/types/select/Select.d.ts +7 -2
  147. package/dist/types/select/helpers.d.ts +2 -2
  148. package/dist/types/select/useSelect.d.ts +10 -28
  149. package/dist/types/types/index.d.ts +73 -39
  150. package/dist/types/types/schema.d.ts +78 -32
  151. package/dist/types/utils/eventHandlers.d.ts +4 -4
  152. package/dist/types/utils/getColor.d.ts +4 -4
  153. package/dist/types/utils/getProps.d.ts +26 -0
  154. package/dist/types/utils/index.d.ts +1 -0
  155. package/package.json +25 -25
  156. package/src/builder/FileField.tsx +73 -56
  157. package/src/builder/FormField.tsx +66 -58
  158. package/src/builder/SchemaEditor.tsx +78 -0
  159. package/src/builder/components/AddSchemaFields.tsx +64 -0
  160. package/src/builder/components/SchemaArrayForm.tsx +146 -0
  161. package/src/builder/components/SchemaField.tsx +405 -0
  162. package/src/form/Controller.tsx +61 -24
  163. package/src/form/Form.tsx +74 -50
  164. package/src/form/useForm.ts +53 -0
  165. package/src/hooks/useFileUploader.ts +115 -84
  166. package/src/hooks/useFormBuilder.tsx +80 -41
  167. package/src/i18n/{ar.json → ar/form.json} +5 -4
  168. package/src/i18n/{en.json → en/form.json} +5 -5
  169. package/src/i18n/index.ts +2 -2
  170. package/src/index.ts +34 -20
  171. package/src/input/ArrayInput.tsx +255 -173
  172. package/src/input/AvatarInput.tsx +82 -39
  173. package/src/input/Checkbox.tsx +30 -54
  174. package/src/input/ColorInput.tsx +146 -105
  175. package/src/input/ColorPicker.tsx +76 -102
  176. package/src/input/DateInput.tsx +225 -0
  177. package/src/input/Field.tsx +23 -65
  178. package/src/input/File.tsx +76 -98
  179. package/src/input/Hidden.tsx +36 -24
  180. package/src/input/Input.tsx +55 -53
  181. package/src/input/Number.tsx +49 -54
  182. package/src/input/Password.tsx +61 -66
  183. package/src/input/Radio.tsx +28 -37
  184. package/src/input/RadioGroup.tsx +30 -25
  185. package/src/input/{Range.tsx → RangeSlider.tsx} +81 -109
  186. package/src/input/Search.tsx +64 -77
  187. package/src/input/Slider.tsx +80 -109
  188. package/src/input/Switch.tsx +39 -53
  189. package/src/input/Textarea.tsx +72 -59
  190. package/src/internal/ErrorIcon.tsx +22 -21
  191. package/src/internal/FieldWrapper.tsx +33 -23
  192. package/src/internal/InputWrapper.tsx +132 -143
  193. package/src/ranger/index.tsx +37 -117
  194. package/src/ranger/utils.ts +12 -11
  195. package/src/select/AutoComplete.tsx +113 -123
  196. package/src/select/DualList.tsx +218 -204
  197. package/src/select/List.tsx +130 -97
  198. package/src/select/Options.tsx +59 -57
  199. package/src/select/Select.tsx +148 -122
  200. package/src/select/helpers.ts +13 -8
  201. package/src/select/useSelect.tsx +110 -127
  202. package/src/types/index.ts +76 -45
  203. package/src/types/schema.ts +97 -40
  204. package/src/utils/eventHandlers.ts +24 -26
  205. package/src/utils/getColor.ts +9 -8
  206. package/src/utils/getProps.ts +47 -0
  207. package/src/utils/index.ts +1 -0
  208. package/dist/cjs/input/ArrayInput.module.css +0 -1
  209. package/dist/cjs/input/ColorPicker.module.css +0 -1
  210. package/dist/cjs/input/File.module.css +0 -1
  211. package/dist/cjs/internal/Field.module.css +0 -1
  212. package/dist/esm/input/ArrayInput.module.css +0 -1
  213. package/dist/esm/input/ColorPicker.module.css +0 -1
  214. package/dist/esm/input/File.module.css +0 -1
  215. package/dist/esm/internal/Field.module.css +0 -1
@@ -1,122 +1,105 @@
1
1
  'use client';
2
2
 
3
3
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
4
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
- import Color from 'color';
6
- import { memo, useState, useDeferredValue, useEffect, useCallback, startTransition } from 'react';
7
- import { SketchPicker } from 'react-color';
8
- import classes from './ColorPicker.module.css';
4
+ import { useControlledValue } from '@react-fabric/core';
5
+ import chroma from 'chroma-js';
6
+ import { memo, useCallback, startTransition } from 'react';
7
+ import { BlockPicker, SketchPicker } from 'react-color';
9
8
  import { jsx } from 'react/jsx-runtime';
10
9
 
11
10
  var _excluded = ["a"],
12
11
  _excluded2 = ["a"];
13
- 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
-
15
- // eslint-disable-next-line react/display-name
16
- var ColorPicker = /*#__PURE__*/memo(function (_ref) {
12
+ var DEFAULT_SWATCHES = [chroma.mix("#d7323a", "#171a1c", 0.5, "lab").hex(), chroma.mix("#ff781c", "#171a1c", 0.5, "lab").hex(), chroma.mix("#f7b731", "#171a1c", 0.5, "lab").hex(), chroma.mix("#88ab1b", "#171a1c", 0.5, "lab").hex(), chroma.mix("#22aa85", "#171a1c", 0.5, "lab").hex(), chroma.mix("#399bec", "#171a1c", 0.5, "lab").hex(), chroma.mix("#4862c8", "#171a1c", 0.5, "lab").hex(), chroma.mix("#aa66cf", "#171a1c", 0.5, "lab").hex(), chroma.mix("#f43f7b", "#171a1c", 0.5, "lab").hex(), chroma.mix("#a37f4f", "#171a1c", 0.5, "lab").hex(), "#d7323a", "#ff781c", "#f7b731", "#88ab1b", "#22aa85", "#399bec", "#4862c8", "#aa66cf", "#f43f7b", "#a37f4f", chroma.mix("#d7323a", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#ff781c", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#f7b731", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#88ab1b", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#22aa85", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#399bec", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#4862c8", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#aa66cf", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#f43f7b", "#f1f3f4", 0.5, "lab").hex(), chroma.mix("#a37f4f", "#f1f3f4", 0.5, "lab").hex(), "#171a1c", "#2d3439", "#444e55", "#5b6971", "#71838e", "#86959e", "#9ca8b0", "#b8c1c6", "#d5dadd", "#f1f3f4"];
13
+ var ColorPickerComponent = function ColorPickerComponent(_ref) {
17
14
  var value = _ref.value,
18
15
  onChange = _ref.onChange,
19
16
  hideAlpha = _ref.hideAlpha,
20
17
  _ref$defaultColor = _ref.defaultColor,
21
18
  defaultColor = _ref$defaultColor === void 0 ? "#fff" : _ref$defaultColor,
22
19
  _ref$swatches = _ref.swatches,
23
- swatches = _ref$swatches === void 0 ? DEFAULT_SWATCHES : _ref$swatches;
24
- var _useState = useState(""),
25
- _useState2 = _slicedToArray(_useState, 2),
26
- actualValue = _useState2[0],
27
- setActualValue = _useState2[1];
28
- var deferred = useDeferredValue(value !== null && value !== void 0 ? value : defaultColor);
29
- useEffect(function () {
30
- setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
31
- }, [deferred]);
20
+ swatches = _ref$swatches === void 0 ? DEFAULT_SWATCHES : _ref$swatches,
21
+ _ref$picker = _ref.picker,
22
+ picker = _ref$picker === void 0 ? "default" : _ref$picker;
23
+ var _useControlledValue = useControlledValue(value, defaultColor),
24
+ currentValue = _useControlledValue.currentValue,
25
+ updateValue = _useControlledValue.updateValue;
32
26
  var handleChange = useCallback(function (e) {
33
- setActualValue(e !== null && e !== void 0 ? e : defaultColor);
34
- onChange != null && startTransition(function () {
27
+ updateValue(e !== null && e !== void 0 ? e : defaultColor);
28
+ if (onChange) startTransition(function () {
35
29
  return onChange(e);
36
30
  });
37
- }, [onChange]);
38
- return /*#__PURE__*/jsx(SketchPicker, {
39
- width: "16rem",
40
- className: classes.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: {
31
+ }, [defaultColor, onChange, updateValue]);
32
+ var E = picker === "swatches" ? BlockPicker : SketchPicker;
33
+ return /*#__PURE__*/jsx("div", {
34
+ role: "none",
35
+ className: "fabric-colorPicker-container"
36
+ // prevent default on mouse down to avoid selection issues
37
+ ,
38
+ onMouseDown: function onMouseDown(e) {
39
+ return e.preventDefault();
40
+ },
41
+ style: {
42
+ "--color-selected": value
43
+ },
44
+ children: /*#__PURE__*/jsx(E, {
45
+ width: "16rem",
46
+ className: "fabric-colorPicker",
47
+ styles: {
48
+ "default": {
49
+ hue: {
50
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
51
+ },
67
52
  alpha: {
68
- paddingRight: "calc(1rem - 2px)"
53
+ backgroundColor: "var(--fabric-bg)",
54
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
69
55
  },
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)"
56
+ color: {
57
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
80
58
  },
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)"
59
+ saturation: {
60
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
61
+ },
62
+ activeColor: {
63
+ boxShadow: "0 0 1px 1px var(--color-shadow)"
64
+ },
65
+ picker: {
66
+ backgroundColor: "var(--fabric-bg)",
67
+ boxShadow: "0 0 0 1px var(--color-shadow), 0 0 8px var(--fabric-shadow)"
68
+ },
69
+ checkboard: {
70
+ white: "transparent",
71
+ black: "red"
94
72
  }
95
- },
96
- checkboard: {
97
- white: "transparent",
98
- black: "red"
99
73
  }
74
+ },
75
+ color: currentValue,
76
+ colors: swatches,
77
+ presetColors: swatches,
78
+ disableAlpha: hideAlpha,
79
+ onChange: function onChange(_ref2) {
80
+ var _ref2$rgb = _ref2.rgb,
81
+ _ref2$rgb$a = _ref2$rgb.a,
82
+ a = _ref2$rgb$a === void 0 ? 1 : _ref2$rgb$a,
83
+ rgb = _objectWithoutProperties(_ref2$rgb, _excluded);
84
+ return updateValue(chroma(rgb).alpha(a).hex());
85
+ },
86
+ onChangeComplete: function onChangeComplete(_ref3) {
87
+ var _ref3$rgb = _ref3.rgb,
88
+ _ref3$rgb$a = _ref3$rgb.a,
89
+ a = _ref3$rgb$a === void 0 ? 1 : _ref3$rgb$a,
90
+ rgb = _objectWithoutProperties(_ref3$rgb, _excluded2);
91
+ return handleChange(chroma(rgb).alpha(a).hex());
100
92
  }
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
- }
93
+ })
119
94
  });
120
- });
95
+ };
96
+
97
+ /**
98
+ * ColorPicker component allows users to select a color using a color picker UI.
99
+ * It supports swatches, alpha transparency, and custom styles.
100
+ * The component uses the `react-color` library for the color picker functionality.
101
+ */
102
+ var ColorPicker = /*#__PURE__*/memo(ColorPickerComponent);
103
+ ColorPicker.displayName = "ColorPicker";
121
104
 
122
105
  export { ColorPicker };
@@ -0,0 +1,192 @@
1
+ 'use client';
2
+
3
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
+ import { useFloating, autoUpdate, shift, flip, offset, arrow, useFocus, useClick, useDismiss, useInteractions, FloatingArrow } from '@floating-ui/react';
6
+ import { useControlledValue } from '@react-fabric/core';
7
+ import { DateUtil, DatePanel } from '@react-fabric/date';
8
+ import { mergeRefs, cn } from '@react-fabric/utilities';
9
+ import { useId, useState, useMemo, useEffect, useCallback, startTransition, useRef } from 'react';
10
+ import { InputWrapper } from '../internal/InputWrapper.js';
11
+ import { useHandleEnter } from '../utils/eventHandlers.js';
12
+ import { getWrapperProps } from '../utils/getProps.js';
13
+ import { jsxs, jsx } from 'react/jsx-runtime';
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; }
16
+ 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; }
17
+ /**
18
+ * Date input component that allows users to select a date or datetime.
19
+ * It uses the Floating UI library for positioning the date picker.
20
+ * It also provides a button to clear the selected date.
21
+ * The component supports both date and datetime types, with appropriate formatting.
22
+ */
23
+ function DateInput(props) {
24
+ var ref = props.ref,
25
+ name = props.name,
26
+ value = props.value,
27
+ invalid = props.invalid,
28
+ readOnly = props.readOnly,
29
+ disabled = props.disabled,
30
+ placeholder = props.placeholder,
31
+ defaultValue = props.defaultValue,
32
+ autoFocus = props.autoFocus,
33
+ error = props.error,
34
+ _props$type = props.type,
35
+ type = _props$type === void 0 ? "date" : _props$type,
36
+ onBlur = props.onBlur,
37
+ onFocus = props.onFocus,
38
+ onChange = props.onChange,
39
+ onEnterPressed = props.onEnterPressed,
40
+ allowClear = props.allowClear,
41
+ min = props.min,
42
+ max = props.max;
43
+ var id = useId();
44
+ var _useControlledValue = useControlledValue(value, defaultValue),
45
+ currentValue = _useControlledValue.currentValue,
46
+ updateValue = _useControlledValue.updateValue;
47
+ var _useState = useState(""),
48
+ _useState2 = _slicedToArray(_useState, 2),
49
+ inputValue = _useState2[0],
50
+ setInputValue = _useState2[1];
51
+ var inputFormat = useMemo(function () {
52
+ return type === "datetime" ? "yyyy-MM-dd HH:mm" : "yyyy-MM-dd";
53
+ }, [type]);
54
+ useEffect(function () {
55
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
56
+ setInputValue(currentValue ? DateUtil.format(currentValue, inputFormat) : "");
57
+ }, [currentValue, inputFormat]);
58
+ var handleEnterPressed = useHandleEnter(onEnterPressed);
59
+ var handleChange = useCallback(function (e) {
60
+ var _e$currentTarget$valu;
61
+ 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;
62
+ if (value) {
63
+ var _parsed$toISOString;
64
+ var parsed = DateUtil.parseDate(value);
65
+ updateValue(parsed === null || parsed === void 0 || (_parsed$toISOString = parsed.toISOString) === null || _parsed$toISOString === void 0 ? void 0 : _parsed$toISOString.call(parsed));
66
+ setInputValue(DateUtil.format(parsed, inputFormat));
67
+ if (onChange) startTransition(function () {
68
+ var _parsed$toISOString2;
69
+ return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString2 = parsed.toISOString) === null || _parsed$toISOString2 === void 0 ? void 0 : _parsed$toISOString2.call(parsed));
70
+ });
71
+ } else {
72
+ updateValue("");
73
+ setInputValue("");
74
+ if (onChange) startTransition(function () {
75
+ return onChange();
76
+ });
77
+ }
78
+ }, [defaultValue, updateValue, inputFormat, onChange]);
79
+ var handleDateChange = useCallback(function (value) {
80
+ if (value) {
81
+ var _parsed$toISOString3;
82
+ var parsed = DateUtil.parseDate(value);
83
+ updateValue(parsed === null || parsed === void 0 || (_parsed$toISOString3 = parsed.toISOString) === null || _parsed$toISOString3 === void 0 ? void 0 : _parsed$toISOString3.call(parsed));
84
+ setInputValue(DateUtil.format(parsed, inputFormat));
85
+ if (onChange) startTransition(function () {
86
+ var _parsed$toISOString4;
87
+ return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString4 = parsed.toISOString) === null || _parsed$toISOString4 === void 0 ? void 0 : _parsed$toISOString4.call(parsed));
88
+ });
89
+ } else {
90
+ updateValue("");
91
+ setInputValue("");
92
+ if (onChange) startTransition(function () {
93
+ return onChange();
94
+ });
95
+ }
96
+ }, [updateValue, inputFormat, onChange]);
97
+ var arrowRef = useRef(null);
98
+ var _useState3 = useState(false),
99
+ _useState4 = _slicedToArray(_useState3, 2),
100
+ isOpen = _useState4[0],
101
+ setIsOpen = _useState4[1];
102
+ var _useFloating = useFloating({
103
+ open: isOpen,
104
+ onOpenChange: function onOpenChange(open, _, reason) {
105
+ if (reason === "reference-press") return;
106
+ setIsOpen(open);
107
+ },
108
+ strategy: "fixed",
109
+ placement: "bottom-start",
110
+ whileElementsMounted: autoUpdate,
111
+ middleware: [shift({
112
+ padding: 8
113
+ }), flip(), offset(9), arrow({
114
+ element: arrowRef
115
+ })]
116
+ }),
117
+ refs = _useFloating.refs,
118
+ floatingStyles = _useFloating.floatingStyles,
119
+ context = _useFloating.context;
120
+ var focus = useFocus(context, {
121
+ enabled: !disabled
122
+ });
123
+ var click = useClick(context, {
124
+ enabled: !disabled,
125
+ toggle: false
126
+ });
127
+ var dismiss = useDismiss(context, {
128
+ referencePress: true
129
+ });
130
+ var _useInteractions = useInteractions([dismiss, click, focus]),
131
+ getReferenceProps = _useInteractions.getReferenceProps,
132
+ getFloatingProps = _useInteractions.getFloatingProps;
133
+ return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
134
+ id: id,
135
+ showClear: allowClear && !!currentValue && !disabled && !readOnly,
136
+ onClear: handleChange
137
+ }, getWrapperProps(props)), {}, {
138
+ children: [/*#__PURE__*/jsx("input", _objectSpread(_objectSpread({
139
+ id: id,
140
+ className: cn("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", !currentValue && "empty"),
141
+ "aria-invalid": invalid,
142
+ "aria-disabled": disabled,
143
+ "aria-readonly": readOnly,
144
+ "aria-errormessage": error,
145
+ placeholder: placeholder,
146
+ disabled: disabled,
147
+ readOnly: readOnly,
148
+ "data-testid": name,
149
+ name: name,
150
+ size: 1,
151
+ type: type === "datetime" ? "datetime-local" : "date",
152
+ autoComplete: "off"
153
+ // eslint-disable-next-line jsx-a11y-x/no-autofocus
154
+ ,
155
+ autoFocus: autoFocus,
156
+ value: inputValue,
157
+ ref: mergeRefs(ref, function (el) {
158
+ return refs.setReference(el);
159
+ })
160
+ }, getReferenceProps({
161
+ onBlur: onBlur,
162
+ onFocus: onFocus
163
+ })), {}, {
164
+ onChange: handleChange,
165
+ onKeyDown: handleEnterPressed
166
+ })), isOpen && /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
167
+ ref: function ref(el) {
168
+ return refs.setFloating(el);
169
+ },
170
+ style: _objectSpread({
171
+ zIndex: "var(--z-popover)"
172
+ }, floatingStyles),
173
+ className: "shadow-lg bg-default ring-1 ring-tint-100",
174
+ "data-ref": "dropdownBody"
175
+ }, getFloatingProps()), {}, {
176
+ children: [/*#__PURE__*/jsx(DatePanel, {
177
+ withTime: type === "datetime",
178
+ value: currentValue !== null && currentValue !== void 0 ? currentValue : "",
179
+ max: max,
180
+ min: min,
181
+ onChange: handleDateChange
182
+ }), /*#__PURE__*/jsx(FloatingArrow, {
183
+ ref: arrowRef,
184
+ context: context,
185
+ strokeWidth: 0.5,
186
+ className: "fill-default stroke-muted"
187
+ })]
188
+ }))]
189
+ }));
190
+ }
191
+
192
+ export { DateInput };
@@ -1,32 +1,33 @@
1
1
  'use client';
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
- import classNames from 'classnames';
6
- import { Children, cloneElement } from 'react';
7
- import classes from '../internal/Field.module.css';
4
+ import { cn } from '@react-fabric/utilities';
8
5
  import { FieldWrapper } from '../internal/FieldWrapper.js';
6
+ import '@floating-ui/react';
7
+ import '@react-fabric/core';
8
+ import { getWrapperProps } from '../utils/getProps.js';
9
9
  import { jsx } from 'react/jsx-runtime';
10
10
 
11
- var _excluded = ["children", "vertical", "noOutline", "plain"];
12
11
  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; }
13
- 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; }
14
- var Field = function Field(_ref) {
15
- var children = _ref.children,
16
- vertical = _ref.vertical,
17
- noOutline = _ref.noOutline,
18
- plain = _ref.plain,
19
- rest = _objectWithoutProperties(_ref, _excluded);
20
- return /*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
12
+ 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; }
13
+ /**
14
+ * Field component for rendering multiple form fields under a single label.
15
+ * It supports various properties for customization, including label, info, required state,
16
+ * and styling options.
17
+ */
18
+ function Field(props) {
19
+ var children = props.children,
20
+ vertical = props.vertical,
21
+ borderless = props.borderless,
22
+ plain = props.plain,
23
+ inline = props.inline;
24
+ return /*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, getWrapperProps(props)), {}, {
21
25
  children: /*#__PURE__*/jsx("div", {
22
- className: classNames(classes.fieldGroup, !plain && !noOutline && "outline", !plain && "bg-base", "flex-1 rounded", !vertical && "flex flex-nowrap"),
23
- children: Children.map(children, function (child) {
24
- return child && /*#__PURE__*/cloneElement(child, {
25
- "data-inner": true
26
- });
27
- })
26
+ className: cn("fabric-fieldGroup", !plain && !borderless && "outline focus-within:outline-primary-500 has-aria-invalid:focus-within:outline-danger-500", !plain && "bg-default", plain && "flex-wrap", inline && "flex-1", vertical ? "rounded-capped" : "rounded flex"),
27
+ "data-vertical": !!vertical,
28
+ children: children
28
29
  })
29
30
  }));
30
- };
31
+ }
31
32
 
32
33
  export { Field };