@react-fabric/form 1.0.0-beta.56 → 1.0.0-beta.58

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.
Files changed (52) hide show
  1. package/css/_field.css +2 -1
  2. package/dist/cjs/form/Form.js +24 -0
  3. package/dist/cjs/index.js +1 -0
  4. package/dist/cjs/input/ArrayInput.js +34 -13
  5. package/dist/cjs/input/AvatarInput.js +17 -10
  6. package/dist/cjs/input/ColorInput.js +1 -0
  7. package/dist/cjs/input/Hidden.js +4 -3
  8. package/dist/cjs/input/Slider.js +2 -2
  9. package/dist/cjs/input/Textarea.js +1 -1
  10. package/dist/cjs/select/DualList.js +16 -8
  11. package/dist/cjs/select/List.js +5 -2
  12. package/dist/cjs/select/Options.js +49 -42
  13. package/dist/cjs/select/Select.js +4 -2
  14. package/dist/cjs/select/useSelect.js +14 -7
  15. package/dist/esm/form/Form.js +26 -3
  16. package/dist/esm/index.js +1 -1
  17. package/dist/esm/input/ArrayInput.js +35 -14
  18. package/dist/esm/input/AvatarInput.js +17 -10
  19. package/dist/esm/input/ColorInput.js +1 -0
  20. package/dist/esm/input/Hidden.js +4 -3
  21. package/dist/esm/input/Slider.js +2 -2
  22. package/dist/esm/input/Textarea.js +1 -1
  23. package/dist/esm/select/DualList.js +16 -8
  24. package/dist/esm/select/List.js +5 -2
  25. package/dist/esm/select/Options.js +49 -42
  26. package/dist/esm/select/Select.js +4 -2
  27. package/dist/esm/select/useSelect.js +14 -7
  28. package/dist/types/form/Form.d.ts +11 -0
  29. package/dist/types/index.d.ts +1 -1
  30. package/dist/types/input/ArrayInput.d.ts +5 -8
  31. package/dist/types/input/AvatarInput.d.ts +6 -1
  32. package/dist/types/input/Hidden.d.ts +5 -1
  33. package/dist/types/select/List.d.ts +1 -1
  34. package/dist/types/select/Options.d.ts +2 -1
  35. package/dist/types/select/Select.d.ts +1 -1
  36. package/dist/types/select/useSelect.d.ts +4 -1
  37. package/dist/types/types/index.d.ts +4 -0
  38. package/package.json +20 -21
  39. package/src/form/Form.tsx +34 -2
  40. package/src/index.ts +1 -1
  41. package/src/input/ArrayInput.tsx +55 -21
  42. package/src/input/AvatarInput.tsx +32 -5
  43. package/src/input/ColorInput.tsx +1 -0
  44. package/src/input/Hidden.tsx +9 -5
  45. package/src/input/Slider.tsx +4 -4
  46. package/src/input/Textarea.tsx +1 -1
  47. package/src/select/DualList.tsx +4 -8
  48. package/src/select/List.tsx +3 -0
  49. package/src/select/Options.tsx +47 -43
  50. package/src/select/Select.tsx +2 -0
  51. package/src/select/useSelect.tsx +15 -6
  52. package/src/types/index.ts +4 -0
package/css/_field.css CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  @layer components {
25
25
  .fabric-fieldWrapper {
26
- /* later */
26
+ padding: 1px;
27
27
  }
28
28
  }
29
29
 
@@ -68,6 +68,7 @@
68
68
  & input,
69
69
  & textarea {
70
70
  max-width: 100%;
71
+ line-height: 1;
71
72
  }
72
73
 
73
74
  & > input[type="number"] + .inputClear {
@@ -165,5 +165,29 @@ var Form = function Form(_ref) {
165
165
  }))
166
166
  }));
167
167
  };
168
+ var useForm = function useForm() {
169
+ var _useFormContext = reactHookForm.useFormContext(),
170
+ formState = _useFormContext.formState,
171
+ getValues = _useFormContext.getValues,
172
+ setValue = _useFormContext.setValue,
173
+ watch = _useFormContext.watch,
174
+ reset = _useFormContext.reset,
175
+ resetField = _useFormContext.resetField,
176
+ setError = _useFormContext.setError,
177
+ setFocus = _useFormContext.setFocus;
178
+ var values = reactHookForm.useWatch();
179
+ return {
180
+ values: _objectSpread(_objectSpread({}, values), getValues()),
181
+ formState: formState,
182
+ getValues: getValues,
183
+ setValue: setValue,
184
+ watch: watch,
185
+ reset: reset,
186
+ resetField: resetField,
187
+ setError: setError,
188
+ setFocus: setFocus
189
+ };
190
+ };
168
191
 
169
192
  exports.Form = Form;
193
+ exports.useForm = useForm;
package/dist/cjs/index.js CHANGED
@@ -35,6 +35,7 @@ var Select = require('./select/Select.js');
35
35
 
36
36
  exports.Controller = Controller.Controller;
37
37
  exports.Form = Form.Form;
38
+ exports.useForm = Form.useForm;
38
39
  exports.SchemaEditor = SchemaEditor.SchemaEditor;
39
40
  exports.useFileUploader = useFileUploader.useFileUploader;
40
41
  exports.useFormBuilder = useFormBuilder.useFormBuilder;
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
5
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
6
  var core = require('@dnd-kit/core');
6
7
  var sortable = require('@dnd-kit/sortable');
@@ -15,7 +16,7 @@ var modifiers = require('@dnd-kit/modifiers');
15
16
  var utilities$1 = require('@dnd-kit/utilities');
16
17
  var jsxRuntime = require('react/jsx-runtime');
17
18
 
18
- var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "buttonPosition", "onAdd", "onRemove", "onBeforeRemove", "canRemove", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
19
+ var _excluded = ["name", "children", "addLabel", "focusName", "buttonPosition", "onAdd", "onRemove", "onBeforeRemove", "canRemove", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
19
20
  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; }
20
21
  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; }
21
22
  /**
@@ -61,7 +62,6 @@ var ArrayInput = function ArrayInput(_ref) {
61
62
  var name = _ref.name,
62
63
  children = _ref.children,
63
64
  addLabel = _ref.addLabel,
64
- fixedList = _ref.fixedList,
65
65
  _ref$focusName = _ref.focusName,
66
66
  focusName = _ref$focusName === void 0 ? "" : _ref$focusName,
67
67
  _ref$buttonPosition = _ref.buttonPosition,
@@ -94,11 +94,35 @@ var ArrayInput = function ArrayInput(_ref) {
94
94
  append = _useFieldArray.append,
95
95
  remove = _useFieldArray.remove,
96
96
  move = _useFieldArray.move;
97
+ var _useState = react.useState([]),
98
+ _useState2 = _slicedToArray(_useState, 2),
99
+ initialList = _useState2[0],
100
+ setInitialList = _useState2[1];
101
+ react.useEffect(function () {
102
+ setInitialList(fields.map(function (f) {
103
+ return f.__ID__;
104
+ }));
105
+ }, []);
97
106
  var error = react.useMemo(function () {
98
107
  var _form$formState$error, _form$formState$error2, _form$formState$error3;
99
108
  return (_form$formState$error = (_form$formState$error2 = form.formState.errors[name]) === null || _form$formState$error2 === void 0 ? void 0 : _form$formState$error2.message) !== null && _form$formState$error !== void 0 ? _form$formState$error : (_form$formState$error3 = form.formState.errors[name]) === null || _form$formState$error3 === void 0 || (_form$formState$error3 = _form$formState$error3.root) === null || _form$formState$error3 === void 0 ? void 0 : _form$formState$error3.message;
100
109
  }, [form.formState.errors]);
110
+ var removeCheck = react.useCallback(function (item, index) {
111
+ if (canRemove === false) return false;
112
+ if (canRemove === "newonly") {
113
+ return initialList.includes(item.__ID__) ? false : true;
114
+ }
115
+ if (typeof canRemove === "function") {
116
+ return canRemove({
117
+ item: item,
118
+ index: index,
119
+ lastItem: index + 1 === fields.length
120
+ });
121
+ }
122
+ return true;
123
+ }, [canRemove, initialList, fields]);
101
124
  var handleAdd = react.useCallback(function (item) {
125
+ if (!item) return;
102
126
  append(item);
103
127
  setTimeout(function () {
104
128
  form.setFocus("".concat(name, ".").concat(fields.length).concat(focusName ? "." + focusName : ""));
@@ -199,18 +223,18 @@ var ArrayInput = function ArrayInput(_ref) {
199
223
  },
200
224
  "data-invalid": !!error,
201
225
  disabled: !!disabled || readOnly || fields.length > maxItems,
202
- className: classNames("fabric-addButton", "me-10"),
203
- children: addLabel !== null && addLabel !== void 0 ? addLabel : t("addArray")
226
+ className: classNames("fabric-addButton", canRemove !== false && "me-10"),
227
+ children: addLabel !== null && addLabel !== void 0 ? addLabel : t("form:addArray")
204
228
  })
205
229
  })
206
230
  });
207
- }, [error, fields, handleAdd, disabled, readOnly, addLabel, maxItems]);
231
+ }, [error, fields, handleAdd, canRemove, disabled, readOnly, addLabel, maxItems]);
208
232
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
209
233
  className: "fabric-arrayInput",
210
234
  children: [/*#__PURE__*/jsxRuntime.jsx(FieldWrapper.FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
211
235
  appendLabel: /*#__PURE__*/jsxRuntime.jsx("div", {
212
236
  className: "-me-2",
213
- children: !fixedList && onAdd && buttonPosition !== "bottom" && addButton
237
+ children: onAdd && buttonPosition !== "bottom" && addButton
214
238
  }),
215
239
  children: /*#__PURE__*/jsxRuntime.jsx(Wrapper, {
216
240
  children: fields.map(function (item, index) {
@@ -219,6 +243,7 @@ var ArrayInput = function ArrayInput(_ref) {
219
243
  className: "flex items-center flex-nowrap gap-2 mb-1",
220
244
  children: [typeof children === "function" ? children({
221
245
  index: index,
246
+ item: item,
222
247
  name: "".concat(name, ".").concat(index)
223
248
  }) : core$1.cloneChildren(children, function (child) {
224
249
  return /*#__PURE__*/react.cloneElement(child, Object.assign({
@@ -231,17 +256,13 @@ var ArrayInput = function ArrayInput(_ref) {
231
256
  required: undefined,
232
257
  appendLabel: undefined
233
258
  }));
234
- }), !fixedList && /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
259
+ }), canRemove !== false && /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
235
260
  "aria-label": "Remove item",
236
261
  icon: core$1.CoreIcons.remove,
237
262
  color: "danger",
238
263
  variant: "link",
239
264
  className: "self-end",
240
- disabled: disabled || readOnly || fields.length <= minItems || (canRemove === null || canRemove === void 0 ? void 0 : canRemove({
241
- item: item,
242
- index: index,
243
- lastItem: index + 1 === fields.length
244
- })) !== false,
265
+ disabled: disabled || readOnly || fields.length <= minItems || removeCheck(item, index) === false,
245
266
  onClick: function onClick() {
246
267
  return handleRemove(item, index);
247
268
  }
@@ -249,7 +270,7 @@ var ArrayInput = function ArrayInput(_ref) {
249
270
  }, item.__ID__);
250
271
  })
251
272
  })
252
- })), !fixedList && onAdd && buttonPosition !== "top" && addButton]
273
+ })), onAdd && buttonPosition !== "top" && addButton]
253
274
  });
254
275
  };
255
276
 
@@ -9,9 +9,10 @@ var core = require('@react-fabric/core');
9
9
  var react = require('react');
10
10
  var useFileUploader = require('../hooks/useFileUploader.js');
11
11
  var Hidden = require('./Hidden.js');
12
+ var classNames = require('classnames');
12
13
  var jsxRuntime = require('react/jsx-runtime');
13
14
 
14
- var _excluded = ["size", "avatarName", "value", "defaultValue", "fileUrl", "uploadHandler"];
15
+ var _excluded = ["size", "avatarName", "avatarClassName", "value", "rounded", "defaultValue", "fallbackIcon", "variant", "fileUrl", "uploadHandler"];
15
16
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
17
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
18
  /**
@@ -23,12 +24,16 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
23
24
  * @returns {JSX.Element} - The rendered AvatarInput component.
24
25
  */
25
26
  var AvatarInput = function AvatarInput(_ref) {
26
- var _list$0$path, _list$;
27
+ var _list$;
27
28
  var _ref$size = _ref.size,
28
29
  size = _ref$size === void 0 ? "6rem" : _ref$size,
29
30
  avatarName = _ref.avatarName,
31
+ avatarClassName = _ref.avatarClassName,
30
32
  value = _ref.value,
33
+ rounded = _ref.rounded,
31
34
  defaultValue = _ref.defaultValue,
35
+ fallbackIcon = _ref.fallbackIcon,
36
+ variant = _ref.variant,
32
37
  fileUrl = _ref.fileUrl,
33
38
  uploadHandler = _ref.uploadHandler,
34
39
  rest = _objectWithoutProperties(_ref, _excluded);
@@ -86,13 +91,17 @@ var AvatarInput = function AvatarInput(_ref) {
86
91
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
87
92
  className: "flex flex-nowrap items-end overflow-hidden",
88
93
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
89
- className: "inline-block leading-none rounded-full relative outline overflow-hidden",
94
+ className: classNames("inline-block leading-none relative outline overflow-hidden", rounded && "rounded-full", !rounded && "rounded"),
90
95
  children: [/*#__PURE__*/jsxRuntime.jsx(core.Avatar, {
91
96
  name: avatarName !== null && avatarName !== void 0 ? avatarName : "temp",
92
97
  size: size,
93
- avatar: base64
98
+ avatar: base64,
99
+ rounded: rounded,
100
+ variant: variant,
101
+ fallbackIcon: fallbackIcon,
102
+ className: avatarClassName
94
103
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
95
- className: "absolute inset-x-0 bottom-0 cursor-pointer bg-black/20 hover:bg-black/50 text-white text-xs text-center py-1",
104
+ className: "absolute inset-x-0 bottom-0 cursor-pointer opacity-50 bg-black/50 hover:opacity-90 text-white text-xs text-center py-1",
96
105
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
97
106
  children: "Edit"
98
107
  }), /*#__PURE__*/jsxRuntime.jsx("input", {
@@ -105,16 +114,14 @@ var AvatarInput = function AvatarInput(_ref) {
105
114
  })]
106
115
  })]
107
116
  }), /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, _objectSpread({
108
- hiddenValue: (_list$0$path = list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path) !== null && _list$0$path !== void 0 ? _list$0$path : defaultValue
117
+ hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path,
118
+ defaultValue: defaultValue
109
119
  }, rest)), files.map(function (file, idx) {
110
120
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
111
121
  className: "px-2 py-1 flex-1 overflow-hidden",
112
122
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
113
123
  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", {
124
+ children: [file.error && /*#__PURE__*/jsxRuntime.jsx("div", {
118
125
  className: "flex-1 truncate px-2",
119
126
  children: /*#__PURE__*/jsxRuntime.jsx("span", {
120
127
  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({
@@ -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
- hiddenValue && setTimeout(function () {
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",
@@ -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("flex-1 relative flex items-center", vertical ? "my-2 w-8" : "mx-2 h-8"),
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-20 resize-none",
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,
@@ -190,36 +190,44 @@ var DualList = function DualList(_ref) {
190
190
  vertical: true,
191
191
  className: "outline overflow-hidden bg-base",
192
192
  children: [/*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
193
- rtlFlip: true,
194
193
  size: "sm",
195
194
  variant: "link",
196
195
  "aria-label": "scroll to top",
197
196
  onClick: moveAllLeft,
198
- icon: core$1.CoreIcons.chevronsLeft,
197
+ icon: {
198
+ icon: core$1.CoreIcons.chevronsLeft,
199
+ rtlFlip: true
200
+ },
199
201
  disabled: !rightOptions.length
200
202
  }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
201
- rtlFlip: true,
202
203
  size: "sm",
203
204
  variant: "link",
204
205
  "aria-label": "scroll up",
205
206
  onClick: moveRightSelected,
206
- icon: core$1.CoreIcons.chevronLeft,
207
+ icon: {
208
+ icon: core$1.CoreIcons.chevronLeft,
209
+ rtlFlip: true
210
+ },
207
211
  disabled: !rightSelected.length
208
212
  }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
209
- rtlFlip: true,
210
213
  size: "sm",
211
214
  variant: "link",
212
215
  "aria-label": "scroll down",
213
216
  onClick: moveLeftSelected,
214
- icon: core$1.CoreIcons.chevronRight,
217
+ icon: {
218
+ icon: core$1.CoreIcons.chevronRight,
219
+ rtlFlip: true
220
+ },
215
221
  disabled: !leftSelected.length
216
222
  }), /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
217
- rtlFlip: true,
218
223
  size: "sm",
219
224
  variant: "link",
220
225
  "aria-label": "scroll to bottom",
221
226
  onClick: moveAllRight,
222
- icon: core$1.CoreIcons.chevronsRight,
227
+ icon: {
228
+ icon: core$1.CoreIcons.chevronsRight,
229
+ rtlFlip: true
230
+ },
223
231
  disabled: !leftOptions.length
224
232
  })]
225
233
  })
@@ -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 overflow-x-hidden overflow-y-auto", className),
30
+ className: classNames("bg-base select-none flex flex-col", className),
30
31
  style: style
31
32
  }, rest), {}, {
32
- children: [items.length === 0 && (empty !== null && empty !== void 0 ? empty : /*#__PURE__*/jsxRuntime.jsx(core.EmptyContent, {
33
- message: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
34
- i18nKey: "form:select.emptyList"
35
- })
36
- })), items.map(function (item, index) {
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
- return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
62
- role: "none",
63
- tabIndex: active === index ? 0 : -1,
64
- ref: function ref(el) {
65
- return itemRef(index, el);
66
- },
67
- "data-active": active === index ? true : undefined,
68
- 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")
69
- }, itemProps(item)), {}, {
70
- children: children(item, (_item$labelProperty = item[labelProperty]) !== null && _item$labelProperty !== void 0 ? _item$labelProperty : item)
71
- }), index);
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 = false;
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$index;
119
+ var _action$index2;
114
120
  newValue = _toConsumableArray(newValue);
115
- newValue.splice((_action$index = action.index) !== null && _action$index !== void 0 ? _action$index : -1, 1);
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
  });