@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 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
 
@@ -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$0$path, _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: (_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
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({
@@ -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,
@@ -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
  });
@@ -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$0$path, _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: (_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
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({
@@ -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
- 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__*/jsxs(Fragment, {
52
53
  children: [/*#__PURE__*/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__*/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__*/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-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,
@@ -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 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__*/jsx(EmptyContent, {
33
- message: /*#__PURE__*/jsx(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__*/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
- return /*#__PURE__*/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__*/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 = 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 = 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, defaultOpen, autoComplete, multiple, allowCreate, groupProperty, valueProperty, labelProperty, sortProperty, createOption, matcher, onQuery, onChange, onSelect, }: {
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;
@@ -122,6 +122,10 @@ export interface BaseSelectProps<T extends AnyObject = string> {
122
122
  * value property name
123
123
  */
124
124
  valueProperty?: keyof T;
125
+ /**
126
+ * value property name
127
+ */
128
+ infoProperty?: keyof T;
125
129
  /**
126
130
  * value property name
127
131
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-fabric/form",
3
- "version": "1.0.0-beta.56",
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.55",
45
- "@react-fabric/date": "^1.0.0-beta.55",
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": "fd9dd6cfd1a58efb5c4bfb6446928a78cb4f4266"
66
+ "gitHead": "9b596a0a8d6cecaa8479f80c495b64fb42ce739f"
67
67
  }
@@ -129,11 +129,14 @@ export const AvatarInput = ({
129
129
  />
130
130
  </div>
131
131
  </div>
132
- <HiddenInput hiddenValue={list?.[0]?.path ?? defaultValue} {...rest} />
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>
@@ -148,6 +148,7 @@ export const ColorInput = ({
148
148
  >
149
149
  <button
150
150
  data-ref="button"
151
+ type="button"
151
152
  className="flex-1 flex items-center"
152
153
  ref={refs.setReference}
153
154
  {...getReferenceProps({
@@ -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
- hiddenValue &&
66
- setTimeout(() => {
67
- onChange?.(hiddenValue);
68
- }, 50);
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} />
@@ -214,8 +214,8 @@ export const Slider = ({
214
214
  <div
215
215
  ref={rangerInstance.trackElRef}
216
216
  className={classNames(
217
- "flex-1 relative flex items-center",
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
@@ -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-20 resize-none"
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}
@@ -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>
@@ -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
- {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
- );
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 select-none",
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
- <Trans
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
- return (
103
- <div
104
- role="none"
105
- key={index}
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
  };
@@ -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>
@@ -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 { ...state, activeIndex: action.index };
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 = false;
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 {
@@ -154,6 +154,10 @@ export interface BaseSelectProps<T extends AnyObject = string> {
154
154
  * value property name
155
155
  */
156
156
  valueProperty?: keyof T;
157
+ /**
158
+ * value property name
159
+ */
160
+ infoProperty?: keyof T;
157
161
  /**
158
162
  * value property name
159
163
  */