@react-fabric/form 1.0.0-beta.5 → 1.0.0-beta.51

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 (174) 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} +64 -29
  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 +37 -25
  7. package/dist/cjs/builder/FormField.js +50 -34
  8. package/dist/cjs/builder/SchemaEditor.js +72 -0
  9. package/dist/cjs/builder/components/AddSchemaFields.js +62 -0
  10. package/dist/cjs/builder/components/SchemaArrayForm.js +143 -0
  11. package/dist/cjs/builder/components/SchemaField.js +414 -0
  12. package/dist/cjs/form/Controller.js +1 -1
  13. package/dist/cjs/form/Form.js +11 -6
  14. package/dist/cjs/hooks/useFormBuilder.js +27 -15
  15. package/dist/cjs/index.js +11 -2
  16. package/dist/cjs/input/ArrayInput.js +61 -33
  17. package/dist/cjs/input/AvatarInput.js +9 -8
  18. package/dist/cjs/input/Checkbox.js +6 -5
  19. package/dist/cjs/input/ColorInput.js +95 -56
  20. package/dist/cjs/input/ColorPicker.js +1 -35
  21. package/dist/cjs/input/DateInput.js +186 -0
  22. package/dist/cjs/input/Field.js +5 -4
  23. package/dist/cjs/input/File.js +4 -7
  24. package/dist/cjs/input/Hidden.js +3 -1
  25. package/dist/cjs/input/Input.js +11 -7
  26. package/dist/cjs/input/Number.js +9 -7
  27. package/dist/cjs/input/Password.js +10 -8
  28. package/dist/cjs/input/Radio.js +2 -2
  29. package/dist/cjs/input/RadioGroup.js +6 -3
  30. package/dist/cjs/input/{Range.js → RangeSlider.js} +5 -5
  31. package/dist/cjs/input/Search.js +16 -16
  32. package/dist/cjs/input/Slider.js +3 -3
  33. package/dist/cjs/input/Switch.js +30 -7
  34. package/dist/cjs/input/Textarea.js +13 -4
  35. package/dist/cjs/internal/ErrorIcon.js +1 -1
  36. package/dist/cjs/internal/FieldWrapper.js +11 -4
  37. package/dist/cjs/internal/InputWrapper.js +19 -16
  38. package/dist/cjs/select/AutoComplete.js +12 -8
  39. package/dist/cjs/select/DualList.js +4 -1
  40. package/dist/cjs/select/List.js +45 -20
  41. package/dist/cjs/select/Options.js +2 -2
  42. package/dist/cjs/select/Select.js +14 -4
  43. package/dist/cjs/select/useSelect.js +10 -6
  44. package/dist/cjs/types/schema.js +43 -0
  45. package/dist/cjs/utils/eventHandlers.js +11 -5
  46. package/dist/cjs/utils/getColor.js +6 -0
  47. package/dist/esm/builder/FileField.js +39 -27
  48. package/dist/esm/builder/FormField.js +50 -34
  49. package/dist/esm/builder/SchemaEditor.js +72 -0
  50. package/dist/esm/builder/components/AddSchemaFields.js +62 -0
  51. package/dist/esm/builder/components/SchemaArrayForm.js +143 -0
  52. package/dist/esm/builder/components/SchemaField.js +414 -0
  53. package/dist/esm/form/Controller.js +1 -1
  54. package/dist/esm/form/Form.js +11 -6
  55. package/dist/esm/hooks/useFormBuilder.js +25 -13
  56. package/dist/esm/index.js +5 -1
  57. package/dist/esm/input/ArrayInput.js +61 -33
  58. package/dist/esm/input/AvatarInput.js +9 -8
  59. package/dist/esm/input/Checkbox.js +6 -5
  60. package/dist/esm/input/ColorInput.js +97 -58
  61. package/dist/esm/input/ColorPicker.js +1 -35
  62. package/dist/esm/input/DateInput.js +186 -0
  63. package/dist/esm/input/Field.js +6 -5
  64. package/dist/esm/input/File.js +6 -9
  65. package/dist/esm/input/Hidden.js +3 -1
  66. package/dist/esm/input/Input.js +13 -9
  67. package/dist/esm/input/Number.js +11 -9
  68. package/dist/esm/input/Password.js +12 -10
  69. package/dist/esm/input/Radio.js +2 -2
  70. package/dist/esm/input/RadioGroup.js +7 -4
  71. package/dist/esm/input/{Range.js → RangeSlider.js} +5 -5
  72. package/dist/esm/input/Search.js +18 -18
  73. package/dist/esm/input/Slider.js +3 -3
  74. package/dist/esm/input/Switch.js +32 -9
  75. package/dist/esm/input/Textarea.js +14 -5
  76. package/dist/esm/internal/ErrorIcon.js +1 -1
  77. package/dist/esm/internal/FieldWrapper.js +11 -4
  78. package/dist/esm/internal/InputWrapper.js +19 -16
  79. package/dist/esm/select/AutoComplete.js +12 -8
  80. package/dist/esm/select/DualList.js +4 -1
  81. package/dist/esm/select/List.js +46 -21
  82. package/dist/esm/select/Options.js +2 -2
  83. package/dist/esm/select/Select.js +14 -4
  84. package/dist/esm/select/useSelect.js +11 -7
  85. package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
  86. package/dist/esm/utils/eventHandlers.js +11 -5
  87. package/dist/esm/utils/getColor.js +6 -1
  88. package/dist/types/builder/FileField.d.ts +4 -2
  89. package/dist/types/builder/FormField.d.ts +3 -1
  90. package/dist/types/builder/SchemaEditor.d.ts +2 -0
  91. package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
  92. package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
  93. package/dist/types/builder/components/SchemaField.d.ts +10 -0
  94. package/dist/types/form/Controller.d.ts +2 -2
  95. package/dist/types/form/Form.d.ts +5 -1
  96. package/dist/types/hooks/useFormBuilder.d.ts +3 -1
  97. package/dist/types/index.d.ts +5 -2
  98. package/dist/types/input/ArrayInput.d.ts +39 -6
  99. package/dist/types/input/AvatarInput.d.ts +6 -3
  100. package/dist/types/input/Checkbox.d.ts +4 -4
  101. package/dist/types/input/ColorInput.d.ts +2 -2
  102. package/dist/types/input/ColorPicker.d.ts +1 -1
  103. package/dist/types/input/DateInput.d.ts +19 -0
  104. package/dist/types/input/Field.d.ts +0 -1
  105. package/dist/types/input/Input.d.ts +1 -1
  106. package/dist/types/input/Number.d.ts +1 -1
  107. package/dist/types/input/Password.d.ts +1 -1
  108. package/dist/types/input/Radio.d.ts +0 -1
  109. package/dist/types/input/RadioGroup.d.ts +18 -3
  110. package/dist/types/input/{Range.d.ts → RangeSlider.d.ts} +1 -1
  111. package/dist/types/input/Search.d.ts +5 -1
  112. package/dist/types/input/Switch.d.ts +7 -4
  113. package/dist/types/input/Textarea.d.ts +5 -1
  114. package/dist/types/internal/FieldWrapper.d.ts +1 -1
  115. package/dist/types/internal/InputWrapper.d.ts +1 -1
  116. package/dist/types/ranger/index.d.ts +2 -2
  117. package/dist/types/select/AutoComplete.d.ts +1 -1
  118. package/dist/types/select/DualList.d.ts +6 -2
  119. package/dist/types/select/List.d.ts +1 -1
  120. package/dist/types/select/Select.d.ts +1 -1
  121. package/dist/types/select/useSelect.d.ts +7 -15
  122. package/dist/types/types/index.d.ts +28 -7
  123. package/dist/types/types/schema.d.ts +78 -33
  124. package/dist/types/utils/eventHandlers.d.ts +1 -1
  125. package/package.json +15 -12
  126. package/src/builder/FileField.tsx +53 -27
  127. package/src/builder/FormField.tsx +52 -32
  128. package/src/builder/SchemaEditor.tsx +72 -0
  129. package/src/builder/components/AddSchemaFields.tsx +74 -0
  130. package/src/builder/components/SchemaArrayForm.tsx +158 -0
  131. package/src/builder/components/SchemaField.tsx +436 -0
  132. package/src/form/Controller.tsx +3 -3
  133. package/src/form/Form.tsx +14 -5
  134. package/src/hooks/useFormBuilder.tsx +29 -15
  135. package/src/index.ts +11 -2
  136. package/src/input/ArrayInput.tsx +130 -54
  137. package/src/input/AvatarInput.tsx +12 -8
  138. package/src/input/Checkbox.tsx +6 -5
  139. package/src/input/ColorInput.tsx +113 -69
  140. package/src/input/ColorPicker.tsx +2 -36
  141. package/src/input/DateInput.tsx +250 -0
  142. package/src/input/Field.tsx +10 -11
  143. package/src/input/File.tsx +7 -14
  144. package/src/input/Hidden.tsx +4 -1
  145. package/src/input/Input.tsx +15 -10
  146. package/src/input/Number.tsx +10 -10
  147. package/src/input/Password.tsx +13 -12
  148. package/src/input/Radio.tsx +2 -2
  149. package/src/input/RadioGroup.tsx +27 -4
  150. package/src/input/{Range.tsx → RangeSlider.tsx} +4 -4
  151. package/src/input/Search.tsx +20 -19
  152. package/src/input/Slider.tsx +3 -3
  153. package/src/input/Switch.tsx +43 -7
  154. package/src/input/Textarea.tsx +19 -5
  155. package/src/internal/ErrorIcon.tsx +1 -1
  156. package/src/internal/FieldWrapper.tsx +8 -4
  157. package/src/internal/InputWrapper.tsx +36 -20
  158. package/src/select/AutoComplete.tsx +5 -1
  159. package/src/select/DualList.tsx +8 -0
  160. package/src/select/List.tsx +41 -8
  161. package/src/select/Options.tsx +1 -1
  162. package/src/select/Select.tsx +13 -3
  163. package/src/select/useSelect.tsx +13 -5
  164. package/src/types/index.ts +34 -8
  165. package/src/types/schema.ts +96 -41
  166. package/src/utils/eventHandlers.ts +9 -3
  167. package/dist/cjs/input/ArrayInput.module.css +0 -1
  168. package/dist/cjs/input/ColorPicker.module.css +0 -1
  169. package/dist/cjs/input/File.module.css +0 -1
  170. package/dist/cjs/internal/Field.module.css +0 -1
  171. package/dist/esm/input/ArrayInput.module.css +0 -1
  172. package/dist/esm/input/ColorPicker.module.css +0 -1
  173. package/dist/esm/input/File.module.css +0 -1
  174. package/dist/esm/internal/Field.module.css +0 -1
@@ -4,30 +4,33 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
5
  import { DndContext } from '@dnd-kit/core';
6
6
  import { SortableContext, useSortable } from '@dnd-kit/sortable';
7
- import { Icon, CoreIcons, Button, Tooltip } from '@react-fabric/core';
8
- import { isString } from '@react-fabric/utilities';
7
+ import { Icon, CoreIcons, Tooltip, Button, cloneChildren } from '@react-fabric/core';
8
+ import { isFalse, isString } from '@react-fabric/utilities';
9
9
  import classNames from 'classnames';
10
- import { useMemo, useCallback, useImperativeHandle, Children, cloneElement } from 'react';
10
+ import { useMemo, useCallback, useImperativeHandle, cloneElement } from 'react';
11
11
  import { useFormContext, useFieldArray } from 'react-hook-form';
12
12
  import { useTranslation } from 'react-i18next';
13
13
  import { FieldWrapper } from '../internal/FieldWrapper.js';
14
- import classes from './ArrayInput.module.css';
15
14
  import { restrictToVerticalAxis } from '@dnd-kit/modifiers';
16
15
  import { CSS } from '@dnd-kit/utilities';
17
16
  import { jsx, jsxs } from 'react/jsx-runtime';
18
17
 
19
- var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "onAdd", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems"];
18
+ var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "buttonPosition", "onAdd", "onRemove", "onBeforeRemove", "canRemove", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
20
19
  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; }
21
20
  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; }
22
21
  var ArrayInput = function ArrayInput(_ref) {
23
- var _error$values$label, _error$values, _error$values2;
24
22
  var name = _ref.name,
25
23
  children = _ref.children,
26
24
  addLabel = _ref.addLabel,
27
25
  fixedList = _ref.fixedList,
28
26
  _ref$focusName = _ref.focusName,
29
27
  focusName = _ref$focusName === void 0 ? "" : _ref$focusName,
28
+ _ref$buttonPosition = _ref.buttonPosition,
29
+ buttonPosition = _ref$buttonPosition === void 0 ? "bottom" : _ref$buttonPosition,
30
30
  onAdd = _ref.onAdd,
31
+ onRemove = _ref.onRemove,
32
+ onBeforeRemove = _ref.onBeforeRemove,
33
+ canRemove = _ref.canRemove,
31
34
  arrayRef = _ref.arrayRef,
32
35
  enableSorting = _ref.enableSorting,
33
36
  _ref$disabled = _ref.disabled,
@@ -36,6 +39,8 @@ var ArrayInput = function ArrayInput(_ref) {
36
39
  readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
37
40
  _ref$minItems = _ref.minItems,
38
41
  minItems = _ref$minItems === void 0 ? 0 : _ref$minItems,
42
+ _ref$maxItems = _ref.maxItems,
43
+ maxItems = _ref$maxItems === void 0 ? Number.MAX_SAFE_INTEGER : _ref$maxItems,
39
44
  rest = _objectWithoutProperties(_ref, _excluded);
40
45
  var _useTranslation = useTranslation("form"),
41
46
  t = _useTranslation.t;
@@ -43,6 +48,7 @@ var ArrayInput = function ArrayInput(_ref) {
43
48
  if (!(form !== null && form !== void 0 && form.control)) throw new Error("ArrayInput must be contained within a Form element");
44
49
  var _useFieldArray = useFieldArray({
45
50
  name: name,
51
+ keyName: "__ID__",
46
52
  control: form.control
47
53
  }),
48
54
  fields = _useFieldArray.fields,
@@ -59,6 +65,15 @@ var ArrayInput = function ArrayInput(_ref) {
59
65
  form.setFocus("".concat(name, ".").concat(fields.length).concat(focusName ? "." + focusName : ""));
60
66
  }, 100);
61
67
  }, [name, fields, focusName]);
68
+ var handleRemove = useCallback(function (item, index) {
69
+ var ret = onBeforeRemove === null || onBeforeRemove === void 0 ? void 0 : onBeforeRemove(item, index);
70
+ void Promise.resolve(ret).then(function (b) {
71
+ if (!isFalse(b)) {
72
+ remove(index);
73
+ onRemove === null || onRemove === void 0 || onRemove(item, index);
74
+ }
75
+ });
76
+ }, [remove, onRemove, onBeforeRemove]);
62
77
  useImperativeHandle(arrayRef, function () {
63
78
  return {
64
79
  addItem: handleAdd,
@@ -70,7 +85,7 @@ var ArrayInput = function ArrayInput(_ref) {
70
85
  if (enableSorting) {
71
86
  // pass id list to dnd context
72
87
  var idMap = fields.map(function (item) {
73
- return item.id;
88
+ return item.__ID__;
74
89
  });
75
90
  var handleDragEnd = function handleDragEnd(e) {
76
91
  if (e.over && e.active.id !== e.over.id) {
@@ -127,18 +142,46 @@ var ArrayInput = function ArrayInput(_ref) {
127
142
  }, [enableSorting]);
128
143
  // @ts-expect-error ignore
129
144
  SortableItem.displayName = "SortableItem";
145
+ var addButton = useMemo(function () {
146
+ var _error$values$label, _error$values, _error$values2;
147
+ return /*#__PURE__*/jsx("div", {
148
+ className: "flex justify-end",
149
+ children: /*#__PURE__*/jsx(Tooltip, {
150
+ color: "danger-200",
151
+ content: isString(error) ? "".concat(error) : t(error === null || error === void 0 ? void 0 : error.key, error !== null && error !== void 0 && error.values ? _objectSpread(_objectSpread({}, error === null || error === void 0 ? void 0 : error.values), {}, {
152
+ label: t((_error$values$label = (_error$values = error.values) === null || _error$values === void 0 ? void 0 : _error$values.label) !== null && _error$values$label !== void 0 ? _error$values$label : "form:badkey", (_error$values2 = error.values) === null || _error$values2 === void 0 ? void 0 : _error$values2.path)
153
+ }) : {}),
154
+ children: /*#__PURE__*/jsx(Button, {
155
+ size: "sm",
156
+ "aria-label": "Add item",
157
+ icon: CoreIcons.insert,
158
+ onClick: function onClick() {
159
+ return handleAdd(onAdd === null || onAdd === void 0 ? void 0 : onAdd());
160
+ },
161
+ "data-invalid": !!error,
162
+ disabled: !!disabled || readOnly || fields.length > maxItems,
163
+ className: classNames("fabric-addButton", "me-10"),
164
+ children: addLabel !== null && addLabel !== void 0 ? addLabel : t("addArray")
165
+ })
166
+ })
167
+ });
168
+ }, [error, fields, handleAdd, disabled, readOnly, addLabel, maxItems]);
130
169
  return /*#__PURE__*/jsxs("div", {
131
- className: classes.arrayInput,
170
+ className: "fabric-arrayInput",
132
171
  children: [/*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
172
+ appendLabel: /*#__PURE__*/jsx("div", {
173
+ className: "-me-2",
174
+ children: !fixedList && onAdd && buttonPosition !== "bottom" && addButton
175
+ }),
133
176
  children: /*#__PURE__*/jsx(Wrapper, {
134
177
  children: fields.map(function (item, index) {
135
178
  return /*#__PURE__*/jsxs(SortableItem, {
136
- id: item.id,
179
+ id: item.__ID__,
137
180
  className: "flex items-center flex-nowrap gap-2 mb-1",
138
181
  children: [typeof children === "function" ? children({
139
182
  index: index,
140
183
  name: "".concat(name, ".").concat(index)
141
- }) : Children.map(children, function (child) {
184
+ }) : cloneChildren(children, function (child) {
142
185
  return /*#__PURE__*/cloneElement(child, Object.assign({
143
186
  disabled: disabled,
144
187
  readOnly: readOnly,
@@ -155,34 +198,19 @@ var ArrayInput = function ArrayInput(_ref) {
155
198
  color: "danger",
156
199
  variant: "link",
157
200
  className: "self-end",
158
- disabled: disabled || readOnly || fields.length <= minItems,
201
+ disabled: disabled || readOnly || fields.length <= minItems || (canRemove === null || canRemove === void 0 ? void 0 : canRemove({
202
+ item: item,
203
+ index: index,
204
+ lastItem: index + 1 === fields.length
205
+ })) !== false,
159
206
  onClick: function onClick() {
160
- return remove(index);
207
+ return handleRemove(item, index);
161
208
  }
162
209
  })]
163
- }, item.id);
164
- })
165
- })
166
- })), !fixedList && onAdd && /*#__PURE__*/jsx("div", {
167
- className: "flex justify-end",
168
- children: /*#__PURE__*/jsx(Tooltip, {
169
- color: "danger",
170
- content: isString(error) ? "".concat(error) : t(error === null || error === void 0 ? void 0 : error.key, error !== null && error !== void 0 && error.values ? _objectSpread(_objectSpread({}, error === null || error === void 0 ? void 0 : error.values), {}, {
171
- label: t((_error$values$label = (_error$values = error.values) === null || _error$values === void 0 ? void 0 : _error$values.label) !== null && _error$values$label !== void 0 ? _error$values$label : "form:badkey", (_error$values2 = error.values) === null || _error$values2 === void 0 ? void 0 : _error$values2.path)
172
- }) : {}),
173
- children: /*#__PURE__*/jsx(Button, {
174
- "aria-label": "Add item",
175
- icon: CoreIcons.insert,
176
- onClick: function onClick() {
177
- return handleAdd(onAdd());
178
- },
179
- "data-invalid": !!error,
180
- disabled: !!disabled || readOnly,
181
- className: classNames(classes.addButton, "me-10"),
182
- children: addLabel !== null && addLabel !== void 0 ? addLabel : t("addArray")
210
+ }, item.__ID__);
183
211
  })
184
212
  })
185
- })]
213
+ })), !fixedList && onAdd && buttonPosition !== "top" && addButton]
186
214
  });
187
215
  };
188
216
 
@@ -11,14 +11,15 @@ import { useFileUploader } from '../hooks/useFileUploader.js';
11
11
  import { HiddenInput } from './Hidden.js';
12
12
  import { jsxs, jsx } from 'react/jsx-runtime';
13
13
 
14
- var _excluded = ["src", "size", "fileUrl", "uploadHandler"];
14
+ var _excluded = ["size", "avatarName", "value", "fileUrl", "uploadHandler"];
15
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
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
17
  var AvatarInput = function AvatarInput(_ref) {
18
18
  var _list$;
19
- var src = _ref.src,
20
- _ref$size = _ref.size,
19
+ var _ref$size = _ref.size,
21
20
  size = _ref$size === void 0 ? "6rem" : _ref$size,
21
+ avatarName = _ref.avatarName,
22
+ value = _ref.value,
22
23
  fileUrl = _ref.fileUrl,
23
24
  uploadHandler = _ref.uploadHandler,
24
25
  rest = _objectWithoutProperties(_ref, _excluded);
@@ -40,7 +41,7 @@ var AvatarInput = function AvatarInput(_ref) {
40
41
  return function (_x, _x2) {
41
42
  return _ref2.apply(this, arguments);
42
43
  };
43
- }(), rest.value, false),
44
+ }(), value, false),
44
45
  files = _useFileUploader.files,
45
46
  list = _useFileUploader.list,
46
47
  upload = _useFileUploader.upload,
@@ -69,18 +70,18 @@ var AvatarInput = function AvatarInput(_ref) {
69
70
  }, [files, list]);
70
71
  useEffect(function () {
71
72
  var _fileUrl;
72
- src && setBase64((_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(src)) !== null && _fileUrl !== void 0 ? _fileUrl : src);
73
- }, [src]);
73
+ value && setBase64((_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(value)) !== null && _fileUrl !== void 0 ? _fileUrl : value);
74
+ }, [value]);
74
75
  return /*#__PURE__*/jsxs("div", {
75
76
  className: "flex flex-nowrap items-end",
76
77
  children: [/*#__PURE__*/jsxs("div", {
77
78
  className: "inline-block leading-none rounded-full relative outline overflow-hidden",
78
79
  children: [/*#__PURE__*/jsx(Avatar, {
79
- name: "temp",
80
+ name: avatarName !== null && avatarName !== void 0 ? avatarName : "temp",
80
81
  size: size,
81
82
  avatar: base64
82
83
  }), /*#__PURE__*/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",
84
+ className: "absolute inset-x-0 bottom-0 cursor-pointer bg-black/20 hover:bg-black/50 text-white text-xs text-center py-1",
84
85
  children: [/*#__PURE__*/jsx("span", {
85
86
  children: "Edit"
86
87
  }), /*#__PURE__*/jsx("input", {
@@ -9,7 +9,7 @@ import { useState, useDeferredValue, useMemo, useEffect, useCallback } from 'rea
9
9
  import { ErrorIcon } from '../internal/ErrorIcon.js';
10
10
  import { jsxs, jsx } from '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
15
  var Checkbox = function Checkbox(_ref) {
@@ -23,8 +23,9 @@ var Checkbox = function Checkbox(_ref) {
23
23
  error = _ref.error,
24
24
  width = _ref.width,
25
25
  icon = _ref.icon,
26
- iconChecked = _ref.iconChecked,
27
- onChange = _ref.onChange,
26
+ iconChecked = _ref.iconChecked;
27
+ _ref.required;
28
+ var onChange = _ref.onChange,
28
29
  rest = _objectWithoutProperties(_ref, _excluded);
29
30
  var _useState = useState(false),
30
31
  _useState2 = _slicedToArray(_useState, 2),
@@ -66,7 +67,7 @@ var Checkbox = function Checkbox(_ref) {
66
67
  checked: actualValue,
67
68
  onChange: handleChange
68
69
  }, rest)), /*#__PURE__*/jsx(Icon, {
69
- className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white"),
70
+ className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white!"),
70
71
  size: "1.25em",
71
72
  color: invalid ? "danger" : "primary",
72
73
  icon: actualValue ? iconOn : iconOff
@@ -74,7 +75,7 @@ var Checkbox = function Checkbox(_ref) {
74
75
  invalid: invalid,
75
76
  error: error
76
77
  }), label && /*#__PURE__*/jsx("span", {
77
- className: "flex-initial leading-none truncate",
78
+ className: "flex-initial leading-tight truncate",
78
79
  children: label
79
80
  })]
80
81
  });
@@ -3,32 +3,32 @@
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
5
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
6
- import { Dropdown, Icon, CoreIcons } from '@react-fabric/core';
7
- import { isString } from '@react-fabric/utilities';
8
- import classNames from 'classnames';
9
- import { useState, useDeferredValue, useEffect, useCallback, startTransition } from 'react';
6
+ import { useFloating, autoUpdate, shift, flip, offset, arrow, useClick, useDismiss, useInteractions, FloatingArrow } from '@floating-ui/react';
7
+ import { Icon, CoreIcons } from '@react-fabric/core';
8
+ import { useState, useDeferredValue, useEffect, useCallback, startTransition, useRef } from 'react';
9
+ import { InputWrapper } from '../internal/InputWrapper.js';
10
10
  import { ColorPicker } from './ColorPicker.js';
11
11
  import { jsxs, jsx } from '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
16
  var ColorInput = function ColorInput(_ref) {
17
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,
18
+ var required = _ref.required,
19
+ disabled = _ref.disabled,
20
+ readOnly = _ref.readOnly,
21
+ invalid = _ref.invalid,
22
+ error = _ref.error,
23
+ value = _ref.value,
24
24
  showPicker = _ref.showPicker,
25
25
  _ref$defaultColor = _ref.defaultColor,
26
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);
27
+ onBlur = _ref.onBlur,
28
+ onFocus = _ref.onFocus,
29
+ onChange = _ref.onChange;
30
+ _ref.noOutline;
31
+ var rest = _objectWithoutProperties(_ref, _excluded);
32
32
  var _useState = useState(""),
33
33
  _useState2 = _slicedToArray(_useState, 2),
34
34
  actualValue = _useState2[0],
@@ -40,61 +40,100 @@ var ColorInput = function ColorInput(_ref) {
40
40
  var handleChange = useCallback(function (e) {
41
41
  setActualValue(e !== null && e !== void 0 ? e : defaultColor);
42
42
  onChange != null && startTransition(function () {
43
- return onChange(e);
43
+ return onChange(e !== null && e !== void 0 ? e : null);
44
44
  });
45
45
  }, [onChange]);
46
- return /*#__PURE__*/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__*/jsx("div", {
49
- className: classNames("text-muted leading-none flex-content", isString(decorateStart) && "px-2"),
50
- children: decorateStart
51
- }), /*#__PURE__*/jsxs(Dropdown, {
52
- showArrow: true,
53
- disabled: disabled,
54
- children: [/*#__PURE__*/jsx("button", {
55
- "data-ref": "button",
56
- className: "flex-1 flex items-center",
57
- children: /*#__PURE__*/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__*/jsx(Icon, {
70
- size: "md",
71
- className: "text-muted",
72
- icon: CoreIcons.colorSwatch
73
- })
46
+ var arrowRef = useRef(null);
47
+ var _useState3 = useState(false),
48
+ _useState4 = _slicedToArray(_useState3, 2),
49
+ isOpen = _useState4[0],
50
+ setIsOpen = _useState4[1];
51
+ var _useFloating = useFloating({
52
+ open: isOpen,
53
+ onOpenChange: function onOpenChange(open, _, reason) {
54
+ if (reason === "reference-press") return;
55
+ setIsOpen(open);
56
+ },
57
+ strategy: "fixed",
58
+ placement: "bottom",
59
+ whileElementsMounted: autoUpdate,
60
+ middleware: [shift({
61
+ padding: 8
62
+ }), flip(), offset(9), arrow({
63
+ element: arrowRef
64
+ })]
65
+ }),
66
+ refs = _useFloating.refs,
67
+ floatingStyles = _useFloating.floatingStyles,
68
+ context = _useFloating.context;
69
+ var click = useClick(context, {
70
+ enabled: !disabled && !readOnly
71
+ });
72
+ var dismiss = useDismiss(context, {
73
+ referencePress: true
74
+ });
75
+ var _useInteractions = useInteractions([dismiss, click]),
76
+ getReferenceProps = _useInteractions.getReferenceProps,
77
+ getFloatingProps = _useInteractions.getFloatingProps;
78
+ return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
79
+ showClear: actualValue !== defaultColor && !disabled && !readOnly,
80
+ onClear: handleChange,
81
+ invalid: invalid,
82
+ readOnly: readOnly,
83
+ disabled: disabled,
84
+ required: required,
85
+ error: error
86
+ }, rest), {}, {
87
+ children: [/*#__PURE__*/jsx("button", _objectSpread(_objectSpread({
88
+ "data-ref": "button",
89
+ className: "flex-1 flex items-center",
90
+ ref: refs.setReference
91
+ }, getReferenceProps({
92
+ onBlur: onBlur,
93
+ onFocus: onFocus
94
+ })), {}, {
95
+ "data-inner-clickable": "true",
96
+ "data-dropdown-open": isOpen ? true : undefined,
97
+ children: /*#__PURE__*/jsx("div", {
98
+ role: "none",
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
+ style: {
101
+ backgroundColor: actualValue,
102
+ opacity: disabled ? 0.65 : 1,
103
+ pointerEvents: disabled ? "none" : undefined
104
+ },
105
+ children: !actualValue && /*#__PURE__*/jsx(Icon, {
106
+ size: "md",
107
+ className: "text-muted",
108
+ icon: CoreIcons.colorSwatch
74
109
  })
75
- }), /*#__PURE__*/jsx(ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
110
+ })
111
+ })), isOpen && /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
112
+ ref: refs.setFloating,
113
+ style: _objectSpread({
114
+ zIndex: "var(--z-popover)"
115
+ }, floatingStyles),
116
+ "data-ref": "dropdownBody"
117
+ }, getFloatingProps()), {}, {
118
+ children: [/*#__PURE__*/jsx(ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
76
119
  onChange: handleChange,
77
120
  defaultColor: defaultColor,
78
121
  value: actualValue
79
- }))]
80
- }), !disabled && showPicker && /*#__PURE__*/jsx(Icon, {
122
+ })), /*#__PURE__*/jsx(FloatingArrow, {
123
+ ref: arrowRef,
124
+ context: context,
125
+ strokeWidth: 0.5,
126
+ className: "fill-base stroke-muted"
127
+ })]
128
+ })), !disabled && showPicker && /*#__PURE__*/jsx(Icon, {
81
129
  icon: CoreIcons.colorPicker,
82
130
  onClick: function onClick() {
83
131
  return window.EyeDropper && new window.EyeDropper().open().then(function (resp) {
84
132
  return handleChange(resp.sRGBHex);
85
133
  });
86
134
  }
87
- }), decorateEnd && /*#__PURE__*/jsx("div", {
88
- className: classNames("text-muted leading-none flex-content", isString(decorateEnd) && "px-2"),
89
- children: decorateEnd
90
- }), !disabled && allowClear && actualValue !== defaultColor && /*#__PURE__*/jsx(Icon, {
91
- icon: 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
135
  })]
97
- });
136
+ }));
98
137
  };
99
138
 
100
139
  export { ColorInput };
@@ -5,7 +5,6 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
5
  import Color from 'color';
6
6
  import { memo, useState, useDeferredValue, useEffect, useCallback, startTransition } from 'react';
7
7
  import { SketchPicker } from 'react-color';
8
- import classes from './ColorPicker.module.css';
9
8
  import { jsx } from 'react/jsx-runtime';
10
9
 
11
10
  var _excluded = ["a"],
@@ -37,16 +36,13 @@ var ColorPicker = /*#__PURE__*/memo(function (_ref) {
37
36
  }, [onChange]);
38
37
  return /*#__PURE__*/jsx(SketchPicker, {
39
38
  width: "16rem",
40
- className: classes.colorPicker,
39
+ className: "fabric-colorPicker",
41
40
  styles: {
42
41
  "default": {
43
42
  hue: {
44
- borderRadius: "99px",
45
43
  boxShadow: "0 0 1px 1px var(--color-shadow)"
46
44
  },
47
45
  alpha: {
48
- height: "1rem",
49
- borderRadius: "99px",
50
46
  backgroundColor: "var(--fabric-bg)",
51
47
  boxShadow: "0 0 1px 1px var(--color-shadow)"
52
48
  },
@@ -63,36 +59,6 @@ var ColorPicker = /*#__PURE__*/memo(function (_ref) {
63
59
  backgroundColor: "var(--fabric-bg)",
64
60
  boxShadow: "0 0 0 1px var(--color-shadow), 0 0 8px var(--fabric-shadow)"
65
61
  },
66
- Alpha: {
67
- alpha: {
68
- paddingRight: "calc(1rem - 2px)"
69
- },
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)"
80
- },
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)"
94
- }
95
- },
96
62
  checkboard: {
97
63
  white: "transparent",
98
64
  black: "red"