@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
@@ -6,32 +6,45 @@ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
6
6
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
7
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
8
  var core = require('@react-fabric/core');
9
+ var utilities = require('@react-fabric/utilities');
9
10
  var react = require('react');
10
11
  var useFileUploader = require('../hooks/useFileUploader.js');
11
12
  var Hidden = require('./Hidden.js');
12
13
  var jsxRuntime = require('react/jsx-runtime');
13
14
 
14
- var _excluded = ["src", "size", "fileUrl", "uploadHandler"];
15
+ var _excluded = ["size", "avatarName", "avatarClassName", "value", "rounded", "defaultValue", "fallbackIcon", "variant", "fileUrl", "uploadHandler", "onChange"];
15
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; }
16
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
+ 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; }
18
+ /**
19
+ * Avatar input component for uploading and displaying user avatars.
20
+ * It allows users to select an image file, upload it, and display the avatar.
21
+ * It also provides a way to remove the uploaded file and shows upload progress.
22
+ */
17
23
  var AvatarInput = function AvatarInput(_ref) {
18
- var _list$;
19
- var src = _ref.src,
20
- _ref$size = _ref.size,
24
+ var _files$2;
25
+ var _ref$size = _ref.size,
21
26
  size = _ref$size === void 0 ? "6rem" : _ref$size,
27
+ avatarName = _ref.avatarName,
28
+ avatarClassName = _ref.avatarClassName,
29
+ value = _ref.value,
30
+ rounded = _ref.rounded,
31
+ defaultValue = _ref.defaultValue,
32
+ fallbackIcon = _ref.fallbackIcon,
33
+ variant = _ref.variant,
22
34
  fileUrl = _ref.fileUrl,
23
35
  uploadHandler = _ref.uploadHandler,
36
+ _onChange = _ref.onChange,
24
37
  rest = _objectWithoutProperties(_ref, _excluded);
25
- var _useFileUploader = useFileUploader.useFileUploader( /*#__PURE__*/function () {
26
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(data, config) {
27
- return _regeneratorRuntime.wrap(function _callee$(_context) {
38
+ var _useFileUploader = useFileUploader.useFileUploader(/*#__PURE__*/function () {
39
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(data, config) {
40
+ return _regeneratorRuntime.wrap(function (_context) {
28
41
  while (1) switch (_context.prev = _context.next) {
29
42
  case 0:
30
- _context.next = 2;
43
+ _context.next = 1;
31
44
  return uploadHandler === null || uploadHandler === void 0 ? void 0 : uploadHandler(data, config);
32
- case 2:
45
+ case 1:
33
46
  return _context.abrupt("return", _context.sent);
34
- case 3:
47
+ case 2:
35
48
  case "end":
36
49
  return _context.stop();
37
50
  }
@@ -40,9 +53,14 @@ var AvatarInput = function AvatarInput(_ref) {
40
53
  return function (_x, _x2) {
41
54
  return _ref2.apply(this, arguments);
42
55
  };
43
- }(), rest.value, false),
56
+ }(), value !== null && value !== void 0 ? value : defaultValue, {
57
+ multiple: false,
58
+ onChange: function onChange(files) {
59
+ var _files$path;
60
+ return _onChange === null || _onChange === void 0 ? void 0 : _onChange((_files$path = files === null || files === void 0 ? void 0 : files.path) !== null && _files$path !== void 0 ? _files$path : null);
61
+ }
62
+ }),
44
63
  files = _useFileUploader.files,
45
- list = _useFileUploader.list,
46
64
  upload = _useFileUploader.upload,
47
65
  remove = _useFileUploader.remove;
48
66
  var _useState = react.useState(""),
@@ -50,7 +68,7 @@ var AvatarInput = function AvatarInput(_ref) {
50
68
  base64 = _useState2[0],
51
69
  setBase64 = _useState2[1];
52
70
  react.useEffect(function () {
53
- if (list !== null && list !== void 0 && list.length) {
71
+ if (files !== null && files !== void 0 && files.length) {
54
72
  var _files$;
55
73
  var file = files === null || files === void 0 || (_files$ = files[0]) === null || _files$ === void 0 ? void 0 : _files$.file;
56
74
  void (file && new Response(file).blob().then(function (blob) {
@@ -64,23 +82,32 @@ var AvatarInput = function AvatarInput(_ref) {
64
82
  reader.readAsDataURL(blob);
65
83
  }));
66
84
  } else {
67
- setBase64("");
85
+ var _ref3, _fileUrl;
86
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
87
+ setBase64((_ref3 = (_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(defaultValue !== null && defaultValue !== void 0 ? defaultValue : "")) !== null && _fileUrl !== void 0 ? _fileUrl : defaultValue) !== null && _ref3 !== void 0 ? _ref3 : "");
68
88
  }
69
- }, [files, list]);
89
+ }, [files, defaultValue, fileUrl]);
70
90
  react.useEffect(function () {
71
- var _fileUrl;
72
- src && setBase64((_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(src)) !== null && _fileUrl !== void 0 ? _fileUrl : src);
73
- }, [src]);
91
+ var _fileUrl2, _fileUrl3;
92
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
93
+ if (!value && defaultValue) setBase64((_fileUrl2 = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(defaultValue)) !== null && _fileUrl2 !== void 0 ? _fileUrl2 : defaultValue);
94
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
95
+ if (value) setBase64((_fileUrl3 = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(value)) !== null && _fileUrl3 !== void 0 ? _fileUrl3 : value);
96
+ }, [value, defaultValue, fileUrl]);
74
97
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
75
- className: "flex flex-nowrap items-end",
98
+ className: "flex flex-nowrap items-end overflow-hidden p-px",
76
99
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
77
- className: "inline-block leading-none rounded-full relative outline overflow-hidden",
100
+ className: utilities.cn("inline-block leading-none relative outline overflow-hidden", rounded && "rounded-full", !rounded && "rounded"),
78
101
  children: [/*#__PURE__*/jsxRuntime.jsx(core.Avatar, {
79
- name: "temp",
102
+ name: avatarName !== null && avatarName !== void 0 ? avatarName : "temp",
80
103
  size: size,
81
- avatar: base64
104
+ avatar: base64,
105
+ rounded: rounded,
106
+ variant: variant,
107
+ fallbackIcon: fallbackIcon,
108
+ className: avatarClassName
82
109
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
83
- className: "absolute inset-x-0 bottom-0 cursor-pointer bg-opacity-20 hover:bg-opacity-50 bg-black text-white text-xs text-center py-1",
110
+ className: "absolute inset-x-0 bottom-0 cursor-pointer opacity-50 bg-black/50 hover:opacity-90 text-white text-xs text-center py-1",
84
111
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
85
112
  children: "Edit"
86
113
  }), /*#__PURE__*/jsxRuntime.jsx("input", {
@@ -93,47 +120,56 @@ var AvatarInput = function AvatarInput(_ref) {
93
120
  })]
94
121
  })]
95
122
  }), /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, _objectSpread({
96
- hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path
123
+ hiddenValue: files === null || files === void 0 || (_files$2 = files[0]) === null || _files$2 === void 0 ? void 0 : _files$2.path
97
124
  }, rest)), files.map(function (file, idx) {
98
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
99
- className: "px-2 py-1 flex-1",
100
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
101
- className: "flex flex-nowrap gap-1 items-center",
102
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
103
- className: "flex-initial truncate pe-2",
104
- children: file.filename
105
- }), file.error && /*#__PURE__*/jsxRuntime.jsx("div", {
106
- className: "flex-1 truncate px-2",
107
- children: /*#__PURE__*/jsxRuntime.jsx("span", {
108
- className: "text-danger-600",
109
- children: file.error
110
- })
111
- }), file.progress && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
112
- icon: "mdi mdi-stop-circle",
113
- bg: "danger",
114
- color: "white",
115
- size: "sm",
116
- className: "p-[2px]",
117
- "aria-label": "abort",
118
- onClick: function onClick() {
119
- var _file$abort;
120
- return (_file$abort = file.abort) === null || _file$abort === void 0 ? void 0 : _file$abort.call(file);
121
- }
122
- }), !file.progress && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
123
- icon: "mdi mdi-trash-can",
124
- color: "danger",
125
- size: "sm",
126
- "aria-label": "remove",
127
- onClick: function onClick() {
128
- return remove(file.key);
129
- }
125
+ return (
126
+ /*#__PURE__*/
127
+ // eslint-disable-next-line @eslint-react/no-array-index-key
128
+ jsxRuntime.jsxs("div", {
129
+ className: "px-2 py-1 flex-1 overflow-hidden",
130
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
131
+ className: "flex flex-nowrap gap-1 items-center",
132
+ children: [file.error && /*#__PURE__*/jsxRuntime.jsx("div", {
133
+ className: "flex-1 truncate px-2",
134
+ children: /*#__PURE__*/jsxRuntime.jsx("span", {
135
+ className: "text-danger-600",
136
+ children: file.error
137
+ })
138
+ }), file.progress && /*#__PURE__*/jsxRuntime.jsx("button", {
139
+ type: "button",
140
+ className: utilities.cn("size-fit flex-content leading-0 cursor-pointer"),
141
+ onClick: function onClick() {
142
+ var _file$abort;
143
+ return (_file$abort = file.abort) === null || _file$abort === void 0 ? void 0 : _file$abort.call(file);
144
+ },
145
+ children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
146
+ icon: "icon-[mdi--stop]",
147
+ bg: "danger",
148
+ color: "white",
149
+ size: "sm",
150
+ className: "p-0.5",
151
+ "aria-label": "abort"
152
+ })
153
+ }), !file.progress && /*#__PURE__*/jsxRuntime.jsx("button", {
154
+ type: "button",
155
+ className: utilities.cn("size-fit flex-content leading-0 cursor-pointer"),
156
+ onClick: function onClick() {
157
+ return remove(file.key);
158
+ },
159
+ children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
160
+ icon: "icon-[mdi--trash-can-outline]",
161
+ color: "danger",
162
+ size: "sm",
163
+ "aria-label": "remove"
164
+ })
165
+ })]
166
+ }), file.progress && /*#__PURE__*/jsxRuntime.jsx(core.ProgressBar, {
167
+ animate: true,
168
+ value: file.progress * 100,
169
+ size: "xxs"
130
170
  })]
131
- }), file.progress && /*#__PURE__*/jsxRuntime.jsx(core.ProgressBar, {
132
- animate: true,
133
- value: file.progress * 100,
134
- size: "xxs"
135
- })]
136
- }, idx);
171
+ }, idx)
172
+ );
137
173
  })]
138
174
  });
139
175
  };
@@ -1,21 +1,25 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
4
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
5
  var core = require('@react-fabric/core');
7
- var classNames = require('classnames');
6
+ var utilities = require('@react-fabric/utilities');
8
7
  var react = require('react');
9
8
  var ErrorIcon = require('../internal/ErrorIcon.js');
10
9
  var jsxRuntime = require('react/jsx-runtime');
11
10
 
12
- var _excluded = ["ref", "label", "value", "name", "checked", "invalid", "disabled", "error", "width", "icon", "iconChecked", "onChange"];
11
+ var _excluded = ["ref", "label", "name", "checked", "invalid", "disabled", "error", "width", "icon", "iconChecked", "onChange"];
13
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; }
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
- var Checkbox = function Checkbox(_ref) {
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
+ * Checkbox component for rendering a checkbox input with label and error handling.
16
+ * It supports custom icons for checked and unchecked states, and handles disabled and invalid states.
17
+ * The component uses a deferred value to manage the checked state, ensuring smooth updates.
18
+ * It also provides an error icon to indicate validation errors.
19
+ */
20
+ function Checkbox(_ref) {
16
21
  var ref = _ref.ref,
17
22
  label = _ref.label,
18
- value = _ref.value,
19
23
  name = _ref.name,
20
24
  checked = _ref.checked,
21
25
  invalid = _ref.invalid,
@@ -26,33 +30,28 @@ var Checkbox = function Checkbox(_ref) {
26
30
  iconChecked = _ref.iconChecked,
27
31
  onChange = _ref.onChange,
28
32
  rest = _objectWithoutProperties(_ref, _excluded);
29
- var _useState = react.useState(false),
30
- _useState2 = _slicedToArray(_useState, 2),
31
- actualValue = _useState2[0],
32
- setActualValue = _useState2[1];
33
- var deferred = react.useDeferredValue(!!checked);
33
+ var _useControlledValue = core.useControlledValue(!!checked, false),
34
+ currentValue = _useControlledValue.currentValue,
35
+ updateValue = _useControlledValue.updateValue;
34
36
  var iconOn = react.useMemo(function () {
35
37
  var _ref2;
36
- return (_ref2 = iconChecked !== null && iconChecked !== void 0 ? iconChecked : icon) !== null && _ref2 !== void 0 ? _ref2 : core.CoreIcons.checkboxOn;
38
+ return (_ref2 = iconChecked !== null && iconChecked !== void 0 ? iconChecked : icon) !== null && _ref2 !== void 0 ? _ref2 : "icon-[mdi--checkbox-marked]";
37
39
  }, [icon, iconChecked]);
38
40
  var iconOff = react.useMemo(function () {
39
- return icon !== null && icon !== void 0 ? icon : core.CoreIcons.checkboxOff;
41
+ return icon !== null && icon !== void 0 ? icon : "icon-[mdi--checkbox-blank-outline]";
40
42
  }, [icon]);
41
- react.useEffect(function () {
42
- setActualValue(deferred);
43
- }, [deferred]);
44
43
  var handleChange = react.useCallback(function (e) {
45
44
  var _e$target$checked, _e$target$checked2;
46
- setActualValue((_e$target$checked = e === null || e === void 0 ? void 0 : e.target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : false);
45
+ updateValue((_e$target$checked = e === null || e === void 0 ? void 0 : e.target.checked) !== null && _e$target$checked !== void 0 ? _e$target$checked : false);
47
46
  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
- }, [onChange, value]);
47
+ }, [onChange, updateValue]);
49
48
  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"),
49
+ className: utilities.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"),
51
50
  style: {
52
51
  width: width
53
52
  },
54
53
  children: [/*#__PURE__*/jsxRuntime.jsx("input", _objectSpread({
55
- className: classNames("appearance-none absolute opacity-0 inset-0 bg-transparent border-none outline-none ring-0"),
54
+ className: utilities.cn("appearance-none absolute opacity-0 inset-0 bg-transparent border-none outline-none ring-0"),
56
55
  "aria-invalid": invalid,
57
56
  "aria-disabled": disabled,
58
57
  disabled: disabled,
@@ -63,21 +62,21 @@ var Checkbox = function Checkbox(_ref) {
63
62
  tabIndex: 0,
64
63
  name: name,
65
64
  autoComplete: "off",
66
- checked: actualValue,
65
+ checked: !!currentValue,
67
66
  onChange: handleChange
68
67
  }, rest)), /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
69
- className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white"),
68
+ className: utilities.cn("p-0.5", currentValue && icon && !iconChecked && "bg-primary-500 text-white!"),
70
69
  size: "1.25em",
71
70
  color: invalid ? "danger" : "primary",
72
- icon: actualValue ? iconOn : iconOff
71
+ icon: currentValue ? iconOn : iconOff
73
72
  }), /*#__PURE__*/jsxRuntime.jsx(ErrorIcon.ErrorIcon, {
74
73
  invalid: invalid,
75
74
  error: error
76
75
  }), label && /*#__PURE__*/jsxRuntime.jsx("span", {
77
- className: "flex-initial leading-none truncate",
76
+ className: "flex-initial leading-tight truncate",
78
77
  children: label
79
78
  })]
80
79
  });
81
- };
80
+ }
82
81
 
83
82
  exports.Checkbox = Checkbox;
@@ -2,99 +2,156 @@
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
4
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
- var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var react$1 = require('@floating-ui/react');
6
6
  var core = require('@react-fabric/core');
7
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
+ var getProps = require('../utils/getProps.js');
10
11
  var ColorPicker = require('./ColorPicker.js');
11
12
  var jsxRuntime = require('react/jsx-runtime');
12
13
 
13
- var _excluded = ["ref", "required", "disabled", "allowClear", "invalid", "error", "value", "showPicker", "defaultColor", "decorateEnd", "decorateStart", "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
- 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 ColorInput = function ColorInput(_ref) {
17
- _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,
24
- showPicker = _ref.showPicker,
25
- _ref$defaultColor = _ref.defaultColor,
26
- 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);
32
- var _useState = react.useState(""),
33
- _useState2 = _slicedToArray(_useState, 2),
34
- actualValue = _useState2[0],
35
- setActualValue = _useState2[1];
36
- var deferred = react.useDeferredValue(value !== null && value !== void 0 ? value : defaultColor);
37
- react.useEffect(function () {
38
- setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
39
- }, [deferred]);
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
+ * 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
+ function ColorInput(props) {
27
+ var ref = props.ref,
28
+ disabled = props.disabled,
29
+ readOnly = props.readOnly,
30
+ value = props.value,
31
+ invalid = props.invalid,
32
+ allowClear = props.allowClear,
33
+ showPicker = props.showPicker,
34
+ _props$defaultColor = props.defaultColor,
35
+ defaultColor = _props$defaultColor === void 0 ? "" : _props$defaultColor,
36
+ onBlur = props.onBlur,
37
+ onFocus = props.onFocus,
38
+ onChange = props.onChange;
39
+ var _useControlledValue = core.useControlledValue(value, defaultColor),
40
+ currentValue = _useControlledValue.currentValue,
41
+ updateValue = _useControlledValue.updateValue;
40
42
  var handleChange = react.useCallback(function (e) {
41
- setActualValue(e !== null && e !== void 0 ? e : defaultColor);
42
- onChange != null && react.startTransition(function () {
43
- return onChange(e);
43
+ var value = e !== null && e !== void 0 ? e : defaultColor;
44
+ updateValue(value);
45
+ if (onChange) react.startTransition(function () {
46
+ return onChange(value !== null && value !== void 0 ? value : null);
44
47
  });
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
- })
48
+ }, [defaultColor, updateValue, onChange]);
49
+ var arrowRef = react.useRef(null);
50
+ var _useState = react.useState(false),
51
+ _useState2 = _slicedToArray(_useState, 2),
52
+ isOpen = _useState2[0],
53
+ setIsOpen = _useState2[1];
54
+ var _useFloating = react$1.useFloating({
55
+ open: isOpen,
56
+ onOpenChange: function onOpenChange(open, _, reason) {
57
+ if (reason === "reference-press") return;
58
+ setIsOpen(open);
59
+ },
60
+ strategy: "fixed",
61
+ placement: "bottom",
62
+ whileElementsMounted: react$1.autoUpdate,
63
+ middleware: [react$1.shift({
64
+ padding: 8
65
+ }), react$1.flip(), react$1.offset(9), react$1.arrow({
66
+ element: arrowRef
67
+ })]
68
+ }),
69
+ refs = _useFloating.refs,
70
+ floatingStyles = _useFloating.floatingStyles,
71
+ context = _useFloating.context;
72
+ var click = react$1.useClick(context, {
73
+ enabled: !disabled && !readOnly
74
+ });
75
+ var dismiss = react$1.useDismiss(context, {
76
+ referencePress: true
77
+ });
78
+ var _useInteractions = react$1.useInteractions([dismiss, click]),
79
+ getReferenceProps = _useInteractions.getReferenceProps,
80
+ getFloatingProps = _useInteractions.getFloatingProps;
81
+ return /*#__PURE__*/jsxRuntime.jsxs(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
82
+ showClear: allowClear && currentValue !== defaultColor && !disabled && !readOnly,
83
+ onClear: handleChange
84
+ }, getProps.getWrapperProps(props)), {}, {
85
+ children: [/*#__PURE__*/jsxRuntime.jsx("button", _objectSpread(_objectSpread({
86
+ "data-ref": "button",
87
+ type: "button",
88
+ className: "flex-1 flex items-center",
89
+ ref: utilities.mergeRefs(ref, function (el) {
90
+ return refs.setReference(el);
91
+ })
92
+ }, getReferenceProps({
93
+ onBlur: onBlur,
94
+ onFocus: onFocus
95
+ })), {}, {
96
+ "data-inner-clickable": "true",
97
+ "data-dropdown-open": isOpen ? true : undefined,
98
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
99
+ 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",
100
+ "aria-invalid": invalid,
101
+ style: {
102
+ backgroundColor: currentValue !== null && currentValue !== void 0 ? currentValue : "",
103
+ opacity: disabled ? 0.65 : 1,
104
+ pointerEvents: disabled ? "none" : undefined
105
+ },
106
+ children: !currentValue && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
107
+ size: "md",
108
+ className: "text-muted",
109
+ icon: "icon-[mdi--palette]"
74
110
  })
75
- }), /*#__PURE__*/jsxRuntime.jsx(ColorPicker.ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
76
- onChange: handleChange,
77
- defaultColor: defaultColor,
78
- value: actualValue
79
- }))]
80
- }), !disabled && showPicker && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
81
- icon: core.CoreIcons.colorPicker,
82
- onClick: function onClick() {
83
- return window.EyeDropper && new window.EyeDropper().open().then(function (resp) {
84
- return handleChange(resp.sRGBHex);
85
- });
86
- }
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,
111
+ })
112
+ })), isOpen && /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingFocusManager, {
113
+ context: context,
114
+ closeOnFocusOut: true,
115
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
116
+ ref: function ref(el) {
117
+ return refs.setFloating(el);
118
+ },
119
+ style: _objectSpread({
120
+ zIndex: "var(--z-popover)"
121
+ }, floatingStyles),
122
+ "data-ref": "dropdownBody"
123
+ }, getFloatingProps()), {}, {
124
+ children: [/*#__PURE__*/jsxRuntime.jsx(ColorPicker.ColorPicker, _objectSpread(_objectSpread({}, props), {}, {
125
+ onChange: handleChange,
126
+ defaultColor: defaultColor,
127
+ value: currentValue
128
+ })), /*#__PURE__*/jsxRuntime.jsx(react$1.FloatingArrow, {
129
+ ref: arrowRef,
130
+ context: context,
131
+ strokeWidth: 0.5,
132
+ className: "stroke-muted",
133
+ style: {
134
+ fill: currentValue || "var(--bg-color-default)"
135
+ }
136
+ })]
137
+ }))
138
+ }), !disabled && showPicker && /*#__PURE__*/jsxRuntime.jsx("button", {
139
+ type: "button",
140
+ className: "size-fit leading-0 cursor-pointer",
92
141
  onClick: function onClick() {
93
- return handleChange();
142
+ var ED = window.EyeDropper;
143
+ if (ED) {
144
+ void new ED().open().then(function (resp) {
145
+ return handleChange(resp.sRGBHex);
146
+ });
147
+ }
94
148
  },
95
- className: classNames("text-tint-500 hover:text-tint-700 p-[0.25em] flex-content")
149
+ children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
150
+ className: "flex-content p-1",
151
+ icon: "icon-[mdi--eyedropper]"
152
+ })
96
153
  })]
97
- });
98
- };
154
+ }));
155
+ }
99
156
 
100
157
  exports.ColorInput = ColorInput;