@react-fabric/form 1.0.0-beta.56 → 1.0.0-beta.57
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/css/_field.css +1 -1
- package/dist/cjs/input/AvatarInput.js +4 -6
- package/dist/cjs/input/ColorInput.js +1 -0
- package/dist/cjs/input/Hidden.js +4 -3
- package/dist/cjs/input/Slider.js +2 -2
- package/dist/cjs/input/Textarea.js +1 -1
- package/dist/cjs/select/List.js +5 -2
- package/dist/cjs/select/Options.js +49 -42
- package/dist/cjs/select/Select.js +4 -2
- package/dist/cjs/select/useSelect.js +14 -7
- package/dist/esm/input/AvatarInput.js +4 -6
- package/dist/esm/input/ColorInput.js +1 -0
- package/dist/esm/input/Hidden.js +4 -3
- package/dist/esm/input/Slider.js +2 -2
- package/dist/esm/input/Textarea.js +1 -1
- package/dist/esm/select/List.js +5 -2
- package/dist/esm/select/Options.js +49 -42
- package/dist/esm/select/Select.js +4 -2
- package/dist/esm/select/useSelect.js +14 -7
- package/dist/types/input/Hidden.d.ts +5 -1
- package/dist/types/select/List.d.ts +1 -1
- package/dist/types/select/Options.d.ts +2 -1
- package/dist/types/select/Select.d.ts +1 -1
- package/dist/types/select/useSelect.d.ts +4 -1
- package/dist/types/types/index.d.ts +4 -0
- package/package.json +4 -4
- package/src/input/AvatarInput.tsx +5 -2
- package/src/input/ColorInput.tsx +1 -0
- package/src/input/Hidden.tsx +9 -5
- package/src/input/Slider.tsx +4 -4
- package/src/input/Textarea.tsx +1 -1
- package/src/select/List.tsx +3 -0
- package/src/select/Options.tsx +47 -43
- package/src/select/Select.tsx +2 -0
- package/src/select/useSelect.tsx +15 -6
- package/src/types/index.ts +4 -0
package/css/_field.css
CHANGED
|
@@ -23,7 +23,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
23
23
|
* @returns {JSX.Element} - The rendered AvatarInput component.
|
|
24
24
|
*/
|
|
25
25
|
var AvatarInput = function AvatarInput(_ref) {
|
|
26
|
-
var _list
|
|
26
|
+
var _list$;
|
|
27
27
|
var _ref$size = _ref.size,
|
|
28
28
|
size = _ref$size === void 0 ? "6rem" : _ref$size,
|
|
29
29
|
avatarName = _ref.avatarName,
|
|
@@ -105,16 +105,14 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
105
105
|
})]
|
|
106
106
|
})]
|
|
107
107
|
}), /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, _objectSpread({
|
|
108
|
-
hiddenValue:
|
|
108
|
+
hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path,
|
|
109
|
+
defaultValue: defaultValue
|
|
109
110
|
}, rest)), files.map(function (file, idx) {
|
|
110
111
|
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
111
112
|
className: "px-2 py-1 flex-1 overflow-hidden",
|
|
112
113
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
113
114
|
className: "flex flex-nowrap gap-1 items-center",
|
|
114
|
-
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
115
|
-
className: "flex-initial truncate pe-2",
|
|
116
|
-
children: file.filename
|
|
117
|
-
}), file.error && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
115
|
+
children: [file.error && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
118
116
|
className: "flex-1 truncate px-2",
|
|
119
117
|
children: /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
120
118
|
className: "text-danger-600",
|
|
@@ -100,6 +100,7 @@ var ColorInput = function ColorInput(_ref) {
|
|
|
100
100
|
}, rest), {}, {
|
|
101
101
|
children: [/*#__PURE__*/jsxRuntime.jsx("button", _objectSpread(_objectSpread({
|
|
102
102
|
"data-ref": "button",
|
|
103
|
+
type: "button",
|
|
103
104
|
className: "flex-1 flex items-center",
|
|
104
105
|
ref: refs.setReference
|
|
105
106
|
}, getReferenceProps({
|
package/dist/cjs/input/Hidden.js
CHANGED
|
@@ -37,6 +37,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
37
37
|
*/
|
|
38
38
|
var HiddenInput = function HiddenInput(_ref) {
|
|
39
39
|
var hiddenValue = _ref.hiddenValue,
|
|
40
|
+
defaultValue = _ref.defaultValue,
|
|
40
41
|
onChange = _ref.onChange,
|
|
41
42
|
invalid = _ref.invalid,
|
|
42
43
|
error = _ref.error,
|
|
@@ -44,10 +45,10 @@ var HiddenInput = function HiddenInput(_ref) {
|
|
|
44
45
|
value = _ref$value === void 0 ? "" : _ref$value,
|
|
45
46
|
name = _ref.name;
|
|
46
47
|
react.useEffect(function () {
|
|
47
|
-
|
|
48
|
-
onChange === null || onChange === void 0 || onChange(hiddenValue);
|
|
48
|
+
setTimeout(function () {
|
|
49
|
+
onChange === null || onChange === void 0 || onChange(hiddenValue !== null && hiddenValue !== void 0 ? hiddenValue : defaultValue);
|
|
49
50
|
}, 50);
|
|
50
|
-
}, [hiddenValue]);
|
|
51
|
+
}, [hiddenValue, defaultValue]);
|
|
51
52
|
return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
|
|
52
53
|
children: [/*#__PURE__*/jsxRuntime.jsx("input", {
|
|
53
54
|
type: "hidden",
|
package/dist/cjs/input/Slider.js
CHANGED
|
@@ -129,7 +129,7 @@ var Slider = function Slider(_ref) {
|
|
|
129
129
|
},
|
|
130
130
|
children: [showLabels && (vertical ? maxDisplay : minDisplay), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
131
131
|
ref: rangerInstance.trackElRef,
|
|
132
|
-
className: classNames("
|
|
132
|
+
className: classNames("relative flex items-center", vertical ? "my-2 w-8" : "flex-1 mx-2 h-8"),
|
|
133
133
|
style: {
|
|
134
134
|
height: vertical ? height : undefined
|
|
135
135
|
},
|
|
@@ -163,7 +163,7 @@ var Slider = function Slider(_ref) {
|
|
|
163
163
|
}, props), {}, {
|
|
164
164
|
style: styles
|
|
165
165
|
})), displayValue && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
166
|
-
className: classNames("bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap", "before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45", vertical ? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2" : "top-1/2 -translate-y-1/2", !vertical && (percentage > 50 ? "-ms-3 ltr:-translate-x-full rtl:translate-x-full ltr:before:translate-x-[0.125rem] rtl:before:-translate-x-[0.125rem] before:end-0" : "ms-3 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0")),
|
|
166
|
+
className: classNames("bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap pointer-events-none", "before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45", vertical ? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0" : "top-1/2 -translate-y-1/2", !vertical && (percentage > 50 ? "-ms-3 ltr:-translate-x-full rtl:translate-x-full ltr:before:translate-x-[0.125rem] rtl:before:-translate-x-[0.125rem] before:end-0" : "ms-3 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0")),
|
|
167
167
|
"data-align": percentage > 50 ? "start" : "end",
|
|
168
168
|
style: valueStyles,
|
|
169
169
|
children: value === Infinity || useInfinity && value === max ? maxLabel !== null && maxLabel !== void 0 ? maxLabel : "∞" : utilities.Format.number(value, format)
|
|
@@ -87,7 +87,7 @@ var Textarea = function Textarea(_ref) {
|
|
|
87
87
|
textarea: true
|
|
88
88
|
}, rest), {}, {
|
|
89
89
|
children: /*#__PURE__*/jsxRuntime.jsx("textarea", {
|
|
90
|
-
className: "appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-
|
|
90
|
+
className: "appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-12 resize-none",
|
|
91
91
|
"aria-invalid": invalid,
|
|
92
92
|
"aria-disabled": disabled,
|
|
93
93
|
"aria-readonly": readOnly,
|
package/dist/cjs/select/List.js
CHANGED
|
@@ -13,11 +13,11 @@ var Options = require('./Options.js');
|
|
|
13
13
|
var useSelect = require('./useSelect.js');
|
|
14
14
|
var jsxRuntime = require('react/jsx-runtime');
|
|
15
15
|
|
|
16
|
-
var _excluded = ["ref", "name", "value", "readOnly", "disabled", "required", "placeholder", "autoFocus", "options", "height", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "multiple", "allowCreate", "searchable", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed", "emptyDisplay", "invalid", "error", "allowClear", "decorateStart", "decorateEnd", "data-inner", "data-hide-selected"];
|
|
16
|
+
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
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
19
|
var List = function List(_ref) {
|
|
20
|
-
var _state$query;
|
|
20
|
+
var _state$query, _state$activeItem;
|
|
21
21
|
var ref = _ref.ref,
|
|
22
22
|
name = _ref.name,
|
|
23
23
|
value = _ref.value,
|
|
@@ -31,6 +31,7 @@ var List = function List(_ref) {
|
|
|
31
31
|
groupProperty = _ref.groupProperty,
|
|
32
32
|
labelProperty = _ref.labelProperty,
|
|
33
33
|
valueProperty = _ref.valueProperty,
|
|
34
|
+
infoProperty = _ref.infoProperty,
|
|
34
35
|
sortProperty = _ref.sortProperty,
|
|
35
36
|
multiple = _ref.multiple,
|
|
36
37
|
allowCreate = _ref.allowCreate,
|
|
@@ -61,6 +62,7 @@ var List = function List(_ref) {
|
|
|
61
62
|
value: value,
|
|
62
63
|
options: options,
|
|
63
64
|
multiple: multiple,
|
|
65
|
+
alwaysOpen: true,
|
|
64
66
|
groupProperty: groupProperty,
|
|
65
67
|
labelProperty: labelProperty,
|
|
66
68
|
valueProperty: valueProperty,
|
|
@@ -254,6 +256,7 @@ var List = function List(_ref) {
|
|
|
254
256
|
itemRef: setItemRef,
|
|
255
257
|
itemProps: makeItemProps,
|
|
256
258
|
empty: emptyDisplay,
|
|
259
|
+
info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
|
|
257
260
|
children: function children(item, label) {
|
|
258
261
|
var _renderer3;
|
|
259
262
|
return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
|
|
@@ -7,7 +7,7 @@ var classNames = require('classnames');
|
|
|
7
7
|
var reactI18next = require('react-i18next');
|
|
8
8
|
var jsxRuntime = require('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__*/jsxRuntime.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$value, _item$labelProperty;
|
|
38
|
-
if (item.___group___) return /*#__PURE__*/jsxRuntime.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__*/jsxRuntime.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__*/jsxRuntime.jsx(reactI18next.Trans, {
|
|
52
|
-
i18nKey: "form:select.createOption",
|
|
53
|
-
values: {
|
|
54
|
-
query: (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : item
|
|
55
|
-
},
|
|
56
|
-
components: [/*#__PURE__*/jsxRuntime.jsx("strong", {
|
|
57
|
-
children: "query"
|
|
58
|
-
}, "t0")]
|
|
33
|
+
children: [/*#__PURE__*/jsxRuntime.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__*/jsxRuntime.jsx(core.EmptyContent, {
|
|
36
|
+
message: /*#__PURE__*/jsxRuntime.jsx(reactI18next.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__*/jsxRuntime.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__*/jsxRuntime.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__*/jsxRuntime.jsx(reactI18next.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__*/jsxRuntime.jsx("strong", {
|
|
60
|
+
children: "query"
|
|
61
|
+
}, "t0")]
|
|
62
|
+
})
|
|
63
|
+
}), index);
|
|
64
|
+
return /*#__PURE__*/jsxRuntime.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__*/jsxRuntime.jsx("div", {
|
|
77
|
+
className: "px-2 py-1 text-sm bg-dimmed text-muted",
|
|
78
|
+
children: info
|
|
72
79
|
})]
|
|
73
80
|
}));
|
|
74
81
|
};
|
|
@@ -12,11 +12,11 @@ var Options = require('./Options.js');
|
|
|
12
12
|
var useSelect = require('./useSelect.js');
|
|
13
13
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
14
|
|
|
15
|
-
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "options", "defaultOpen", "hideHandle", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "multiple", "searchable", "allowCreate", "emptyDisplay", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed"];
|
|
15
|
+
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "options", "defaultOpen", "hideHandle", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "infoProperty", "multiple", "searchable", "allowCreate", "emptyDisplay", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "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
18
|
var Select = function Select(_ref) {
|
|
19
|
-
var _state$query, _refs$reference$curre;
|
|
19
|
+
var _state$query, _refs$reference$curre, _state$activeItem;
|
|
20
20
|
var ref = _ref.ref,
|
|
21
21
|
name = _ref.name,
|
|
22
22
|
value = _ref.value,
|
|
@@ -36,6 +36,7 @@ var Select = function Select(_ref) {
|
|
|
36
36
|
_ref$valueProperty = _ref.valueProperty,
|
|
37
37
|
valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
|
|
38
38
|
sortProperty = _ref.sortProperty,
|
|
39
|
+
infoProperty = _ref.infoProperty,
|
|
39
40
|
multiple = _ref.multiple,
|
|
40
41
|
searchable = _ref.searchable,
|
|
41
42
|
allowCreate = _ref.allowCreate,
|
|
@@ -280,6 +281,7 @@ var Select = function Select(_ref) {
|
|
|
280
281
|
itemRef: setItemRef,
|
|
281
282
|
itemProps: makeItemProps,
|
|
282
283
|
empty: emptyDisplay,
|
|
284
|
+
info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
|
|
283
285
|
children: function children(item, label) {
|
|
284
286
|
var _renderer3;
|
|
285
287
|
return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
|
|
@@ -14,9 +14,11 @@ var useSelect = function useSelect(_ref) {
|
|
|
14
14
|
var _ref$options = _ref.options,
|
|
15
15
|
options = _ref$options === void 0 ? utilities.EMPTY_ARRAY : _ref$options,
|
|
16
16
|
value = _ref.value,
|
|
17
|
+
autoComplete = _ref.autoComplete,
|
|
18
|
+
_ref$alwaysOpen = _ref.alwaysOpen,
|
|
19
|
+
alwaysOpen = _ref$alwaysOpen === void 0 ? false : _ref$alwaysOpen,
|
|
17
20
|
_ref$defaultOpen = _ref.defaultOpen,
|
|
18
21
|
defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
|
|
19
|
-
autoComplete = _ref.autoComplete,
|
|
20
22
|
_ref$multiple = _ref.multiple,
|
|
21
23
|
multiple = _ref$multiple === void 0 ? false : _ref$multiple,
|
|
22
24
|
_ref$allowCreate = _ref.allowCreate,
|
|
@@ -66,13 +68,16 @@ var useSelect = function useSelect(_ref) {
|
|
|
66
68
|
if (action.type === "close") {
|
|
67
69
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
68
70
|
activeIndex: null,
|
|
71
|
+
activeItem: null,
|
|
69
72
|
open: false
|
|
70
73
|
});
|
|
71
74
|
}
|
|
72
75
|
if (action.type === "active" && state.open) {
|
|
76
|
+
var _action$index;
|
|
73
77
|
if (autoComplete && action.index !== null) state.query = state.items[action.index];
|
|
74
78
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
75
|
-
activeIndex: action.index
|
|
79
|
+
activeIndex: action.index,
|
|
80
|
+
activeItem: state.items[(_action$index = action.index) !== null && _action$index !== void 0 ? _action$index : -1]
|
|
76
81
|
});
|
|
77
82
|
}
|
|
78
83
|
if (action.type === "setValue") {
|
|
@@ -86,6 +91,7 @@ var useSelect = function useSelect(_ref) {
|
|
|
86
91
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
87
92
|
value: state.emptyValue,
|
|
88
93
|
activeIndex: null,
|
|
94
|
+
activeItem: null,
|
|
89
95
|
selectedIndex: autoComplete ? state.multiple ? (_action$value = action.value) === null || _action$value === void 0 ? void 0 : _action$value.length : 0 : state.items.indexOf(action.value)
|
|
90
96
|
});
|
|
91
97
|
if (action.value !== undefined) {
|
|
@@ -103,16 +109,16 @@ var useSelect = function useSelect(_ref) {
|
|
|
103
109
|
newState.value = action.value;
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
|
-
if (!state.multiple) newState.open =
|
|
112
|
+
if (!state.multiple) newState.open = alwaysOpen;
|
|
107
113
|
fireChange(newState.value);
|
|
108
114
|
return newState;
|
|
109
115
|
}
|
|
110
116
|
if (action.type === "removeItem") {
|
|
111
117
|
var newValue = state.value;
|
|
112
118
|
if (state.multiple) {
|
|
113
|
-
var _action$
|
|
119
|
+
var _action$index2;
|
|
114
120
|
newValue = _toConsumableArray(newValue);
|
|
115
|
-
newValue.splice((_action$
|
|
121
|
+
newValue.splice((_action$index2 = action.index) !== null && _action$index2 !== void 0 ? _action$index2 : -1, 1);
|
|
116
122
|
} else {
|
|
117
123
|
newValue = "";
|
|
118
124
|
}
|
|
@@ -173,9 +179,10 @@ var useSelect = function useSelect(_ref) {
|
|
|
173
179
|
}, {
|
|
174
180
|
multiple: multiple,
|
|
175
181
|
emptyValue: emptyValue,
|
|
176
|
-
open: defaultOpen,
|
|
182
|
+
open: alwaysOpen || defaultOpen,
|
|
177
183
|
loading: false,
|
|
178
184
|
activeIndex: null,
|
|
185
|
+
activeItem: null,
|
|
179
186
|
selectedIndex: null,
|
|
180
187
|
value: emptyValue,
|
|
181
188
|
// filter
|
|
@@ -320,7 +327,7 @@ var useSelect = function useSelect(_ref) {
|
|
|
320
327
|
});
|
|
321
328
|
}, []);
|
|
322
329
|
var setActiveIndex = react.useCallback(function (index) {
|
|
323
|
-
dispatch({
|
|
330
|
+
index && index > -1 && dispatch({
|
|
324
331
|
type: "active",
|
|
325
332
|
index: index
|
|
326
333
|
});
|
|
@@ -23,7 +23,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
23
23
|
* @returns {JSX.Element} - The rendered AvatarInput component.
|
|
24
24
|
*/
|
|
25
25
|
var AvatarInput = function AvatarInput(_ref) {
|
|
26
|
-
var _list
|
|
26
|
+
var _list$;
|
|
27
27
|
var _ref$size = _ref.size,
|
|
28
28
|
size = _ref$size === void 0 ? "6rem" : _ref$size,
|
|
29
29
|
avatarName = _ref.avatarName,
|
|
@@ -105,16 +105,14 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
105
105
|
})]
|
|
106
106
|
})]
|
|
107
107
|
}), /*#__PURE__*/jsx(HiddenInput, _objectSpread({
|
|
108
|
-
hiddenValue:
|
|
108
|
+
hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path,
|
|
109
|
+
defaultValue: defaultValue
|
|
109
110
|
}, rest)), files.map(function (file, idx) {
|
|
110
111
|
return /*#__PURE__*/jsxs("div", {
|
|
111
112
|
className: "px-2 py-1 flex-1 overflow-hidden",
|
|
112
113
|
children: [/*#__PURE__*/jsxs("div", {
|
|
113
114
|
className: "flex flex-nowrap gap-1 items-center",
|
|
114
|
-
children: [/*#__PURE__*/jsx("div", {
|
|
115
|
-
className: "flex-initial truncate pe-2",
|
|
116
|
-
children: file.filename
|
|
117
|
-
}), file.error && /*#__PURE__*/jsx("div", {
|
|
115
|
+
children: [file.error && /*#__PURE__*/jsx("div", {
|
|
118
116
|
className: "flex-1 truncate px-2",
|
|
119
117
|
children: /*#__PURE__*/jsx("span", {
|
|
120
118
|
className: "text-danger-600",
|
|
@@ -100,6 +100,7 @@ var ColorInput = function ColorInput(_ref) {
|
|
|
100
100
|
}, rest), {}, {
|
|
101
101
|
children: [/*#__PURE__*/jsx("button", _objectSpread(_objectSpread({
|
|
102
102
|
"data-ref": "button",
|
|
103
|
+
type: "button",
|
|
103
104
|
className: "flex-1 flex items-center",
|
|
104
105
|
ref: refs.setReference
|
|
105
106
|
}, getReferenceProps({
|
package/dist/esm/input/Hidden.js
CHANGED
|
@@ -37,6 +37,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
37
37
|
*/
|
|
38
38
|
var HiddenInput = function HiddenInput(_ref) {
|
|
39
39
|
var hiddenValue = _ref.hiddenValue,
|
|
40
|
+
defaultValue = _ref.defaultValue,
|
|
40
41
|
onChange = _ref.onChange,
|
|
41
42
|
invalid = _ref.invalid,
|
|
42
43
|
error = _ref.error,
|
|
@@ -44,10 +45,10 @@ var HiddenInput = function HiddenInput(_ref) {
|
|
|
44
45
|
value = _ref$value === void 0 ? "" : _ref$value,
|
|
45
46
|
name = _ref.name;
|
|
46
47
|
useEffect(function () {
|
|
47
|
-
|
|
48
|
-
onChange === null || onChange === void 0 || onChange(hiddenValue);
|
|
48
|
+
setTimeout(function () {
|
|
49
|
+
onChange === null || onChange === void 0 || onChange(hiddenValue !== null && hiddenValue !== void 0 ? hiddenValue : defaultValue);
|
|
49
50
|
}, 50);
|
|
50
|
-
}, [hiddenValue]);
|
|
51
|
+
}, [hiddenValue, defaultValue]);
|
|
51
52
|
return /*#__PURE__*/jsxs(Fragment, {
|
|
52
53
|
children: [/*#__PURE__*/jsx("input", {
|
|
53
54
|
type: "hidden",
|
package/dist/esm/input/Slider.js
CHANGED
|
@@ -129,7 +129,7 @@ var Slider = function Slider(_ref) {
|
|
|
129
129
|
},
|
|
130
130
|
children: [showLabels && (vertical ? maxDisplay : minDisplay), /*#__PURE__*/jsxs("div", {
|
|
131
131
|
ref: rangerInstance.trackElRef,
|
|
132
|
-
className: classNames("
|
|
132
|
+
className: classNames("relative flex items-center", vertical ? "my-2 w-8" : "flex-1 mx-2 h-8"),
|
|
133
133
|
style: {
|
|
134
134
|
height: vertical ? height : undefined
|
|
135
135
|
},
|
|
@@ -163,7 +163,7 @@ var Slider = function Slider(_ref) {
|
|
|
163
163
|
}, props), {}, {
|
|
164
164
|
style: styles
|
|
165
165
|
})), displayValue && /*#__PURE__*/jsx("div", {
|
|
166
|
-
className: classNames("bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap", "before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45", vertical ? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2" : "top-1/2 -translate-y-1/2", !vertical && (percentage > 50 ? "-ms-3 ltr:-translate-x-full rtl:translate-x-full ltr:before:translate-x-[0.125rem] rtl:before:-translate-x-[0.125rem] before:end-0" : "ms-3 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0")),
|
|
166
|
+
className: classNames("bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap pointer-events-none", "before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45", vertical ? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0" : "top-1/2 -translate-y-1/2", !vertical && (percentage > 50 ? "-ms-3 ltr:-translate-x-full rtl:translate-x-full ltr:before:translate-x-[0.125rem] rtl:before:-translate-x-[0.125rem] before:end-0" : "ms-3 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0")),
|
|
167
167
|
"data-align": percentage > 50 ? "start" : "end",
|
|
168
168
|
style: valueStyles,
|
|
169
169
|
children: value === Infinity || useInfinity && value === max ? maxLabel !== null && maxLabel !== void 0 ? maxLabel : "∞" : Format.number(value, format)
|
|
@@ -87,7 +87,7 @@ var Textarea = function Textarea(_ref) {
|
|
|
87
87
|
textarea: true
|
|
88
88
|
}, rest), {}, {
|
|
89
89
|
children: /*#__PURE__*/jsx("textarea", {
|
|
90
|
-
className: "appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-
|
|
90
|
+
className: "appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-12 resize-none",
|
|
91
91
|
"aria-invalid": invalid,
|
|
92
92
|
"aria-disabled": disabled,
|
|
93
93
|
"aria-readonly": readOnly,
|
package/dist/esm/select/List.js
CHANGED
|
@@ -13,11 +13,11 @@ import { Options } from './Options.js';
|
|
|
13
13
|
import { useSelect } from './useSelect.js';
|
|
14
14
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
15
15
|
|
|
16
|
-
var _excluded = ["ref", "name", "value", "readOnly", "disabled", "required", "placeholder", "autoFocus", "options", "height", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "multiple", "allowCreate", "searchable", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed", "emptyDisplay", "invalid", "error", "allowClear", "decorateStart", "decorateEnd", "data-inner", "data-hide-selected"];
|
|
16
|
+
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
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
19
|
var List = function List(_ref) {
|
|
20
|
-
var _state$query;
|
|
20
|
+
var _state$query, _state$activeItem;
|
|
21
21
|
var ref = _ref.ref,
|
|
22
22
|
name = _ref.name,
|
|
23
23
|
value = _ref.value,
|
|
@@ -31,6 +31,7 @@ var List = function List(_ref) {
|
|
|
31
31
|
groupProperty = _ref.groupProperty,
|
|
32
32
|
labelProperty = _ref.labelProperty,
|
|
33
33
|
valueProperty = _ref.valueProperty,
|
|
34
|
+
infoProperty = _ref.infoProperty,
|
|
34
35
|
sortProperty = _ref.sortProperty,
|
|
35
36
|
multiple = _ref.multiple,
|
|
36
37
|
allowCreate = _ref.allowCreate,
|
|
@@ -61,6 +62,7 @@ var List = function List(_ref) {
|
|
|
61
62
|
value: value,
|
|
62
63
|
options: options,
|
|
63
64
|
multiple: multiple,
|
|
65
|
+
alwaysOpen: true,
|
|
64
66
|
groupProperty: groupProperty,
|
|
65
67
|
labelProperty: labelProperty,
|
|
66
68
|
valueProperty: valueProperty,
|
|
@@ -254,6 +256,7 @@ var List = function List(_ref) {
|
|
|
254
256
|
itemRef: setItemRef,
|
|
255
257
|
itemProps: makeItemProps,
|
|
256
258
|
empty: emptyDisplay,
|
|
259
|
+
info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
|
|
257
260
|
children: function children(item, label) {
|
|
258
261
|
var _renderer3;
|
|
259
262
|
return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
|
|
@@ -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$value, _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 = item.value) !== null && _item$value !== void 0 ? _item$value : item
|
|
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
|
};
|
|
@@ -12,11 +12,11 @@ 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", "error", "options", "defaultOpen", "hideHandle", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "multiple", "searchable", "allowCreate", "emptyDisplay", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "onEnterPressed"];
|
|
15
|
+
var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "options", "defaultOpen", "hideHandle", "groupProperty", "labelProperty", "valueProperty", "sortProperty", "infoProperty", "multiple", "searchable", "allowCreate", "emptyDisplay", "createOption", "matcher", "renderer", "onQuery", "onChange", "onSelect", "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
18
|
var Select = function Select(_ref) {
|
|
19
|
-
var _state$query, _refs$reference$curre;
|
|
19
|
+
var _state$query, _refs$reference$curre, _state$activeItem;
|
|
20
20
|
var ref = _ref.ref,
|
|
21
21
|
name = _ref.name,
|
|
22
22
|
value = _ref.value,
|
|
@@ -36,6 +36,7 @@ var Select = function Select(_ref) {
|
|
|
36
36
|
_ref$valueProperty = _ref.valueProperty,
|
|
37
37
|
valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
|
|
38
38
|
sortProperty = _ref.sortProperty,
|
|
39
|
+
infoProperty = _ref.infoProperty,
|
|
39
40
|
multiple = _ref.multiple,
|
|
40
41
|
searchable = _ref.searchable,
|
|
41
42
|
allowCreate = _ref.allowCreate,
|
|
@@ -280,6 +281,7 @@ var Select = function Select(_ref) {
|
|
|
280
281
|
itemRef: setItemRef,
|
|
281
282
|
itemProps: makeItemProps,
|
|
282
283
|
empty: emptyDisplay,
|
|
284
|
+
info: (_state$activeItem = state.activeItem) === null || _state$activeItem === void 0 ? void 0 : _state$activeItem[infoProperty !== null && infoProperty !== void 0 ? infoProperty : "info"],
|
|
283
285
|
children: function children(item, label) {
|
|
284
286
|
var _renderer3;
|
|
285
287
|
return (_renderer3 = renderer === null || renderer === void 0 ? void 0 : renderer(item)) !== null && _renderer3 !== void 0 ? _renderer3 : label;
|
|
@@ -14,9 +14,11 @@ var useSelect = function useSelect(_ref) {
|
|
|
14
14
|
var _ref$options = _ref.options,
|
|
15
15
|
options = _ref$options === void 0 ? EMPTY_ARRAY : _ref$options,
|
|
16
16
|
value = _ref.value,
|
|
17
|
+
autoComplete = _ref.autoComplete,
|
|
18
|
+
_ref$alwaysOpen = _ref.alwaysOpen,
|
|
19
|
+
alwaysOpen = _ref$alwaysOpen === void 0 ? false : _ref$alwaysOpen,
|
|
17
20
|
_ref$defaultOpen = _ref.defaultOpen,
|
|
18
21
|
defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
|
|
19
|
-
autoComplete = _ref.autoComplete,
|
|
20
22
|
_ref$multiple = _ref.multiple,
|
|
21
23
|
multiple = _ref$multiple === void 0 ? false : _ref$multiple,
|
|
22
24
|
_ref$allowCreate = _ref.allowCreate,
|
|
@@ -66,13 +68,16 @@ var useSelect = function useSelect(_ref) {
|
|
|
66
68
|
if (action.type === "close") {
|
|
67
69
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
68
70
|
activeIndex: null,
|
|
71
|
+
activeItem: null,
|
|
69
72
|
open: false
|
|
70
73
|
});
|
|
71
74
|
}
|
|
72
75
|
if (action.type === "active" && state.open) {
|
|
76
|
+
var _action$index;
|
|
73
77
|
if (autoComplete && action.index !== null) state.query = state.items[action.index];
|
|
74
78
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
75
|
-
activeIndex: action.index
|
|
79
|
+
activeIndex: action.index,
|
|
80
|
+
activeItem: state.items[(_action$index = action.index) !== null && _action$index !== void 0 ? _action$index : -1]
|
|
76
81
|
});
|
|
77
82
|
}
|
|
78
83
|
if (action.type === "setValue") {
|
|
@@ -86,6 +91,7 @@ var useSelect = function useSelect(_ref) {
|
|
|
86
91
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
87
92
|
value: state.emptyValue,
|
|
88
93
|
activeIndex: null,
|
|
94
|
+
activeItem: null,
|
|
89
95
|
selectedIndex: autoComplete ? state.multiple ? (_action$value = action.value) === null || _action$value === void 0 ? void 0 : _action$value.length : 0 : state.items.indexOf(action.value)
|
|
90
96
|
});
|
|
91
97
|
if (action.value !== undefined) {
|
|
@@ -103,16 +109,16 @@ var useSelect = function useSelect(_ref) {
|
|
|
103
109
|
newState.value = action.value;
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
|
-
if (!state.multiple) newState.open =
|
|
112
|
+
if (!state.multiple) newState.open = alwaysOpen;
|
|
107
113
|
fireChange(newState.value);
|
|
108
114
|
return newState;
|
|
109
115
|
}
|
|
110
116
|
if (action.type === "removeItem") {
|
|
111
117
|
var newValue = state.value;
|
|
112
118
|
if (state.multiple) {
|
|
113
|
-
var _action$
|
|
119
|
+
var _action$index2;
|
|
114
120
|
newValue = _toConsumableArray(newValue);
|
|
115
|
-
newValue.splice((_action$
|
|
121
|
+
newValue.splice((_action$index2 = action.index) !== null && _action$index2 !== void 0 ? _action$index2 : -1, 1);
|
|
116
122
|
} else {
|
|
117
123
|
newValue = "";
|
|
118
124
|
}
|
|
@@ -173,9 +179,10 @@ var useSelect = function useSelect(_ref) {
|
|
|
173
179
|
}, {
|
|
174
180
|
multiple: multiple,
|
|
175
181
|
emptyValue: emptyValue,
|
|
176
|
-
open: defaultOpen,
|
|
182
|
+
open: alwaysOpen || defaultOpen,
|
|
177
183
|
loading: false,
|
|
178
184
|
activeIndex: null,
|
|
185
|
+
activeItem: null,
|
|
179
186
|
selectedIndex: null,
|
|
180
187
|
value: emptyValue,
|
|
181
188
|
// filter
|
|
@@ -320,7 +327,7 @@ var useSelect = function useSelect(_ref) {
|
|
|
320
327
|
});
|
|
321
328
|
}, []);
|
|
322
329
|
var setActiveIndex = useCallback(function (index) {
|
|
323
|
-
dispatch({
|
|
330
|
+
index && index > -1 && dispatch({
|
|
324
331
|
type: "active",
|
|
325
332
|
index: index
|
|
326
333
|
});
|
|
@@ -7,6 +7,10 @@ interface Props {
|
|
|
7
7
|
* hidden value will fire change for form update
|
|
8
8
|
*/
|
|
9
9
|
hiddenValue?: AnyObject;
|
|
10
|
+
/**
|
|
11
|
+
* default avatar image
|
|
12
|
+
*/
|
|
13
|
+
defaultValue?: string;
|
|
10
14
|
/**
|
|
11
15
|
* form onChange handler
|
|
12
16
|
*/
|
|
@@ -20,5 +24,5 @@ interface Props {
|
|
|
20
24
|
* @param {Object} props - Component properties.
|
|
21
25
|
* @returns {JSX.Element} The rendered hidden input field and error icon.
|
|
22
26
|
*/
|
|
23
|
-
export declare const HiddenInput: ({ hiddenValue, onChange, invalid, error, value, name, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare const HiddenInput: ({ hiddenValue, defaultValue, onChange, invalid, error, value, name, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
24
28
|
export {};
|
|
@@ -7,6 +7,6 @@ import { type SelectProps } from "../types";
|
|
|
7
7
|
* @param {SelectProps<T>} props - The properties for the List component.
|
|
8
8
|
* @returns {JSX.Element} The rendered List component.
|
|
9
9
|
*/
|
|
10
|
-
export declare const List: <T extends AnyObject = string>({ ref, name, value, readOnly, disabled, required, placeholder, autoFocus, options, height, groupProperty, labelProperty, valueProperty, sortProperty, multiple, allowCreate, searchable, createOption, matcher, renderer, onQuery, onChange, onSelect, onEnterPressed, emptyDisplay, invalid, error, allowClear, decorateStart, decorateEnd, "data-inner": isInner, "data-hide-selected": hideSelected, ...rest }: Omit<SelectProps<T>, "defaultOpen" | "hideHandle"> & {
|
|
10
|
+
export declare const List: <T extends AnyObject = string>({ 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": isInner, "data-hide-selected": hideSelected, ...rest }: Omit<SelectProps<T>, "defaultOpen" | "hideHandle"> & {
|
|
11
11
|
height?: string | number;
|
|
12
12
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ReactElement, type ReactNode } from "react";
|
|
2
|
-
export declare const Options: ({ ref, style, items, active, className, itemRef, empty, valueProperty, labelProperty, itemProps, children, ...rest }: {
|
|
2
|
+
export declare const Options: ({ ref, style, items, active, className, itemRef, empty, info, valueProperty, labelProperty, itemProps, children, ...rest }: {
|
|
3
3
|
ref: AnyObject;
|
|
4
|
+
info?: AnyObject;
|
|
4
5
|
itemRef: AnyObject;
|
|
5
6
|
style?: AnyObject;
|
|
6
7
|
items: AnyObject[];
|
|
@@ -7,4 +7,4 @@ import { type SelectProps } from "../types";
|
|
|
7
7
|
* @param {SelectProps<T>} props - The properties for the Select component.
|
|
8
8
|
* @returns {JSX.Element} The rendered Select component.
|
|
9
9
|
*/
|
|
10
|
-
export declare const Select: <T extends AnyObject = string>({ ref, name, value, invalid, readOnly, disabled, required, placeholder, autoFocus, error, options, defaultOpen, hideHandle, groupProperty, labelProperty, valueProperty, sortProperty, multiple, searchable, allowCreate, emptyDisplay, createOption, matcher, renderer, onQuery, onChange, onSelect, onEnterPressed, ...rest }: SelectProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const Select: <T extends AnyObject = string>({ ref, name, value, invalid, readOnly, disabled, required, placeholder, autoFocus, error, options, defaultOpen, hideHandle, groupProperty, labelProperty, valueProperty, sortProperty, infoProperty, multiple, searchable, allowCreate, emptyDisplay, createOption, matcher, renderer, onQuery, onChange, onSelect, onEnterPressed, ...rest }: SelectProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,15 +4,17 @@ interface State {
|
|
|
4
4
|
open: boolean;
|
|
5
5
|
loading: boolean;
|
|
6
6
|
activeIndex: number | null;
|
|
7
|
+
activeItem: AnyObject;
|
|
7
8
|
selectedIndex: number | null;
|
|
8
9
|
value: AnyObject;
|
|
9
10
|
query?: string;
|
|
10
11
|
items: AnyObject[];
|
|
11
12
|
}
|
|
12
|
-
export declare const useSelect: ({ options, value,
|
|
13
|
+
export declare const useSelect: ({ options, value, autoComplete, alwaysOpen, defaultOpen, multiple, allowCreate, groupProperty, valueProperty, labelProperty, sortProperty, createOption, matcher, onQuery, onChange, onSelect, }: {
|
|
13
14
|
value?: AnyObject;
|
|
14
15
|
options?: AnyObject[];
|
|
15
16
|
multiple?: boolean;
|
|
17
|
+
alwaysOpen?: boolean;
|
|
16
18
|
defaultOpen?: boolean;
|
|
17
19
|
allowCreate?: boolean;
|
|
18
20
|
groupProperty?: AnyObject;
|
|
@@ -29,6 +31,7 @@ export declare const useSelect: ({ options, value, defaultOpen, autoComplete, mu
|
|
|
29
31
|
state: State | {
|
|
30
32
|
value: any;
|
|
31
33
|
activeIndex: null;
|
|
34
|
+
activeItem: null;
|
|
32
35
|
selectedIndex: any;
|
|
33
36
|
multiple: boolean;
|
|
34
37
|
emptyValue: AnyObject;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-fabric/form",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.57",
|
|
4
4
|
"description": "RUF: Form package",
|
|
5
5
|
"author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"@dnd-kit/utilities": "^3.2.2",
|
|
42
42
|
"@floating-ui/react": "^0.27.9",
|
|
43
43
|
"@hookform/resolvers": "^3.9.0",
|
|
44
|
-
"@react-fabric/core": "^1.0.0-beta.
|
|
45
|
-
"@react-fabric/date": "^1.0.0-beta.
|
|
44
|
+
"@react-fabric/core": "^1.0.0-beta.57",
|
|
45
|
+
"@react-fabric/date": "^1.0.0-beta.57",
|
|
46
46
|
"@react-fabric/utilities": "^1.0.0-beta.52",
|
|
47
47
|
"classnames": "^2.5.1",
|
|
48
48
|
"color": "^4.2.3",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"node": ">=18.12.0",
|
|
64
64
|
"npm": ">=8.19.0"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "9b596a0a8d6cecaa8479f80c495b64fb42ce739f"
|
|
67
67
|
}
|
|
@@ -129,11 +129,14 @@ export const AvatarInput = ({
|
|
|
129
129
|
/>
|
|
130
130
|
</div>
|
|
131
131
|
</div>
|
|
132
|
-
<HiddenInput
|
|
132
|
+
<HiddenInput
|
|
133
|
+
hiddenValue={list?.[0]?.path}
|
|
134
|
+
defaultValue={defaultValue}
|
|
135
|
+
{...rest}
|
|
136
|
+
/>
|
|
133
137
|
{files.map((file, idx) => (
|
|
134
138
|
<div key={idx} className="px-2 py-1 flex-1 overflow-hidden">
|
|
135
139
|
<div className="flex flex-nowrap gap-1 items-center">
|
|
136
|
-
<div className="flex-initial truncate pe-2">{file.filename}</div>
|
|
137
140
|
{file.error && (
|
|
138
141
|
<div className="flex-1 truncate px-2">
|
|
139
142
|
<span className="text-danger-600">{file.error}</span>
|
package/src/input/ColorInput.tsx
CHANGED
package/src/input/Hidden.tsx
CHANGED
|
@@ -33,6 +33,10 @@ interface Props {
|
|
|
33
33
|
* hidden value will fire change for form update
|
|
34
34
|
*/
|
|
35
35
|
hiddenValue?: AnyObject;
|
|
36
|
+
/**
|
|
37
|
+
* default avatar image
|
|
38
|
+
*/
|
|
39
|
+
defaultValue?: string;
|
|
36
40
|
/**
|
|
37
41
|
* form onChange handler
|
|
38
42
|
*/
|
|
@@ -49,6 +53,7 @@ interface Props {
|
|
|
49
53
|
*/
|
|
50
54
|
export const HiddenInput = ({
|
|
51
55
|
hiddenValue,
|
|
56
|
+
defaultValue,
|
|
52
57
|
onChange,
|
|
53
58
|
// @ts-expect-error ignore
|
|
54
59
|
// eslint-disable-next-line react/prop-types
|
|
@@ -62,11 +67,10 @@ export const HiddenInput = ({
|
|
|
62
67
|
name,
|
|
63
68
|
}: Props) => {
|
|
64
69
|
useEffect(() => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}, [hiddenValue]);
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
onChange?.(hiddenValue ?? defaultValue);
|
|
72
|
+
}, 50);
|
|
73
|
+
}, [hiddenValue, defaultValue]);
|
|
70
74
|
return (
|
|
71
75
|
<Fragment>
|
|
72
76
|
<input type="hidden" onChange={onChange} value={value} name={name} />
|
package/src/input/Slider.tsx
CHANGED
|
@@ -214,8 +214,8 @@ export const Slider = ({
|
|
|
214
214
|
<div
|
|
215
215
|
ref={rangerInstance.trackElRef}
|
|
216
216
|
className={classNames(
|
|
217
|
-
"
|
|
218
|
-
vertical ? "my-2 w-8" : "mx-2 h-8",
|
|
217
|
+
"relative flex items-center",
|
|
218
|
+
vertical ? "my-2 w-8" : "flex-1 mx-2 h-8",
|
|
219
219
|
)}
|
|
220
220
|
style={{ height: vertical ? height : undefined }}
|
|
221
221
|
>
|
|
@@ -262,10 +262,10 @@ export const Slider = ({
|
|
|
262
262
|
{displayValue && (
|
|
263
263
|
<div
|
|
264
264
|
className={classNames(
|
|
265
|
-
"bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap",
|
|
265
|
+
"bg-invert text-invert py-px px-2 text-xs absolute rounded z-[5] whitespace-nowrap pointer-events-none",
|
|
266
266
|
"before:absolute before:h-1.5 before:w-1.5 before:z-[-1] before:bg-invert before:top-1/2 before:-translate-y-1/2 before:rotate-45",
|
|
267
267
|
vertical
|
|
268
|
-
? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2"
|
|
268
|
+
? "end-0 ltr:translate-x-full rtl:-translate-x-full translate-y-2 ltr:before:-translate-x-[0.125rem] rtl:before:translate-x-[0.125rem] before:start-0"
|
|
269
269
|
: "top-1/2 -translate-y-1/2",
|
|
270
270
|
!vertical &&
|
|
271
271
|
(percentage > 50
|
package/src/input/Textarea.tsx
CHANGED
|
@@ -131,7 +131,7 @@ export const Textarea = ({
|
|
|
131
131
|
{...rest}
|
|
132
132
|
>
|
|
133
133
|
<textarea
|
|
134
|
-
className="appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-
|
|
134
|
+
className="appearance-none self-stretch bg-transparent py-1 px-2 flex-1 border-none outline-none ring-0 min-h-12 resize-none"
|
|
135
135
|
aria-invalid={invalid}
|
|
136
136
|
aria-disabled={disabled}
|
|
137
137
|
aria-readonly={readOnly}
|
package/src/select/List.tsx
CHANGED
|
@@ -61,6 +61,7 @@ export const List = <T extends AnyObject = string>({
|
|
|
61
61
|
groupProperty,
|
|
62
62
|
labelProperty,
|
|
63
63
|
valueProperty,
|
|
64
|
+
infoProperty,
|
|
64
65
|
sortProperty,
|
|
65
66
|
multiple,
|
|
66
67
|
allowCreate,
|
|
@@ -106,6 +107,7 @@ export const List = <T extends AnyObject = string>({
|
|
|
106
107
|
value,
|
|
107
108
|
options,
|
|
108
109
|
multiple,
|
|
110
|
+
alwaysOpen: true,
|
|
109
111
|
groupProperty,
|
|
110
112
|
labelProperty,
|
|
111
113
|
valueProperty,
|
|
@@ -320,6 +322,7 @@ export const List = <T extends AnyObject = string>({
|
|
|
320
322
|
itemRef={setItemRef}
|
|
321
323
|
itemProps={makeItemProps}
|
|
322
324
|
empty={emptyDisplay}
|
|
325
|
+
info={state.activeItem?.[infoProperty ?? "info"]}
|
|
323
326
|
>
|
|
324
327
|
{(item, label) => renderer?.(item) ?? label}
|
|
325
328
|
</Options>
|
package/src/select/Options.tsx
CHANGED
|
@@ -34,6 +34,7 @@ export const Options = ({
|
|
|
34
34
|
className,
|
|
35
35
|
itemRef,
|
|
36
36
|
empty,
|
|
37
|
+
info,
|
|
37
38
|
valueProperty = "id",
|
|
38
39
|
labelProperty = "label",
|
|
39
40
|
itemProps,
|
|
@@ -41,6 +42,7 @@ export const Options = ({
|
|
|
41
42
|
...rest
|
|
42
43
|
}: {
|
|
43
44
|
ref: AnyObject;
|
|
45
|
+
info?: AnyObject;
|
|
44
46
|
itemRef: AnyObject;
|
|
45
47
|
style?: AnyObject;
|
|
46
48
|
items: AnyObject[];
|
|
@@ -55,29 +57,48 @@ export const Options = ({
|
|
|
55
57
|
return (
|
|
56
58
|
<div
|
|
57
59
|
ref={ref}
|
|
58
|
-
className={classNames(
|
|
59
|
-
"bg-base select-none overflow-x-hidden overflow-y-auto",
|
|
60
|
-
className,
|
|
61
|
-
)}
|
|
60
|
+
className={classNames("bg-base select-none flex flex-col", className)}
|
|
62
61
|
style={style}
|
|
63
62
|
{...rest}
|
|
64
63
|
>
|
|
65
|
-
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
64
|
+
<div className={classNames("overflow-x-hidden overflow-y-auto flex-1")}>
|
|
65
|
+
{items.length === 0 &&
|
|
66
|
+
(empty ?? (
|
|
67
|
+
<EmptyContent message={<Trans i18nKey="form:select.emptyList" />} />
|
|
68
|
+
))}
|
|
69
|
+
{items.map((item, index) => {
|
|
70
|
+
if (item.___group___)
|
|
71
|
+
return (
|
|
72
|
+
<p
|
|
73
|
+
key={index}
|
|
74
|
+
className="px-2 py-1 text-muted text-xs sticky -top-px z-2 bg-base border-t"
|
|
75
|
+
>
|
|
76
|
+
{item.label}
|
|
77
|
+
</p>
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
if (item.___create___)
|
|
81
|
+
return (
|
|
82
|
+
<div
|
|
83
|
+
role="none"
|
|
84
|
+
key={index}
|
|
85
|
+
tabIndex={active === index ? 0 : -1}
|
|
86
|
+
ref={(el: AnyObject) => itemRef(index, el)}
|
|
87
|
+
data-active={active === index ? true : undefined}
|
|
88
|
+
className={classNames(
|
|
89
|
+
"block text-start truncate px-2 py-1 leading-normal cursor-pointer select-none",
|
|
90
|
+
"data-[active]:bg-primary-200 data-[selected]:bg-primary-600 data-[selected]:text-white data-[active]:data-[selected]:underline",
|
|
91
|
+
)}
|
|
92
|
+
{...itemProps(item)}
|
|
93
|
+
>
|
|
94
|
+
<Trans
|
|
95
|
+
i18nKey="form:select.createOption"
|
|
96
|
+
values={{ query: item.value ?? item }}
|
|
97
|
+
components={[<strong key="t0">query</strong>]}
|
|
98
|
+
/>
|
|
99
|
+
</div>
|
|
100
|
+
);
|
|
79
101
|
|
|
80
|
-
if (item.___create___)
|
|
81
102
|
return (
|
|
82
103
|
<div
|
|
83
104
|
role="none"
|
|
@@ -86,36 +107,19 @@ export const Options = ({
|
|
|
86
107
|
ref={(el: AnyObject) => itemRef(index, el)}
|
|
87
108
|
data-active={active === index ? true : undefined}
|
|
88
109
|
className={classNames(
|
|
89
|
-
"block text-start truncate px-2 py-1 leading-normal cursor-pointer
|
|
110
|
+
"block text-start truncate px-2 py-1 leading-normal cursor-pointer",
|
|
90
111
|
"data-[active]:bg-primary-200 data-[selected]:bg-primary-600 data-[selected]:text-white data-[active]:data-[selected]:underline",
|
|
91
112
|
)}
|
|
92
113
|
{...itemProps(item)}
|
|
93
114
|
>
|
|
94
|
-
|
|
95
|
-
i18nKey="form:select.createOption"
|
|
96
|
-
values={{ query: item.value ?? item }}
|
|
97
|
-
components={[<strong key="t0">query</strong>]}
|
|
98
|
-
/>
|
|
115
|
+
{children(item, item[labelProperty] ?? item)}
|
|
99
116
|
</div>
|
|
100
117
|
);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
tabIndex={active === index ? 0 : -1}
|
|
107
|
-
ref={(el: AnyObject) => itemRef(index, el)}
|
|
108
|
-
data-active={active === index ? true : undefined}
|
|
109
|
-
className={classNames(
|
|
110
|
-
"block text-start truncate px-2 py-1 leading-normal cursor-pointer",
|
|
111
|
-
"data-[active]:bg-primary-200 data-[selected]:bg-primary-600 data-[selected]:text-white data-[active]:data-[selected]:underline",
|
|
112
|
-
)}
|
|
113
|
-
{...itemProps(item)}
|
|
114
|
-
>
|
|
115
|
-
{children(item, item[labelProperty] ?? item)}
|
|
116
|
-
</div>
|
|
117
|
-
);
|
|
118
|
-
})}
|
|
118
|
+
})}
|
|
119
|
+
</div>
|
|
120
|
+
{info && (
|
|
121
|
+
<div className="px-2 py-1 text-sm bg-dimmed text-muted">{info}</div>
|
|
122
|
+
)}
|
|
119
123
|
</div>
|
|
120
124
|
);
|
|
121
125
|
};
|
package/src/select/Select.tsx
CHANGED
|
@@ -70,6 +70,7 @@ export const Select = <T extends AnyObject = string>({
|
|
|
70
70
|
labelProperty = "label" as AnyObject,
|
|
71
71
|
valueProperty = "id" as AnyObject,
|
|
72
72
|
sortProperty,
|
|
73
|
+
infoProperty,
|
|
73
74
|
multiple,
|
|
74
75
|
searchable,
|
|
75
76
|
allowCreate,
|
|
@@ -357,6 +358,7 @@ export const Select = <T extends AnyObject = string>({
|
|
|
357
358
|
itemRef={setItemRef}
|
|
358
359
|
itemProps={makeItemProps}
|
|
359
360
|
empty={emptyDisplay}
|
|
361
|
+
info={state.activeItem?.[infoProperty ?? "info"]}
|
|
360
362
|
>
|
|
361
363
|
{(item, label) => renderer?.(item) ?? label}
|
|
362
364
|
</Options>
|
package/src/select/useSelect.tsx
CHANGED
|
@@ -65,6 +65,7 @@ interface State {
|
|
|
65
65
|
open: boolean;
|
|
66
66
|
loading: boolean;
|
|
67
67
|
activeIndex: number | null;
|
|
68
|
+
activeItem: AnyObject;
|
|
68
69
|
selectedIndex: number | null;
|
|
69
70
|
value: AnyObject;
|
|
70
71
|
// filter
|
|
@@ -76,8 +77,9 @@ interface State {
|
|
|
76
77
|
export const useSelect = ({
|
|
77
78
|
options = EMPTY_ARRAY,
|
|
78
79
|
value,
|
|
79
|
-
defaultOpen = false,
|
|
80
80
|
autoComplete,
|
|
81
|
+
alwaysOpen = false,
|
|
82
|
+
defaultOpen = false,
|
|
81
83
|
multiple = false,
|
|
82
84
|
allowCreate = false,
|
|
83
85
|
groupProperty = "",
|
|
@@ -93,6 +95,7 @@ export const useSelect = ({
|
|
|
93
95
|
value?: AnyObject;
|
|
94
96
|
options?: AnyObject[];
|
|
95
97
|
multiple?: boolean;
|
|
98
|
+
alwaysOpen?: boolean;
|
|
96
99
|
defaultOpen?: boolean;
|
|
97
100
|
allowCreate?: boolean;
|
|
98
101
|
groupProperty?: AnyObject;
|
|
@@ -149,12 +152,16 @@ export const useSelect = ({
|
|
|
149
152
|
};
|
|
150
153
|
}
|
|
151
154
|
if (action.type === "close") {
|
|
152
|
-
return { ...state, activeIndex: null, open: false };
|
|
155
|
+
return { ...state, activeIndex: null, activeItem: null, open: false };
|
|
153
156
|
}
|
|
154
157
|
if (action.type === "active" && state.open) {
|
|
155
158
|
if (autoComplete && action.index !== null)
|
|
156
159
|
state.query = state.items[action.index];
|
|
157
|
-
return {
|
|
160
|
+
return {
|
|
161
|
+
...state,
|
|
162
|
+
activeIndex: action.index,
|
|
163
|
+
activeItem: state.items[action.index ?? -1],
|
|
164
|
+
};
|
|
158
165
|
}
|
|
159
166
|
if (action.type === "setValue") {
|
|
160
167
|
return {
|
|
@@ -170,6 +177,7 @@ export const useSelect = ({
|
|
|
170
177
|
...state,
|
|
171
178
|
value: state.emptyValue,
|
|
172
179
|
activeIndex: null,
|
|
180
|
+
activeItem: null,
|
|
173
181
|
selectedIndex: autoComplete
|
|
174
182
|
? state.multiple
|
|
175
183
|
? action.value?.length
|
|
@@ -192,7 +200,7 @@ export const useSelect = ({
|
|
|
192
200
|
newState.value = action.value;
|
|
193
201
|
}
|
|
194
202
|
}
|
|
195
|
-
if (!state.multiple) newState.open =
|
|
203
|
+
if (!state.multiple) newState.open = alwaysOpen;
|
|
196
204
|
fireChange(newState.value);
|
|
197
205
|
return newState;
|
|
198
206
|
}
|
|
@@ -261,9 +269,10 @@ export const useSelect = ({
|
|
|
261
269
|
{
|
|
262
270
|
multiple,
|
|
263
271
|
emptyValue,
|
|
264
|
-
open: defaultOpen,
|
|
272
|
+
open: alwaysOpen || defaultOpen,
|
|
265
273
|
loading: false,
|
|
266
274
|
activeIndex: null,
|
|
275
|
+
activeItem: null,
|
|
267
276
|
selectedIndex: null,
|
|
268
277
|
value: emptyValue,
|
|
269
278
|
// filter
|
|
@@ -407,7 +416,7 @@ export const useSelect = ({
|
|
|
407
416
|
}, []);
|
|
408
417
|
|
|
409
418
|
const setActiveIndex = useCallback((index: number | null) => {
|
|
410
|
-
dispatch({ type: "active", index });
|
|
419
|
+
index && index > -1 && dispatch({ type: "active", index });
|
|
411
420
|
}, []);
|
|
412
421
|
|
|
413
422
|
return {
|
package/src/types/index.ts
CHANGED