@react-fabric/form 1.0.0-beta.46 → 1.0.0-beta.48

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 (69) hide show
  1. package/dist/cjs/builder/FormField.js +7 -1
  2. package/dist/cjs/builder/components/SchemaField.js +2 -1
  3. package/dist/cjs/input/ArrayInput.js +27 -10
  4. package/dist/cjs/input/AvatarInput.js +8 -7
  5. package/dist/cjs/input/DateInput.js +2 -4
  6. package/dist/cjs/input/File.js +1 -3
  7. package/dist/cjs/input/Input.js +2 -4
  8. package/dist/cjs/input/Number.js +1 -3
  9. package/dist/cjs/input/Password.js +1 -3
  10. package/dist/cjs/input/Search.js +3 -5
  11. package/dist/cjs/input/Switch.js +2 -1
  12. package/dist/cjs/input/Textarea.js +4 -3
  13. package/dist/cjs/internal/FieldWrapper.js +6 -0
  14. package/dist/cjs/select/AutoComplete.js +3 -2
  15. package/dist/cjs/select/List.js +3 -1
  16. package/dist/cjs/select/Select.js +3 -1
  17. package/dist/cjs/select/useSelect.js +2 -1
  18. package/dist/cjs/types/schema.js +1 -0
  19. package/dist/cjs/utils/eventHandlers.js +11 -5
  20. package/dist/esm/builder/FormField.js +7 -1
  21. package/dist/esm/builder/components/SchemaField.js +2 -1
  22. package/dist/esm/input/ArrayInput.js +24 -7
  23. package/dist/esm/input/AvatarInput.js +8 -7
  24. package/dist/esm/input/DateInput.js +3 -5
  25. package/dist/esm/input/File.js +3 -5
  26. package/dist/esm/input/Input.js +4 -6
  27. package/dist/esm/input/Number.js +3 -5
  28. package/dist/esm/input/Password.js +3 -5
  29. package/dist/esm/input/Search.js +5 -7
  30. package/dist/esm/input/Switch.js +2 -1
  31. package/dist/esm/input/Textarea.js +5 -4
  32. package/dist/esm/internal/FieldWrapper.js +6 -0
  33. package/dist/esm/select/AutoComplete.js +3 -2
  34. package/dist/esm/select/List.js +3 -1
  35. package/dist/esm/select/Select.js +3 -1
  36. package/dist/esm/select/useSelect.js +2 -1
  37. package/dist/esm/types/schema.js +1 -0
  38. package/dist/esm/utils/eventHandlers.js +11 -5
  39. package/dist/types/form/Form.d.ts +5 -1
  40. package/dist/types/input/ArrayInput.d.ts +20 -4
  41. package/dist/types/input/AvatarInput.d.ts +6 -3
  42. package/dist/types/internal/FieldWrapper.d.ts +1 -1
  43. package/dist/types/select/List.d.ts +1 -1
  44. package/dist/types/select/Select.d.ts +1 -1
  45. package/dist/types/select/useSelect.d.ts +2 -1
  46. package/dist/types/types/index.d.ts +4 -0
  47. package/dist/types/types/schema.d.ts +2 -2
  48. package/dist/types/utils/eventHandlers.d.ts +1 -1
  49. package/package.json +9 -9
  50. package/src/builder/FormField.tsx +8 -1
  51. package/src/builder/components/SchemaField.tsx +2 -1
  52. package/src/form/Form.tsx +7 -1
  53. package/src/input/ArrayInput.tsx +50 -12
  54. package/src/input/AvatarInput.tsx +11 -7
  55. package/src/input/DateInput.tsx +3 -6
  56. package/src/input/File.tsx +2 -6
  57. package/src/input/Input.tsx +3 -7
  58. package/src/input/Number.tsx +2 -6
  59. package/src/input/Password.tsx +2 -6
  60. package/src/input/Search.tsx +4 -8
  61. package/src/input/Textarea.tsx +6 -4
  62. package/src/internal/FieldWrapper.tsx +4 -0
  63. package/src/select/AutoComplete.tsx +1 -0
  64. package/src/select/List.tsx +2 -0
  65. package/src/select/Select.tsx +2 -0
  66. package/src/select/useSelect.tsx +4 -1
  67. package/src/types/index.ts +4 -0
  68. package/src/types/schema.ts +2 -2
  69. package/src/utils/eventHandlers.ts +9 -3
@@ -49,6 +49,7 @@ var FormField = function FormField(_ref) {
49
49
  if (rest.datatype === schema.DATA_TYPES.BOOL) return Switch.Switch;
50
50
  if (rest.datatype === schema.DATA_TYPES.TEXT) return Textarea.Textarea;
51
51
  if (rest.datatype === schema.DATA_TYPES.DATE) return DateInput.DateInput;
52
+ if (rest.datatype === schema.DATA_TYPES.DATETIME) return DateInput.DateInput;
52
53
  if (rest.datatype === schema.DATA_TYPES.COLOR) return ColorInput.ColorInput;
53
54
  if (hasOptions) return Select.Select;
54
55
  return Input.Input;
@@ -70,7 +71,12 @@ var FormField = function FormField(_ref) {
70
71
  if (rest.datatype === schema.DATA_TYPES.DATE) return {
71
72
  min: rest.min,
72
73
  max: rest.max,
73
- type: rest.type
74
+ type: "date"
75
+ };
76
+ if (rest.datatype === schema.DATA_TYPES.DATETIME) return {
77
+ min: rest.min,
78
+ max: rest.max,
79
+ type: "datetime"
74
80
  };
75
81
  if (rest.datatype === schema.DATA_TYPES.TEXT) return {
76
82
  rows: 3
@@ -146,7 +146,8 @@ var SchemaField = function SchemaField(_ref) {
146
146
  });
147
147
  } else if (type === schema.DATA_TYPES.DATE) {
148
148
  reset = Object.assign(reset, {
149
- type: "date"
149
+ min: modelRef.min,
150
+ max: modelRef.max
150
151
  });
151
152
  } else if (type === schema.DATA_TYPES.NUMBER || type === schema.DATA_TYPES.RANGE) {
152
153
  reset = Object.assign(reset, {
@@ -5,17 +5,17 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
5
5
  var core = require('@dnd-kit/core');
6
6
  var sortable = require('@dnd-kit/sortable');
7
7
  var core$1 = require('@react-fabric/core');
8
- var utilities$1 = require('@react-fabric/utilities');
8
+ var utilities = require('@react-fabric/utilities');
9
9
  var classNames = require('classnames');
10
10
  var react = require('react');
11
11
  var reactHookForm = require('react-hook-form');
12
12
  var reactI18next = require('react-i18next');
13
13
  var FieldWrapper = require('../internal/FieldWrapper.js');
14
14
  var modifiers = require('@dnd-kit/modifiers');
15
- var utilities = require('@dnd-kit/utilities');
15
+ var utilities$1 = require('@dnd-kit/utilities');
16
16
  var jsxRuntime = require('react/jsx-runtime');
17
17
 
18
- var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "buttonPosition", "onAdd", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
18
+ var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "buttonPosition", "onAdd", "onRemove", "onBeforeRemove", "canRemove", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
21
  var ArrayInput = function ArrayInput(_ref) {
@@ -28,6 +28,9 @@ var ArrayInput = function ArrayInput(_ref) {
28
28
  _ref$buttonPosition = _ref.buttonPosition,
29
29
  buttonPosition = _ref$buttonPosition === void 0 ? "bottom" : _ref$buttonPosition,
30
30
  onAdd = _ref.onAdd,
31
+ onRemove = _ref.onRemove,
32
+ onBeforeRemove = _ref.onBeforeRemove,
33
+ canRemove = _ref.canRemove,
31
34
  arrayRef = _ref.arrayRef,
32
35
  enableSorting = _ref.enableSorting,
33
36
  _ref$disabled = _ref.disabled,
@@ -45,6 +48,7 @@ var ArrayInput = function ArrayInput(_ref) {
45
48
  if (!(form !== null && form !== void 0 && form.control)) throw new Error("ArrayInput must be contained within a Form element");
46
49
  var _useFieldArray = reactHookForm.useFieldArray({
47
50
  name: name,
51
+ keyName: "__ID__",
48
52
  control: form.control
49
53
  }),
50
54
  fields = _useFieldArray.fields,
@@ -61,6 +65,15 @@ var ArrayInput = function ArrayInput(_ref) {
61
65
  form.setFocus("".concat(name, ".").concat(fields.length).concat(focusName ? "." + focusName : ""));
62
66
  }, 100);
63
67
  }, [name, fields, focusName]);
68
+ var handleRemove = react.useCallback(function (item, index) {
69
+ var ret = onBeforeRemove === null || onBeforeRemove === void 0 ? void 0 : onBeforeRemove(item, index);
70
+ void Promise.resolve(ret).then(function (b) {
71
+ if (!utilities.isFalse(b)) {
72
+ remove(index);
73
+ onRemove === null || onRemove === void 0 || onRemove(item, index);
74
+ }
75
+ });
76
+ }, [remove, onRemove, onBeforeRemove]);
64
77
  react.useImperativeHandle(arrayRef, function () {
65
78
  return {
66
79
  addItem: handleAdd,
@@ -72,7 +85,7 @@ var ArrayInput = function ArrayInput(_ref) {
72
85
  if (enableSorting) {
73
86
  // pass id list to dnd context
74
87
  var idMap = fields.map(function (item) {
75
- return item.id;
88
+ return item.__ID__;
76
89
  });
77
90
  var handleDragEnd = function handleDragEnd(e) {
78
91
  if (e.over && e.active.id !== e.over.id) {
@@ -113,7 +126,7 @@ var ArrayInput = function ArrayInput(_ref) {
113
126
  className: className,
114
127
  ref: setNodeRef,
115
128
  style: {
116
- transform: utilities.CSS.Transform.toString(transform),
129
+ transform: utilities$1.CSS.Transform.toString(transform),
117
130
  transition: transition
118
131
  },
119
132
  children: [/*#__PURE__*/jsxRuntime.jsx(core$1.Icon, _objectSpread(_objectSpread({
@@ -135,7 +148,7 @@ var ArrayInput = function ArrayInput(_ref) {
135
148
  className: "flex justify-end",
136
149
  children: /*#__PURE__*/jsxRuntime.jsx(core$1.Tooltip, {
137
150
  color: "danger-200",
138
- content: utilities$1.isString(error) ? "".concat(error) : t(error === null || error === void 0 ? void 0 : error.key, error !== null && error !== void 0 && error.values ? _objectSpread(_objectSpread({}, error === null || error === void 0 ? void 0 : error.values), {}, {
151
+ content: utilities.isString(error) ? "".concat(error) : t(error === null || error === void 0 ? void 0 : error.key, error !== null && error !== void 0 && error.values ? _objectSpread(_objectSpread({}, error === null || error === void 0 ? void 0 : error.values), {}, {
139
152
  label: t((_error$values$label = (_error$values = error.values) === null || _error$values === void 0 ? void 0 : _error$values.label) !== null && _error$values$label !== void 0 ? _error$values$label : "form:badkey", (_error$values2 = error.values) === null || _error$values2 === void 0 ? void 0 : _error$values2.path)
140
153
  }) : {}),
141
154
  children: /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
@@ -163,7 +176,7 @@ var ArrayInput = function ArrayInput(_ref) {
163
176
  children: /*#__PURE__*/jsxRuntime.jsx(Wrapper, {
164
177
  children: fields.map(function (item, index) {
165
178
  return /*#__PURE__*/jsxRuntime.jsxs(SortableItem, {
166
- id: item.id,
179
+ id: item.__ID__,
167
180
  className: "flex items-center flex-nowrap gap-2 mb-1",
168
181
  children: [typeof children === "function" ? children({
169
182
  index: index,
@@ -185,12 +198,16 @@ var ArrayInput = function ArrayInput(_ref) {
185
198
  color: "danger",
186
199
  variant: "link",
187
200
  className: "self-end",
188
- disabled: disabled || readOnly || fields.length <= minItems,
201
+ disabled: disabled || readOnly || fields.length <= minItems || (canRemove === null || canRemove === void 0 ? void 0 : canRemove({
202
+ item: item,
203
+ index: index,
204
+ lastItem: index + 1 === fields.length
205
+ })) !== false,
189
206
  onClick: function onClick() {
190
- return remove(index);
207
+ return handleRemove(item, index);
191
208
  }
192
209
  })]
193
- }, item.id);
210
+ }, item.__ID__);
194
211
  })
195
212
  })
196
213
  })), !fixedList && onAdd && buttonPosition !== "top" && addButton]
@@ -11,14 +11,15 @@ var useFileUploader = require('../hooks/useFileUploader.js');
11
11
  var Hidden = require('./Hidden.js');
12
12
  var jsxRuntime = require('react/jsx-runtime');
13
13
 
14
- var _excluded = ["src", "size", "fileUrl", "uploadHandler"];
14
+ var _excluded = ["size", "avatarName", "value", "fileUrl", "uploadHandler"];
15
15
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
16
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
17
  var AvatarInput = function AvatarInput(_ref) {
18
18
  var _list$;
19
- var src = _ref.src,
20
- _ref$size = _ref.size,
19
+ var _ref$size = _ref.size,
21
20
  size = _ref$size === void 0 ? "6rem" : _ref$size,
21
+ avatarName = _ref.avatarName,
22
+ value = _ref.value,
22
23
  fileUrl = _ref.fileUrl,
23
24
  uploadHandler = _ref.uploadHandler,
24
25
  rest = _objectWithoutProperties(_ref, _excluded);
@@ -40,7 +41,7 @@ var AvatarInput = function AvatarInput(_ref) {
40
41
  return function (_x, _x2) {
41
42
  return _ref2.apply(this, arguments);
42
43
  };
43
- }(), rest.value, false),
44
+ }(), value, false),
44
45
  files = _useFileUploader.files,
45
46
  list = _useFileUploader.list,
46
47
  upload = _useFileUploader.upload,
@@ -69,14 +70,14 @@ var AvatarInput = function AvatarInput(_ref) {
69
70
  }, [files, list]);
70
71
  react.useEffect(function () {
71
72
  var _fileUrl;
72
- src && setBase64((_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(src)) !== null && _fileUrl !== void 0 ? _fileUrl : src);
73
- }, [src]);
73
+ value && setBase64((_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(value)) !== null && _fileUrl !== void 0 ? _fileUrl : value);
74
+ }, [value]);
74
75
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
75
76
  className: "flex flex-nowrap items-end",
76
77
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
77
78
  className: "inline-block leading-none rounded-full relative outline overflow-hidden",
78
79
  children: [/*#__PURE__*/jsxRuntime.jsx(core.Avatar, {
79
- name: "temp",
80
+ name: avatarName !== null && avatarName !== void 0 ? avatarName : "temp",
80
81
  size: size,
81
82
  avatar: base64
82
83
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -6,10 +6,10 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
6
6
  var react$1 = require('@floating-ui/react');
7
7
  var date = require('@react-fabric/date');
8
8
  var utilities = require('@react-fabric/utilities');
9
+ var classNames = require('classnames');
9
10
  var react = require('react');
10
11
  var InputWrapper = require('../internal/InputWrapper.js');
11
12
  var eventHandlers = require('../utils/eventHandlers.js');
12
- var classNames = require('classnames');
13
13
  var jsxRuntime = require('react/jsx-runtime');
14
14
 
15
15
  var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "type", "onBlur", "onFocus", "onChange", "onEnterPressed", "format", "min", "max"];
@@ -52,9 +52,7 @@ var DateInput = function DateInput(_ref) {
52
52
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
53
53
  setInputValue(deferred ? date.DateUtil.format(deferred, inputFormat) : "");
54
54
  }, [deferred, inputFormat]);
55
- var handleEnterPressed = react.useMemo(function () {
56
- return eventHandlers.handleEnter(onEnterPressed);
57
- }, [onEnterPressed]);
55
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
58
56
  var handleChange = react.useCallback(function (e) {
59
57
  var value = e === null || e === void 0 ? void 0 : e.currentTarget.value;
60
58
  if (value) {
@@ -59,9 +59,7 @@ var FileInput = function FileInput(_ref) {
59
59
  actualValue = _useState6[0],
60
60
  setActualValue = _useState6[1];
61
61
  var deferred = react.useDeferredValue(value);
62
- var handleEnterPressed = react.useMemo(function () {
63
- return eventHandlers.handleEnter(onEnterPressed);
64
- }, [onEnterPressed]);
62
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
65
63
  react.useEffect(function () {
66
64
  setActualValue(deferred);
67
65
  }, [deferred]);
@@ -3,11 +3,11 @@
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
4
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
5
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
+ var classNames = require('classnames');
6
7
  var react = require('react');
7
8
  var InputWrapper = require('../internal/InputWrapper.js');
8
9
  var eventHandlers = require('../utils/eventHandlers.js');
9
10
  require('@react-fabric/utilities');
10
- var classNames = require('classnames');
11
11
  var jsxRuntime = require('react/jsx-runtime');
12
12
 
13
13
  var _excluded = ["ref", "name", "value", "invalid", "readOnly", "disabled", "required", "placeholder", "autoFocus", "error", "monospace", "type", "onBlur", "onFocus", "onChange", "onEnterPressed"];
@@ -37,9 +37,7 @@ var Input = function Input(_ref) {
37
37
  actualValue = _useState2[0],
38
38
  setActualValue = _useState2[1];
39
39
  var deferred = react.useDeferredValue(value);
40
- var handleEnterPressed = react.useMemo(function () {
41
- return eventHandlers.handleEnter(onEnterPressed);
42
- }, [onEnterPressed]);
40
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
43
41
  react.useEffect(function () {
44
42
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
45
43
  }, [deferred]);
@@ -35,9 +35,7 @@ var Number = function Number(_ref) {
35
35
  actualValue = _useState2[0],
36
36
  setActualValue = _useState2[1];
37
37
  var deferred = react.useDeferredValue(value);
38
- var handleEnterPressed = react.useMemo(function () {
39
- return eventHandlers.handleEnter(onEnterPressed);
40
- }, [onEnterPressed]);
38
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
41
39
  react.useEffect(function () {
42
40
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
43
41
  }, [deferred]);
@@ -43,9 +43,7 @@ var Password = function Password(_ref) {
43
43
  actualValue = _useState4[0],
44
44
  setActualValue = _useState4[1];
45
45
  var deferred = react.useDeferredValue(value);
46
- var handleEnterPressed = react.useMemo(function () {
47
- return eventHandlers.handleEnter(onEnterPressed);
48
- }, [onEnterPressed]);
46
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed);
49
47
  react.useEffect(function () {
50
48
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
51
49
  }, [deferred]);
@@ -44,9 +44,7 @@ var Search = function Search(_ref) {
44
44
  var handleSearch = core.useDebounce(function () {
45
45
  return onSearch === null || onSearch === void 0 ? void 0 : onSearch(refValue.current);
46
46
  }, [onSearch], 250);
47
- var handleEnterPressed = react.useMemo(function () {
48
- return eventHandlers.handleEnter(handleSearch);
49
- }, [handleSearch]);
47
+ var handleEnterPressed = eventHandlers.useHandleEnter(handleSearch);
50
48
  react.useEffect(function () {
51
49
  setActualValue(deferred !== null && deferred !== void 0 ? deferred : "");
52
50
  }, [deferred]);
@@ -56,8 +54,8 @@ var Search = function Search(_ref) {
56
54
  setActualValue(value !== null && value !== void 0 ? value : "");
57
55
  onChange === null || onChange === void 0 || onChange(value !== null && value !== void 0 ? value : null);
58
56
 
59
- // value was cleared so force fire onSearch
60
- if (searchOnChange) {
57
+ // when e is undefined value was cleared so force fire onSearch
58
+ if (!e || searchOnChange) {
61
59
  handleSearch();
62
60
  }
63
61
  }, [onChange, searchOnChange, handleSearch]);
@@ -6,7 +6,8 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
6
6
  var classNames = require('classnames');
7
7
  var react = require('react');
8
8
  var ErrorIcon = require('../internal/ErrorIcon.js');
9
- require('@react-fabric/utilities');
9
+ require('@floating-ui/react');
10
+ require('@react-fabric/core');
10
11
  var getColor = require('../utils/getColor.js');
11
12
  var jsxRuntime = require('react/jsx-runtime');
12
13
 
@@ -60,6 +60,9 @@ var Textarea = function Textarea(_ref) {
60
60
  setFixedRows(rows);
61
61
  }
62
62
  }, [actualValue, variableRows, rows, maxRows]);
63
+ var handleEnterPressed = eventHandlers.useHandleEnter(onEnterPressed, {
64
+ preventDefault: !!onEnterPressed
65
+ });
63
66
  return /*#__PURE__*/jsxRuntime.jsx(InputWrapper.InputWrapper, _objectSpread(_objectSpread({
64
67
  showClear: !!actualValue && !disabled && !readOnly,
65
68
  onClear: handleChange,
@@ -89,9 +92,7 @@ var Textarea = function Textarea(_ref) {
89
92
  onBlur: onBlur,
90
93
  onFocus: onFocus,
91
94
  onChange: handleChange,
92
- onKeyDown: eventHandlers.handleEnter(onEnterPressed, {
93
- preventDefault: !!onEnterPressed
94
- })
95
+ onKeyDown: handleEnterPressed
95
96
  })
96
97
  }));
97
98
  };
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var classNames = require('classnames');
4
+ var ErrorIcon = require('./ErrorIcon.js');
4
5
  var jsxRuntime = require('react/jsx-runtime');
5
6
 
6
7
  /*
@@ -39,6 +40,8 @@ var FieldWrapper = function FieldWrapper(_ref) {
39
40
  children = _ref.children,
40
41
  listing = _ref.listing,
41
42
  className = _ref.className,
43
+ invalid = _ref.invalid,
44
+ error = _ref.error,
42
45
  isInner = _ref["data-inner"];
43
46
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
44
47
  className: classNames("fabric-fieldWrapper", className, inline ? "flex flex-nowrap gap-1" : "block"),
@@ -63,6 +66,9 @@ var FieldWrapper = function FieldWrapper(_ref) {
63
66
  }), required && /*#__PURE__*/jsxRuntime.jsx("span", {
64
67
  className: "text-danger-500 select-none flex-content text-[10px]",
65
68
  children: "\u273D"
69
+ }), /*#__PURE__*/jsxRuntime.jsx(ErrorIcon.ErrorIcon, {
70
+ invalid: invalid,
71
+ error: error
66
72
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
67
73
  className: "flex-1"
68
74
  }), appendLabel && /*#__PURE__*/jsxRuntime.jsx("span", {
@@ -17,8 +17,8 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
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 AutoComplete = function AutoComplete(_ref) {
19
19
  var _refs$reference$curre;
20
- _ref.ref;
21
- var name = _ref.name,
20
+ var ref = _ref.ref,
21
+ name = _ref.name,
22
22
  value = _ref.value,
23
23
  invalid = _ref.invalid,
24
24
  readOnly = _ref.readOnly,
@@ -220,6 +220,7 @@ var AutoComplete = function AutoComplete(_ref) {
220
220
  "data-testid": name,
221
221
  name: name,
222
222
  size: 1,
223
+ ref: ref,
223
224
  onInput: onInput,
224
225
  autoFocus: autoFocus,
225
226
  rows: !multiple && expandOnEdit && state.open ? 5 : 1,
@@ -13,7 +13,7 @@ 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", "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", "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) {
@@ -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
+ sortProperty = _ref.sortProperty,
34
35
  multiple = _ref.multiple,
35
36
  allowCreate = _ref.allowCreate,
36
37
  searchable = _ref.searchable,
@@ -63,6 +64,7 @@ var List = function List(_ref) {
63
64
  groupProperty: groupProperty,
64
65
  labelProperty: labelProperty,
65
66
  valueProperty: valueProperty,
67
+ sortProperty: sortProperty,
66
68
  allowCreate: allowCreate,
67
69
  createOption: createOption,
68
70
  matcher: matcher,
@@ -12,7 +12,7 @@ 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", "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", "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) {
@@ -35,6 +35,7 @@ var Select = function Select(_ref) {
35
35
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
36
36
  _ref$valueProperty = _ref.valueProperty,
37
37
  valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
38
+ sortProperty = _ref.sortProperty,
38
39
  multiple = _ref.multiple,
39
40
  searchable = _ref.searchable,
40
41
  allowCreate = _ref.allowCreate,
@@ -55,6 +56,7 @@ var Select = function Select(_ref) {
55
56
  groupProperty: groupProperty,
56
57
  labelProperty: labelProperty,
57
58
  valueProperty: valueProperty,
59
+ sortProperty: sortProperty,
58
60
  allowCreate: allowCreate,
59
61
  createOption: createOption,
60
62
  matcher: matcher,
@@ -27,6 +27,7 @@ var useSelect = function useSelect(_ref) {
27
27
  valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
28
28
  _ref$labelProperty = _ref.labelProperty,
29
29
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
30
+ sortProperty = _ref.sortProperty,
30
31
  _ref$createOption = _ref.createOption,
31
32
  createOption = _ref$createOption === void 0 ? helpers.makeOption : _ref$createOption,
32
33
  matcher = _ref.matcher,
@@ -135,7 +136,7 @@ var useSelect = function useSelect(_ref) {
135
136
  if (autoComplete && action.query !== undefined) {
136
137
  optionList = utilities.dedupe([action.query].concat(_toConsumableArray(optionList)));
137
138
  }
138
- optionList = optionList.sort(utilities.compareValues("asc", labelProperty));
139
+ if (sortProperty) optionList = optionList.sort(utilities.compareValues("asc", sortProperty));
139
140
  var grouped = utilities.groupBy(optionList, groupProperty, "");
140
141
  if (action.open) _newState.open = true;
141
142
  _newState.items = [];
@@ -28,6 +28,7 @@ var DATA_TYPES = /*#__PURE__*/function (DATA_TYPES) {
28
28
  DATA_TYPES["COLOR"] = "color";
29
29
  DATA_TYPES["BOOL"] = "bool";
30
30
  DATA_TYPES["DATE"] = "date";
31
+ DATA_TYPES["DATETIME"] = "datetime";
31
32
  DATA_TYPES["STRING"] = "string";
32
33
  DATA_TYPES["NUMBER"] = "number";
33
34
  DATA_TYPES["RANGE"] = "range";
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var utilities = require('@react-fabric/utilities');
3
+ var react = require('@floating-ui/react');
4
+ var core = require('@react-fabric/core');
4
5
 
5
6
  /*
6
7
  * React Fabric
@@ -26,16 +27,21 @@ var utilities = require('@react-fabric/utilities');
26
27
  */
27
28
 
28
29
  /** ***************** common handler for enter press *******************/
29
- var handleEnter = function handleEnter(callback) {
30
+ var useHandleEnter = function useHandleEnter(callback) {
30
31
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
31
32
  _ref$stopPropagation = _ref.stopPropagation,
32
33
  stopPropagation = _ref$stopPropagation === void 0 ? false : _ref$stopPropagation,
33
34
  _ref$preventDefault = _ref.preventDefault,
34
35
  preventDefault = _ref$preventDefault === void 0 ? false : _ref$preventDefault;
35
- var cbHandle = utilities.debounce(callback !== null && callback !== void 0 ? callback : function () {
36
+ var cbHandle = core.useDebounce(callback !== null && callback !== void 0 ? callback : function () {
36
37
  return undefined;
37
- }, 100);
38
+ }, [callback], 100);
39
+ var tree = react.useFloatingTree();
38
40
  return function (e) {
41
+ // prevent propagation of event if input within dropdown (work around for floating-ui typeahead)
42
+ if (tree && e.key !== "Escape") {
43
+ e === null || e === void 0 || e.stopPropagation();
44
+ }
39
45
  if (!e.shiftKey && !e.altKey && !e.metaKey && e.key === "Enter" && callback) {
40
46
  if (stopPropagation) e === null || e === void 0 || e.stopPropagation();
41
47
  cbHandle(e);
@@ -47,4 +53,4 @@ var handleEnter = function handleEnter(callback) {
47
53
  };
48
54
  };
49
55
 
50
- exports.handleEnter = handleEnter;
56
+ exports.useHandleEnter = useHandleEnter;
@@ -49,6 +49,7 @@ var FormField = function FormField(_ref) {
49
49
  if (rest.datatype === DATA_TYPES.BOOL) return Switch;
50
50
  if (rest.datatype === DATA_TYPES.TEXT) return Textarea;
51
51
  if (rest.datatype === DATA_TYPES.DATE) return DateInput;
52
+ if (rest.datatype === DATA_TYPES.DATETIME) return DateInput;
52
53
  if (rest.datatype === DATA_TYPES.COLOR) return ColorInput;
53
54
  if (hasOptions) return Select;
54
55
  return Input;
@@ -70,7 +71,12 @@ var FormField = function FormField(_ref) {
70
71
  if (rest.datatype === DATA_TYPES.DATE) return {
71
72
  min: rest.min,
72
73
  max: rest.max,
73
- type: rest.type
74
+ type: "date"
75
+ };
76
+ if (rest.datatype === DATA_TYPES.DATETIME) return {
77
+ min: rest.min,
78
+ max: rest.max,
79
+ type: "datetime"
74
80
  };
75
81
  if (rest.datatype === DATA_TYPES.TEXT) return {
76
82
  rows: 3
@@ -146,7 +146,8 @@ var SchemaField = function SchemaField(_ref) {
146
146
  });
147
147
  } else if (type === DATA_TYPES.DATE) {
148
148
  reset = Object.assign(reset, {
149
- type: "date"
149
+ min: modelRef.min,
150
+ max: modelRef.max
150
151
  });
151
152
  } else if (type === DATA_TYPES.NUMBER || type === DATA_TYPES.RANGE) {
152
153
  reset = Object.assign(reset, {
@@ -5,7 +5,7 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
5
5
  import { DndContext } from '@dnd-kit/core';
6
6
  import { SortableContext, useSortable } from '@dnd-kit/sortable';
7
7
  import { Icon, CoreIcons, Tooltip, Button, cloneChildren } from '@react-fabric/core';
8
- import { isString } from '@react-fabric/utilities';
8
+ import { isFalse, isString } from '@react-fabric/utilities';
9
9
  import classNames from 'classnames';
10
10
  import { useMemo, useCallback, useImperativeHandle, cloneElement } from 'react';
11
11
  import { useFormContext, useFieldArray } from 'react-hook-form';
@@ -15,7 +15,7 @@ import { restrictToVerticalAxis } from '@dnd-kit/modifiers';
15
15
  import { CSS } from '@dnd-kit/utilities';
16
16
  import { jsx, jsxs } from 'react/jsx-runtime';
17
17
 
18
- var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "buttonPosition", "onAdd", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
18
+ var _excluded = ["name", "children", "addLabel", "fixedList", "focusName", "buttonPosition", "onAdd", "onRemove", "onBeforeRemove", "canRemove", "arrayRef", "enableSorting", "disabled", "readOnly", "minItems", "maxItems"];
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
21
  var ArrayInput = function ArrayInput(_ref) {
@@ -28,6 +28,9 @@ var ArrayInput = function ArrayInput(_ref) {
28
28
  _ref$buttonPosition = _ref.buttonPosition,
29
29
  buttonPosition = _ref$buttonPosition === void 0 ? "bottom" : _ref$buttonPosition,
30
30
  onAdd = _ref.onAdd,
31
+ onRemove = _ref.onRemove,
32
+ onBeforeRemove = _ref.onBeforeRemove,
33
+ canRemove = _ref.canRemove,
31
34
  arrayRef = _ref.arrayRef,
32
35
  enableSorting = _ref.enableSorting,
33
36
  _ref$disabled = _ref.disabled,
@@ -45,6 +48,7 @@ var ArrayInput = function ArrayInput(_ref) {
45
48
  if (!(form !== null && form !== void 0 && form.control)) throw new Error("ArrayInput must be contained within a Form element");
46
49
  var _useFieldArray = useFieldArray({
47
50
  name: name,
51
+ keyName: "__ID__",
48
52
  control: form.control
49
53
  }),
50
54
  fields = _useFieldArray.fields,
@@ -61,6 +65,15 @@ var ArrayInput = function ArrayInput(_ref) {
61
65
  form.setFocus("".concat(name, ".").concat(fields.length).concat(focusName ? "." + focusName : ""));
62
66
  }, 100);
63
67
  }, [name, fields, focusName]);
68
+ var handleRemove = useCallback(function (item, index) {
69
+ var ret = onBeforeRemove === null || onBeforeRemove === void 0 ? void 0 : onBeforeRemove(item, index);
70
+ void Promise.resolve(ret).then(function (b) {
71
+ if (!isFalse(b)) {
72
+ remove(index);
73
+ onRemove === null || onRemove === void 0 || onRemove(item, index);
74
+ }
75
+ });
76
+ }, [remove, onRemove, onBeforeRemove]);
64
77
  useImperativeHandle(arrayRef, function () {
65
78
  return {
66
79
  addItem: handleAdd,
@@ -72,7 +85,7 @@ var ArrayInput = function ArrayInput(_ref) {
72
85
  if (enableSorting) {
73
86
  // pass id list to dnd context
74
87
  var idMap = fields.map(function (item) {
75
- return item.id;
88
+ return item.__ID__;
76
89
  });
77
90
  var handleDragEnd = function handleDragEnd(e) {
78
91
  if (e.over && e.active.id !== e.over.id) {
@@ -163,7 +176,7 @@ var ArrayInput = function ArrayInput(_ref) {
163
176
  children: /*#__PURE__*/jsx(Wrapper, {
164
177
  children: fields.map(function (item, index) {
165
178
  return /*#__PURE__*/jsxs(SortableItem, {
166
- id: item.id,
179
+ id: item.__ID__,
167
180
  className: "flex items-center flex-nowrap gap-2 mb-1",
168
181
  children: [typeof children === "function" ? children({
169
182
  index: index,
@@ -185,12 +198,16 @@ var ArrayInput = function ArrayInput(_ref) {
185
198
  color: "danger",
186
199
  variant: "link",
187
200
  className: "self-end",
188
- disabled: disabled || readOnly || fields.length <= minItems,
201
+ disabled: disabled || readOnly || fields.length <= minItems || (canRemove === null || canRemove === void 0 ? void 0 : canRemove({
202
+ item: item,
203
+ index: index,
204
+ lastItem: index + 1 === fields.length
205
+ })) !== false,
189
206
  onClick: function onClick() {
190
- return remove(index);
207
+ return handleRemove(item, index);
191
208
  }
192
209
  })]
193
- }, item.id);
210
+ }, item.__ID__);
194
211
  })
195
212
  })
196
213
  })), !fixedList && onAdd && buttonPosition !== "top" && addButton]