@react-fabric/form 1.0.0-beta.8 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
- package/css/_colorPicker.css +95 -0
- package/{src/internal/Field.module.css → css/_field.css} +94 -33
- package/{src/input/File.module.css → css/_file.css} +21 -6
- package/css/styles.css +27 -0
- package/dist/cjs/builder/FileField.js +107 -78
- package/dist/cjs/builder/FormField.js +60 -39
- package/dist/cjs/builder/SchemaEditor.js +72 -0
- package/dist/cjs/builder/components/AddSchemaFields.js +64 -0
- package/dist/cjs/builder/components/SchemaArrayForm.js +146 -0
- package/dist/cjs/builder/components/SchemaField.js +423 -0
- package/dist/cjs/form/Controller.js +66 -19
- package/dist/cjs/form/Form.js +97 -39
- package/dist/cjs/form/useForm.js +32 -0
- package/dist/cjs/hooks/useFileUploader.js +74 -45
- package/dist/cjs/hooks/useFormBuilder.js +85 -31
- package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +5 -4
- package/dist/cjs/i18n/{en.json.js → en/form.json.js} +5 -5
- package/dist/cjs/i18n/index.js +4 -4
- package/dist/cjs/index.js +41 -2
- package/dist/cjs/input/ArrayInput.js +259 -135
- package/dist/cjs/input/AvatarInput.js +99 -63
- package/dist/cjs/input/Checkbox.js +24 -25
- package/dist/cjs/input/ColorInput.js +138 -81
- package/dist/cjs/input/ColorPicker.js +78 -95
- package/dist/cjs/input/DateInput.js +192 -0
- package/dist/cjs/input/Field.js +21 -20
- package/dist/cjs/input/File.js +85 -80
- package/dist/cjs/input/Hidden.js +27 -13
- package/dist/cjs/input/Input.js +49 -48
- package/dist/cjs/input/Number.js +46 -44
- package/dist/cjs/input/Password.js +51 -49
- package/dist/cjs/input/Radio.js +26 -16
- package/dist/cjs/input/RadioGroup.js +26 -11
- package/dist/cjs/input/{Range.js → RangeSlider.js} +61 -66
- package/dist/cjs/input/Search.js +58 -64
- package/dist/cjs/input/Slider.js +57 -66
- package/dist/cjs/input/Switch.js +29 -27
- package/dist/cjs/input/Textarea.js +65 -53
- package/dist/cjs/internal/ErrorIcon.js +9 -9
- package/dist/cjs/internal/FieldWrapper.js +23 -13
- package/dist/cjs/internal/InputWrapper.js +85 -87
- package/dist/cjs/ranger/index.js +7 -7
- package/dist/cjs/ranger/utils.js +9 -4
- package/dist/cjs/select/AutoComplete.js +93 -76
- package/dist/cjs/select/DualList.js +235 -154
- package/dist/cjs/select/List.js +122 -89
- package/dist/cjs/select/Options.js +58 -54
- package/dist/cjs/select/Select.js +119 -89
- package/dist/cjs/select/helpers.js +5 -5
- package/dist/cjs/select/useSelect.js +83 -58
- package/dist/cjs/types/schema.js +43 -0
- package/dist/cjs/utils/eventHandlers.js +16 -6
- package/dist/cjs/utils/getColor.js +6 -6
- package/dist/cjs/utils/getProps.js +49 -0
- package/dist/esm/builder/FileField.js +109 -80
- package/dist/esm/builder/FormField.js +60 -39
- package/dist/esm/builder/SchemaEditor.js +72 -0
- package/dist/esm/builder/components/AddSchemaFields.js +64 -0
- package/dist/esm/builder/components/SchemaArrayForm.js +146 -0
- package/dist/esm/builder/components/SchemaField.js +423 -0
- package/dist/esm/form/Controller.js +66 -19
- package/dist/esm/form/Form.js +97 -39
- package/dist/esm/form/useForm.js +32 -0
- package/dist/esm/hooks/useFileUploader.js +75 -46
- package/dist/esm/hooks/useFormBuilder.js +84 -30
- package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +5 -4
- package/dist/esm/i18n/{en.json.js → en/form.json.js} +5 -5
- package/dist/esm/i18n/index.js +2 -2
- package/dist/esm/index.js +36 -1
- package/dist/esm/input/ArrayInput.js +260 -136
- package/dist/esm/input/AvatarInput.js +99 -63
- package/dist/esm/input/Checkbox.js +26 -27
- package/dist/esm/input/ColorInput.js +141 -84
- package/dist/esm/input/ColorPicker.js +80 -97
- package/dist/esm/input/DateInput.js +192 -0
- package/dist/esm/input/Field.js +21 -20
- package/dist/esm/input/File.js +89 -84
- package/dist/esm/input/Hidden.js +28 -14
- package/dist/esm/input/Input.js +51 -50
- package/dist/esm/input/Number.js +48 -46
- package/dist/esm/input/Password.js +54 -52
- package/dist/esm/input/Radio.js +27 -17
- package/dist/esm/input/RadioGroup.js +27 -12
- package/dist/esm/input/{Range.js → RangeSlider.js} +62 -67
- package/dist/esm/input/Search.js +61 -67
- package/dist/esm/input/Slider.js +58 -67
- package/dist/esm/input/Switch.js +31 -29
- package/dist/esm/input/Textarea.js +67 -55
- package/dist/esm/internal/ErrorIcon.js +11 -11
- package/dist/esm/internal/FieldWrapper.js +23 -13
- package/dist/esm/internal/InputWrapper.js +88 -90
- package/dist/esm/ranger/index.js +7 -7
- package/dist/esm/ranger/utils.js +9 -4
- package/dist/esm/select/AutoComplete.js +95 -78
- package/dist/esm/select/DualList.js +233 -152
- package/dist/esm/select/List.js +125 -92
- package/dist/esm/select/Options.js +58 -54
- package/dist/esm/select/Select.js +122 -92
- package/dist/esm/select/helpers.js +5 -5
- package/dist/esm/select/useSelect.js +84 -59
- package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
- package/dist/esm/utils/eventHandlers.js +16 -6
- package/dist/esm/utils/getColor.js +6 -6
- package/dist/esm/utils/getProps.js +49 -0
- package/dist/types/builder/FileField.d.ts +7 -4
- package/dist/types/builder/FormField.d.ts +4 -2
- package/dist/types/builder/SchemaEditor.d.ts +6 -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 +12 -0
- package/dist/types/form/Controller.d.ts +45 -3
- package/dist/types/form/Form.d.ts +38 -7
- package/dist/types/form/useForm.d.ts +6 -0
- package/dist/types/hooks/useFileUploader.d.ts +24 -3
- package/dist/types/hooks/useFormBuilder.d.ts +41 -3
- package/dist/types/index.d.ts +32 -2
- package/dist/types/input/ArrayInput.d.ts +68 -13
- package/dist/types/input/AvatarInput.d.ts +23 -6
- package/dist/types/input/Checkbox.d.ts +12 -10
- package/dist/types/input/ColorInput.d.ts +15 -5
- package/dist/types/input/ColorPicker.d.ts +10 -2
- package/dist/types/input/DateInput.d.ts +21 -0
- package/dist/types/input/Field.d.ts +9 -36
- package/dist/types/input/File.d.ts +16 -4
- package/dist/types/input/Hidden.d.ts +7 -6
- package/dist/types/input/Input.d.ts +11 -4
- package/dist/types/input/Number.d.ts +9 -4
- package/dist/types/input/Password.d.ts +9 -4
- package/dist/types/input/Radio.d.ts +9 -4
- package/dist/types/input/RadioGroup.d.ts +14 -6
- package/dist/types/input/{Range.d.ts → RangeSlider.d.ts} +11 -6
- package/dist/types/input/Search.d.ts +14 -4
- package/dist/types/input/Slider.d.ts +9 -6
- package/dist/types/input/Switch.d.ts +13 -8
- package/dist/types/input/Textarea.d.ts +15 -4
- package/dist/types/internal/ErrorIcon.d.ts +4 -1
- package/dist/types/internal/FieldWrapper.d.ts +10 -1
- package/dist/types/internal/InputWrapper.d.ts +19 -1
- package/dist/types/ranger/index.d.ts +7 -3
- package/dist/types/ranger/utils.d.ts +2 -2
- package/dist/types/select/AutoComplete.d.ts +7 -2
- package/dist/types/select/DualList.d.ts +11 -37
- package/dist/types/select/List.d.ts +7 -2
- package/dist/types/select/Options.d.ts +8 -7
- package/dist/types/select/Select.d.ts +7 -2
- package/dist/types/select/helpers.d.ts +2 -2
- package/dist/types/select/useSelect.d.ts +10 -28
- package/dist/types/types/index.d.ts +73 -39
- package/dist/types/types/schema.d.ts +78 -32
- package/dist/types/utils/eventHandlers.d.ts +4 -4
- package/dist/types/utils/getColor.d.ts +4 -4
- package/dist/types/utils/getProps.d.ts +26 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +25 -25
- package/src/builder/FileField.tsx +73 -56
- package/src/builder/FormField.tsx +66 -58
- package/src/builder/SchemaEditor.tsx +78 -0
- package/src/builder/components/AddSchemaFields.tsx +64 -0
- package/src/builder/components/SchemaArrayForm.tsx +146 -0
- package/src/builder/components/SchemaField.tsx +405 -0
- package/src/form/Controller.tsx +61 -24
- package/src/form/Form.tsx +74 -50
- package/src/form/useForm.ts +53 -0
- package/src/hooks/useFileUploader.ts +115 -84
- package/src/hooks/useFormBuilder.tsx +80 -41
- package/src/i18n/{ar.json → ar/form.json} +5 -4
- package/src/i18n/{en.json → en/form.json} +5 -5
- package/src/i18n/index.ts +2 -2
- package/src/index.ts +34 -20
- package/src/input/ArrayInput.tsx +255 -173
- package/src/input/AvatarInput.tsx +82 -39
- package/src/input/Checkbox.tsx +30 -54
- package/src/input/ColorInput.tsx +146 -105
- package/src/input/ColorPicker.tsx +76 -102
- package/src/input/DateInput.tsx +225 -0
- package/src/input/Field.tsx +23 -65
- package/src/input/File.tsx +76 -98
- package/src/input/Hidden.tsx +36 -24
- package/src/input/Input.tsx +55 -53
- package/src/input/Number.tsx +49 -54
- package/src/input/Password.tsx +61 -66
- package/src/input/Radio.tsx +28 -37
- package/src/input/RadioGroup.tsx +30 -25
- package/src/input/{Range.tsx → RangeSlider.tsx} +81 -109
- package/src/input/Search.tsx +64 -77
- package/src/input/Slider.tsx +80 -109
- package/src/input/Switch.tsx +39 -53
- package/src/input/Textarea.tsx +72 -59
- package/src/internal/ErrorIcon.tsx +22 -21
- package/src/internal/FieldWrapper.tsx +33 -23
- package/src/internal/InputWrapper.tsx +132 -143
- package/src/ranger/index.tsx +37 -117
- package/src/ranger/utils.ts +12 -11
- package/src/select/AutoComplete.tsx +113 -123
- package/src/select/DualList.tsx +218 -204
- package/src/select/List.tsx +130 -97
- package/src/select/Options.tsx +59 -57
- package/src/select/Select.tsx +148 -122
- package/src/select/helpers.ts +13 -8
- package/src/select/useSelect.tsx +110 -127
- package/src/types/index.ts +76 -45
- package/src/types/schema.ts +97 -40
- package/src/utils/eventHandlers.ts +24 -26
- package/src/utils/getColor.ts +9 -8
- package/src/utils/getProps.ts +47 -0
- package/src/utils/index.ts +1 -0
- 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/cjs/input/File.js
CHANGED
|
@@ -1,71 +1,72 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
-
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
5
4
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
6
5
|
var core = require('@react-fabric/core');
|
|
7
6
|
var utilities = require('@react-fabric/utilities');
|
|
8
|
-
var classNames = require('classnames');
|
|
9
7
|
var react = require('react');
|
|
10
8
|
var InputWrapper = require('../internal/InputWrapper.js');
|
|
11
9
|
var eventHandlers = require('../utils/eventHandlers.js');
|
|
12
|
-
var
|
|
10
|
+
var getProps = require('../utils/getProps.js');
|
|
13
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
12
|
|
|
15
|
-
var _excluded = ["ref", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "name", "accept", "showList", "multiple", "onChange", "onEnterPressed"];
|
|
16
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; }
|
|
17
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
18
|
-
|
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
+
function FileExists(prop) {
|
|
19
16
|
var _useState = react.useState(false),
|
|
20
17
|
_useState2 = _slicedToArray(_useState, 2),
|
|
21
18
|
kill = _useState2[0],
|
|
22
19
|
setKill = _useState2[1];
|
|
23
20
|
react.useEffect(function () {
|
|
24
|
-
setTimeout(function () {
|
|
21
|
+
var tmr = setTimeout(function () {
|
|
25
22
|
setKill(true);
|
|
26
23
|
}, 2000);
|
|
27
|
-
|
|
24
|
+
return function () {
|
|
25
|
+
clearTimeout(tmr);
|
|
26
|
+
};
|
|
27
|
+
}, []);
|
|
28
28
|
return kill ? null : /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
29
29
|
className: "bg-danger-500 text-white px-2 rounded text-xs",
|
|
30
30
|
children: ["File [", prop.name, "] already added to list"]
|
|
31
31
|
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* File input component that allows users to select files from their system.
|
|
36
|
+
* It supports multiple file selection and displays a list of selected files.
|
|
37
|
+
* The component also provides functionality to remove files from the list.
|
|
38
|
+
* It handles file changes, invalid states, and read-only or disabled states.
|
|
39
|
+
*/
|
|
40
|
+
function FileInput(props) {
|
|
41
|
+
var _currentValue$map;
|
|
42
|
+
var ref = props.ref,
|
|
43
|
+
value = props.value,
|
|
44
|
+
invalid = props.invalid,
|
|
45
|
+
readOnly = props.readOnly,
|
|
46
|
+
disabled = props.disabled,
|
|
47
|
+
placeholder = props.placeholder,
|
|
48
|
+
autoFocus = props.autoFocus,
|
|
49
|
+
error = props.error,
|
|
50
|
+
name = props.name,
|
|
51
|
+
accept = props.accept,
|
|
52
|
+
_props$showList = props.showList,
|
|
53
|
+
showList = _props$showList === void 0 ? true : _props$showList,
|
|
54
|
+
multiple = props.multiple,
|
|
55
|
+
onChange = props.onChange,
|
|
56
|
+
onEnterPressed = props.onEnterPressed;
|
|
52
57
|
var listRef = react.useRef([]);
|
|
53
58
|
var inputRef = react.useRef(null);
|
|
54
|
-
var _useState3 = react.useState(
|
|
59
|
+
var _useState3 = react.useState(function () {
|
|
60
|
+
return [];
|
|
61
|
+
}),
|
|
55
62
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
56
63
|
exists = _useState4[0],
|
|
57
64
|
setExists = _useState4[1];
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
var
|
|
63
|
-
var handleEnterPressed = react.useMemo(function () {
|
|
64
|
-
return eventHandlers.handleEnter(onEnterPressed);
|
|
65
|
-
}, [onEnterPressed]);
|
|
66
|
-
react.useEffect(function () {
|
|
67
|
-
setActualValue(deferred);
|
|
68
|
-
}, [deferred]);
|
|
65
|
+
var id = react.useId();
|
|
66
|
+
var _useControlledValue = core.useControlledValue(value, null),
|
|
67
|
+
currentValue = _useControlledValue.currentValue,
|
|
68
|
+
updateValue = _useControlledValue.updateValue;
|
|
69
|
+
var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
|
|
69
70
|
var handleChange = react.useCallback(function (e) {
|
|
70
71
|
setExists([]);
|
|
71
72
|
if (multiple) {
|
|
@@ -73,73 +74,77 @@ var FileInput = function FileInput(_ref) {
|
|
|
73
74
|
if (showList) {
|
|
74
75
|
var _exists = [];
|
|
75
76
|
Array.from(e.target.files).forEach(function (file) {
|
|
76
|
-
listRef.current.find(function (ef) {
|
|
77
|
+
if (listRef.current.find(function (ef) {
|
|
77
78
|
return ef.name === file.name;
|
|
78
|
-
})
|
|
79
|
+
})) _exists.push(file.name);else listRef.current.push(file);
|
|
79
80
|
});
|
|
80
|
-
|
|
81
|
+
updateValue(listRef.current.slice());
|
|
81
82
|
setExists(_exists);
|
|
82
83
|
}
|
|
83
84
|
e.target.value = "";
|
|
84
85
|
onChange === null || onChange === void 0 || onChange(listRef.current);
|
|
85
86
|
} else {
|
|
86
87
|
listRef.current = [];
|
|
87
|
-
|
|
88
|
+
updateValue(listRef.current);
|
|
88
89
|
onChange === null || onChange === void 0 || onChange(listRef.current);
|
|
89
90
|
}
|
|
90
91
|
} else {
|
|
91
92
|
var _e$target$files, _e$target$files$item, _e$target$files2;
|
|
92
|
-
|
|
93
|
+
updateValue(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
94
|
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);
|
|
94
95
|
if (!e && inputRef.current) inputRef.current.value = "";
|
|
95
96
|
}
|
|
96
|
-
}, [
|
|
97
|
+
}, [multiple, showList, onChange, updateValue]);
|
|
97
98
|
var removeFile = react.useCallback(function (idx) {
|
|
98
99
|
listRef.current.splice(idx, 1);
|
|
99
|
-
|
|
100
|
+
updateValue(listRef.current);
|
|
100
101
|
onChange === null || onChange === void 0 || onChange(listRef.current);
|
|
101
|
-
}, [onChange]);
|
|
102
|
+
}, [onChange, updateValue]);
|
|
102
103
|
return /*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
disabled: disabled,
|
|
108
|
-
required: required,
|
|
109
|
-
error: error,
|
|
104
|
+
id: id,
|
|
105
|
+
showClear: !utilities.isEmpty(currentValue) && !disabled && !readOnly,
|
|
106
|
+
onClear: handleChange
|
|
107
|
+
}, getProps.getWrapperProps(props)), {}, {
|
|
110
108
|
listing: showList && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
|
|
111
|
-
children: [utilities.isArray(
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
children: [utilities.isArray(currentValue) && (currentValue === null || currentValue === void 0 || (_currentValue$map = currentValue.map) === null || _currentValue$map === void 0 ? void 0 : _currentValue$map.call(currentValue, function (file, idx) {
|
|
110
|
+
return (
|
|
111
|
+
/*#__PURE__*/
|
|
112
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
113
|
+
jsxRuntime.jsxs("div", {
|
|
114
|
+
className: "flex gap-1 items-center text-sm text-dimmed py-1 px-2",
|
|
115
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
116
|
+
className: "flex-1 truncate",
|
|
117
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
118
|
+
className: "font-medium",
|
|
119
|
+
children: file.name
|
|
120
|
+
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
121
|
+
className: "text-xs",
|
|
122
|
+
children: utilities.FileUtil.mime(file.type)
|
|
123
|
+
})]
|
|
119
124
|
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
120
|
-
className: "text-
|
|
121
|
-
children: utilities.
|
|
125
|
+
className: "flex-content text-end w-24",
|
|
126
|
+
children: utilities.Format.bytes(file.size)
|
|
127
|
+
}), /*#__PURE__*/jsxRuntime.jsx("button", {
|
|
128
|
+
type: "button",
|
|
129
|
+
className: utilities.cn("size-fit leading-0 cursor-pointer"),
|
|
130
|
+
onClick: function onClick() {
|
|
131
|
+
removeFile(idx);
|
|
132
|
+
},
|
|
133
|
+
children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
134
|
+
className: "cursor-pointer opacity-30 hover:opacity-80",
|
|
135
|
+
icon: "icon-[mdi--close]"
|
|
136
|
+
})
|
|
122
137
|
})]
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
children: utilities.Format.bytes(file.size)
|
|
126
|
-
}), /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
127
|
-
className: "cursor-pointer opacity-30 hover:opacity-80",
|
|
128
|
-
icon: core.CoreIcons.close,
|
|
129
|
-
onClick: function onClick() {
|
|
130
|
-
removeFile(idx);
|
|
131
|
-
}
|
|
132
|
-
})]
|
|
133
|
-
}, idx);
|
|
138
|
+
}, idx)
|
|
139
|
+
);
|
|
134
140
|
})), exists.map(function (name) {
|
|
135
141
|
return /*#__PURE__*/jsxRuntime.jsx(FileExists, {
|
|
136
142
|
name: name
|
|
137
143
|
}, new Date().getTime());
|
|
138
144
|
})]
|
|
139
|
-
})
|
|
140
|
-
}, rest), {}, {
|
|
145
|
+
}),
|
|
141
146
|
children: /*#__PURE__*/jsxRuntime.jsx("input", {
|
|
142
|
-
className:
|
|
147
|
+
className: utilities.cn("fabric-fileInput", "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer", utilities.isArray(currentValue) && (currentValue === null || currentValue === void 0 ? void 0 : currentValue.length) && "text-(--fabric-bg)"),
|
|
143
148
|
"aria-invalid": invalid,
|
|
144
149
|
"aria-disabled": disabled,
|
|
145
150
|
"aria-readonly": readOnly,
|
|
@@ -160,6 +165,6 @@ var FileInput = function FileInput(_ref) {
|
|
|
160
165
|
onKeyDown: handleEnterPressed
|
|
161
166
|
})
|
|
162
167
|
}));
|
|
163
|
-
}
|
|
168
|
+
}
|
|
164
169
|
|
|
165
170
|
exports.FileInput = FileInput;
|
package/dist/cjs/input/Hidden.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var utilities = require('@react-fabric/utilities');
|
|
3
4
|
var react = require('react');
|
|
4
5
|
var ErrorIcon = require('../internal/ErrorIcon.js');
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -27,28 +28,41 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
27
28
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28
29
|
*/
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Hidden input component to handle hidden values in forms.
|
|
33
|
+
* It will trigger the onChange handler with the hidden value after a short delay.
|
|
34
|
+
* This is useful for cases where you need to update the form state without user interaction.
|
|
35
|
+
*/
|
|
36
|
+
function HiddenInput(props) {
|
|
37
|
+
var _props$invalid = props.invalid,
|
|
38
|
+
invalid = _props$invalid === void 0 ? false : _props$invalid,
|
|
39
|
+
_props$error = props.error,
|
|
40
|
+
error = _props$error === void 0 ? "" : _props$error,
|
|
41
|
+
onChange = props.onChange,
|
|
42
|
+
value = props.value,
|
|
43
|
+
hiddenValue = props.hiddenValue,
|
|
44
|
+
name = props.name;
|
|
45
|
+
var valueRef = react.useRef(value);
|
|
46
|
+
var deferred = react.useDeferredValue(hiddenValue);
|
|
47
|
+
react.useEffect(function () {
|
|
48
|
+
valueRef.current = value;
|
|
49
|
+
}, [value]);
|
|
38
50
|
react.useEffect(function () {
|
|
39
|
-
|
|
40
|
-
|
|
51
|
+
if (!utilities.isEqual(valueRef.current, deferred)) {
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
53
|
+
onChange === null || onChange === void 0 || onChange(deferred);
|
|
54
|
+
}
|
|
55
|
+
}, [deferred, onChange]);
|
|
41
56
|
return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
|
|
42
57
|
children: [/*#__PURE__*/jsxRuntime.jsx("input", {
|
|
43
58
|
type: "hidden",
|
|
44
|
-
|
|
45
|
-
value: value,
|
|
59
|
+
value: value !== null && value !== void 0 ? value : "",
|
|
46
60
|
name: name
|
|
47
61
|
}), /*#__PURE__*/jsxRuntime.jsx(ErrorIcon.ErrorIcon, {
|
|
48
62
|
invalid: invalid,
|
|
49
63
|
error: error
|
|
50
64
|
})]
|
|
51
65
|
});
|
|
52
|
-
}
|
|
66
|
+
}
|
|
53
67
|
|
|
54
68
|
exports.HiddenInput = HiddenInput;
|
package/dist/cjs/input/Input.js
CHANGED
|
@@ -1,60 +1,59 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var core = require('@react-fabric/core');
|
|
5
|
+
var utilities = require('@react-fabric/utilities');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var InputWrapper = require('../internal/InputWrapper.js');
|
|
8
8
|
var eventHandlers = require('../utils/eventHandlers.js');
|
|
9
|
-
require('
|
|
9
|
+
var getProps = require('../utils/getProps.js');
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
11
|
|
|
12
|
-
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "type", "onChange", "onEnterPressed"];
|
|
13
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
react.
|
|
40
|
-
|
|
41
|
-
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
/**
|
|
15
|
+
* This component is used to render a text input field with various properties such as name, value, invalid state, read-only, disabled, required, placeholder, autoFocus, error message, monospace font option, and event handlers for blur, focus, change, and enter key press.
|
|
16
|
+
* It also includes a clear button that appears when there is a value in the input field, allowing users to clear the input easily.
|
|
17
|
+
* The component uses a wrapper to handle the clear button and styling, and it supports deferred value updates to optimize performance.
|
|
18
|
+
*/
|
|
19
|
+
function Input(props) {
|
|
20
|
+
var value = props.value,
|
|
21
|
+
defaultValue = props.defaultValue,
|
|
22
|
+
onEnterPressed = props.onEnterPressed,
|
|
23
|
+
onChange = props.onChange,
|
|
24
|
+
onBlur = props.onBlur,
|
|
25
|
+
onFocus = props.onFocus,
|
|
26
|
+
disabled = props.disabled,
|
|
27
|
+
readOnly = props.readOnly,
|
|
28
|
+
invalid = props.invalid,
|
|
29
|
+
error = props.error,
|
|
30
|
+
placeholder = props.placeholder,
|
|
31
|
+
name = props.name,
|
|
32
|
+
type = props.type,
|
|
33
|
+
autoFocus = props.autoFocus,
|
|
34
|
+
allowClear = props.allowClear,
|
|
35
|
+
_props$autoComplete = props.autoComplete,
|
|
36
|
+
autoComplete = _props$autoComplete === void 0 ? "off" : _props$autoComplete,
|
|
37
|
+
ref = props.ref;
|
|
38
|
+
var id = react.useId();
|
|
39
|
+
var _useControlledValue = core.useControlledValue(value, defaultValue),
|
|
40
|
+
currentValue = _useControlledValue.currentValue,
|
|
41
|
+
updateValue = _useControlledValue.updateValue;
|
|
42
|
+
var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
|
|
42
43
|
var handleChange = react.useCallback(function (e) {
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
var _e$target$value;
|
|
45
|
+
var value = (_e$target$value = e === null || e === void 0 ? void 0 : e.target.value) !== null && _e$target$value !== void 0 ? _e$target$value : defaultValue;
|
|
46
|
+
updateValue(value);
|
|
47
|
+
onChange === null || onChange === void 0 || onChange(value);
|
|
48
|
+
}, [defaultValue, updateValue, onChange]);
|
|
47
49
|
return /*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
disabled: disabled,
|
|
53
|
-
required: required,
|
|
54
|
-
error: error
|
|
55
|
-
}, rest), {}, {
|
|
50
|
+
id: id,
|
|
51
|
+
showClear: allowClear && (currentValue !== null && currentValue !== void 0 ? currentValue : "") !== (defaultValue !== null && defaultValue !== void 0 ? defaultValue : "") && !disabled && !readOnly,
|
|
52
|
+
onClear: handleChange
|
|
53
|
+
}, getProps.getWrapperProps(props)), {}, {
|
|
56
54
|
children: /*#__PURE__*/jsxRuntime.jsx("input", {
|
|
57
|
-
|
|
55
|
+
id: id,
|
|
56
|
+
className: utilities.cn("appearance-none bg-transparent py-1 px-4 not-first:ps-2 not-last:pe-2 flex-1 border-none outline-none ring-0 peer"),
|
|
58
57
|
"aria-invalid": invalid,
|
|
59
58
|
"aria-disabled": disabled,
|
|
60
59
|
"aria-readonly": readOnly,
|
|
@@ -67,13 +66,15 @@ var Input = function Input(_ref) {
|
|
|
67
66
|
size: 1,
|
|
68
67
|
type: type,
|
|
69
68
|
ref: ref,
|
|
70
|
-
autoComplete:
|
|
69
|
+
autoComplete: autoComplete,
|
|
71
70
|
autoFocus: autoFocus,
|
|
72
|
-
value:
|
|
71
|
+
value: currentValue !== null && currentValue !== void 0 ? currentValue : "",
|
|
72
|
+
onBlur: onBlur,
|
|
73
|
+
onFocus: onFocus,
|
|
73
74
|
onChange: handleChange,
|
|
74
75
|
onKeyDown: handleEnterPressed
|
|
75
76
|
})
|
|
76
77
|
}));
|
|
77
|
-
}
|
|
78
|
+
}
|
|
78
79
|
|
|
79
80
|
exports.Input = Input;
|
package/dist/cjs/input/Number.js
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
-
var
|
|
5
|
-
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
4
|
+
var core = require('@react-fabric/core');
|
|
6
5
|
var react = require('react');
|
|
7
6
|
var InputWrapper = require('../internal/InputWrapper.js');
|
|
8
7
|
var eventHandlers = require('../utils/eventHandlers.js');
|
|
9
8
|
require('@react-fabric/utilities');
|
|
9
|
+
var getProps = require('../utils/getProps.js');
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
11
|
|
|
12
|
-
var _excluded = ["ref", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "name", "min", "max", "step", "onChange", "onEnterPressed"];
|
|
13
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
/**
|
|
15
|
+
* This component allows users to input numeric values with optional minimum, maximum, and step constraints.
|
|
16
|
+
* It provides a clear interface for entering numbers, with support for validation and accessibility features.
|
|
17
|
+
* It also includes a clear button to reset the input value.
|
|
18
|
+
*/
|
|
19
|
+
function Number(props) {
|
|
20
|
+
var value = props.value,
|
|
21
|
+
defaultValue = props.defaultValue,
|
|
22
|
+
onEnterPressed = props.onEnterPressed,
|
|
23
|
+
onChange = props.onChange,
|
|
24
|
+
onBlur = props.onBlur,
|
|
25
|
+
onFocus = props.onFocus,
|
|
26
|
+
disabled = props.disabled,
|
|
27
|
+
readOnly = props.readOnly,
|
|
28
|
+
invalid = props.invalid,
|
|
29
|
+
min = props.min,
|
|
30
|
+
max = props.max,
|
|
31
|
+
step = props.step,
|
|
32
|
+
placeholder = props.placeholder,
|
|
33
|
+
name = props.name,
|
|
34
|
+
autoFocus = props.autoFocus,
|
|
35
|
+
allowClear = props.allowClear,
|
|
36
|
+
ref = props.ref;
|
|
37
|
+
var id = react.useId();
|
|
38
|
+
var _useControlledValue = core.useControlledValue(value, defaultValue),
|
|
39
|
+
currentValue = _useControlledValue.currentValue,
|
|
40
|
+
updateValue = _useControlledValue.updateValue;
|
|
41
|
+
var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
|
|
42
42
|
var handleChange = react.useCallback(function (e) {
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
var _e$target$valueAsNumb;
|
|
44
|
+
var number = (_e$target$valueAsNumb = e === null || e === void 0 ? void 0 : e.target.valueAsNumber) !== null && _e$target$valueAsNumb !== void 0 ? _e$target$valueAsNumb : defaultValue;
|
|
45
|
+
updateValue(number);
|
|
46
|
+
onChange === null || onChange === void 0 || onChange(number);
|
|
47
|
+
}, [defaultValue, updateValue, onChange]);
|
|
47
48
|
return /*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
|
|
48
|
-
|
|
49
|
+
id: id,
|
|
50
|
+
showClear: allowClear && (currentValue !== null && currentValue !== void 0 ? currentValue : "") !== (defaultValue !== null && defaultValue !== void 0 ? defaultValue : "") && !disabled && !readOnly,
|
|
49
51
|
onClear: handleChange,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
disabled: disabled,
|
|
53
|
-
required: required
|
|
54
|
-
}, rest), {}, {
|
|
52
|
+
hasStepper: true
|
|
53
|
+
}, getProps.getWrapperProps(props)), {}, {
|
|
55
54
|
children: /*#__PURE__*/jsxRuntime.jsx("input", {
|
|
56
|
-
|
|
55
|
+
id: id,
|
|
56
|
+
className: "appearance-none bg-transparent py-1 ps-4 pe-2 not-first:ps-2 flex-1 border-none outline-none ring-0 peer",
|
|
57
57
|
"aria-invalid": invalid,
|
|
58
58
|
"aria-disabled": disabled,
|
|
59
59
|
"aria-readonly": readOnly,
|
|
@@ -70,11 +70,13 @@ var Number = function Number(_ref) {
|
|
|
70
70
|
ref: ref,
|
|
71
71
|
autoComplete: "off",
|
|
72
72
|
autoFocus: autoFocus,
|
|
73
|
-
value:
|
|
73
|
+
value: currentValue !== null && currentValue !== void 0 ? currentValue : "",
|
|
74
|
+
onBlur: onBlur,
|
|
75
|
+
onFocus: onFocus,
|
|
74
76
|
onChange: handleChange,
|
|
75
77
|
onKeyDown: handleEnterPressed
|
|
76
78
|
})
|
|
77
79
|
}));
|
|
78
|
-
}
|
|
80
|
+
}
|
|
79
81
|
|
|
80
82
|
exports.Number = Number;
|