@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
|
@@ -0,0 +1,197 @@
|
|
|
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 classNames from 'classnames';
|
|
10
|
+
import { useState, useDeferredValue, useMemo, useEffect, useCallback, startTransition, useRef } from 'react';
|
|
11
|
+
import { InputWrapper } from '../internal/InputWrapper.js';
|
|
12
|
+
import { useHandleEnter } from '../utils/eventHandlers.js';
|
|
13
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
14
|
+
|
|
15
|
+
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "defaultValue", "autoFocus", "error", "type", "onBlur", "onFocus", "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
|
+
/**
|
|
19
|
+
* Date input component that allows users to select a date or datetime.
|
|
20
|
+
* It uses the Floating UI library for positioning the date picker.
|
|
21
|
+
* It also provides a button to clear the selected date.
|
|
22
|
+
* The component supports both date and datetime types, with appropriate formatting.
|
|
23
|
+
*
|
|
24
|
+
* @param {DateProps} props - The properties for the DateInput component.
|
|
25
|
+
* @returns {JSX.Element} - The rendered DateInput component.
|
|
26
|
+
*/
|
|
27
|
+
var DateInput = function DateInput(_ref) {
|
|
28
|
+
var ref = _ref.ref,
|
|
29
|
+
name = _ref.name,
|
|
30
|
+
value = _ref.value,
|
|
31
|
+
invalid = _ref.invalid,
|
|
32
|
+
readOnly = _ref.readOnly,
|
|
33
|
+
disabled = _ref.disabled,
|
|
34
|
+
required = _ref.required,
|
|
35
|
+
placeholder = _ref.placeholder,
|
|
36
|
+
defaultValue = _ref.defaultValue,
|
|
37
|
+
autoFocus = _ref.autoFocus,
|
|
38
|
+
error = _ref.error,
|
|
39
|
+
_ref$type = _ref.type,
|
|
40
|
+
type = _ref$type === void 0 ? "date" : _ref$type,
|
|
41
|
+
onBlur = _ref.onBlur,
|
|
42
|
+
onFocus = _ref.onFocus,
|
|
43
|
+
onChange = _ref.onChange,
|
|
44
|
+
onEnterPressed = _ref.onEnterPressed;
|
|
45
|
+
_ref.format;
|
|
46
|
+
var min = _ref.min,
|
|
47
|
+
max = _ref.max,
|
|
48
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
49
|
+
var _useState = useState(""),
|
|
50
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
51
|
+
actualValue = _useState2[0],
|
|
52
|
+
setActualValue = _useState2[1];
|
|
53
|
+
var _useState3 = useState(""),
|
|
54
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
55
|
+
inputValue = _useState4[0],
|
|
56
|
+
setInputValue = _useState4[1];
|
|
57
|
+
var deferred = useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
|
|
58
|
+
var inputFormat = useMemo(function () {
|
|
59
|
+
return type === "datetime" ? "yyyy-MM-dd HH:mm" : "yyyy-MM-dd";
|
|
60
|
+
}, [type]);
|
|
61
|
+
useEffect(function () {
|
|
62
|
+
setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
|
|
63
|
+
setInputValue(deferred ? DateUtil.format(deferred, inputFormat) : "");
|
|
64
|
+
}, [deferred, inputFormat]);
|
|
65
|
+
var handleEnterPressed = useHandleEnter(onEnterPressed);
|
|
66
|
+
var handleChange = useCallback(function (e) {
|
|
67
|
+
var _e$currentTarget$valu;
|
|
68
|
+
var value = (_e$currentTarget$valu = e === null || e === void 0 ? void 0 : e.currentTarget.value) !== null && _e$currentTarget$valu !== void 0 ? _e$currentTarget$valu : defaultValue;
|
|
69
|
+
if (value) {
|
|
70
|
+
var _parsed$toISOString;
|
|
71
|
+
var parsed = DateUtil.parseDate(value);
|
|
72
|
+
setActualValue(parsed === null || parsed === void 0 || (_parsed$toISOString = parsed.toISOString) === null || _parsed$toISOString === void 0 ? void 0 : _parsed$toISOString.call(parsed));
|
|
73
|
+
setInputValue(DateUtil.format(parsed, inputFormat));
|
|
74
|
+
onChange != null && startTransition(function () {
|
|
75
|
+
var _parsed$toISOString2;
|
|
76
|
+
return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString2 = parsed.toISOString) === null || _parsed$toISOString2 === void 0 ? void 0 : _parsed$toISOString2.call(parsed));
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
setActualValue("");
|
|
80
|
+
setInputValue("");
|
|
81
|
+
onChange != null && startTransition(function () {
|
|
82
|
+
return onChange(null);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}, [onChange, inputFormat, defaultValue]);
|
|
86
|
+
var handleDateChange = useCallback(function (value) {
|
|
87
|
+
if (value) {
|
|
88
|
+
var _parsed$toISOString3;
|
|
89
|
+
var parsed = DateUtil.parseDate(value);
|
|
90
|
+
setActualValue(parsed === null || parsed === void 0 || (_parsed$toISOString3 = parsed.toISOString) === null || _parsed$toISOString3 === void 0 ? void 0 : _parsed$toISOString3.call(parsed));
|
|
91
|
+
setInputValue(DateUtil.format(parsed, inputFormat));
|
|
92
|
+
onChange != null && startTransition(function () {
|
|
93
|
+
var _parsed$toISOString4;
|
|
94
|
+
return onChange(parsed === null || parsed === void 0 || (_parsed$toISOString4 = parsed.toISOString) === null || _parsed$toISOString4 === void 0 ? void 0 : _parsed$toISOString4.call(parsed));
|
|
95
|
+
});
|
|
96
|
+
} else {
|
|
97
|
+
setActualValue("");
|
|
98
|
+
setInputValue("");
|
|
99
|
+
onChange != null && startTransition(function () {
|
|
100
|
+
return onChange(null);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}, [onChange, inputFormat]);
|
|
104
|
+
var arrowRef = useRef(null);
|
|
105
|
+
var _useState5 = useState(false),
|
|
106
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
107
|
+
isOpen = _useState6[0],
|
|
108
|
+
setIsOpen = _useState6[1];
|
|
109
|
+
var _useFloating = useFloating({
|
|
110
|
+
open: isOpen,
|
|
111
|
+
onOpenChange: function onOpenChange(open, _, reason) {
|
|
112
|
+
console.log(reason);
|
|
113
|
+
if (reason === "reference-press") return;
|
|
114
|
+
setIsOpen(open);
|
|
115
|
+
},
|
|
116
|
+
strategy: "fixed",
|
|
117
|
+
placement: "bottom-start",
|
|
118
|
+
whileElementsMounted: autoUpdate,
|
|
119
|
+
middleware: [shift({
|
|
120
|
+
padding: 8
|
|
121
|
+
}), flip(), offset(9), arrow({
|
|
122
|
+
element: arrowRef
|
|
123
|
+
})]
|
|
124
|
+
}),
|
|
125
|
+
refs = _useFloating.refs,
|
|
126
|
+
floatingStyles = _useFloating.floatingStyles,
|
|
127
|
+
context = _useFloating.context;
|
|
128
|
+
var focus = useFocus(context, {
|
|
129
|
+
enabled: !disabled
|
|
130
|
+
});
|
|
131
|
+
var click = useClick(context, {
|
|
132
|
+
enabled: !disabled,
|
|
133
|
+
toggle: false
|
|
134
|
+
});
|
|
135
|
+
var dismiss = useDismiss(context, {
|
|
136
|
+
referencePress: true
|
|
137
|
+
});
|
|
138
|
+
var _useInteractions = useInteractions([dismiss, click, focus]),
|
|
139
|
+
getReferenceProps = _useInteractions.getReferenceProps,
|
|
140
|
+
getFloatingProps = _useInteractions.getFloatingProps;
|
|
141
|
+
return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
|
|
142
|
+
showClear: !!actualValue && !disabled && !readOnly,
|
|
143
|
+
onClear: handleChange,
|
|
144
|
+
invalid: invalid,
|
|
145
|
+
readOnly: readOnly,
|
|
146
|
+
disabled: disabled,
|
|
147
|
+
required: required,
|
|
148
|
+
error: error
|
|
149
|
+
}, rest), {}, {
|
|
150
|
+
children: [/*#__PURE__*/jsx("input", _objectSpread(_objectSpread({
|
|
151
|
+
className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer", !value && "empty"),
|
|
152
|
+
"aria-invalid": invalid,
|
|
153
|
+
"aria-disabled": disabled,
|
|
154
|
+
"aria-readonly": readOnly,
|
|
155
|
+
"aria-errormessage": error,
|
|
156
|
+
placeholder: placeholder,
|
|
157
|
+
disabled: disabled,
|
|
158
|
+
readOnly: readOnly,
|
|
159
|
+
"data-testid": name,
|
|
160
|
+
name: name,
|
|
161
|
+
size: 1,
|
|
162
|
+
type: type === "datetime" ? "datetime-local" : "date",
|
|
163
|
+
autoComplete: "off",
|
|
164
|
+
autoFocus: autoFocus,
|
|
165
|
+
value: inputValue,
|
|
166
|
+
ref: mergeRefs(ref, refs.setReference)
|
|
167
|
+
}, getReferenceProps({
|
|
168
|
+
onBlur: onBlur,
|
|
169
|
+
onFocus: onFocus
|
|
170
|
+
})), {}, {
|
|
171
|
+
onChange: handleChange,
|
|
172
|
+
onKeyDown: handleEnterPressed
|
|
173
|
+
})), isOpen && /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
|
|
174
|
+
ref: refs.setFloating,
|
|
175
|
+
style: _objectSpread({
|
|
176
|
+
zIndex: "var(--z-popover)"
|
|
177
|
+
}, floatingStyles),
|
|
178
|
+
className: "shadow-lg bg-base ring-1 ring-tint-100",
|
|
179
|
+
"data-ref": "dropdownBody"
|
|
180
|
+
}, getFloatingProps()), {}, {
|
|
181
|
+
children: [/*#__PURE__*/jsx(DatePanel, {
|
|
182
|
+
withTime: type === "datetime",
|
|
183
|
+
value: actualValue,
|
|
184
|
+
max: max,
|
|
185
|
+
min: min,
|
|
186
|
+
onChange: handleDateChange
|
|
187
|
+
}), /*#__PURE__*/jsx(FloatingArrow, {
|
|
188
|
+
ref: arrowRef,
|
|
189
|
+
context: context,
|
|
190
|
+
strokeWidth: 0.5,
|
|
191
|
+
className: "fill-base stroke-muted"
|
|
192
|
+
})]
|
|
193
|
+
}))]
|
|
194
|
+
}));
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export { DateInput };
|
package/dist/esm/input/Field.js
CHANGED
|
@@ -2,15 +2,20 @@
|
|
|
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 {
|
|
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
|
|
|
11
11
|
var _excluded = ["children", "vertical", "noOutline", "plain"];
|
|
12
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; }
|
|
13
13
|
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; }
|
|
14
|
+
/**
|
|
15
|
+
* Field component for rendering multiple form fields under a single label.
|
|
16
|
+
* It supports various properties for customization, including label, info, required state,
|
|
17
|
+
* and styling options.
|
|
18
|
+
*/
|
|
14
19
|
var Field = function Field(_ref) {
|
|
15
20
|
var children = _ref.children,
|
|
16
21
|
vertical = _ref.vertical,
|
|
@@ -19,9 +24,10 @@ var Field = function Field(_ref) {
|
|
|
19
24
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
20
25
|
return /*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
|
|
21
26
|
children: /*#__PURE__*/jsx("div", {
|
|
22
|
-
className: classNames(
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
className: classNames("fabric-fieldGroup", !plain && !noOutline && "outline", !plain && "bg-base", plain && "flex-wrap", "flex-1 rounded", !vertical && "flex"),
|
|
28
|
+
"data-vertical": !!vertical,
|
|
29
|
+
children: cloneChildren(children, function (child) {
|
|
30
|
+
return /*#__PURE__*/cloneElement(child, {
|
|
25
31
|
"data-inner": true
|
|
26
32
|
});
|
|
27
33
|
})
|
package/dist/esm/input/File.js
CHANGED
|
@@ -6,10 +6,9 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
|
6
6
|
import { Icon, CoreIcons } from '@react-fabric/core';
|
|
7
7
|
import { isArray, mergeRefs, isEmpty, FileUtil, Format } from '@react-fabric/utilities';
|
|
8
8
|
import classNames from 'classnames';
|
|
9
|
-
import { useRef, useState, useDeferredValue,
|
|
9
|
+
import { useRef, useState, useDeferredValue, useEffect, useCallback, Fragment } from 'react';
|
|
10
10
|
import { InputWrapper } from '../internal/InputWrapper.js';
|
|
11
|
-
import {
|
|
12
|
-
import classes from './File.module.css';
|
|
11
|
+
import { useHandleEnter } from '../utils/eventHandlers.js';
|
|
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"];
|
|
@@ -30,6 +29,16 @@ var FileExists = function FileExists(prop) {
|
|
|
30
29
|
children: ["File [", prop.name, "] already added to list"]
|
|
31
30
|
});
|
|
32
31
|
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* File input component that allows users to select files from their system.
|
|
35
|
+
* It supports multiple file selection and displays a list of selected files.
|
|
36
|
+
* The component also provides functionality to remove files from the list.
|
|
37
|
+
* It handles file changes, invalid states, and read-only or disabled states.
|
|
38
|
+
*
|
|
39
|
+
* @param {FileInputProps} props - The properties for the FileInput component.
|
|
40
|
+
* @returns {JSX.Element} - The rendered FileInput component.
|
|
41
|
+
*/
|
|
33
42
|
var FileInput = function FileInput(_ref) {
|
|
34
43
|
var _actualValue$map;
|
|
35
44
|
var ref = _ref.ref,
|
|
@@ -60,9 +69,7 @@ var FileInput = function FileInput(_ref) {
|
|
|
60
69
|
actualValue = _useState6[0],
|
|
61
70
|
setActualValue = _useState6[1];
|
|
62
71
|
var deferred = useDeferredValue(value);
|
|
63
|
-
var handleEnterPressed =
|
|
64
|
-
return handleEnter(onEnterPressed);
|
|
65
|
-
}, [onEnterPressed]);
|
|
72
|
+
var handleEnterPressed = useHandleEnter(onEnterPressed);
|
|
66
73
|
useEffect(function () {
|
|
67
74
|
setActualValue(deferred);
|
|
68
75
|
}, [deferred]);
|
|
@@ -90,7 +97,7 @@ var FileInput = function FileInput(_ref) {
|
|
|
90
97
|
} else {
|
|
91
98
|
var _e$target$files, _e$target$files$item, _e$target$files2;
|
|
92
99
|
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 :
|
|
100
|
+
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
101
|
if (!e && inputRef.current) inputRef.current.value = "";
|
|
95
102
|
}
|
|
96
103
|
}, [onChange, multiple, showList]);
|
|
@@ -100,7 +107,7 @@ var FileInput = function FileInput(_ref) {
|
|
|
100
107
|
onChange === null || onChange === void 0 || onChange(listRef.current);
|
|
101
108
|
}, [onChange]);
|
|
102
109
|
return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
|
|
103
|
-
showClear: !isEmpty(actualValue),
|
|
110
|
+
showClear: !isEmpty(actualValue) && !disabled && !readOnly,
|
|
104
111
|
onClear: handleChange,
|
|
105
112
|
invalid: invalid,
|
|
106
113
|
readOnly: readOnly,
|
|
@@ -139,7 +146,7 @@ var FileInput = function FileInput(_ref) {
|
|
|
139
146
|
})
|
|
140
147
|
}, rest), {}, {
|
|
141
148
|
children: /*#__PURE__*/jsx("input", {
|
|
142
|
-
className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0",
|
|
149
|
+
className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer", "fabric-fileInput", isArray(actualValue) && (actualValue === null || actualValue === void 0 ? void 0 : actualValue.length) && "text-(--fabric-bg)"),
|
|
143
150
|
"aria-invalid": invalid,
|
|
144
151
|
"aria-disabled": disabled,
|
|
145
152
|
"aria-readonly": readOnly,
|
package/dist/esm/input/Hidden.js
CHANGED
|
@@ -27,8 +27,17 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
27
27
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Hidden input component to handle hidden values in forms.
|
|
32
|
+
* It will trigger the onChange handler with the hidden value after a short delay.
|
|
33
|
+
* This is useful for cases where you need to update the form state without user interaction.
|
|
34
|
+
*
|
|
35
|
+
* @param {Object} props - Component properties.
|
|
36
|
+
* @returns {JSX.Element} The rendered hidden input field and error icon.
|
|
37
|
+
*/
|
|
30
38
|
var HiddenInput = function HiddenInput(_ref) {
|
|
31
39
|
var hiddenValue = _ref.hiddenValue,
|
|
40
|
+
defaultValue = _ref.defaultValue,
|
|
32
41
|
onChange = _ref.onChange,
|
|
33
42
|
invalid = _ref.invalid,
|
|
34
43
|
error = _ref.error,
|
|
@@ -36,8 +45,10 @@ var HiddenInput = function HiddenInput(_ref) {
|
|
|
36
45
|
value = _ref$value === void 0 ? "" : _ref$value,
|
|
37
46
|
name = _ref.name;
|
|
38
47
|
useEffect(function () {
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
setTimeout(function () {
|
|
49
|
+
onChange === null || onChange === void 0 || onChange(hiddenValue !== null && hiddenValue !== void 0 ? hiddenValue : defaultValue);
|
|
50
|
+
}, 50);
|
|
51
|
+
}, [hiddenValue, defaultValue]);
|
|
41
52
|
return /*#__PURE__*/jsxs(Fragment, {
|
|
42
53
|
children: [/*#__PURE__*/jsx("input", {
|
|
43
54
|
type: "hidden",
|
package/dist/esm/input/Input.js
CHANGED
|
@@ -3,15 +3,24 @@
|
|
|
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
|
|
6
|
+
import classNames from 'classnames';
|
|
7
|
+
import { useState, useDeferredValue, useEffect, useCallback } from 'react';
|
|
7
8
|
import { InputWrapper } from '../internal/InputWrapper.js';
|
|
8
|
-
import {
|
|
9
|
+
import { useHandleEnter } from '../utils/eventHandlers.js';
|
|
9
10
|
import '@react-fabric/utilities';
|
|
10
11
|
import { jsx } from 'react/jsx-runtime';
|
|
11
12
|
|
|
12
|
-
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "type", "onChange", "onEnterPressed"];
|
|
13
|
+
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "defaultValue", "autoFocus", "error", "monospace", "type", "onBlur", "onFocus", "onChange", "onEnterPressed"];
|
|
13
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; }
|
|
14
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
|
+
* 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.
|
|
18
|
+
* It also includes a clear button that appears when there is a value in the input field, allowing users to clear the input easily.
|
|
19
|
+
* The component uses a wrapper to handle the clear button and styling, and it supports deferred value updates to optimize performance.
|
|
20
|
+
*
|
|
21
|
+
* @param {TextInputProps} props - The properties for the text input component.
|
|
22
|
+
* @returns {JSX.Element} - A JSX element representing the text input field.
|
|
23
|
+
*/
|
|
15
24
|
var Input = function Input(_ref) {
|
|
16
25
|
var ref = _ref.ref,
|
|
17
26
|
name = _ref.name,
|
|
@@ -21,10 +30,14 @@ var Input = function Input(_ref) {
|
|
|
21
30
|
disabled = _ref.disabled,
|
|
22
31
|
required = _ref.required,
|
|
23
32
|
placeholder = _ref.placeholder,
|
|
33
|
+
defaultValue = _ref.defaultValue,
|
|
24
34
|
autoFocus = _ref.autoFocus,
|
|
25
35
|
error = _ref.error,
|
|
36
|
+
monospace = _ref.monospace,
|
|
26
37
|
_ref$type = _ref.type,
|
|
27
38
|
type = _ref$type === void 0 ? "text" : _ref$type,
|
|
39
|
+
onBlur = _ref.onBlur,
|
|
40
|
+
onFocus = _ref.onFocus,
|
|
28
41
|
onChange = _ref.onChange,
|
|
29
42
|
onEnterPressed = _ref.onEnterPressed,
|
|
30
43
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -32,20 +45,19 @@ var Input = function Input(_ref) {
|
|
|
32
45
|
_useState2 = _slicedToArray(_useState, 2),
|
|
33
46
|
actualValue = _useState2[0],
|
|
34
47
|
setActualValue = _useState2[1];
|
|
35
|
-
var deferred = useDeferredValue(value);
|
|
36
|
-
var handleEnterPressed =
|
|
37
|
-
return handleEnter(onEnterPressed);
|
|
38
|
-
}, [onEnterPressed]);
|
|
48
|
+
var deferred = useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
|
|
49
|
+
var handleEnterPressed = useHandleEnter(onEnterPressed);
|
|
39
50
|
useEffect(function () {
|
|
40
51
|
setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
|
|
41
52
|
}, [deferred]);
|
|
42
53
|
var handleChange = useCallback(function (e) {
|
|
43
|
-
var
|
|
54
|
+
var _e$target$value;
|
|
55
|
+
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;
|
|
44
56
|
setActualValue(value !== null && value !== void 0 ? value : "");
|
|
45
|
-
onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value :
|
|
46
|
-
}, [
|
|
57
|
+
onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
|
|
58
|
+
}, [onChange, defaultValue]);
|
|
47
59
|
return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
|
|
48
|
-
showClear: !!actualValue,
|
|
60
|
+
showClear: !!actualValue && !disabled && !readOnly,
|
|
49
61
|
onClear: handleChange,
|
|
50
62
|
invalid: invalid,
|
|
51
63
|
readOnly: readOnly,
|
|
@@ -54,7 +66,7 @@ var Input = function Input(_ref) {
|
|
|
54
66
|
error: error
|
|
55
67
|
}, rest), {}, {
|
|
56
68
|
children: /*#__PURE__*/jsx("input", {
|
|
57
|
-
className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer",
|
|
69
|
+
className: classNames("appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer", monospace && "font-mono text-sm"),
|
|
58
70
|
"aria-invalid": invalid,
|
|
59
71
|
"aria-disabled": disabled,
|
|
60
72
|
"aria-readonly": readOnly,
|
|
@@ -70,6 +82,8 @@ var Input = function Input(_ref) {
|
|
|
70
82
|
autoComplete: "off",
|
|
71
83
|
autoFocus: autoFocus,
|
|
72
84
|
value: actualValue,
|
|
85
|
+
onBlur: onBlur,
|
|
86
|
+
onFocus: onFocus,
|
|
73
87
|
onChange: handleChange,
|
|
74
88
|
onKeyDown: handleEnterPressed
|
|
75
89
|
})
|
package/dist/esm/input/Number.js
CHANGED
|
@@ -3,15 +3,23 @@
|
|
|
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 { useState, useDeferredValue,
|
|
6
|
+
import { useState, useDeferredValue, useEffect, useCallback } from 'react';
|
|
7
7
|
import { InputWrapper } from '../internal/InputWrapper.js';
|
|
8
|
-
import {
|
|
8
|
+
import { useHandleEnter } from '../utils/eventHandlers.js';
|
|
9
9
|
import '@react-fabric/utilities';
|
|
10
10
|
import { jsx } from 'react/jsx-runtime';
|
|
11
11
|
|
|
12
|
-
var _excluded = ["ref", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "name", "min", "max", "step", "onChange", "onEnterPressed"];
|
|
12
|
+
var _excluded = ["ref", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "defaultValue", "autoFocus", "name", "min", "max", "step", "onBlur", "onFocus", "onChange", "onEnterPressed"];
|
|
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
|
+
* This component allows users to input numeric values with optional minimum, maximum, and step constraints.
|
|
17
|
+
* It provides a clear interface for entering numbers, with support for validation and accessibility features.
|
|
18
|
+
* It also includes a clear button to reset the input value.
|
|
19
|
+
*
|
|
20
|
+
* @param {NumberProps} props - The properties for the Number input component.
|
|
21
|
+
* @returns {JSX.Element} The rendered Number input component.
|
|
22
|
+
*/
|
|
15
23
|
var Number = function Number(_ref) {
|
|
16
24
|
var ref = _ref.ref,
|
|
17
25
|
value = _ref.value,
|
|
@@ -20,11 +28,14 @@ var Number = function Number(_ref) {
|
|
|
20
28
|
disabled = _ref.disabled,
|
|
21
29
|
required = _ref.required,
|
|
22
30
|
placeholder = _ref.placeholder,
|
|
31
|
+
defaultValue = _ref.defaultValue,
|
|
23
32
|
autoFocus = _ref.autoFocus,
|
|
24
33
|
name = _ref.name,
|
|
25
34
|
min = _ref.min,
|
|
26
35
|
max = _ref.max,
|
|
27
36
|
step = _ref.step,
|
|
37
|
+
onBlur = _ref.onBlur,
|
|
38
|
+
onFocus = _ref.onFocus,
|
|
28
39
|
onChange = _ref.onChange,
|
|
29
40
|
onEnterPressed = _ref.onEnterPressed,
|
|
30
41
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -32,20 +43,19 @@ var Number = function Number(_ref) {
|
|
|
32
43
|
_useState2 = _slicedToArray(_useState, 2),
|
|
33
44
|
actualValue = _useState2[0],
|
|
34
45
|
setActualValue = _useState2[1];
|
|
35
|
-
var deferred = useDeferredValue(value);
|
|
36
|
-
var handleEnterPressed =
|
|
37
|
-
return handleEnter(onEnterPressed);
|
|
38
|
-
}, [onEnterPressed]);
|
|
46
|
+
var deferred = useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
|
|
47
|
+
var handleEnterPressed = useHandleEnter(onEnterPressed);
|
|
39
48
|
useEffect(function () {
|
|
40
49
|
setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
|
|
41
50
|
}, [deferred]);
|
|
42
51
|
var handleChange = useCallback(function (e) {
|
|
43
|
-
var
|
|
52
|
+
var _e$target$valueAsNumb;
|
|
53
|
+
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;
|
|
44
54
|
setActualValue(number !== null && number !== void 0 ? number : "");
|
|
45
|
-
onChange === null || onChange === void 0 || onChange(number !== null && number !== void 0 ? number :
|
|
46
|
-
}, [onChange]);
|
|
55
|
+
onChange === null || onChange === void 0 || onChange(number !== null && number !== void 0 ? number : null);
|
|
56
|
+
}, [onChange, defaultValue]);
|
|
47
57
|
return /*#__PURE__*/jsx(InputWrapper, _objectSpread(_objectSpread({
|
|
48
|
-
showClear: !!actualValue,
|
|
58
|
+
showClear: !!actualValue && !disabled && !readOnly,
|
|
49
59
|
onClear: handleChange,
|
|
50
60
|
invalid: invalid,
|
|
51
61
|
readOnly: readOnly,
|
|
@@ -53,7 +63,7 @@ var Number = function Number(_ref) {
|
|
|
53
63
|
required: required
|
|
54
64
|
}, rest), {}, {
|
|
55
65
|
children: /*#__PURE__*/jsx("input", {
|
|
56
|
-
className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0",
|
|
66
|
+
className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer",
|
|
57
67
|
"aria-invalid": invalid,
|
|
58
68
|
"aria-disabled": disabled,
|
|
59
69
|
"aria-readonly": readOnly,
|
|
@@ -71,6 +81,8 @@ var Number = function Number(_ref) {
|
|
|
71
81
|
autoComplete: "off",
|
|
72
82
|
autoFocus: autoFocus,
|
|
73
83
|
value: actualValue,
|
|
84
|
+
onBlur: onBlur,
|
|
85
|
+
onFocus: onFocus,
|
|
74
86
|
onChange: handleChange,
|
|
75
87
|
onKeyDown: handleEnterPressed
|
|
76
88
|
})
|
|
@@ -5,16 +5,22 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
|
5
5
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
6
6
|
import { Tooltip, Button, CoreIcons } from '@react-fabric/core';
|
|
7
7
|
import classNames from 'classnames';
|
|
8
|
-
import { useState, useDeferredValue,
|
|
8
|
+
import { useState, useDeferredValue, useEffect, useCallback } from 'react';
|
|
9
9
|
import { useTranslation } from 'react-i18next';
|
|
10
10
|
import { InputWrapper } from '../internal/InputWrapper.js';
|
|
11
|
-
import {
|
|
11
|
+
import { useHandleEnter } from '../utils/eventHandlers.js';
|
|
12
12
|
import '@react-fabric/utilities';
|
|
13
13
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
14
14
|
|
|
15
|
-
var _excluded = ["ref", "value", "name", "strength", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "showToggle", "onChange", "onEnterPressed"];
|
|
15
|
+
var _excluded = ["ref", "value", "name", "strength", "invalid", "readOnly", "disabled", "required", "placeholder", "defaultValue", "autoFocus", "showToggle", "onBlur", "onFocus", "onChange", "onEnterPressed"];
|
|
16
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
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
|
+
* Password input component with optional strength meter and toggle visibility.
|
|
20
|
+
*
|
|
21
|
+
* @param {PasswordProps} props - The properties for the Password component.
|
|
22
|
+
* @returns {JSX.Element} The rendered Password input component.
|
|
23
|
+
*/
|
|
18
24
|
var Password = function Password(_ref) {
|
|
19
25
|
var ref = _ref.ref,
|
|
20
26
|
value = _ref.value,
|
|
@@ -25,8 +31,11 @@ var Password = function Password(_ref) {
|
|
|
25
31
|
disabled = _ref.disabled,
|
|
26
32
|
required = _ref.required,
|
|
27
33
|
placeholder = _ref.placeholder,
|
|
34
|
+
defaultValue = _ref.defaultValue,
|
|
28
35
|
autoFocus = _ref.autoFocus,
|
|
29
36
|
showToggle = _ref.showToggle,
|
|
37
|
+
onBlur = _ref.onBlur,
|
|
38
|
+
onFocus = _ref.onFocus,
|
|
30
39
|
onChange = _ref.onChange,
|
|
31
40
|
onEnterPressed = _ref.onEnterPressed,
|
|
32
41
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -40,27 +49,26 @@ var Password = function Password(_ref) {
|
|
|
40
49
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
41
50
|
actualValue = _useState4[0],
|
|
42
51
|
setActualValue = _useState4[1];
|
|
43
|
-
var deferred = useDeferredValue(value);
|
|
44
|
-
var handleEnterPressed =
|
|
45
|
-
return handleEnter(onEnterPressed);
|
|
46
|
-
}, [onEnterPressed]);
|
|
52
|
+
var deferred = useDeferredValue(value !== null && value !== void 0 ? value : defaultValue);
|
|
53
|
+
var handleEnterPressed = useHandleEnter(onEnterPressed);
|
|
47
54
|
useEffect(function () {
|
|
48
55
|
setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
|
|
49
56
|
}, [deferred]);
|
|
50
57
|
var handleChange = useCallback(function (e) {
|
|
51
|
-
var
|
|
58
|
+
var _e$target$value;
|
|
59
|
+
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;
|
|
52
60
|
setActualValue(value !== null && value !== void 0 ? value : "");
|
|
53
|
-
onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value :
|
|
54
|
-
}, [onChange]);
|
|
61
|
+
onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
|
|
62
|
+
}, [onChange, defaultValue]);
|
|
55
63
|
return /*#__PURE__*/jsxs(InputWrapper, _objectSpread(_objectSpread({
|
|
56
|
-
showClear: !!actualValue,
|
|
64
|
+
showClear: !!actualValue && !disabled && !readOnly,
|
|
57
65
|
onClear: handleChange,
|
|
58
66
|
invalid: invalid,
|
|
59
67
|
readOnly: readOnly,
|
|
60
68
|
disabled: disabled,
|
|
61
69
|
required: required
|
|
62
70
|
}, rest), {}, {
|
|
63
|
-
|
|
71
|
+
actionButton: showToggle && actualValue && /*#__PURE__*/jsx(Tooltip, {
|
|
64
72
|
color: "warning",
|
|
65
73
|
content: t(show ? "password.hide" : "password.show"),
|
|
66
74
|
children: /*#__PURE__*/jsx(Button, {
|
|
@@ -75,7 +83,7 @@ var Password = function Password(_ref) {
|
|
|
75
83
|
})
|
|
76
84
|
}),
|
|
77
85
|
children: [/*#__PURE__*/jsx("input", {
|
|
78
|
-
className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0",
|
|
86
|
+
className: "appearance-none bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 peer",
|
|
79
87
|
"aria-invalid": invalid,
|
|
80
88
|
"aria-disabled": disabled,
|
|
81
89
|
"aria-readonly": readOnly,
|
|
@@ -90,10 +98,12 @@ var Password = function Password(_ref) {
|
|
|
90
98
|
autoComplete: "off",
|
|
91
99
|
autoFocus: autoFocus,
|
|
92
100
|
value: actualValue,
|
|
101
|
+
onBlur: onBlur,
|
|
102
|
+
onFocus: onFocus,
|
|
93
103
|
onChange: handleChange,
|
|
94
104
|
onKeyDown: handleEnterPressed
|
|
95
105
|
}), !!strength && /*#__PURE__*/jsx("div", {
|
|
96
|
-
className: classNames("absolute bottom-px h-[3px] inset-x-0 after:block after:h-full after:bg-dimmed", "ltr:bg-
|
|
106
|
+
className: classNames("absolute bottom-px h-[3px] inset-x-0 after:block after:h-full after:bg-dimmed", "ltr:bg-linear-to-r rtl:bg-linear-to-l from-danger-500 via-marigold-500 to-jade-500"),
|
|
97
107
|
style: {
|
|
98
108
|
paddingInlineStart: "".concat(strength > 1 ? 100 : strength * 100, "%")
|
|
99
109
|
}
|
package/dist/esm/input/Radio.js
CHANGED
|
@@ -10,6 +10,15 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
10
10
|
var _excluded = ["ref", "name", "label", "value", "invalid", "disabled", "error", "width", "icon", "iconChecked", "onChange"];
|
|
11
11
|
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; }
|
|
12
12
|
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; }
|
|
13
|
+
/**
|
|
14
|
+
* Radio input component with custom icons and label.
|
|
15
|
+
*
|
|
16
|
+
* This component renders a radio button with an optional label and custom icons for checked and unchecked states.
|
|
17
|
+
* It supports disabled and invalid states, and allows for custom width.
|
|
18
|
+
*
|
|
19
|
+
* @param {RadioProps} props - The properties for the Radio component.
|
|
20
|
+
* @returns {JSX.Element} The rendered Radio input component.
|
|
21
|
+
*/
|
|
13
22
|
var Radio = function Radio(_ref) {
|
|
14
23
|
var ref = _ref.ref,
|
|
15
24
|
name = _ref.name,
|
|
@@ -35,7 +44,7 @@ var Radio = function Radio(_ref) {
|
|
|
35
44
|
(e === null || e === void 0 ? void 0 : e.target.checked) && value && (onChange === null || onChange === void 0 ? void 0 : onChange(value));
|
|
36
45
|
}, [onChange, value]);
|
|
37
46
|
return /*#__PURE__*/jsxs("label", {
|
|
38
|
-
className: classNames(invalid ? "ring-danger-500" : "ring-primary-500", disabled ? "opacity-50 cursor-not-allowed" : "hover:opacity-100 cursor-pointer", "inline-flex gap-1 py-1 items-center relative cursor-pointer opacity-85 rounded ring-offset-2 has-
|
|
47
|
+
className: classNames(invalid ? "ring-danger-500" : "ring-primary-500", disabled ? "opacity-50 cursor-not-allowed" : "hover:opacity-100 cursor-pointer", "inline-flex gap-1 py-1 items-center relative cursor-pointer opacity-85 rounded ring-offset-2 has-focus-visible:ring-1"),
|
|
39
48
|
style: {
|
|
40
49
|
width: width
|
|
41
50
|
},
|
|
@@ -51,7 +60,7 @@ var Radio = function Radio(_ref) {
|
|
|
51
60
|
autoComplete: "off",
|
|
52
61
|
onChange: handleChange
|
|
53
62
|
}, rest)), /*#__PURE__*/jsx(Icon, {
|
|
54
|
-
className: classNames("p-0.5 hidden peer-checked:inline-block", icon && !iconChecked && "bg-primary-500 text-white"),
|
|
63
|
+
className: classNames("p-0.5 hidden peer-checked:inline-block", icon && !iconChecked && "bg-primary-500 text-white!"),
|
|
55
64
|
color: invalid ? "danger" : "primary",
|
|
56
65
|
size: "1.25em",
|
|
57
66
|
icon: iconOn
|
|
@@ -61,7 +70,7 @@ var Radio = function Radio(_ref) {
|
|
|
61
70
|
size: "1.25em",
|
|
62
71
|
icon: iconOff
|
|
63
72
|
}), label && /*#__PURE__*/jsx("span", {
|
|
64
|
-
className: "flex-initial leading-
|
|
73
|
+
className: "flex-initial leading-tight truncate",
|
|
65
74
|
children: label
|
|
66
75
|
})]
|
|
67
76
|
});
|