@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
|
@@ -3,33 +3,35 @@
|
|
|
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 { FloatingPortal } from '@floating-ui/react';
|
|
7
6
|
import { Icon, CoreIcons } from '@react-fabric/core';
|
|
8
7
|
import { isString } from '@react-fabric/utilities';
|
|
9
8
|
import classNames from 'classnames';
|
|
10
9
|
import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
|
|
11
10
|
import { Fragment, jsxs, jsx } from 'react/jsx-runtime';
|
|
12
11
|
import { ErrorIcon } from './ErrorIcon.js';
|
|
13
|
-
import classes from './Field.module.css';
|
|
14
12
|
import { FieldWrapper } from './FieldWrapper.js';
|
|
15
13
|
|
|
16
|
-
var _excluded = ["invalid", "error", "allowClear", "showClear", "decorateStart", "decorateEnd", "children", "onClear", "noOutline", "noBorder", "textarea", "data-inner", "data-open", "floatingExpand", "wrapperRef", "width"];
|
|
14
|
+
var _excluded = ["invalid", "error", "allowClear", "showClear", "decorateStart", "decorateEnd", "decorateEndShowWhenEmpty", "decorateEndHideWhenEmpty", "children", "onClear", "noOutline", "noBorder", "actionButton", "textarea", "textareaExpandable", "data-inner", "data-open", "floatingExpand", "wrapperRef", "width"];
|
|
17
15
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
16
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
17
|
var InputWrapper = function InputWrapper(_ref) {
|
|
20
|
-
var _elRef$current;
|
|
21
18
|
var invalid = _ref.invalid,
|
|
22
19
|
error = _ref.error,
|
|
23
20
|
allowClear = _ref.allowClear,
|
|
24
21
|
showClear = _ref.showClear,
|
|
25
22
|
decorateStart = _ref.decorateStart,
|
|
26
23
|
decorateEnd = _ref.decorateEnd,
|
|
24
|
+
decorateEndShowWhenEmpty = _ref.decorateEndShowWhenEmpty,
|
|
25
|
+
decorateEndHideWhenEmpty = _ref.decorateEndHideWhenEmpty,
|
|
27
26
|
children = _ref.children,
|
|
28
27
|
onClear = _ref.onClear,
|
|
29
28
|
noOutline = _ref.noOutline,
|
|
30
29
|
noBorder = _ref.noBorder,
|
|
30
|
+
actionButton = _ref.actionButton,
|
|
31
31
|
_ref$textarea = _ref.textarea,
|
|
32
32
|
textarea = _ref$textarea === void 0 ? false : _ref$textarea,
|
|
33
|
+
_ref$textareaExpandab = _ref.textareaExpandable,
|
|
34
|
+
textareaExpandable = _ref$textareaExpandab === void 0 ? false : _ref$textareaExpandab,
|
|
33
35
|
isInner = _ref["data-inner"];
|
|
34
36
|
_ref["data-open"];
|
|
35
37
|
var floatingExpand = _ref.floatingExpand,
|
|
@@ -50,13 +52,17 @@ var InputWrapper = function InputWrapper(_ref) {
|
|
|
50
52
|
});
|
|
51
53
|
}, [isInner, rest, width]);
|
|
52
54
|
var handleClear = useCallback(function (e) {
|
|
53
|
-
var _e$currentTarget$pare;
|
|
54
|
-
(_e$currentTarget$pare = e.currentTarget.parentElement) === null || _e$currentTarget$pare === void 0
|
|
55
|
+
var _e$currentTarget$pare, _parent$querySelector;
|
|
56
|
+
var parent = (_e$currentTarget$pare = e.currentTarget.parentElement) === null || _e$currentTarget$pare === void 0 ? void 0 : _e$currentTarget$pare.querySelector("& > :not(.fabric-decorate)");
|
|
57
|
+
var el = (_parent$querySelector = parent === null || parent === void 0 ? void 0 : parent.querySelector("input,textarea,button")) !== null && _parent$querySelector !== void 0 ? _parent$querySelector : parent;
|
|
58
|
+
el === null || el === void 0 || el.focus();
|
|
55
59
|
onClear === null || onClear === void 0 || onClear();
|
|
56
60
|
}, [onClear]);
|
|
57
61
|
var doFocus = useCallback(function (e) {
|
|
58
|
-
var _e$currentTarget$pare2;
|
|
59
|
-
(_e$currentTarget$pare2 = e.currentTarget.parentElement) === null || _e$currentTarget$pare2 === void 0
|
|
62
|
+
var _e$currentTarget$pare2, _parent$querySelector2;
|
|
63
|
+
var parent = (_e$currentTarget$pare2 = e.currentTarget.parentElement) === null || _e$currentTarget$pare2 === void 0 ? void 0 : _e$currentTarget$pare2.querySelector("& > :not(.fabric-decorate)");
|
|
64
|
+
var el = (_parent$querySelector2 = parent === null || parent === void 0 ? void 0 : parent.querySelector("input,textarea,button")) !== null && _parent$querySelector2 !== void 0 ? _parent$querySelector2 : parent;
|
|
65
|
+
el === null || el === void 0 || el.focus();
|
|
60
66
|
}, [onClear]);
|
|
61
67
|
useEffect(function () {
|
|
62
68
|
isExpanded && setTimeout(function () {
|
|
@@ -67,13 +73,13 @@ var InputWrapper = function InputWrapper(_ref) {
|
|
|
67
73
|
var el = /*#__PURE__*/jsxs("div", {
|
|
68
74
|
role: "none",
|
|
69
75
|
ref: wrapperRef,
|
|
70
|
-
className: classNames(
|
|
76
|
+
className: classNames("fabric-inputWrapper", invalid && "fabric-invalidWrapper", !noOutline && !noBorder && "bg-(--fabric-input) outline overflow-hidden", "flex flex-nowrap items-center flex-1", textarea ? "rounded-capped group" : "rounded", isExpanded ? "fixed inset-4 z-99" : floatingExpand ? "absolute inset-x-0" : "relative", !noOutline && "after:absolute after:bottom-0 after:h-px after:bg-primary-500 after:mx-auto"),
|
|
71
77
|
onKeyDown: function onKeyDown(e) {
|
|
72
|
-
return e.key === "Escape" && setExpanded(false);
|
|
78
|
+
return e.key === "Escape" && isExpanded && (setExpanded(false), e.stopPropagation());
|
|
73
79
|
},
|
|
74
80
|
children: [decorateStart && /*#__PURE__*/jsx("div", {
|
|
75
81
|
onClickCapture: doFocus,
|
|
76
|
-
className: classNames(
|
|
82
|
+
className: classNames("fabric-decorate", "text-muted leading-none flex-content", isString(decorateStart) && "px-1"),
|
|
77
83
|
children: decorateStart
|
|
78
84
|
}), /*#__PURE__*/jsx(ErrorIcon, {
|
|
79
85
|
invalid: invalid,
|
|
@@ -81,12 +87,16 @@ var InputWrapper = function InputWrapper(_ref) {
|
|
|
81
87
|
}), children, allowClear && showClear && /*#__PURE__*/jsx(Icon, {
|
|
82
88
|
icon: CoreIcons.close,
|
|
83
89
|
onClick: handleClear,
|
|
84
|
-
className: classNames("text-tint-500 hover:text-tint-700 p-1 z-1 flex-content",
|
|
90
|
+
className: classNames("text-tint-500 hover:text-tint-700 p-1 z-1 flex-content", "fabric-inputClear", textarea && "self-start mt-1 me-1")
|
|
85
91
|
}), decorateEnd && /*#__PURE__*/jsx("div", {
|
|
86
92
|
onClickCapture: doFocus,
|
|
87
|
-
className: classNames(
|
|
93
|
+
className: classNames("fabric-decorate", "text-muted leading-none flex-content", isString(decorateEnd) && "px-1", decorateEndHideWhenEmpty && "peer-placeholder-shown:hidden", decorateEndShowWhenEmpty && "hidden peer-placeholder-shown:inline-block"),
|
|
88
94
|
children: decorateEnd
|
|
89
|
-
}),
|
|
95
|
+
}), actionButton && /*#__PURE__*/jsx("div", {
|
|
96
|
+
onClickCapture: doFocus,
|
|
97
|
+
className: classNames("fabric-decorate", "text-muted leading-none flex-content"),
|
|
98
|
+
children: actionButton
|
|
99
|
+
}), textareaExpandable && /*#__PURE__*/jsx(Icon, {
|
|
90
100
|
onClick: function onClick() {
|
|
91
101
|
return setExpanded(!isExpanded);
|
|
92
102
|
},
|
|
@@ -95,17 +105,14 @@ var InputWrapper = function InputWrapper(_ref) {
|
|
|
95
105
|
})]
|
|
96
106
|
});
|
|
97
107
|
return /*#__PURE__*/jsx(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
|
|
98
|
-
children: /*#__PURE__*/
|
|
108
|
+
children: /*#__PURE__*/jsx("div", {
|
|
99
109
|
ref: elRef,
|
|
100
|
-
className: "
|
|
110
|
+
className: classNames("relative min-h-8 flex flex-col flex-nowrap", width ? "flex-auto" : "flex-1"),
|
|
101
111
|
style: {
|
|
102
112
|
width: width,
|
|
103
113
|
flexBasis: width
|
|
104
114
|
},
|
|
105
|
-
children:
|
|
106
|
-
root: (_elRef$current = elRef.current) === null || _elRef$current === void 0 ? void 0 : _elRef$current.closest(".theme-base"),
|
|
107
|
-
children: el
|
|
108
|
-
})]
|
|
115
|
+
children: el
|
|
109
116
|
})
|
|
110
117
|
}));
|
|
111
118
|
};
|
|
@@ -12,21 +12,28 @@ import { Options } from './Options.js';
|
|
|
12
12
|
import { useSelect } from './useSelect.js';
|
|
13
13
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
14
14
|
|
|
15
|
-
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "expandOnEdit", "error", "history", "multiple", "onChange", "onSelect", "onInput", "onFocus", "onBlur", "onEnterPressed"];
|
|
15
|
+
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "expandOnEdit", "error", "history", "multiple", "onChange", "onSelect", "onInput", "onFocus", "onBlur", "onQuery", "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
|
+
* AutoComplete component for selecting or entering values with history suggestions.
|
|
20
|
+
* It supports multiple selections, history suggestions, and custom styling.
|
|
21
|
+
*
|
|
22
|
+
* @param {AutoCompleteProps} props - The properties for the AutoComplete component.
|
|
23
|
+
* @returns {JSX.Element} The rendered AutoComplete component.
|
|
24
|
+
*/
|
|
18
25
|
var AutoComplete = function AutoComplete(_ref) {
|
|
19
26
|
var _refs$reference$curre;
|
|
20
|
-
_ref.ref
|
|
21
|
-
|
|
27
|
+
var ref = _ref.ref,
|
|
28
|
+
name = _ref.name,
|
|
22
29
|
value = _ref.value,
|
|
23
30
|
invalid = _ref.invalid,
|
|
24
31
|
readOnly = _ref.readOnly,
|
|
25
32
|
disabled = _ref.disabled,
|
|
26
33
|
required = _ref.required,
|
|
27
|
-
placeholder = _ref.placeholder
|
|
28
|
-
_ref.autoFocus
|
|
29
|
-
|
|
34
|
+
placeholder = _ref.placeholder,
|
|
35
|
+
autoFocus = _ref.autoFocus,
|
|
36
|
+
expandOnEdit = _ref.expandOnEdit,
|
|
30
37
|
error = _ref.error,
|
|
31
38
|
history = _ref.history,
|
|
32
39
|
multiple = _ref.multiple,
|
|
@@ -35,6 +42,7 @@ var AutoComplete = function AutoComplete(_ref) {
|
|
|
35
42
|
onInput = _ref.onInput,
|
|
36
43
|
onFocus = _ref.onFocus,
|
|
37
44
|
_onBlur = _ref.onBlur,
|
|
45
|
+
onQuery = _ref.onQuery,
|
|
38
46
|
onEnterPressed = _ref.onEnterPressed,
|
|
39
47
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
40
48
|
var options = useRef(history);
|
|
@@ -45,7 +53,8 @@ var AutoComplete = function AutoComplete(_ref) {
|
|
|
45
53
|
options: options.current,
|
|
46
54
|
multiple: multiple,
|
|
47
55
|
onChange: onChange,
|
|
48
|
-
onSelect: onSelect
|
|
56
|
+
onSelect: onSelect,
|
|
57
|
+
onQuery: onQuery
|
|
49
58
|
}),
|
|
50
59
|
state = _useSelect.state,
|
|
51
60
|
listRef = _useSelect.listRef,
|
|
@@ -132,9 +141,8 @@ var AutoComplete = function AutoComplete(_ref) {
|
|
|
132
141
|
handleChange("");
|
|
133
142
|
return false;
|
|
134
143
|
} else {
|
|
135
|
-
var _submitRef$current;
|
|
136
144
|
onEnterPressed === null || onEnterPressed === void 0 || onEnterPressed(evt);
|
|
137
|
-
(
|
|
145
|
+
setOpen(false);
|
|
138
146
|
}
|
|
139
147
|
} else if (evt.key === "Backspace") {
|
|
140
148
|
!state.query && multiple && handleRemove();
|
|
@@ -199,7 +207,7 @@ var AutoComplete = function AutoComplete(_ref) {
|
|
|
199
207
|
required: required,
|
|
200
208
|
error: error,
|
|
201
209
|
wrapperRef: refs.setReference,
|
|
202
|
-
className: !multiple && expandOnEdit && state.open ? "
|
|
210
|
+
className: !multiple && expandOnEdit && state.open ? "z-99!" : "",
|
|
203
211
|
floatingExpand: !multiple && expandOnEdit && state.open
|
|
204
212
|
}, rest), {}, {
|
|
205
213
|
children: [/*#__PURE__*/jsxs("div", {
|
|
@@ -218,7 +226,9 @@ var AutoComplete = function AutoComplete(_ref) {
|
|
|
218
226
|
"data-testid": name,
|
|
219
227
|
name: name,
|
|
220
228
|
size: 1,
|
|
229
|
+
ref: ref,
|
|
221
230
|
onInput: onInput,
|
|
231
|
+
autoFocus: autoFocus,
|
|
222
232
|
rows: !multiple && expandOnEdit && state.open ? 5 : 1,
|
|
223
233
|
className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1 resize-none", disabled && "cursor-not-allowed pointer-events-none", multiple && "min-w-24 overflow-hidden", !state.open && "overflow-hidden whitespace-nowrap"),
|
|
224
234
|
placeholder: isEmpty(state.value) ? placeholder : ""
|
|
@@ -243,7 +253,7 @@ var AutoComplete = function AutoComplete(_ref) {
|
|
|
243
253
|
visuallyHiddenDismiss: true,
|
|
244
254
|
children: /*#__PURE__*/jsx(Options, _objectSpread(_objectSpread({
|
|
245
255
|
ref: refs.setFloating,
|
|
246
|
-
className: "outline shadow-lg max-h-[40vh] z-
|
|
256
|
+
className: "outline shadow-lg max-h-[40vh] z-(--z-popover)",
|
|
247
257
|
style: _objectSpread({
|
|
248
258
|
width: (_refs$reference$curre = refs.reference.current) === null || _refs$reference$curre === void 0 ? void 0 : _refs$reference$curre.getBoundingClientRect().width
|
|
249
259
|
}, floatingStyles)
|
|
@@ -4,22 +4,34 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
|
4
4
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
5
5
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
6
6
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
7
|
+
import { useDraggable, useDroppable, DndContext, DragOverlay } from '@dnd-kit/core';
|
|
8
|
+
import { restrictToHorizontalAxis } from '@dnd-kit/modifiers';
|
|
7
9
|
import { ButtonGroup, Button, CoreIcons } from '@react-fabric/core';
|
|
10
|
+
import { mergeRefs } from '@react-fabric/utilities';
|
|
8
11
|
import { useState, useDeferredValue, useEffect, useMemo, useCallback } from 'react';
|
|
9
12
|
import { Field } from '../input/Field.js';
|
|
10
13
|
import { List } from './List.js';
|
|
11
|
-
import { restrictToHorizontalAxis } from '@dnd-kit/modifiers';
|
|
12
|
-
import { useDraggable, useDroppable, DndContext, DragOverlay } from '@dnd-kit/core';
|
|
13
|
-
import { mergeRefs } from '@react-fabric/utilities';
|
|
14
14
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
15
15
|
|
|
16
|
-
var _excluded = ["ref", "value", "options", "groupProperty", "height", "labelProperty", "valueProperty", "renderer", "onChange", "name", "invalid", "readOnly", "disabled", "placeholder", "autoFocus", "error"];
|
|
16
|
+
var _excluded = ["ref", "value", "options", "emptyDisplay", "groupProperty", "height", "labelProperty", "valueProperty", "renderer", "onChange", "name", "invalid", "readOnly", "disabled", "placeholder", "autoFocus", "error"];
|
|
17
17
|
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; }
|
|
18
18
|
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; }
|
|
19
|
+
/**
|
|
20
|
+
* DualList component allows users to select items from two lists.
|
|
21
|
+
* It displays two lists side by side, one for unselected items and one for selected items.
|
|
22
|
+
* Users can move items between the lists using buttons or drag-and-drop functionality.
|
|
23
|
+
* It supports multiple selections and provides options for grouping, labeling, and rendering items.
|
|
24
|
+
* It also includes features for handling empty states and custom rendering of items.
|
|
25
|
+
* This component is useful for scenarios where users need to manage selections from a larger set of options, such as in forms or settings.
|
|
26
|
+
*
|
|
27
|
+
* @param {DualListProps<T>} props - The properties for the DualList component.
|
|
28
|
+
* @returns {JSX.Element} The rendered DualList component.
|
|
29
|
+
*/
|
|
19
30
|
var DualList = function DualList(_ref) {
|
|
20
31
|
var ref = _ref.ref,
|
|
21
32
|
value = _ref.value,
|
|
22
33
|
options = _ref.options,
|
|
34
|
+
emptyDisplay = _ref.emptyDisplay,
|
|
23
35
|
groupProperty = _ref.groupProperty,
|
|
24
36
|
_ref$height = _ref.height,
|
|
25
37
|
height = _ref$height === void 0 ? "18rem" : _ref$height,
|
|
@@ -163,6 +175,7 @@ var DualList = function DualList(_ref) {
|
|
|
163
175
|
error: error,
|
|
164
176
|
height: height,
|
|
165
177
|
options: leftOptions,
|
|
178
|
+
emptyDisplay: emptyDisplay,
|
|
166
179
|
groupProperty: groupProperty,
|
|
167
180
|
labelProperty: labelProperty,
|
|
168
181
|
valueProperty: valueProperty,
|
|
@@ -177,36 +190,44 @@ var DualList = function DualList(_ref) {
|
|
|
177
190
|
vertical: true,
|
|
178
191
|
className: "outline overflow-hidden bg-base",
|
|
179
192
|
children: [/*#__PURE__*/jsx(Button, {
|
|
180
|
-
rtlFlip: true,
|
|
181
193
|
size: "sm",
|
|
182
194
|
variant: "link",
|
|
183
195
|
"aria-label": "scroll to top",
|
|
184
196
|
onClick: moveAllLeft,
|
|
185
|
-
icon:
|
|
197
|
+
icon: {
|
|
198
|
+
icon: CoreIcons.chevronsLeft,
|
|
199
|
+
rtlFlip: true
|
|
200
|
+
},
|
|
186
201
|
disabled: !rightOptions.length
|
|
187
202
|
}), /*#__PURE__*/jsx(Button, {
|
|
188
|
-
rtlFlip: true,
|
|
189
203
|
size: "sm",
|
|
190
204
|
variant: "link",
|
|
191
205
|
"aria-label": "scroll up",
|
|
192
206
|
onClick: moveRightSelected,
|
|
193
|
-
icon:
|
|
207
|
+
icon: {
|
|
208
|
+
icon: CoreIcons.chevronLeft,
|
|
209
|
+
rtlFlip: true
|
|
210
|
+
},
|
|
194
211
|
disabled: !rightSelected.length
|
|
195
212
|
}), /*#__PURE__*/jsx(Button, {
|
|
196
|
-
rtlFlip: true,
|
|
197
213
|
size: "sm",
|
|
198
214
|
variant: "link",
|
|
199
215
|
"aria-label": "scroll down",
|
|
200
216
|
onClick: moveLeftSelected,
|
|
201
|
-
icon:
|
|
217
|
+
icon: {
|
|
218
|
+
icon: CoreIcons.chevronRight,
|
|
219
|
+
rtlFlip: true
|
|
220
|
+
},
|
|
202
221
|
disabled: !leftSelected.length
|
|
203
222
|
}), /*#__PURE__*/jsx(Button, {
|
|
204
|
-
rtlFlip: true,
|
|
205
223
|
size: "sm",
|
|
206
224
|
variant: "link",
|
|
207
225
|
"aria-label": "scroll to bottom",
|
|
208
226
|
onClick: moveAllRight,
|
|
209
|
-
icon:
|
|
227
|
+
icon: {
|
|
228
|
+
icon: CoreIcons.chevronsRight,
|
|
229
|
+
rtlFlip: true
|
|
230
|
+
},
|
|
210
231
|
disabled: !leftOptions.length
|
|
211
232
|
})]
|
|
212
233
|
})
|
|
@@ -218,6 +239,7 @@ var DualList = function DualList(_ref) {
|
|
|
218
239
|
allowClear: true,
|
|
219
240
|
height: height,
|
|
220
241
|
options: rightOptions,
|
|
242
|
+
emptyDisplay: emptyDisplay,
|
|
221
243
|
groupProperty: groupProperty,
|
|
222
244
|
labelProperty: labelProperty,
|
|
223
245
|
valueProperty: valueProperty,
|
package/dist/esm/select/List.js
CHANGED
|
@@ -1,38 +1,43 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
3
4
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
5
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
6
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
5
7
|
import { useFloating, autoUpdate, useListNavigation, useTypeahead, useInteractions, FloatingFocusManager } from '@floating-ui/react';
|
|
6
8
|
import { Chip } from '@react-fabric/core';
|
|
7
9
|
import { isArray, isEmpty } from '@react-fabric/utilities';
|
|
8
10
|
import classNames from 'classnames';
|
|
9
|
-
import { useMemo, Fragment, useId, useCallback } from 'react';
|
|
11
|
+
import { useMemo, Fragment, useId, useCallback, useLayoutEffect } from 'react';
|
|
10
12
|
import { FieldWrapper } from '../internal/FieldWrapper.js';
|
|
11
13
|
import { InputWrapper } from '../internal/InputWrapper.js';
|
|
12
14
|
import { Options } from './Options.js';
|
|
13
15
|
import { useSelect } from './useSelect.js';
|
|
14
16
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
15
17
|
|
|
16
|
-
var _excluded = ["ref", "name", "value", "readOnly", "disabled", "required", "placeholder", "autoFocus", "options", "height", "groupProperty", "labelProperty", "valueProperty", "multiple", "allowCreate", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed", "invalid", "error", "allowClear", "decorateStart", "decorateEnd", "data-inner", "data-hide-selected"];
|
|
18
|
+
var _excluded = ["ref", "name", "value", "readOnly", "disabled", "required", "placeholder", "autoFocus", "options", "height", "groupProperty", "labelProperty", "valueProperty", "infoProperty", "sortProperty", "multiple", "allowCreate", "searchable", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed", "emptyDisplay", "invalid", "error", "allowClear", "decorateStart", "decorateEnd", "data-inner", "data-hide-selected"];
|
|
17
19
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
20
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
21
|
var List = function List(_ref) {
|
|
20
|
-
var _state$query;
|
|
21
|
-
_ref.ref
|
|
22
|
-
|
|
22
|
+
var _state$query, _state$activeItem;
|
|
23
|
+
var ref = _ref.ref,
|
|
24
|
+
name = _ref.name,
|
|
23
25
|
value = _ref.value,
|
|
24
26
|
readOnly = _ref.readOnly,
|
|
25
27
|
disabled = _ref.disabled,
|
|
26
28
|
required = _ref.required,
|
|
27
|
-
placeholder = _ref.placeholder
|
|
28
|
-
_ref.autoFocus
|
|
29
|
-
|
|
29
|
+
placeholder = _ref.placeholder,
|
|
30
|
+
autoFocus = _ref.autoFocus,
|
|
31
|
+
options = _ref.options,
|
|
30
32
|
height = _ref.height,
|
|
31
33
|
groupProperty = _ref.groupProperty,
|
|
32
34
|
labelProperty = _ref.labelProperty,
|
|
33
35
|
valueProperty = _ref.valueProperty,
|
|
36
|
+
infoProperty = _ref.infoProperty,
|
|
37
|
+
sortProperty = _ref.sortProperty,
|
|
34
38
|
multiple = _ref.multiple,
|
|
35
39
|
allowCreate = _ref.allowCreate,
|
|
40
|
+
searchable = _ref.searchable,
|
|
36
41
|
createOption = _ref.createOption,
|
|
37
42
|
matcher = _ref.matcher,
|
|
38
43
|
renderer = _ref.renderer,
|
|
@@ -40,6 +45,7 @@ var List = function List(_ref) {
|
|
|
40
45
|
onChange = _ref.onChange,
|
|
41
46
|
onSelect = _ref.onSelect,
|
|
42
47
|
onEnterPressed = _ref.onEnterPressed,
|
|
48
|
+
emptyDisplay = _ref.emptyDisplay,
|
|
43
49
|
invalid = _ref.invalid,
|
|
44
50
|
error = _ref.error;
|
|
45
51
|
_ref.allowClear;
|
|
@@ -58,9 +64,11 @@ var List = function List(_ref) {
|
|
|
58
64
|
value: value,
|
|
59
65
|
options: options,
|
|
60
66
|
multiple: multiple,
|
|
67
|
+
alwaysOpen: true,
|
|
61
68
|
groupProperty: groupProperty,
|
|
62
69
|
labelProperty: labelProperty,
|
|
63
70
|
valueProperty: valueProperty,
|
|
71
|
+
sortProperty: sortProperty,
|
|
64
72
|
allowCreate: allowCreate,
|
|
65
73
|
createOption: createOption,
|
|
66
74
|
matcher: matcher,
|
|
@@ -138,9 +146,10 @@ var List = function List(_ref) {
|
|
|
138
146
|
}
|
|
139
147
|
} else if (evt.key === "Backspace") {
|
|
140
148
|
!state.query && handleRemove();
|
|
141
|
-
} else if (["ArrowUp", "ArrowDown"].includes(evt.key)) {
|
|
142
|
-
if (state.activeIndex === null) {
|
|
143
|
-
|
|
149
|
+
} else if (!searchable || ["ArrowUp", "ArrowDown"].includes(evt.key)) {
|
|
150
|
+
if (["ArrowUp", "ArrowDown"].includes(evt.key) && state.activeIndex === null) {
|
|
151
|
+
var _state$selectedIndex;
|
|
152
|
+
setActiveIndex((_state$selectedIndex = state.selectedIndex) !== null && _state$selectedIndex !== void 0 ? _state$selectedIndex : 0);
|
|
144
153
|
}
|
|
145
154
|
setTimeout(function () {
|
|
146
155
|
var _props$onKeyDown;
|
|
@@ -185,6 +194,14 @@ var List = function List(_ref) {
|
|
|
185
194
|
});
|
|
186
195
|
}
|
|
187
196
|
}, [state.value, state.query, placeholder, renderer]);
|
|
197
|
+
useLayoutEffect(function () {
|
|
198
|
+
setTimeout(function () {
|
|
199
|
+
var _listRef$current$stat;
|
|
200
|
+
state.selectedIndex && ((_listRef$current$stat = listRef.current[state.selectedIndex]) === null || _listRef$current$stat === void 0 ? void 0 : _listRef$current$stat.scrollIntoView({
|
|
201
|
+
block: "center"
|
|
202
|
+
}));
|
|
203
|
+
}, 100);
|
|
204
|
+
}, [state.selectedIndex]);
|
|
188
205
|
return /*#__PURE__*/jsxs(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
|
|
189
206
|
children: [/*#__PURE__*/jsx(InputWrapper, {
|
|
190
207
|
showClear: !isEmpty(state.value),
|
|
@@ -197,23 +214,32 @@ var List = function List(_ref) {
|
|
|
197
214
|
className: "z-1 rounded-b-none",
|
|
198
215
|
"data-inner": true,
|
|
199
216
|
wrapperRef: refs.setReference,
|
|
200
|
-
children: /*#__PURE__*/jsxs("div", {
|
|
217
|
+
children: /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
|
|
218
|
+
role: "none",
|
|
201
219
|
"data-select-display": "true",
|
|
202
|
-
className: "group flex-1 py-1 px-2 truncate text-start flex gap-1 flex-wrap"
|
|
203
|
-
|
|
220
|
+
className: classNames("group flex-1 py-1 px-2 truncate text-start flex gap-1 relative min-h-5 justify-start", multiple ? "flex-wrap" : "flex-nowrap overflow-hidden")
|
|
221
|
+
}, referenceProps), {}, {
|
|
222
|
+
onMouseUp: function onMouseUp(e) {
|
|
223
|
+
var _e$currentTarget$quer;
|
|
224
|
+
return (_e$currentTarget$quer = e.currentTarget.querySelector("input")) === null || _e$currentTarget$quer === void 0 ? void 0 : _e$currentTarget$quer.focus();
|
|
225
|
+
},
|
|
226
|
+
children: [!hideSelected && displayValue, /*#__PURE__*/jsx("input", {
|
|
227
|
+
readOnly: !searchable || readOnly,
|
|
204
228
|
disabled: disabled,
|
|
205
229
|
value: (_state$query = state.query) !== null && _state$query !== void 0 ? _state$query : "",
|
|
206
230
|
"aria-invalid": invalid,
|
|
207
231
|
"data-testid": name,
|
|
208
232
|
name: name,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
233
|
+
size: 1,
|
|
234
|
+
ref: ref,
|
|
235
|
+
autoFocus: autoFocus,
|
|
236
|
+
className: classNames("appearance-none bg-transparent outline-none border-none ring-0 flex-1 min-w-24", disabled && "cursor-not-allowed pointer-events-none", multiple && "min-w-24"),
|
|
237
|
+
placeholder: isEmpty(state.value) ? placeholder : "",
|
|
212
238
|
onChange: function onChange(evt) {
|
|
213
239
|
return handleQuery(evt.target.value);
|
|
214
240
|
}
|
|
215
|
-
})
|
|
216
|
-
})
|
|
241
|
+
})]
|
|
242
|
+
}))
|
|
217
243
|
}), /*#__PURE__*/jsx(FloatingFocusManager, {
|
|
218
244
|
context: context,
|
|
219
245
|
initialFocus: -1,
|
|
@@ -227,12 +253,32 @@ var List = function List(_ref) {
|
|
|
227
253
|
}, floatingProps), {}, {
|
|
228
254
|
items: state.items,
|
|
229
255
|
active: state.activeIndex,
|
|
256
|
+
valueProperty: valueProperty,
|
|
257
|
+
labelProperty: labelProperty,
|
|
230
258
|
itemRef: setItemRef,
|
|
231
259
|
itemProps: makeItemProps,
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
260
|
+
empty: emptyDisplay,
|
|
261
|
+
info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
|
|
262
|
+
children: ( /*#__PURE__*/function () {
|
|
263
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(item, label) {
|
|
264
|
+
var _renderer3;
|
|
265
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
266
|
+
while (1) switch (_context.prev = _context.next) {
|
|
267
|
+
case 0:
|
|
268
|
+
_context.next = 2;
|
|
269
|
+
return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
|
|
270
|
+
case 2:
|
|
271
|
+
return _context.abrupt("return", _context.sent);
|
|
272
|
+
case 3:
|
|
273
|
+
case "end":
|
|
274
|
+
return _context.stop();
|
|
275
|
+
}
|
|
276
|
+
}, _callee);
|
|
277
|
+
}));
|
|
278
|
+
return function (_x, _x2) {
|
|
279
|
+
return _ref4.apply(this, arguments);
|
|
280
|
+
};
|
|
281
|
+
}())
|
|
236
282
|
}))
|
|
237
283
|
})]
|
|
238
284
|
}));
|
|
@@ -7,7 +7,7 @@ import classNames from 'classnames';
|
|
|
7
7
|
import { Trans } from 'react-i18next';
|
|
8
8
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
9
9
|
|
|
10
|
-
var _excluded = ["ref", "style", "items", "active", "className", "itemRef", "empty", "valueProperty", "labelProperty", "itemProps", "children"];
|
|
10
|
+
var _excluded = ["ref", "style", "items", "active", "className", "itemRef", "empty", "info", "valueProperty", "labelProperty", "itemProps", "children"];
|
|
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
13
|
var Options = function Options(_ref) {
|
|
@@ -17,7 +17,8 @@ var Options = function Options(_ref) {
|
|
|
17
17
|
active = _ref.active,
|
|
18
18
|
className = _ref.className,
|
|
19
19
|
itemRef = _ref.itemRef,
|
|
20
|
-
empty = _ref.empty
|
|
20
|
+
empty = _ref.empty,
|
|
21
|
+
info = _ref.info;
|
|
21
22
|
_ref.valueProperty;
|
|
22
23
|
var _ref$labelProperty = _ref.labelProperty,
|
|
23
24
|
labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
|
|
@@ -26,49 +27,55 @@ var Options = function Options(_ref) {
|
|
|
26
27
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
27
28
|
return /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
|
|
28
29
|
ref: ref,
|
|
29
|
-
className: classNames("bg-base select-none
|
|
30
|
+
className: classNames("bg-base select-none flex flex-col", className),
|
|
30
31
|
style: style
|
|
31
32
|
}, rest), {}, {
|
|
32
|
-
children: [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
var _item$labelProperty;
|
|
38
|
-
if (item.___group___) return /*#__PURE__*/jsx("p", {
|
|
39
|
-
className: "px-2 py-1 text-muted text-xs sticky -top-px z-2 bg-base border-t",
|
|
40
|
-
children: item.label
|
|
41
|
-
}, index);
|
|
42
|
-
if (item.___create___) return /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({
|
|
43
|
-
role: "none",
|
|
44
|
-
tabIndex: active === index ? 0 : -1,
|
|
45
|
-
ref: function ref(el) {
|
|
46
|
-
return itemRef(index, el);
|
|
47
|
-
},
|
|
48
|
-
"data-active": active === index ? true : undefined,
|
|
49
|
-
className: classNames("block text-start truncate px-2 py-1 leading-normal cursor-pointer select-none", "data-[active]:bg-primary-200 data-[selected]:bg-primary-600 data-[selected]:text-white data-[active]:data-[selected]:underline")
|
|
50
|
-
}, itemProps(item)), {}, {
|
|
51
|
-
children: /*#__PURE__*/jsx(Trans, {
|
|
52
|
-
i18nKey: "form:select.createOption",
|
|
53
|
-
values: {
|
|
54
|
-
query: item.value
|
|
55
|
-
},
|
|
56
|
-
components: [/*#__PURE__*/jsx("strong", {
|
|
57
|
-
children: "query"
|
|
58
|
-
}, "t0")]
|
|
33
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
34
|
+
className: classNames("overflow-x-hidden overflow-y-auto flex-1"),
|
|
35
|
+
children: [items.length === 0 && (empty !== null && empty !== void 0 ? empty : /*#__PURE__*/jsx(EmptyContent, {
|
|
36
|
+
message: /*#__PURE__*/jsx(Trans, {
|
|
37
|
+
i18nKey: "form:select.emptyList"
|
|
59
38
|
})
|
|
60
|
-
}), index)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
39
|
+
})), items.map(function (item, index) {
|
|
40
|
+
var _item$value, _item$labelProperty;
|
|
41
|
+
if (item.___group___) return /*#__PURE__*/jsx("p", {
|
|
42
|
+
className: "px-2 py-1 text-muted text-xs sticky -top-px z-2 bg-base border-t",
|
|
43
|
+
children: item.label
|
|
44
|
+
}, index);
|
|
45
|
+
if (item.___create___) return /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({
|
|
46
|
+
role: "none",
|
|
47
|
+
tabIndex: active === index ? 0 : -1,
|
|
48
|
+
ref: function ref(el) {
|
|
49
|
+
return itemRef(index, el);
|
|
50
|
+
},
|
|
51
|
+
"data-active": active === index ? true : undefined,
|
|
52
|
+
className: classNames("block text-start truncate px-2 py-1 leading-normal cursor-pointer select-none", "data-active:bg-primary-200 data-selected:bg-primary-600 data-selected:text-white data-active:data-selected:underline")
|
|
53
|
+
}, itemProps(item)), {}, {
|
|
54
|
+
children: /*#__PURE__*/jsx(Trans, {
|
|
55
|
+
i18nKey: "form:select.createOption",
|
|
56
|
+
values: {
|
|
57
|
+
query: (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : item
|
|
58
|
+
},
|
|
59
|
+
components: [/*#__PURE__*/jsx("strong", {
|
|
60
|
+
children: "query"
|
|
61
|
+
}, "t0")]
|
|
62
|
+
})
|
|
63
|
+
}), index);
|
|
64
|
+
return /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({
|
|
65
|
+
role: "none",
|
|
66
|
+
tabIndex: active === index ? 0 : -1,
|
|
67
|
+
ref: function ref(el) {
|
|
68
|
+
return itemRef(index, el);
|
|
69
|
+
},
|
|
70
|
+
"data-active": active === index ? true : undefined,
|
|
71
|
+
className: classNames("block text-start truncate px-2 py-1 leading-normal cursor-pointer", "data-active:bg-primary-200 data-selected:bg-primary-600 data-selected:text-white data-active:data-selected:underline")
|
|
72
|
+
}, itemProps(item)), {}, {
|
|
73
|
+
children: children(item, (_item$labelProperty = item[labelProperty]) !== null && _item$labelProperty !== void 0 ? _item$labelProperty : item)
|
|
74
|
+
}), index);
|
|
75
|
+
})]
|
|
76
|
+
}), info && /*#__PURE__*/jsx("div", {
|
|
77
|
+
className: "px-2 py-1 text-sm bg-dimmed text-muted",
|
|
78
|
+
children: info
|
|
72
79
|
})]
|
|
73
80
|
}));
|
|
74
81
|
};
|