@react-fabric/form 1.0.0-beta.4 → 1.0.0-beta.41

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 (155) 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} +26 -15
  4. package/{src/input/File.module.css → css/_file.css} +20 -6
  5. package/css/styles.css +27 -0
  6. package/dist/cjs/builder/FileField.js +37 -25
  7. package/dist/cjs/builder/FormField.js +44 -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 +413 -0
  12. package/dist/cjs/form/Controller.js +1 -1
  13. package/dist/cjs/form/Form.js +19 -10
  14. package/dist/cjs/hooks/useFormBuilder.js +27 -15
  15. package/dist/cjs/index.js +9 -2
  16. package/dist/cjs/input/ArrayInput.js +36 -25
  17. package/dist/cjs/input/AvatarInput.js +1 -1
  18. package/dist/cjs/input/Checkbox.js +5 -4
  19. package/dist/cjs/input/ColorInput.js +70 -28
  20. package/dist/cjs/input/ColorPicker.js +1 -35
  21. package/dist/cjs/input/DateInput.js +183 -0
  22. package/dist/cjs/input/Field.js +4 -4
  23. package/dist/cjs/input/File.js +2 -3
  24. package/dist/cjs/input/Hidden.js +3 -1
  25. package/dist/cjs/input/Input.js +1 -1
  26. package/dist/cjs/input/Number.js +1 -1
  27. package/dist/cjs/input/Password.js +1 -1
  28. package/dist/cjs/input/Radio.js +1 -1
  29. package/dist/cjs/input/RadioGroup.js +6 -3
  30. package/dist/cjs/input/{Range.js → RangeSlider.js} +3 -3
  31. package/dist/cjs/input/Search.js +1 -1
  32. package/dist/cjs/input/Slider.js +1 -1
  33. package/dist/cjs/input/Switch.js +27 -5
  34. package/dist/cjs/input/Textarea.js +7 -3
  35. package/dist/cjs/internal/ErrorIcon.js +1 -1
  36. package/dist/cjs/internal/FieldWrapper.js +4 -3
  37. package/dist/cjs/internal/InputWrapper.js +14 -16
  38. package/dist/cjs/select/AutoComplete.js +9 -6
  39. package/dist/cjs/select/List.js +41 -20
  40. package/dist/cjs/select/Options.js +2 -2
  41. package/dist/cjs/select/Select.js +15 -9
  42. package/dist/cjs/select/useSelect.js +15 -8
  43. package/{src/input/ColorPicker.module.css → dist/cjs/types/schema.js} +18 -27
  44. package/dist/cjs/utils/getColor.js +6 -0
  45. package/dist/esm/builder/FileField.js +39 -27
  46. package/dist/esm/builder/FormField.js +44 -34
  47. package/dist/esm/builder/SchemaEditor.js +72 -0
  48. package/dist/esm/builder/components/AddSchemaFields.js +62 -0
  49. package/dist/esm/builder/components/SchemaArrayForm.js +143 -0
  50. package/dist/esm/builder/components/SchemaField.js +413 -0
  51. package/dist/esm/form/Controller.js +1 -1
  52. package/dist/esm/form/Form.js +19 -10
  53. package/dist/esm/hooks/useFormBuilder.js +25 -13
  54. package/dist/esm/index.js +4 -1
  55. package/dist/esm/input/ArrayInput.js +38 -27
  56. package/dist/esm/input/AvatarInput.js +1 -1
  57. package/dist/esm/input/Checkbox.js +5 -4
  58. package/dist/esm/input/ColorInput.js +72 -30
  59. package/dist/esm/input/ColorPicker.js +1 -35
  60. package/dist/esm/input/DateInput.js +183 -0
  61. package/dist/esm/input/Field.js +5 -5
  62. package/dist/esm/input/File.js +2 -3
  63. package/dist/esm/input/Hidden.js +3 -1
  64. package/dist/esm/input/Input.js +1 -1
  65. package/dist/esm/input/Number.js +1 -1
  66. package/dist/esm/input/Password.js +1 -1
  67. package/dist/esm/input/Radio.js +1 -1
  68. package/dist/esm/input/RadioGroup.js +7 -4
  69. package/dist/esm/input/{Range.js → RangeSlider.js} +3 -3
  70. package/dist/esm/input/Search.js +1 -1
  71. package/dist/esm/input/Slider.js +1 -1
  72. package/dist/esm/input/Switch.js +29 -7
  73. package/dist/esm/input/Textarea.js +7 -3
  74. package/dist/esm/internal/ErrorIcon.js +1 -1
  75. package/dist/esm/internal/FieldWrapper.js +4 -3
  76. package/dist/esm/internal/InputWrapper.js +14 -16
  77. package/dist/esm/select/AutoComplete.js +9 -6
  78. package/dist/esm/select/List.js +42 -21
  79. package/dist/esm/select/Options.js +2 -2
  80. package/dist/esm/select/Select.js +15 -9
  81. package/dist/esm/select/useSelect.js +16 -9
  82. package/dist/esm/types/schema.js +41 -0
  83. package/dist/esm/utils/getColor.js +6 -1
  84. package/dist/types/builder/FileField.d.ts +4 -2
  85. package/dist/types/builder/FormField.d.ts +3 -1
  86. package/dist/types/builder/SchemaEditor.d.ts +2 -0
  87. package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
  88. package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
  89. package/dist/types/builder/components/SchemaField.d.ts +10 -0
  90. package/dist/types/form/Controller.d.ts +1 -1
  91. package/dist/types/hooks/useFormBuilder.d.ts +3 -1
  92. package/dist/types/index.d.ts +4 -2
  93. package/dist/types/input/ArrayInput.d.ts +20 -3
  94. package/dist/types/input/Checkbox.d.ts +4 -3
  95. package/dist/types/input/ColorInput.d.ts +1 -1
  96. package/dist/types/input/DateInput.d.ts +19 -0
  97. package/dist/types/input/RadioGroup.d.ts +18 -2
  98. package/dist/types/input/{Range.d.ts → RangeSlider.d.ts} +1 -1
  99. package/dist/types/input/Switch.d.ts +7 -3
  100. package/dist/types/input/Textarea.d.ts +5 -1
  101. package/dist/types/internal/InputWrapper.d.ts +1 -1
  102. package/dist/types/select/AutoComplete.d.ts +1 -1
  103. package/dist/types/select/List.d.ts +1 -1
  104. package/dist/types/select/Select.d.ts +1 -1
  105. package/dist/types/select/useSelect.d.ts +2 -1
  106. package/dist/types/types/index.d.ts +17 -5
  107. package/dist/types/types/schema.d.ts +79 -33
  108. package/package.json +10 -7
  109. package/src/builder/FileField.tsx +53 -27
  110. package/src/builder/FormField.tsx +45 -32
  111. package/src/builder/SchemaEditor.tsx +72 -0
  112. package/src/builder/components/AddSchemaFields.tsx +74 -0
  113. package/src/builder/components/SchemaArrayForm.tsx +158 -0
  114. package/src/builder/components/SchemaField.tsx +435 -0
  115. package/src/form/Controller.tsx +2 -2
  116. package/src/form/Form.tsx +15 -8
  117. package/src/hooks/useFormBuilder.tsx +29 -15
  118. package/src/index.ts +10 -2
  119. package/src/input/ArrayInput.tsx +80 -42
  120. package/src/input/AvatarInput.tsx +1 -1
  121. package/src/input/Checkbox.tsx +5 -4
  122. package/src/input/ColorInput.tsx +102 -34
  123. package/src/input/ColorPicker.tsx +1 -35
  124. package/src/input/DateInput.tsx +248 -0
  125. package/src/input/Field.tsx +9 -11
  126. package/src/input/File.tsx +3 -6
  127. package/src/input/Hidden.tsx +4 -1
  128. package/src/input/Input.tsx +2 -2
  129. package/src/input/Number.tsx +2 -2
  130. package/src/input/Password.tsx +2 -2
  131. package/src/input/Radio.tsx +1 -1
  132. package/src/input/RadioGroup.tsx +27 -4
  133. package/src/input/{Range.tsx → RangeSlider.tsx} +2 -2
  134. package/src/input/Search.tsx +2 -2
  135. package/src/input/Slider.tsx +1 -1
  136. package/src/input/Switch.tsx +42 -6
  137. package/src/input/Textarea.tsx +11 -3
  138. package/src/internal/ErrorIcon.tsx +1 -1
  139. package/src/internal/FieldWrapper.tsx +3 -3
  140. package/src/internal/InputWrapper.tsx +21 -20
  141. package/src/select/AutoComplete.tsx +4 -1
  142. package/src/select/List.tsx +37 -8
  143. package/src/select/Options.tsx +1 -1
  144. package/src/select/Select.tsx +9 -3
  145. package/src/select/useSelect.tsx +30 -19
  146. package/src/types/index.ts +22 -7
  147. package/src/types/schema.ts +96 -41
  148. package/dist/cjs/input/ArrayInput.module.css +0 -1
  149. package/dist/cjs/input/ColorPicker.module.css +0 -1
  150. package/dist/cjs/input/File.module.css +0 -1
  151. package/dist/cjs/internal/Field.module.css +0 -1
  152. package/dist/esm/input/ArrayInput.module.css +0 -1
  153. package/dist/esm/input/ColorPicker.module.css +0 -1
  154. package/dist/esm/input/File.module.css +0 -1
  155. package/dist/esm/internal/Field.module.css +0 -1
@@ -4,29 +4,29 @@ 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';
7
+ import { Icon, CoreIcons, Tooltip, Button, cloneChildren } from '@react-fabric/core';
8
8
  import { 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", "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
31
  arrayRef = _ref.arrayRef,
32
32
  enableSorting = _ref.enableSorting,
@@ -36,6 +36,8 @@ var ArrayInput = function ArrayInput(_ref) {
36
36
  readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
37
37
  _ref$minItems = _ref.minItems,
38
38
  minItems = _ref$minItems === void 0 ? 0 : _ref$minItems,
39
+ _ref$maxItems = _ref.maxItems,
40
+ maxItems = _ref$maxItems === void 0 ? Number.MAX_SAFE_INTEGER : _ref$maxItems,
39
41
  rest = _objectWithoutProperties(_ref, _excluded);
40
42
  var _useTranslation = useTranslation("form"),
41
43
  t = _useTranslation.t;
@@ -127,9 +129,37 @@ var ArrayInput = function ArrayInput(_ref) {
127
129
  }, [enableSorting]);
128
130
  // @ts-expect-error ignore
129
131
  SortableItem.displayName = "SortableItem";
132
+ var addButton = useMemo(function () {
133
+ var _error$values$label, _error$values, _error$values2;
134
+ return /*#__PURE__*/jsx("div", {
135
+ className: "flex justify-end",
136
+ children: /*#__PURE__*/jsx(Tooltip, {
137
+ color: "danger-200",
138
+ 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), {}, {
139
+ 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)
140
+ }) : {}),
141
+ children: /*#__PURE__*/jsx(Button, {
142
+ size: "sm",
143
+ "aria-label": "Add item",
144
+ icon: CoreIcons.insert,
145
+ onClick: function onClick() {
146
+ return handleAdd(onAdd === null || onAdd === void 0 ? void 0 : onAdd());
147
+ },
148
+ "data-invalid": !!error,
149
+ disabled: !!disabled || readOnly || fields.length > maxItems,
150
+ className: classNames("fabric-addButton", "me-10"),
151
+ children: addLabel !== null && addLabel !== void 0 ? addLabel : t("addArray")
152
+ })
153
+ })
154
+ });
155
+ }, [error, fields, handleAdd, disabled, readOnly, addLabel, maxItems]);
130
156
  return /*#__PURE__*/jsxs("div", {
131
- className: classes.arrayInput,
157
+ className: "fabric-arrayInput",
132
158
  children: [/*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
159
+ appendLabel: /*#__PURE__*/jsx("div", {
160
+ className: "-me-2",
161
+ children: !fixedList && onAdd && buttonPosition !== "bottom" && addButton
162
+ }),
133
163
  children: /*#__PURE__*/jsx(Wrapper, {
134
164
  children: fields.map(function (item, index) {
135
165
  return /*#__PURE__*/jsxs(SortableItem, {
@@ -138,7 +168,7 @@ var ArrayInput = function ArrayInput(_ref) {
138
168
  children: [typeof children === "function" ? children({
139
169
  index: index,
140
170
  name: "".concat(name, ".").concat(index)
141
- }) : Children.map(children, function (child) {
171
+ }) : cloneChildren(children, function (child) {
142
172
  return /*#__PURE__*/cloneElement(child, Object.assign({
143
173
  disabled: disabled,
144
174
  readOnly: readOnly,
@@ -163,26 +193,7 @@ var ArrayInput = function ArrayInput(_ref) {
163
193
  }, item.id);
164
194
  })
165
195
  })
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")
183
- })
184
- })
185
- })]
196
+ })), !fixedList && onAdd && buttonPosition !== "top" && addButton]
186
197
  });
187
198
  };
188
199
 
@@ -80,7 +80,7 @@ var AvatarInput = function AvatarInput(_ref) {
80
80
  size: size,
81
81
  avatar: base64
82
82
  }), /*#__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",
83
+ 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
84
  children: [/*#__PURE__*/jsx("span", {
85
85
  children: "Edit"
86
86
  }), /*#__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
@@ -3,10 +3,11 @@
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';
6
+ import { useFloating, autoUpdate, shift, flip, offset, arrow, useClick, useDismiss, useInteractions, FloatingArrow } from '@floating-ui/react';
7
+ import { Icon, CoreIcons } from '@react-fabric/core';
7
8
  import { isString } from '@react-fabric/utilities';
8
9
  import classNames from 'classnames';
9
- import { useState, useDeferredValue, useEffect, useCallback, startTransition } from 'react';
10
+ import { useState, useDeferredValue, useEffect, useCallback, startTransition, useRef } from 'react';
10
11
  import { ColorPicker } from './ColorPicker.js';
11
12
  import { jsxs, jsx } from 'react/jsx-runtime';
12
13
 
@@ -40,44 +41,85 @@ var ColorInput = function ColorInput(_ref) {
40
41
  var handleChange = useCallback(function (e) {
41
42
  setActualValue(e !== null && e !== void 0 ? e : defaultColor);
42
43
  onChange != null && startTransition(function () {
43
- return onChange(e);
44
+ return onChange(e !== null && e !== void 0 ? e : null);
44
45
  });
45
46
  }, [onChange]);
47
+ var arrowRef = useRef(null);
48
+ var _useState3 = useState(false),
49
+ _useState4 = _slicedToArray(_useState3, 2),
50
+ isOpen = _useState4[0],
51
+ setIsOpen = _useState4[1];
52
+ var _useFloating = useFloating({
53
+ open: isOpen,
54
+ onOpenChange: function onOpenChange(open, _, reason) {
55
+ if (reason === "reference-press") return;
56
+ setIsOpen(open);
57
+ },
58
+ strategy: "fixed",
59
+ placement: "bottom",
60
+ whileElementsMounted: autoUpdate,
61
+ middleware: [shift({
62
+ padding: 8
63
+ }), flip(), offset(9), arrow({
64
+ element: arrowRef
65
+ })]
66
+ }),
67
+ refs = _useFloating.refs,
68
+ floatingStyles = _useFloating.floatingStyles,
69
+ context = _useFloating.context;
70
+ var click = useClick(context, {
71
+ enabled: !disabled
72
+ });
73
+ var dismiss = useDismiss(context, {
74
+ referencePress: true
75
+ });
76
+ var _useInteractions = useInteractions([dismiss, click]),
77
+ getReferenceProps = _useInteractions.getReferenceProps,
78
+ getFloatingProps = _useInteractions.getFloatingProps;
46
79
  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"),
80
+ 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-(--fabric-input) outline overflow-hidden"),
48
81
  children: [decorateStart && /*#__PURE__*/jsx("div", {
49
82
  className: classNames("text-muted leading-none flex-content", isString(decorateStart) && "px-2"),
50
83
  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
- })
84
+ }), /*#__PURE__*/jsx("button", _objectSpread(_objectSpread({
85
+ "data-ref": "button",
86
+ className: "flex-1 flex items-center",
87
+ ref: refs.setReference
88
+ }, getReferenceProps()), {}, {
89
+ "data-inner-clickable": "true",
90
+ "data-dropdown-open": isOpen ? true : undefined,
91
+ children: /*#__PURE__*/jsx("div", {
92
+ role: "none",
93
+ 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",
94
+ style: {
95
+ backgroundColor: actualValue,
96
+ opacity: disabled ? 0.65 : 1,
97
+ pointerEvents: disabled ? "none" : undefined
98
+ },
99
+ children: !actualValue && /*#__PURE__*/jsx(Icon, {
100
+ size: "md",
101
+ className: "text-muted",
102
+ icon: CoreIcons.colorSwatch
74
103
  })
75
- }), /*#__PURE__*/jsx(ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
104
+ })
105
+ })), isOpen && /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
106
+ ref: refs.setFloating,
107
+ style: _objectSpread({
108
+ zIndex: "var(--z-popover)"
109
+ }, floatingStyles),
110
+ "data-ref": "dropdownBody"
111
+ }, getFloatingProps()), {}, {
112
+ children: [/*#__PURE__*/jsx(ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
76
113
  onChange: handleChange,
77
114
  defaultColor: defaultColor,
78
115
  value: actualValue
79
- }))]
80
- }), !disabled && showPicker && /*#__PURE__*/jsx(Icon, {
116
+ })), /*#__PURE__*/jsx(FloatingArrow, {
117
+ ref: arrowRef,
118
+ context: context,
119
+ strokeWidth: 0.5,
120
+ className: "fill-base stroke-muted"
121
+ })]
122
+ })), !disabled && showPicker && /*#__PURE__*/jsx(Icon, {
81
123
  icon: CoreIcons.colorPicker,
82
124
  onClick: function onClick() {
83
125
  return window.EyeDropper && new window.EyeDropper().open().then(function (resp) {
@@ -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"
@@ -0,0 +1,183 @@
1
+ 'use client';
2
+
3
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
6
+ import { useFloating, autoUpdate, shift, flip, offset, arrow, useFocus, useClick, useDismiss, useInteractions, FloatingArrow } from '@floating-ui/react';
7
+ import { DateUtil, DatePanel } from '@react-fabric/date';
8
+ import { mergeRefs } from '@react-fabric/utilities';
9
+ import { useState, useDeferredValue, useMemo, useEffect, useCallback, startTransition, useRef } from 'react';
10
+ import { InputWrapper } from '../internal/InputWrapper.js';
11
+ import { handleEnter } from '../utils/eventHandlers.js';
12
+ import classNames from 'classnames';
13
+ import { jsxs, jsx } from 'react/jsx-runtime';
14
+
15
+ var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "type", "onChange", "onEnterPressed", "format", "min", "max"];
16
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
17
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
+ var DateInput = function DateInput(_ref) {
19
+ var ref = _ref.ref,
20
+ name = _ref.name,
21
+ value = _ref.value,
22
+ invalid = _ref.invalid,
23
+ readOnly = _ref.readOnly,
24
+ disabled = _ref.disabled,
25
+ required = _ref.required,
26
+ placeholder = _ref.placeholder,
27
+ autoFocus = _ref.autoFocus,
28
+ error = _ref.error,
29
+ _ref$type = _ref.type,
30
+ type = _ref$type === void 0 ? "date" : _ref$type,
31
+ onChange = _ref.onChange,
32
+ onEnterPressed = _ref.onEnterPressed;
33
+ _ref.format;
34
+ var min = _ref.min,
35
+ max = _ref.max,
36
+ rest = _objectWithoutProperties(_ref, _excluded);
37
+ var _useState = useState(""),
38
+ _useState2 = _slicedToArray(_useState, 2),
39
+ actualValue = _useState2[0],
40
+ setActualValue = _useState2[1];
41
+ var _useState3 = useState(""),
42
+ _useState4 = _slicedToArray(_useState3, 2),
43
+ inputValue = _useState4[0],
44
+ setInputValue = _useState4[1];
45
+ var deferred = useDeferredValue(value);
46
+ var inputFormat = useMemo(function () {
47
+ return type === "datetime" ? "yyyy-MM-dd HH:mm" : "yyyy-MM-dd";
48
+ }, [type]);
49
+ useEffect(function () {
50
+ setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
51
+ setInputValue(deferred ? DateUtil.format(deferred, inputFormat) : "");
52
+ }, [deferred, inputFormat]);
53
+ var handleEnterPressed = useMemo(function () {
54
+ return handleEnter(onEnterPressed);
55
+ }, [onEnterPressed]);
56
+ var handleChange = useCallback(function (e) {
57
+ var value = e === null || e === void 0 ? void 0 : e.currentTarget.value;
58
+ if (value) {
59
+ var _parsed$toISOString;
60
+ var parsed = DateUtil.parseDate(value);
61
+ setActualValue(parsed === null || parsed === void 0 || (_parsed$toISOString = parsed.toISOString) === null || _parsed$toISOString === void 0 ? void 0 : _parsed$toISOString.call(parsed));
62
+ setInputValue(DateUtil.format(parsed, inputFormat));
63
+ onChange != null && startTransition(function () {
64
+ var _parsed$toISOString2;
65
+ return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString2 = parsed.toISOString) === null || _parsed$toISOString2 === void 0 ? void 0 : _parsed$toISOString2.call(parsed));
66
+ });
67
+ } else {
68
+ setActualValue("");
69
+ setInputValue("");
70
+ onChange != null && startTransition(function () {
71
+ return onChange(null);
72
+ });
73
+ }
74
+ }, [onChange, inputFormat]);
75
+ var handleDateChange = useCallback(function (value) {
76
+ if (value) {
77
+ var _parsed$toISOString3;
78
+ var parsed = DateUtil.parseDate(value);
79
+ setActualValue(parsed === null || parsed === void 0 || (_parsed$toISOString3 = parsed.toISOString) === null || _parsed$toISOString3 === void 0 ? void 0 : _parsed$toISOString3.call(parsed));
80
+ setInputValue(DateUtil.format(parsed, inputFormat));
81
+ onChange != null && startTransition(function () {
82
+ var _parsed$toISOString4;
83
+ return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString4 = parsed.toISOString) === null || _parsed$toISOString4 === void 0 ? void 0 : _parsed$toISOString4.call(parsed));
84
+ });
85
+ } else {
86
+ setActualValue("");
87
+ setInputValue("");
88
+ onChange != null && startTransition(function () {
89
+ return onChange(null);
90
+ });
91
+ }
92
+ }, [onChange, inputFormat]);
93
+ var arrowRef = useRef(null);
94
+ var _useState5 = useState(false),
95
+ _useState6 = _slicedToArray(_useState5, 2),
96
+ isOpen = _useState6[0],
97
+ setIsOpen = _useState6[1];
98
+ var _useFloating = useFloating({
99
+ open: isOpen,
100
+ onOpenChange: function onOpenChange(open, _, reason) {
101
+ console.log(reason);
102
+ if (reason === "reference-press") return;
103
+ setIsOpen(open);
104
+ },
105
+ strategy: "fixed",
106
+ placement: "bottom-start",
107
+ whileElementsMounted: autoUpdate,
108
+ middleware: [shift({
109
+ padding: 8
110
+ }), flip(), offset(9), arrow({
111
+ element: arrowRef
112
+ })]
113
+ }),
114
+ refs = _useFloating.refs,
115
+ floatingStyles = _useFloating.floatingStyles,
116
+ context = _useFloating.context;
117
+ var focus = useFocus(context, {
118
+ enabled: !disabled
119
+ });
120
+ var click = useClick(context, {
121
+ enabled: !disabled,
122
+ toggle: false
123
+ });
124
+ var dismiss = useDismiss(context, {
125
+ referencePress: true
126
+ });
127
+ var _useInteractions = useInteractions([dismiss, click, focus]),
128
+ getReferenceProps = _useInteractions.getReferenceProps,
129
+ getFloatingProps = _useInteractions.getFloatingProps;
130
+ return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
131
+ showClear: !!actualValue,
132
+ onClear: handleChange,
133
+ invalid: invalid,
134
+ readOnly: readOnly,
135
+ disabled: disabled,
136
+ required: required,
137
+ error: error
138
+ }, rest), {}, {
139
+ children: [/*#__PURE__*/jsx("input", _objectSpread(_objectSpread({
140
+ className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer", !value && "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
+ autoFocus: autoFocus,
154
+ value: inputValue,
155
+ ref: mergeRefs(ref, refs.setReference)
156
+ }, getReferenceProps()), {}, {
157
+ onChange: handleChange,
158
+ onKeyDown: handleEnterPressed
159
+ })), isOpen && /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
160
+ ref: refs.setFloating,
161
+ style: _objectSpread({
162
+ zIndex: "var(--z-popover)"
163
+ }, floatingStyles),
164
+ className: "shadow-lg bg-base ring-1 ring-tint-100",
165
+ "data-ref": "dropdownBody"
166
+ }, getFloatingProps()), {}, {
167
+ children: [/*#__PURE__*/jsx(DatePanel, {
168
+ withTime: type === "datetime",
169
+ value: actualValue,
170
+ max: max,
171
+ min: min,
172
+ onChange: handleDateChange
173
+ }), /*#__PURE__*/jsx(FloatingArrow, {
174
+ ref: arrowRef,
175
+ context: context,
176
+ strokeWidth: 0.5,
177
+ className: "fill-base stroke-muted"
178
+ })]
179
+ }))]
180
+ }));
181
+ };
182
+
183
+ export { DateInput };
@@ -2,9 +2,9 @@
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
+ import { cloneChildren } from '@react-fabric/core';
5
6
  import classNames from 'classnames';
6
- import { Children, cloneElement } from 'react';
7
- import classes from '../internal/Field.module.css';
7
+ import { cloneElement } from 'react';
8
8
  import { FieldWrapper } from '../internal/FieldWrapper.js';
9
9
  import { jsx } from 'react/jsx-runtime';
10
10
 
@@ -19,9 +19,9 @@ var Field = function Field(_ref) {
19
19
  rest = _objectWithoutProperties(_ref, _excluded);
20
20
  return /*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
21
21
  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, {
22
+ className: classNames("fabric-fieldGroup", !plain && !noOutline && "outline", !plain && "bg-base", plain && "flex-wrap", "flex-1 rounded", !vertical && "flex"),
23
+ children: cloneChildren(children, function (child) {
24
+ return /*#__PURE__*/cloneElement(child, {
25
25
  "data-inner": true
26
26
  });
27
27
  })
@@ -9,7 +9,6 @@ import classNames from 'classnames';
9
9
  import { useRef, useState, useDeferredValue, useMemo, useEffect, useCallback, Fragment } from 'react';
10
10
  import { InputWrapper } from '../internal/InputWrapper.js';
11
11
  import { handleEnter } from '../utils/eventHandlers.js';
12
- import classes from './File.module.css';
13
12
  import { jsx, jsxs } from 'react/jsx-runtime';
14
13
 
15
14
  var _excluded = ["ref", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "name", "accept", "showList", "multiple", "onChange", "onEnterPressed"];
@@ -90,7 +89,7 @@ var FileInput = function FileInput(_ref) {
90
89
  } else {
91
90
  var _e$target$files, _e$target$files$item, _e$target$files2;
92
91
  setActualValue(e === null || e === void 0 || (_e$target$files = e.target.files) === null || _e$target$files === void 0 ? void 0 : _e$target$files.item(0));
93
- onChange === null || onChange === void 0 || onChange((_e$target$files$item = e === null || e === void 0 || (_e$target$files2 = e.target.files) === null || _e$target$files2 === void 0 ? void 0 : _e$target$files2.item(0)) !== null && _e$target$files$item !== void 0 ? _e$target$files$item : undefined);
92
+ onChange === null || onChange === void 0 || onChange((_e$target$files$item = e === null || e === void 0 || (_e$target$files2 = e.target.files) === null || _e$target$files2 === void 0 ? void 0 : _e$target$files2.item(0)) !== null && _e$target$files$item !== void 0 ? _e$target$files$item : null);
94
93
  if (!e && inputRef.current) inputRef.current.value = "";
95
94
  }
96
95
  }, [onChange, multiple, showList]);
@@ -139,7 +138,7 @@ var FileInput = function FileInput(_ref) {
139
138
  })
140
139
  }, rest), {}, {
141
140
  children: /*#__PURE__*/jsx("input", {
142
- className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0", classes.fileInput, isArray(actualValue) && (actualValue === null || actualValue === void 0 ? void 0 : actualValue.length) && "text-[var(--fabric-bg)]"),
141
+ className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0", "fabric-fileInput", isArray(actualValue) && (actualValue === null || actualValue === void 0 ? void 0 : actualValue.length) && "text-(--fabric-bg)"),
143
142
  "aria-invalid": invalid,
144
143
  "aria-disabled": disabled,
145
144
  "aria-readonly": readOnly,
@@ -36,7 +36,9 @@ var HiddenInput = function HiddenInput(_ref) {
36
36
  value = _ref$value === void 0 ? "" : _ref$value,
37
37
  name = _ref.name;
38
38
  useEffect(function () {
39
- onChange === null || onChange === void 0 || onChange(hiddenValue);
39
+ hiddenValue && setTimeout(function () {
40
+ onChange === null || onChange === void 0 || onChange(hiddenValue);
41
+ }, 50);
40
42
  }, [hiddenValue]);
41
43
  return /*#__PURE__*/jsxs(Fragment, {
42
44
  children: [/*#__PURE__*/jsx("input", {
@@ -42,7 +42,7 @@ var Input = function Input(_ref) {
42
42
  var handleChange = useCallback(function (e) {
43
43
  var value = e === null || e === void 0 ? void 0 : e.target.value;
44
44
  setActualValue(value !== null && value !== void 0 ? value : "");
45
- onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : undefined);
45
+ onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
46
46
  }, [onchange]);
47
47
  return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
48
48
  showClear: !!actualValue,
@@ -42,7 +42,7 @@ var Number = function Number(_ref) {
42
42
  var handleChange = useCallback(function (e) {
43
43
  var number = e === null || e === void 0 ? void 0 : e.target.valueAsNumber;
44
44
  setActualValue(number !== null && number !== void 0 ? number : "");
45
- onChange === null || onChange === void 0 || onChange(number !== null && number !== void 0 ? number : undefined);
45
+ onChange === null || onChange === void 0 || onChange(number !== null && number !== void 0 ? number : null);
46
46
  }, [onChange]);
47
47
  return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
48
48
  showClear: !!actualValue,
@@ -50,7 +50,7 @@ var Password = function Password(_ref) {
50
50
  var handleChange = useCallback(function (e) {
51
51
  var value = e === null || e === void 0 ? void 0 : e.target.value;
52
52
  setActualValue(value !== null && value !== void 0 ? value : "");
53
- onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : undefined);
53
+ onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
54
54
  }, [onChange]);
55
55
  return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
56
56
  showClear: !!actualValue,
@@ -51,7 +51,7 @@ var Radio = function Radio(_ref) {
51
51
  autoComplete: "off",
52
52
  onChange: handleChange
53
53
  }, rest)), /*#__PURE__*/jsx(Icon, {
54
- className: classNames("p-0.5 hidden peer-checked:inline-block", icon && !iconChecked && "bg-primary-500 text-white"),
54
+ className: classNames("p-0.5 hidden peer-checked:inline-block", icon && !iconChecked && "bg-primary-500 text-white!"),
55
55
  color: invalid ? "danger" : "primary",
56
56
  size: "1.25em",
57
57
  icon: iconOn