@react-fabric/form 1.0.0-beta.6 → 1.0.0-beta.60
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.
- package/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
- package/css/_colorPicker.css +65 -0
- package/{src/internal/Field.module.css → css/_field.css} +66 -30
- package/{src/input/File.module.css → css/_file.css} +21 -6
- package/css/styles.css +27 -0
- package/dist/cjs/builder/FileField.js +40 -28
- package/dist/cjs/builder/FormField.js +50 -34
- package/dist/cjs/builder/SchemaEditor.js +72 -0
- package/dist/cjs/builder/components/AddSchemaFields.js +62 -0
- package/dist/cjs/builder/components/SchemaArrayForm.js +145 -0
- package/dist/cjs/builder/components/SchemaField.js +414 -0
- package/dist/cjs/form/Controller.js +46 -1
- package/dist/cjs/form/Form.js +70 -9
- package/dist/cjs/hooks/useFileUploader.js +16 -0
- package/dist/cjs/hooks/useFormBuilder.js +57 -15
- package/dist/cjs/i18n/ar.json.js +5 -4
- package/dist/cjs/i18n/en.json.js +5 -5
- package/dist/cjs/index.js +12 -2
- package/dist/cjs/input/ArrayInput.js +126 -36
- package/dist/cjs/input/AvatarInput.js +43 -23
- package/dist/cjs/input/Checkbox.js +16 -6
- package/dist/cjs/input/ColorInput.js +113 -58
- package/dist/cjs/input/ColorPicker.js +60 -76
- package/dist/cjs/input/DateInput.js +197 -0
- package/dist/cjs/input/Field.js +10 -4
- package/dist/cjs/input/File.js +14 -7
- package/dist/cjs/input/Hidden.js +13 -2
- package/dist/cjs/input/Input.js +24 -10
- package/dist/cjs/input/Number.js +22 -10
- package/dist/cjs/input/Password.js +22 -12
- package/dist/cjs/input/Radio.js +12 -3
- package/dist/cjs/input/RadioGroup.js +10 -1
- package/dist/cjs/input/{Range.js → RangeSlider.js} +16 -8
- package/dist/cjs/input/Search.js +30 -19
- package/dist/cjs/input/Slider.js +12 -6
- package/dist/cjs/input/Switch.js +20 -9
- package/dist/cjs/input/Textarea.js +29 -8
- package/dist/cjs/internal/ErrorIcon.js +1 -1
- package/dist/cjs/internal/FieldWrapper.js +11 -4
- package/dist/cjs/internal/InputWrapper.js +27 -20
- package/dist/cjs/select/AutoComplete.js +21 -11
- package/dist/cjs/select/DualList.js +34 -12
- package/dist/cjs/select/List.js +68 -22
- package/dist/cjs/select/Options.js +49 -42
- package/dist/cjs/select/Select.js +40 -10
- package/dist/cjs/select/useSelect.js +22 -11
- package/dist/cjs/types/schema.js +43 -0
- package/dist/cjs/utils/eventHandlers.js +15 -5
- package/dist/esm/builder/FileField.js +42 -30
- package/dist/esm/builder/FormField.js +50 -34
- package/dist/esm/builder/SchemaEditor.js +72 -0
- package/dist/esm/builder/components/AddSchemaFields.js +62 -0
- package/dist/esm/builder/components/SchemaArrayForm.js +145 -0
- package/dist/esm/builder/components/SchemaField.js +414 -0
- package/dist/esm/form/Controller.js +46 -1
- package/dist/esm/form/Form.js +72 -12
- package/dist/esm/hooks/useFileUploader.js +16 -0
- package/dist/esm/hooks/useFormBuilder.js +55 -13
- package/dist/esm/i18n/ar.json.js +5 -4
- package/dist/esm/i18n/en.json.js +5 -5
- package/dist/esm/index.js +6 -2
- package/dist/esm/input/ArrayInput.js +126 -36
- package/dist/esm/input/AvatarInput.js +44 -24
- package/dist/esm/input/Checkbox.js +16 -6
- package/dist/esm/input/ColorInput.js +115 -60
- package/dist/esm/input/ColorPicker.js +60 -76
- package/dist/esm/input/DateInput.js +197 -0
- package/dist/esm/input/Field.js +11 -5
- package/dist/esm/input/File.js +16 -9
- package/dist/esm/input/Hidden.js +13 -2
- package/dist/esm/input/Input.js +26 -12
- package/dist/esm/input/Number.js +24 -12
- package/dist/esm/input/Password.js +24 -14
- package/dist/esm/input/Radio.js +12 -3
- package/dist/esm/input/RadioGroup.js +11 -2
- package/dist/esm/input/{Range.js → RangeSlider.js} +16 -8
- package/dist/esm/input/Search.js +32 -21
- package/dist/esm/input/Slider.js +12 -6
- package/dist/esm/input/Switch.js +20 -9
- package/dist/esm/input/Textarea.js +30 -9
- package/dist/esm/internal/ErrorIcon.js +1 -1
- package/dist/esm/internal/FieldWrapper.js +11 -4
- package/dist/esm/internal/InputWrapper.js +27 -20
- package/dist/esm/select/AutoComplete.js +21 -11
- package/dist/esm/select/DualList.js +34 -12
- package/dist/esm/select/List.js +69 -23
- package/dist/esm/select/Options.js +49 -42
- package/dist/esm/select/Select.js +40 -10
- package/dist/esm/select/useSelect.js +23 -12
- package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
- package/dist/esm/utils/eventHandlers.js +15 -5
- package/dist/types/builder/FileField.d.ts +4 -2
- package/dist/types/builder/FormField.d.ts +3 -1
- package/dist/types/builder/SchemaEditor.d.ts +9 -0
- package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
- package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
- package/dist/types/builder/components/SchemaField.d.ts +10 -0
- package/dist/types/form/Controller.d.ts +47 -2
- package/dist/types/form/Form.d.ts +48 -2
- package/dist/types/hooks/useFileUploader.d.ts +16 -0
- package/dist/types/hooks/useFormBuilder.d.ts +32 -1
- package/dist/types/index.d.ts +6 -3
- package/dist/types/input/ArrayInput.d.ts +69 -12
- package/dist/types/input/AvatarInput.d.ts +23 -3
- package/dist/types/input/Checkbox.d.ts +13 -4
- package/dist/types/input/ColorInput.d.ts +15 -2
- package/dist/types/input/ColorPicker.d.ts +11 -1
- package/dist/types/input/DateInput.d.ts +28 -0
- package/dist/types/input/Field.d.ts +5 -1
- package/dist/types/input/File.d.ts +9 -0
- package/dist/types/input/Hidden.d.ts +13 -1
- package/dist/types/input/Input.d.ts +9 -1
- package/dist/types/input/Number.d.ts +9 -1
- package/dist/types/input/Password.d.ts +7 -1
- package/dist/types/input/Radio.d.ts +9 -1
- package/dist/types/input/RadioGroup.d.ts +8 -1
- package/dist/types/input/RangeSlider.d.ts +67 -0
- package/dist/types/input/Search.d.ts +14 -1
- package/dist/types/input/Slider.d.ts +8 -2
- package/dist/types/input/Switch.d.ts +10 -2
- package/dist/types/input/Textarea.d.ts +15 -1
- package/dist/types/internal/FieldWrapper.d.ts +1 -1
- package/dist/types/internal/InputWrapper.d.ts +1 -1
- package/dist/types/ranger/index.d.ts +2 -2
- package/dist/types/select/AutoComplete.d.ts +8 -1
- package/dist/types/select/DualList.d.ts +17 -2
- package/dist/types/select/List.d.ts +9 -1
- package/dist/types/select/Options.d.ts +4 -3
- package/dist/types/select/Select.d.ts +9 -1
- package/dist/types/select/useSelect.d.ts +10 -6
- package/dist/types/types/index.d.ts +34 -5
- package/dist/types/types/schema.d.ts +78 -33
- package/dist/types/utils/eventHandlers.d.ts +2 -2
- package/package.json +22 -20
- package/src/builder/FileField.tsx +62 -30
- package/src/builder/FormField.tsx +52 -32
- package/src/builder/SchemaEditor.tsx +79 -0
- package/src/builder/components/AddSchemaFields.tsx +74 -0
- package/src/builder/components/SchemaArrayForm.tsx +161 -0
- package/src/builder/components/SchemaField.tsx +436 -0
- package/src/form/Controller.tsx +48 -3
- package/src/form/Form.tsx +80 -8
- package/src/hooks/useFileUploader.ts +16 -0
- package/src/hooks/useFormBuilder.tsx +58 -15
- package/src/i18n/ar.json +5 -4
- package/src/i18n/en.json +5 -5
- package/src/index.ts +12 -3
- package/src/input/ArrayInput.tsx +199 -64
- package/src/input/AvatarInput.tsx +67 -19
- package/src/input/Checkbox.tsx +16 -6
- package/src/input/ColorInput.tsx +131 -71
- package/src/input/ColorPicker.tsx +54 -72
- package/src/input/DateInput.tsx +260 -0
- package/src/input/Field.tsx +15 -11
- package/src/input/File.tsx +16 -14
- package/src/input/Hidden.tsx +17 -2
- package/src/input/Input.tsx +27 -13
- package/src/input/Number.tsx +22 -13
- package/src/input/Password.tsx +24 -16
- package/src/input/Radio.tsx +12 -3
- package/src/input/RadioGroup.tsx +12 -3
- package/src/input/{Range.tsx → RangeSlider.tsx} +17 -9
- package/src/input/Search.tsx +33 -22
- package/src/input/Slider.tsx +20 -11
- package/src/input/Switch.tsx +17 -6
- package/src/input/Textarea.tsx +34 -9
- package/src/internal/ErrorIcon.tsx +1 -1
- package/src/internal/FieldWrapper.tsx +8 -4
- package/src/internal/InputWrapper.tsx +49 -27
- package/src/select/AutoComplete.tsx +14 -3
- package/src/select/DualList.tsx +31 -16
- package/src/select/List.tsx +52 -8
- package/src/select/Options.tsx +50 -46
- package/src/select/Select.tsx +25 -5
- package/src/select/useSelect.tsx +26 -9
- package/src/types/index.ts +37 -6
- package/src/types/schema.ts +96 -41
- package/src/utils/eventHandlers.ts +14 -4
- package/dist/cjs/input/ArrayInput.module.css +0 -1
- package/dist/cjs/input/ColorPicker.module.css +0 -1
- package/dist/cjs/input/File.module.css +0 -1
- package/dist/cjs/internal/Field.module.css +0 -1
- package/dist/esm/input/ArrayInput.module.css +0 -1
- package/dist/esm/input/ColorPicker.module.css +0 -1
- package/dist/esm/input/File.module.css +0 -1
- package/dist/esm/internal/Field.module.css +0 -1
- package/dist/types/input/Range.d.ts +0 -59
|
@@ -5,20 +5,35 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
|
5
5
|
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
6
6
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
7
7
|
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
8
|
-
import { Avatar, Icon, ProgressBar } from '@react-fabric/core';
|
|
8
|
+
import { Avatar, Icon, CoreIcons, ProgressBar } from '@react-fabric/core';
|
|
9
9
|
import { useState, useEffect } from 'react';
|
|
10
10
|
import { useFileUploader } from '../hooks/useFileUploader.js';
|
|
11
11
|
import { HiddenInput } from './Hidden.js';
|
|
12
|
+
import classNames from 'classnames';
|
|
12
13
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
13
14
|
|
|
14
|
-
var _excluded = ["
|
|
15
|
+
var _excluded = ["size", "avatarName", "avatarClassName", "value", "rounded", "defaultValue", "fallbackIcon", "variant", "fileUrl", "uploadHandler"];
|
|
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
17
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
+
/**
|
|
19
|
+
* 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
|
+
*
|
|
23
|
+
* @param {Props} props - The properties for the AvatarInput component.
|
|
24
|
+
* @returns {JSX.Element} - The rendered AvatarInput component.
|
|
25
|
+
*/
|
|
17
26
|
var AvatarInput = function AvatarInput(_ref) {
|
|
18
27
|
var _list$;
|
|
19
|
-
var
|
|
20
|
-
_ref$size = _ref.size,
|
|
28
|
+
var _ref$size = _ref.size,
|
|
21
29
|
size = _ref$size === void 0 ? "6rem" : _ref$size,
|
|
30
|
+
avatarName = _ref.avatarName,
|
|
31
|
+
avatarClassName = _ref.avatarClassName,
|
|
32
|
+
value = _ref.value,
|
|
33
|
+
rounded = _ref.rounded,
|
|
34
|
+
defaultValue = _ref.defaultValue,
|
|
35
|
+
fallbackIcon = _ref.fallbackIcon,
|
|
36
|
+
variant = _ref.variant,
|
|
22
37
|
fileUrl = _ref.fileUrl,
|
|
23
38
|
uploadHandler = _ref.uploadHandler,
|
|
24
39
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -40,7 +55,7 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
40
55
|
return function (_x, _x2) {
|
|
41
56
|
return _ref2.apply(this, arguments);
|
|
42
57
|
};
|
|
43
|
-
}(),
|
|
58
|
+
}(), value, false),
|
|
44
59
|
files = _useFileUploader.files,
|
|
45
60
|
list = _useFileUploader.list,
|
|
46
61
|
upload = _useFileUploader.upload,
|
|
@@ -64,23 +79,29 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
64
79
|
reader.readAsDataURL(blob);
|
|
65
80
|
}));
|
|
66
81
|
} else {
|
|
67
|
-
|
|
82
|
+
var _ref3, _fileUrl;
|
|
83
|
+
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
84
|
}
|
|
69
|
-
}, [files, list]);
|
|
85
|
+
}, [files, list, defaultValue]);
|
|
70
86
|
useEffect(function () {
|
|
71
|
-
var
|
|
72
|
-
|
|
73
|
-
|
|
87
|
+
var _fileUrl2, _fileUrl3;
|
|
88
|
+
!value && defaultValue && setBase64((_fileUrl2 = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(defaultValue)) !== null && _fileUrl2 !== void 0 ? _fileUrl2 : defaultValue);
|
|
89
|
+
value && setBase64((_fileUrl3 = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(value)) !== null && _fileUrl3 !== void 0 ? _fileUrl3 : value);
|
|
90
|
+
}, [value, defaultValue]);
|
|
74
91
|
return /*#__PURE__*/jsxs("div", {
|
|
75
|
-
className: "flex flex-nowrap items-end",
|
|
92
|
+
className: "flex flex-nowrap items-end overflow-hidden",
|
|
76
93
|
children: [/*#__PURE__*/jsxs("div", {
|
|
77
|
-
className: "inline-block leading-none
|
|
94
|
+
className: classNames("inline-block leading-none relative outline overflow-hidden", rounded && "rounded-full", !rounded && "rounded"),
|
|
78
95
|
children: [/*#__PURE__*/jsx(Avatar, {
|
|
79
|
-
name: "temp",
|
|
96
|
+
name: avatarName !== null && avatarName !== void 0 ? avatarName : "temp",
|
|
80
97
|
size: size,
|
|
81
|
-
avatar: base64
|
|
98
|
+
avatar: base64,
|
|
99
|
+
rounded: rounded,
|
|
100
|
+
variant: variant,
|
|
101
|
+
fallbackIcon: fallbackIcon,
|
|
102
|
+
className: avatarClassName
|
|
82
103
|
}), /*#__PURE__*/jsxs("div", {
|
|
83
|
-
className: "absolute inset-x-0 bottom-0 cursor-pointer
|
|
104
|
+
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
105
|
children: [/*#__PURE__*/jsx("span", {
|
|
85
106
|
children: "Edit"
|
|
86
107
|
}), /*#__PURE__*/jsx("input", {
|
|
@@ -93,36 +114,35 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
93
114
|
})]
|
|
94
115
|
})]
|
|
95
116
|
}), /*#__PURE__*/jsx(HiddenInput, _objectSpread({
|
|
96
|
-
hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path
|
|
117
|
+
hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path,
|
|
118
|
+
defaultValue: defaultValue
|
|
97
119
|
}, rest)), files.map(function (file, idx) {
|
|
98
120
|
return /*#__PURE__*/jsxs("div", {
|
|
99
|
-
className: "px-2 py-1 flex-1",
|
|
121
|
+
className: "px-2 py-1 flex-1 overflow-hidden",
|
|
100
122
|
children: [/*#__PURE__*/jsxs("div", {
|
|
101
123
|
className: "flex flex-nowrap gap-1 items-center",
|
|
102
|
-
children: [/*#__PURE__*/jsx("div", {
|
|
103
|
-
className: "flex-initial truncate pe-2",
|
|
104
|
-
children: file.filename
|
|
105
|
-
}), file.error && /*#__PURE__*/jsx("div", {
|
|
124
|
+
children: [file.error && /*#__PURE__*/jsx("div", {
|
|
106
125
|
className: "flex-1 truncate px-2",
|
|
107
126
|
children: /*#__PURE__*/jsx("span", {
|
|
108
127
|
className: "text-danger-600",
|
|
109
128
|
children: file.error
|
|
110
129
|
})
|
|
111
130
|
}), file.progress && /*#__PURE__*/jsx(Icon, {
|
|
112
|
-
icon:
|
|
131
|
+
icon: CoreIcons.stop,
|
|
113
132
|
bg: "danger",
|
|
114
133
|
color: "white",
|
|
115
134
|
size: "sm",
|
|
116
|
-
className: "p-
|
|
135
|
+
className: "p-0.5 flex-content",
|
|
117
136
|
"aria-label": "abort",
|
|
118
137
|
onClick: function onClick() {
|
|
119
138
|
var _file$abort;
|
|
120
139
|
return (_file$abort = file.abort) === null || _file$abort === void 0 ? void 0 : _file$abort.call(file);
|
|
121
140
|
}
|
|
122
141
|
}), !file.progress && /*#__PURE__*/jsx(Icon, {
|
|
123
|
-
icon:
|
|
142
|
+
icon: CoreIcons.trash,
|
|
124
143
|
color: "danger",
|
|
125
144
|
size: "sm",
|
|
145
|
+
className: "flex-content",
|
|
126
146
|
"aria-label": "remove",
|
|
127
147
|
onClick: function onClick() {
|
|
128
148
|
return remove(file.key);
|
|
@@ -9,9 +9,18 @@ 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
|
+
/**
|
|
16
|
+
* Checkbox component for rendering a checkbox input with label and error handling.
|
|
17
|
+
* It supports custom icons for checked and unchecked states, and handles disabled and invalid states.
|
|
18
|
+
* The component uses a deferred value to manage the checked state, ensuring smooth updates.
|
|
19
|
+
* It also provides an error icon to indicate validation errors.
|
|
20
|
+
*
|
|
21
|
+
* @param {CheckboxProps} props - The properties for the Checkbox component.
|
|
22
|
+
* @returns {JSX.Element} The rendered Checkbox component.
|
|
23
|
+
*/
|
|
15
24
|
var Checkbox = function Checkbox(_ref) {
|
|
16
25
|
var ref = _ref.ref,
|
|
17
26
|
label = _ref.label,
|
|
@@ -23,8 +32,9 @@ var Checkbox = function Checkbox(_ref) {
|
|
|
23
32
|
error = _ref.error,
|
|
24
33
|
width = _ref.width,
|
|
25
34
|
icon = _ref.icon,
|
|
26
|
-
iconChecked = _ref.iconChecked
|
|
27
|
-
|
|
35
|
+
iconChecked = _ref.iconChecked;
|
|
36
|
+
_ref.required;
|
|
37
|
+
var onChange = _ref.onChange,
|
|
28
38
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
29
39
|
var _useState = useState(false),
|
|
30
40
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -47,7 +57,7 @@ var Checkbox = function Checkbox(_ref) {
|
|
|
47
57
|
onChange === null || onChange === void 0 || onChange((_e$target$checked2 = e === null || e === void 0 ? void 0 : e.target.checked) !== null && _e$target$checked2 !== void 0 ? _e$target$checked2 : false);
|
|
48
58
|
}, [onChange, value]);
|
|
49
59
|
return /*#__PURE__*/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-
|
|
60
|
+
className: classNames(invalid ? "ring-danger-500" : "ring-primary-500", disabled ? "opacity-50 cursor-not-allowed" : " opacity-85 hover:opacity-100 cursor-pointer", "inline-flex gap-1 py-1 items-center relative rounded ring-offset-2 has-focus-visible:ring-1"),
|
|
51
61
|
style: {
|
|
52
62
|
width: width
|
|
53
63
|
},
|
|
@@ -66,7 +76,7 @@ var Checkbox = function Checkbox(_ref) {
|
|
|
66
76
|
checked: actualValue,
|
|
67
77
|
onChange: handleChange
|
|
68
78
|
}, rest)), /*#__PURE__*/jsx(Icon, {
|
|
69
|
-
className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white"),
|
|
79
|
+
className: classNames("p-0.5", actualValue && icon && !iconChecked && "bg-primary-500 text-white!"),
|
|
70
80
|
size: "1.25em",
|
|
71
81
|
color: invalid ? "danger" : "primary",
|
|
72
82
|
icon: actualValue ? iconOn : iconOff
|
|
@@ -74,7 +84,7 @@ var Checkbox = function Checkbox(_ref) {
|
|
|
74
84
|
invalid: invalid,
|
|
75
85
|
error: error
|
|
76
86
|
}), label && /*#__PURE__*/jsx("span", {
|
|
77
|
-
className: "flex-initial leading-
|
|
87
|
+
className: "flex-initial leading-tight truncate",
|
|
78
88
|
children: label
|
|
79
89
|
})]
|
|
80
90
|
});
|
|
@@ -3,32 +3,45 @@
|
|
|
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 {
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
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", "
|
|
13
|
+
var _excluded = ["ref", "required", "disabled", "readOnly", "invalid", "error", "value", "showPicker", "defaultColor", "onBlur", "onFocus", "onChange", "noOutline"];
|
|
14
14
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
15
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
/**
|
|
17
|
+
* Color input component that allows users to select a color
|
|
18
|
+
* and optionally use an eye dropper to pick a color from the screen.
|
|
19
|
+
* It uses the Floating UI library for positioning the color picker.
|
|
20
|
+
* It also provides a button to clear the selected color.
|
|
21
|
+
*
|
|
22
|
+
* This component is a wrapper around the `ColorPicker` component
|
|
23
|
+
* and provides additional functionality such as showing an eye dropper
|
|
24
|
+
* and handling the color selection state.
|
|
25
|
+
*
|
|
26
|
+
* @param {ColorInputProps} props - The properties for the ColorInput component.
|
|
27
|
+
* @returns {JSX.Element} - The rendered ColorInput component.
|
|
28
|
+
*/
|
|
16
29
|
var ColorInput = function ColorInput(_ref) {
|
|
17
30
|
_ref.ref;
|
|
18
|
-
_ref.required
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
_ref.invalid
|
|
22
|
-
_ref.error
|
|
23
|
-
|
|
31
|
+
var required = _ref.required,
|
|
32
|
+
disabled = _ref.disabled,
|
|
33
|
+
readOnly = _ref.readOnly,
|
|
34
|
+
invalid = _ref.invalid,
|
|
35
|
+
error = _ref.error,
|
|
36
|
+
value = _ref.value,
|
|
24
37
|
showPicker = _ref.showPicker,
|
|
25
38
|
_ref$defaultColor = _ref.defaultColor,
|
|
26
39
|
defaultColor = _ref$defaultColor === void 0 ? "" : _ref$defaultColor,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
onChange = _ref.onChange
|
|
30
|
-
|
|
31
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
40
|
+
onBlur = _ref.onBlur,
|
|
41
|
+
onFocus = _ref.onFocus,
|
|
42
|
+
onChange = _ref.onChange;
|
|
43
|
+
_ref.noOutline;
|
|
44
|
+
var rest = _objectWithoutProperties(_ref, _excluded);
|
|
32
45
|
var _useState = useState(""),
|
|
33
46
|
_useState2 = _slicedToArray(_useState, 2),
|
|
34
47
|
actualValue = _useState2[0],
|
|
@@ -38,63 +51,105 @@ var ColorInput = function ColorInput(_ref) {
|
|
|
38
51
|
setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
|
|
39
52
|
}, [deferred]);
|
|
40
53
|
var handleChange = useCallback(function (e) {
|
|
41
|
-
|
|
54
|
+
var value = e !== null && e !== void 0 ? e : defaultColor;
|
|
55
|
+
setActualValue(value);
|
|
42
56
|
onChange != null && startTransition(function () {
|
|
43
|
-
return onChange(
|
|
57
|
+
return onChange(value !== null && value !== void 0 ? value : null);
|
|
44
58
|
});
|
|
45
|
-
}, [onChange]);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
59
|
+
}, [onChange, defaultColor]);
|
|
60
|
+
var arrowRef = useRef(null);
|
|
61
|
+
var _useState3 = useState(false),
|
|
62
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
63
|
+
isOpen = _useState4[0],
|
|
64
|
+
setIsOpen = _useState4[1];
|
|
65
|
+
var _useFloating = useFloating({
|
|
66
|
+
open: isOpen,
|
|
67
|
+
onOpenChange: function onOpenChange(open, _, reason) {
|
|
68
|
+
if (reason === "reference-press") return;
|
|
69
|
+
setIsOpen(open);
|
|
70
|
+
},
|
|
71
|
+
strategy: "fixed",
|
|
72
|
+
placement: "bottom",
|
|
73
|
+
whileElementsMounted: autoUpdate,
|
|
74
|
+
middleware: [shift({
|
|
75
|
+
padding: 8
|
|
76
|
+
}), flip(), offset(9), arrow({
|
|
77
|
+
element: arrowRef
|
|
78
|
+
})]
|
|
79
|
+
}),
|
|
80
|
+
refs = _useFloating.refs,
|
|
81
|
+
floatingStyles = _useFloating.floatingStyles,
|
|
82
|
+
context = _useFloating.context;
|
|
83
|
+
var click = useClick(context, {
|
|
84
|
+
enabled: !disabled && !readOnly
|
|
85
|
+
});
|
|
86
|
+
var dismiss = useDismiss(context, {
|
|
87
|
+
referencePress: true
|
|
88
|
+
});
|
|
89
|
+
var _useInteractions = useInteractions([dismiss, click]),
|
|
90
|
+
getReferenceProps = _useInteractions.getReferenceProps,
|
|
91
|
+
getFloatingProps = _useInteractions.getFloatingProps;
|
|
92
|
+
return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
|
|
93
|
+
showClear: actualValue !== defaultColor && !disabled && !readOnly,
|
|
94
|
+
onClear: handleChange,
|
|
95
|
+
invalid: invalid,
|
|
96
|
+
readOnly: readOnly,
|
|
97
|
+
disabled: disabled,
|
|
98
|
+
required: required,
|
|
99
|
+
error: error
|
|
100
|
+
}, rest), {}, {
|
|
101
|
+
children: [/*#__PURE__*/jsx("button", _objectSpread(_objectSpread({
|
|
102
|
+
"data-ref": "button",
|
|
103
|
+
type: "button",
|
|
104
|
+
className: "flex-1 flex items-center",
|
|
105
|
+
ref: refs.setReference
|
|
106
|
+
}, getReferenceProps({
|
|
107
|
+
onBlur: onBlur,
|
|
108
|
+
onFocus: onFocus
|
|
109
|
+
})), {}, {
|
|
110
|
+
"data-inner-clickable": "true",
|
|
111
|
+
"data-dropdown-open": isOpen ? true : undefined,
|
|
112
|
+
children: /*#__PURE__*/jsx("div", {
|
|
113
|
+
role: "none",
|
|
114
|
+
className: "h-[1.5em] min-w-[1.5em] flex-1 flex items-center justify-center self-stretch cursor-pointer m-[0.25em] rounded outline outline-tint-100",
|
|
115
|
+
style: {
|
|
116
|
+
backgroundColor: actualValue,
|
|
117
|
+
opacity: disabled ? 0.65 : 1,
|
|
118
|
+
pointerEvents: disabled ? "none" : undefined
|
|
119
|
+
},
|
|
120
|
+
children: !actualValue && /*#__PURE__*/jsx(Icon, {
|
|
121
|
+
size: "md",
|
|
122
|
+
className: "text-muted",
|
|
123
|
+
icon: CoreIcons.colorSwatch
|
|
74
124
|
})
|
|
75
|
-
})
|
|
125
|
+
})
|
|
126
|
+
})), isOpen && /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
|
|
127
|
+
ref: refs.setFloating,
|
|
128
|
+
style: _objectSpread({
|
|
129
|
+
zIndex: "var(--z-popover)"
|
|
130
|
+
}, floatingStyles),
|
|
131
|
+
"data-ref": "dropdownBody"
|
|
132
|
+
}, getFloatingProps()), {}, {
|
|
133
|
+
children: [/*#__PURE__*/jsx(ColorPicker, _objectSpread(_objectSpread({}, rest), {}, {
|
|
76
134
|
onChange: handleChange,
|
|
77
135
|
defaultColor: defaultColor,
|
|
78
136
|
value: actualValue
|
|
79
|
-
}))
|
|
80
|
-
|
|
137
|
+
})), /*#__PURE__*/jsx(FloatingArrow, {
|
|
138
|
+
ref: arrowRef,
|
|
139
|
+
context: context,
|
|
140
|
+
strokeWidth: 0.5,
|
|
141
|
+
className: "fill-base stroke-muted"
|
|
142
|
+
})]
|
|
143
|
+
})), !disabled && showPicker && /*#__PURE__*/jsx(Icon, {
|
|
144
|
+
className: "flex-content p-1",
|
|
81
145
|
icon: CoreIcons.colorPicker,
|
|
82
146
|
onClick: function onClick() {
|
|
83
147
|
return window.EyeDropper && new window.EyeDropper().open().then(function (resp) {
|
|
84
148
|
return handleChange(resp.sRGBHex);
|
|
85
149
|
});
|
|
86
150
|
}
|
|
87
|
-
}), decorateEnd && /*#__PURE__*/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
151
|
})]
|
|
97
|
-
});
|
|
152
|
+
}));
|
|
98
153
|
};
|
|
99
154
|
|
|
100
155
|
export { ColorInput };
|
|
@@ -5,13 +5,22 @@ 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"],
|
|
12
11
|
_excluded2 = ["a"];
|
|
13
12
|
var DEFAULT_SWATCHES = [Color("#d7323a").mix(Color("#171a1c"), 0.5).hex(), Color("#ff781c").mix(Color("#171a1c"), 0.5).hex(), Color("#f7b731").mix(Color("#171a1c"), 0.5).hex(), Color("#88ab1b").mix(Color("#171a1c"), 0.5).hex(), Color("#22aa85").mix(Color("#171a1c"), 0.5).hex(), Color("#399bec").mix(Color("#171a1c"), 0.5).hex(), Color("#4862c8").mix(Color("#171a1c"), 0.5).hex(), Color("#aa66cf").mix(Color("#171a1c"), 0.5).hex(), Color("#f43f7b").mix(Color("#171a1c"), 0.5).hex(), Color("#a37f4f").mix(Color("#171a1c"), 0.5).hex(), "#d7323a", "#ff781c", "#f7b731", "#88ab1b", "#22aa85", "#399bec", "#4862c8", "#aa66cf", "#f43f7b", "#a37f4f", Color("#d7323a").mix(Color("#f1f3f4"), 0.5).hex(), Color("#ff781c").mix(Color("#f1f3f4"), 0.5).hex(), Color("#f7b731").mix(Color("#f1f3f4"), 0.5).hex(), Color("#88ab1b").mix(Color("#f1f3f4"), 0.5).hex(), Color("#22aa85").mix(Color("#f1f3f4"), 0.5).hex(), Color("#399bec").mix(Color("#f1f3f4"), 0.5).hex(), Color("#4862c8").mix(Color("#f1f3f4"), 0.5).hex(), Color("#aa66cf").mix(Color("#f1f3f4"), 0.5).hex(), Color("#f43f7b").mix(Color("#f1f3f4"), 0.5).hex(), Color("#a37f4f").mix(Color("#f1f3f4"), 0.5).hex(), "#171a1c", "#2d3439", "#444e55", "#5b6971", "#71838e", "#86959e", "#9ca8b0", "#b8c1c6", "#d5dadd", "#f1f3f4"];
|
|
14
13
|
|
|
14
|
+
/**
|
|
15
|
+
* ColorPicker component allows users to select a color using a color picker UI.
|
|
16
|
+
* It supports swatches, alpha transparency, and custom styles.
|
|
17
|
+
* The component uses the `react-color` library for the color picker functionality.
|
|
18
|
+
*
|
|
19
|
+
* @param {ColorProps} props - The properties for the ColorPicker component.
|
|
20
|
+
* @returns {JSX.Element} The rendered ColorPicker component.
|
|
21
|
+
*
|
|
22
|
+
* @see {@link https://react-color.github.io/react-color/} for more details on the color picker library.
|
|
23
|
+
*/
|
|
15
24
|
// eslint-disable-next-line react/display-name
|
|
16
25
|
var ColorPicker = /*#__PURE__*/memo(function (_ref) {
|
|
17
26
|
var value = _ref.value,
|
|
@@ -35,87 +44,62 @@ var ColorPicker = /*#__PURE__*/memo(function (_ref) {
|
|
|
35
44
|
return onChange(e);
|
|
36
45
|
});
|
|
37
46
|
}, [onChange]);
|
|
38
|
-
return /*#__PURE__*/jsx(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
color: {
|
|
54
|
-
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
55
|
-
},
|
|
56
|
-
saturation: {
|
|
57
|
-
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
58
|
-
},
|
|
59
|
-
activeColor: {
|
|
60
|
-
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
61
|
-
},
|
|
62
|
-
picker: {
|
|
63
|
-
backgroundColor: "var(--fabric-bg)",
|
|
64
|
-
boxShadow: "0 0 0 1px var(--color-shadow), 0 0 8px var(--fabric-shadow)"
|
|
65
|
-
},
|
|
66
|
-
Alpha: {
|
|
47
|
+
return /*#__PURE__*/jsx("div", {
|
|
48
|
+
role: "none"
|
|
49
|
+
// prevent default on mouse down to avoid selection issues
|
|
50
|
+
,
|
|
51
|
+
onMouseDown: function onMouseDown(e) {
|
|
52
|
+
return e.preventDefault();
|
|
53
|
+
},
|
|
54
|
+
children: /*#__PURE__*/jsx(SketchPicker, {
|
|
55
|
+
width: "16rem",
|
|
56
|
+
className: "fabric-colorPicker",
|
|
57
|
+
styles: {
|
|
58
|
+
"default": {
|
|
59
|
+
hue: {
|
|
60
|
+
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
61
|
+
},
|
|
67
62
|
alpha: {
|
|
68
|
-
|
|
63
|
+
backgroundColor: "var(--fabric-bg)",
|
|
64
|
+
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
69
65
|
},
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
borderRadius: "99px",
|
|
73
|
-
height: "calc(1rem - 2px)",
|
|
74
|
-
transform: "none"
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
Hue: {
|
|
78
|
-
hue: {
|
|
79
|
-
paddingRight: "calc(1rem - 2px)"
|
|
66
|
+
color: {
|
|
67
|
+
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
80
68
|
},
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
69
|
+
saturation: {
|
|
70
|
+
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
71
|
+
},
|
|
72
|
+
activeColor: {
|
|
73
|
+
boxShadow: "0 0 1px 1px var(--color-shadow)"
|
|
74
|
+
},
|
|
75
|
+
picker: {
|
|
76
|
+
backgroundColor: "var(--fabric-bg)",
|
|
77
|
+
boxShadow: "0 0 0 1px var(--color-shadow), 0 0 8px var(--fabric-shadow)"
|
|
78
|
+
},
|
|
79
|
+
checkboard: {
|
|
80
|
+
white: "transparent",
|
|
81
|
+
black: "red"
|
|
94
82
|
}
|
|
95
|
-
},
|
|
96
|
-
checkboard: {
|
|
97
|
-
white: "transparent",
|
|
98
|
-
black: "red"
|
|
99
83
|
}
|
|
84
|
+
},
|
|
85
|
+
color: actualValue,
|
|
86
|
+
presetColors: swatches,
|
|
87
|
+
disableAlpha: hideAlpha,
|
|
88
|
+
onChange: function onChange(_ref2) {
|
|
89
|
+
var _ref2$rgb = _ref2.rgb,
|
|
90
|
+
_ref2$rgb$a = _ref2$rgb.a,
|
|
91
|
+
a = _ref2$rgb$a === void 0 ? 1 : _ref2$rgb$a,
|
|
92
|
+
rgb = _objectWithoutProperties(_ref2$rgb, _excluded);
|
|
93
|
+
return setActualValue(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
|
|
94
|
+
},
|
|
95
|
+
onChangeComplete: function onChangeComplete(_ref3) {
|
|
96
|
+
var _ref3$rgb = _ref3.rgb,
|
|
97
|
+
_ref3$rgb$a = _ref3$rgb.a,
|
|
98
|
+
a = _ref3$rgb$a === void 0 ? 1 : _ref3$rgb$a,
|
|
99
|
+
rgb = _objectWithoutProperties(_ref3$rgb, _excluded2);
|
|
100
|
+
return handleChange(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
|
|
100
101
|
}
|
|
101
|
-
}
|
|
102
|
-
color: actualValue,
|
|
103
|
-
presetColors: swatches,
|
|
104
|
-
disableAlpha: hideAlpha,
|
|
105
|
-
onChange: function onChange(_ref2) {
|
|
106
|
-
var _ref2$rgb = _ref2.rgb,
|
|
107
|
-
_ref2$rgb$a = _ref2$rgb.a,
|
|
108
|
-
a = _ref2$rgb$a === void 0 ? 1 : _ref2$rgb$a,
|
|
109
|
-
rgb = _objectWithoutProperties(_ref2$rgb, _excluded);
|
|
110
|
-
return setActualValue(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
|
|
111
|
-
},
|
|
112
|
-
onChangeComplete: function onChangeComplete(_ref3) {
|
|
113
|
-
var _ref3$rgb = _ref3.rgb,
|
|
114
|
-
_ref3$rgb$a = _ref3$rgb.a,
|
|
115
|
-
a = _ref3$rgb$a === void 0 ? 1 : _ref3$rgb$a,
|
|
116
|
-
rgb = _objectWithoutProperties(_ref3$rgb, _excluded2);
|
|
117
|
-
return handleChange(Color(rgb).alpha(a)[a < 1 ? "hexa" : "hex"]());
|
|
118
|
-
}
|
|
102
|
+
})
|
|
119
103
|
});
|
|
120
104
|
});
|
|
121
105
|
|