@react-fabric/form 1.0.0-beta.61 → 1.0.0-beta.63

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 (155) hide show
  1. package/css/_colorPicker.css +35 -5
  2. package/css/_file.css +2 -2
  3. package/dist/cjs/builder/FileField.js +14 -11
  4. package/dist/cjs/builder/SchemaEditor.js +1 -1
  5. package/dist/cjs/builder/components/SchemaArrayForm.js +2 -4
  6. package/dist/cjs/builder/components/SchemaField.js +3 -3
  7. package/dist/cjs/form/Controller.js +1 -1
  8. package/dist/cjs/form/Form.js +42 -41
  9. package/dist/cjs/form/useForm.js +32 -0
  10. package/dist/cjs/hooks/useFileUploader.js +44 -32
  11. package/dist/cjs/hooks/useFormBuilder.js +3 -3
  12. package/dist/cjs/i18n/index.js +4 -4
  13. package/dist/cjs/index.js +2 -1
  14. package/dist/cjs/input/ArrayInput.js +66 -19
  15. package/dist/cjs/input/AvatarInput.js +21 -16
  16. package/dist/cjs/input/Checkbox.js +1 -1
  17. package/dist/cjs/input/ColorInput.js +26 -19
  18. package/dist/cjs/input/ColorPicker.js +16 -9
  19. package/dist/cjs/input/DateInput.js +3 -3
  20. package/dist/cjs/input/Field.js +1 -1
  21. package/dist/cjs/input/File.js +1 -1
  22. package/dist/cjs/input/Hidden.js +2 -11
  23. package/dist/cjs/input/Input.js +1 -1
  24. package/dist/cjs/input/Number.js +1 -1
  25. package/dist/cjs/input/Password.js +1 -1
  26. package/dist/cjs/input/Radio.js +1 -1
  27. package/dist/cjs/input/RadioGroup.js +7 -3
  28. package/dist/cjs/input/RangeSlider.js +1 -1
  29. package/dist/cjs/input/Search.js +1 -1
  30. package/dist/cjs/input/Slider.js +1 -1
  31. package/dist/cjs/input/Switch.js +4 -4
  32. package/dist/cjs/input/Textarea.js +1 -1
  33. package/dist/cjs/internal/InputWrapper.js +2 -2
  34. package/dist/cjs/ranger/index.js +5 -5
  35. package/dist/cjs/select/AutoComplete.js +4 -2
  36. package/dist/cjs/select/DualList.js +3 -3
  37. package/dist/cjs/select/List.js +7 -4
  38. package/dist/cjs/select/Options.js +5 -4
  39. package/dist/cjs/select/Select.js +5 -3
  40. package/dist/cjs/select/useSelect.js +15 -13
  41. package/dist/esm/builder/FileField.js +14 -11
  42. package/dist/esm/builder/SchemaEditor.js +1 -1
  43. package/dist/esm/builder/components/SchemaArrayForm.js +2 -4
  44. package/dist/esm/builder/components/SchemaField.js +3 -3
  45. package/dist/esm/form/Controller.js +1 -1
  46. package/dist/esm/form/Form.js +45 -43
  47. package/dist/esm/form/useForm.js +32 -0
  48. package/dist/esm/hooks/useFileUploader.js +45 -33
  49. package/dist/esm/hooks/useFormBuilder.js +3 -3
  50. package/dist/esm/i18n/index.js +2 -2
  51. package/dist/esm/index.js +2 -1
  52. package/dist/esm/input/ArrayInput.js +66 -19
  53. package/dist/esm/input/AvatarInput.js +21 -16
  54. package/dist/esm/input/Checkbox.js +1 -1
  55. package/dist/esm/input/ColorInput.js +27 -20
  56. package/dist/esm/input/ColorPicker.js +17 -10
  57. package/dist/esm/input/DateInput.js +3 -3
  58. package/dist/esm/input/Field.js +1 -1
  59. package/dist/esm/input/File.js +1 -1
  60. package/dist/esm/input/Hidden.js +3 -12
  61. package/dist/esm/input/Input.js +1 -1
  62. package/dist/esm/input/Number.js +1 -1
  63. package/dist/esm/input/Password.js +1 -1
  64. package/dist/esm/input/Radio.js +1 -1
  65. package/dist/esm/input/RadioGroup.js +7 -3
  66. package/dist/esm/input/RangeSlider.js +1 -1
  67. package/dist/esm/input/Search.js +1 -1
  68. package/dist/esm/input/Slider.js +1 -1
  69. package/dist/esm/input/Switch.js +4 -4
  70. package/dist/esm/input/Textarea.js +1 -1
  71. package/dist/esm/internal/InputWrapper.js +2 -2
  72. package/dist/esm/ranger/index.js +5 -5
  73. package/dist/esm/select/AutoComplete.js +4 -2
  74. package/dist/esm/select/DualList.js +3 -3
  75. package/dist/esm/select/List.js +8 -5
  76. package/dist/esm/select/Options.js +5 -4
  77. package/dist/esm/select/Select.js +6 -4
  78. package/dist/esm/select/useSelect.js +15 -13
  79. package/dist/types/builder/FileField.d.ts +2 -1
  80. package/dist/types/builder/SchemaEditor.d.ts +1 -1
  81. package/dist/types/form/Controller.d.ts +1 -1
  82. package/dist/types/form/Form.d.ts +7 -14
  83. package/dist/types/form/useForm.d.ts +11 -0
  84. package/dist/types/hooks/useFileUploader.d.ts +4 -2
  85. package/dist/types/index.d.ts +3 -2
  86. package/dist/types/input/ArrayInput.d.ts +5 -4
  87. package/dist/types/input/AvatarInput.d.ts +2 -2
  88. package/dist/types/input/Checkbox.d.ts +2 -2
  89. package/dist/types/input/ColorInput.d.ts +1 -1
  90. package/dist/types/input/ColorPicker.d.ts +5 -1
  91. package/dist/types/input/DateInput.d.ts +1 -1
  92. package/dist/types/input/Field.d.ts +1 -1
  93. package/dist/types/input/File.d.ts +1 -1
  94. package/dist/types/input/Hidden.d.ts +4 -12
  95. package/dist/types/input/Input.d.ts +1 -1
  96. package/dist/types/input/Number.d.ts +1 -1
  97. package/dist/types/input/Password.d.ts +1 -1
  98. package/dist/types/input/Radio.d.ts +2 -2
  99. package/dist/types/input/RadioGroup.d.ts +7 -3
  100. package/dist/types/input/RangeSlider.d.ts +1 -1
  101. package/dist/types/input/Search.d.ts +1 -1
  102. package/dist/types/input/Slider.d.ts +1 -1
  103. package/dist/types/input/Switch.d.ts +2 -2
  104. package/dist/types/input/Textarea.d.ts +1 -1
  105. package/dist/types/select/AutoComplete.d.ts +1 -1
  106. package/dist/types/select/DualList.d.ts +1 -1
  107. package/dist/types/select/List.d.ts +1 -1
  108. package/dist/types/select/Select.d.ts +1 -1
  109. package/dist/types/types/index.d.ts +3 -3
  110. package/dist/types/types/schema.d.ts +1 -1
  111. package/package.json +14 -14
  112. package/src/builder/FileField.tsx +5 -3
  113. package/src/builder/SchemaEditor.tsx +2 -2
  114. package/src/builder/components/SchemaArrayForm.tsx +1 -3
  115. package/src/builder/components/SchemaField.tsx +3 -3
  116. package/src/form/Controller.tsx +1 -1
  117. package/src/form/Form.tsx +21 -43
  118. package/src/form/useForm.ts +44 -0
  119. package/src/hooks/useFileUploader.ts +41 -29
  120. package/src/i18n/index.ts +2 -2
  121. package/src/index.ts +3 -7
  122. package/src/input/ArrayInput.tsx +20 -10
  123. package/src/input/AvatarInput.tsx +12 -12
  124. package/src/input/Checkbox.tsx +2 -2
  125. package/src/input/ColorInput.tsx +29 -45
  126. package/src/input/ColorPicker.tsx +42 -49
  127. package/src/input/DateInput.tsx +3 -3
  128. package/src/input/Field.tsx +2 -2
  129. package/src/input/File.tsx +1 -1
  130. package/src/input/Hidden.tsx +5 -25
  131. package/src/input/Input.tsx +1 -1
  132. package/src/input/Number.tsx +1 -1
  133. package/src/input/Password.tsx +1 -1
  134. package/src/input/Radio.tsx +2 -2
  135. package/src/input/RadioGroup.tsx +11 -3
  136. package/src/input/RangeSlider.tsx +1 -1
  137. package/src/input/Search.tsx +1 -1
  138. package/src/input/Slider.tsx +1 -1
  139. package/src/input/Switch.tsx +6 -6
  140. package/src/input/Textarea.tsx +1 -1
  141. package/src/internal/InputWrapper.tsx +1 -2
  142. package/src/select/AutoComplete.tsx +13 -52
  143. package/src/select/DualList.tsx +3 -3
  144. package/src/select/List.tsx +31 -69
  145. package/src/select/Options.tsx +4 -3
  146. package/src/select/Select.tsx +19 -41
  147. package/src/select/useSelect.tsx +24 -69
  148. package/src/types/index.ts +3 -3
  149. package/src/types/schema.ts +1 -1
  150. /package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +0 -0
  151. /package/dist/cjs/i18n/{en.json.js → en/form.json.js} +0 -0
  152. /package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +0 -0
  153. /package/dist/esm/i18n/{en.json.js → en/form.json.js} +0 -0
  154. /package/src/i18n/{ar.json → ar/form.json} +0 -0
  155. /package/src/i18n/{en.json → en/form.json} +0 -0
@@ -22,18 +22,48 @@
22
22
  */
23
23
 
24
24
  @layer components {
25
+ .fabric-colorPicker-container ~ svg {
26
+ fill: var(--color-selected);
27
+ }
28
+
25
29
  .fabric-colorPicker {
26
- --color-shadow: var(--border-color-base);
30
+ --color-shadow: var(--border-color-bright);
31
+
32
+ outline: 2px solid var(--color-selected, var(--border-color-soft)) !important;
33
+
34
+ &.block-picker {
35
+ background-color: var(--bg-color-content) !important;
36
+ box-shadow: 0 0 4px 0 var(--color-shadow) !important;
37
+
38
+ input {
39
+ display: none;
40
+ }
41
+
42
+ & > div:first-child {
43
+ display: none;
44
+ }
45
+
46
+ & > div:last-child > div:first-child {
47
+ display: flex;
48
+ flex-wrap: wrap;
49
+ gap: 5px;
50
+ }
51
+
52
+ & span > div {
53
+ margin: 0 !important;
54
+ box-shadow: 0 0 1px 1px var(--border-color-base) inset !important;
55
+ }
56
+ }
27
57
 
28
58
  & input {
29
59
  padding: 0 4px !important;
60
+ border: 1px solid var(--border-color-base);
61
+ border-radius: var(--rounded-sm);
30
62
 
31
63
  line-height: 2;
32
64
  color: var(--text-color-base);
33
65
 
34
- background-color: var(--bg-color-base);
35
- border: 1px solid var(--border-color-base);
36
- border-radius: var(--rounded-sm);
66
+ background-color: var(--bg-color-content);
37
67
  box-shadow: none;
38
68
 
39
69
  &:focus {
@@ -47,7 +77,7 @@
47
77
 
48
78
  & .flexbox-fix {
49
79
  justify-content: center;
50
- border-color: var(--border-color-muted);
80
+ border-color: var(--border-color-soft);
51
81
 
52
82
  & > div > div {
53
83
  text-align: center;
package/css/_file.css CHANGED
@@ -28,13 +28,13 @@
28
28
 
29
29
  padding-block: 0;
30
30
  padding-inline: 4px;
31
+ border: 0;
32
+ border-radius: var(--rounded);
31
33
 
32
34
  color: var(--color-white);
33
35
 
34
36
  opacity: 0.8;
35
37
  background-color: var(--color-primary-500);
36
- border: 0;
37
- border-radius: var(--rounded);
38
38
 
39
39
  &:hover {
40
40
  opacity: 0.9;
@@ -13,7 +13,7 @@ var Field = require('../input/Field.js');
13
13
  var Hidden = require('../input/Hidden.js');
14
14
  var jsxRuntime = require('react/jsx-runtime');
15
15
 
16
- var _excluded = ["uploadHandler", "inline", "label", "accept", "value", "fileUrl", "multiple", "invalid", "error"];
16
+ var _excluded = ["uploadHandler", "inline", "label", "accept", "value", "fileUrl", "onChange", "multiple", "invalid", "error"];
17
17
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
18
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
19
  var FileField = function FileField(_ref) {
@@ -24,22 +24,23 @@ var FileField = function FileField(_ref) {
24
24
  accept = _ref.accept,
25
25
  value = _ref.value;
26
26
  _ref.fileUrl;
27
- var multiple = _ref.multiple;
27
+ var onChange = _ref.onChange,
28
+ multiple = _ref.multiple;
28
29
  _ref.invalid;
29
30
  var error = _ref.error,
30
31
  rest = _objectWithoutProperties(_ref, _excluded);
31
32
  var _useTranslation = reactI18next.useTranslation(),
32
33
  t = _useTranslation.t;
33
- var _useFileUploader = useFileUploader.useFileUploader( /*#__PURE__*/function () {
34
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(data, config) {
35
- return _regeneratorRuntime.wrap(function _callee$(_context) {
34
+ var _useFileUploader = useFileUploader.useFileUploader(/*#__PURE__*/function () {
35
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(data, config) {
36
+ return _regeneratorRuntime.wrap(function (_context) {
36
37
  while (1) switch (_context.prev = _context.next) {
37
38
  case 0:
38
- _context.next = 2;
39
+ _context.next = 1;
39
40
  return uploadHandler === null || uploadHandler === void 0 ? void 0 : uploadHandler(data, config);
40
- case 2:
41
+ case 1:
41
42
  return _context.abrupt("return", _context.sent);
42
- case 3:
43
+ case 2:
43
44
  case "end":
44
45
  return _context.stop();
45
46
  }
@@ -48,10 +49,12 @@ var FileField = function FileField(_ref) {
48
49
  return function (_x, _x2) {
49
50
  return _ref2.apply(this, arguments);
50
51
  };
51
- }(), value, multiple),
52
+ }(), value, {
53
+ multiple: multiple,
54
+ onChange: onChange
55
+ }),
52
56
  pending = _useFileUploader.pending,
53
57
  files = _useFileUploader.files,
54
- list = _useFileUploader.list,
55
58
  upload = _useFileUploader.upload,
56
59
  remove = _useFileUploader.remove;
57
60
  return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
@@ -60,7 +63,7 @@ var FileField = function FileField(_ref) {
60
63
  inline: inline,
61
64
  label: label,
62
65
  children: /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, _objectSpread({
63
- hiddenValue: multiple ? list : list === null || list === void 0 ? void 0 : list[0]
66
+ value: multiple ? files : files === null || files === void 0 ? void 0 : files[0]
64
67
  }, rest))
65
68
  }), /*#__PURE__*/jsxRuntime.jsx(core.Tooltip, {
66
69
  color: "danger-200",
@@ -63,7 +63,7 @@ var SchemaEditor = function SchemaEditor(_ref) {
63
63
  acceptableTypes: acceptableTypes !== null && acceptableTypes !== void 0 ? acceptableTypes : Object.values(schema.DATA_TYPES)
64
64
  }), children && /*#__PURE__*/jsxRuntime.jsx(core.Footer, {
65
65
  flex: true,
66
- className: "border-t bg-base px-6 py-2",
66
+ className: "border-t bg-default px-6 py-2",
67
67
  children: children
68
68
  })]
69
69
  });
@@ -58,9 +58,7 @@ var SchemaArrayForm = function SchemaArrayForm(_ref) {
58
58
  }
59
59
  });
60
60
  }, []);
61
- var Wrapper = react.useCallback(
62
- // eslint-disable-next-line @typescript-eslint/promise-function-async
63
- function (_ref2) {
61
+ var Wrapper = react.useCallback(function (_ref2) {
64
62
  var children = _ref2.children;
65
63
  if (dynamic) {
66
64
  // pass id list to dnd context
@@ -138,7 +136,7 @@ var SchemaArrayForm = function SchemaArrayForm(_ref) {
138
136
  acceptableTypes: acceptableTypes !== null && acceptableTypes !== void 0 ? acceptableTypes : Object.values(schema.DATA_TYPES)
139
137
  }, index);
140
138
  })
141
- }), AddModal]
139
+ }), /*#__PURE__*/jsxRuntime.jsx(AddModal, {})]
142
140
  });
143
141
  };
144
142
 
@@ -104,7 +104,7 @@ var SchemaField = function SchemaField(_ref) {
104
104
  }), /*#__PURE__*/jsxRuntime.jsx(core.Footer, {
105
105
  flex: true,
106
106
  justify: "end",
107
- className: "sticky bottom-0 border-t bg-base px-6 py-2",
107
+ className: "sticky bottom-0 border-t bg-default px-6 py-2",
108
108
  children: /*#__PURE__*/jsxRuntime.jsx(core.Button, {
109
109
  variant: "link",
110
110
  onClick: props.onClose,
@@ -189,7 +189,7 @@ var SchemaField = function SchemaField(_ref) {
189
189
  children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
190
190
  name: "".concat(field, ".id"),
191
191
  children: /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, {
192
- hiddenValue: id
192
+ value: id
193
193
  })
194
194
  }), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
195
195
  name: "".concat(field, ".datatype"),
@@ -250,7 +250,7 @@ var SchemaField = function SchemaField(_ref) {
250
250
  });
251
251
  }
252
252
  })]
253
- }), OptionModal]
253
+ }), /*#__PURE__*/jsxRuntime.jsx(OptionModal, {})]
254
254
  }), type === schema.DATA_TYPES.FILE && /*#__PURE__*/jsxRuntime.jsx(react.Fragment, {
255
255
  children: /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
256
256
  name: "".concat(field, ".accept"),
@@ -36,7 +36,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
36
36
  * to the child component, allowing for proper focus management and DOM access.
37
37
  *
38
38
  * @param {ControllerProps} props - The properties for the Controller component.
39
- * @returns {JSX.Element} The rendered Controller component.
39
+ * @returns {React.ReactElement} The rendered Controller component.
40
40
  *
41
41
  * @example
42
42
  * ```jsx
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
- var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
5
4
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
6
6
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
7
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
8
  var core = require('@react-fabric/core');
@@ -11,7 +11,7 @@ var react = require('react');
11
11
  var reactHookForm = require('react-hook-form');
12
12
  var jsxRuntime = require('react/jsx-runtime');
13
13
 
14
- var _excluded = ["formRef", "resolver", "children", "defaultValues", "onSubmit", "onChange"];
14
+ var _excluded = ["formRef", "resolver", "children", "resetOnChange", "defaultValues", "onSubmit", "onChange"];
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 DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
@@ -24,7 +24,7 @@ var DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
24
24
  * It supports nested form structures and allows for custom validation schemas using Yup.
25
25
  *
26
26
  * @param {FormProps<K>} props - The properties for the Form component.
27
- * @returns {JSX.Element} The rendered Form component.
27
+ * @returns {React.ReactElement} The rendered Form component.
28
28
  *
29
29
  * @example
30
30
  * ```jsx
@@ -50,8 +50,9 @@ var Form = function Form(_ref) {
50
50
  var formRef = _ref.formRef,
51
51
  resolver = _ref.resolver,
52
52
  children = _ref.children,
53
+ resetOnChange = _ref.resetOnChange,
53
54
  _ref$defaultValues = _ref.defaultValues,
54
- defaultValues = _ref$defaultValues === void 0 ? utilities.EMPTY_OBJECT : _ref$defaultValues,
55
+ _defaultValues = _ref$defaultValues === void 0 ? utilities.EMPTY_OBJECT : _ref$defaultValues,
55
56
  _ref$onSubmit = _ref.onSubmit,
56
57
  _onSubmit = _ref$onSubmit === void 0 ? DEFAULT_SUBMIT : _ref$onSubmit,
57
58
  onChange = _ref.onChange,
@@ -60,7 +61,26 @@ var Form = function Form(_ref) {
60
61
  var form = reactHookForm.useForm({
61
62
  shouldFocusError: true,
62
63
  resolver: resolver,
63
- defaultValues: defaultValues
64
+ defaultValues: function () {
65
+ var _defaultValues2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
66
+ return _regeneratorRuntime.wrap(function (_context) {
67
+ while (1) switch (_context.prev = _context.next) {
68
+ case 0:
69
+ _context.next = 1;
70
+ return Promise.resolve(_defaultValues);
71
+ case 1:
72
+ return _context.abrupt("return", _context.sent);
73
+ case 2:
74
+ case "end":
75
+ return _context.stop();
76
+ }
77
+ }, _callee);
78
+ }));
79
+ function defaultValues() {
80
+ return _defaultValues2.apply(this, arguments);
81
+ }
82
+ return defaultValues;
83
+ }()
64
84
  });
65
85
  var _useTransition = react.useTransition(),
66
86
  _useTransition2 = _slicedToArray(_useTransition, 2),
@@ -82,12 +102,17 @@ var Form = function Form(_ref) {
82
102
  form.reset(reset);
83
103
  form.clearErrors();
84
104
  (_ref$current = ref.current) === null || _ref$current === void 0 || (_ref$current = _ref$current.querySelector("[auto-focus], input, textarea")) === null || _ref$current === void 0 || _ref$current.focus();
85
- }, [defaultValues]);
105
+ }, []);
106
+ react.useEffect(function () {
107
+ if (resetOnChange) {
108
+ handleReset(_defaultValues);
109
+ }
110
+ }, [_defaultValues, resetOnChange]);
86
111
  react.useImperativeHandle(formRef, function () {
87
112
  return {
88
113
  state: form.formState,
89
114
  reset: function reset() {
90
- return handleReset(defaultValues);
115
+ return handleReset(_defaultValues);
91
116
  },
92
117
  clear: function clear() {
93
118
  return handleReset();
@@ -96,19 +121,19 @@ var Form = function Form(_ref) {
96
121
  return form.handleSubmit(_onSubmit);
97
122
  },
98
123
  validate: function () {
99
- var _validate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(fields) {
100
- return _regeneratorRuntime.wrap(function _callee$(_context) {
101
- while (1) switch (_context.prev = _context.next) {
124
+ var _validate = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(fields) {
125
+ return _regeneratorRuntime.wrap(function (_context2) {
126
+ while (1) switch (_context2.prev = _context2.next) {
102
127
  case 0:
103
- _context.next = 2;
128
+ _context2.next = 1;
104
129
  return form.trigger(fields);
130
+ case 1:
131
+ return _context2.abrupt("return", _context2.sent);
105
132
  case 2:
106
- return _context.abrupt("return", _context.sent);
107
- case 3:
108
133
  case "end":
109
- return _context.stop();
134
+ return _context2.stop();
110
135
  }
111
- }, _callee);
136
+ }, _callee2);
112
137
  }));
113
138
  function validate(_x) {
114
139
  return _validate.apply(this, arguments);
@@ -132,7 +157,7 @@ var Form = function Form(_ref) {
132
157
  }, 50);
133
158
  }
134
159
  };
135
- }, [_onSubmit, form, form.formState, defaultValues]);
160
+ }, [_onSubmit, form, form.formState, _defaultValues]);
136
161
  var onInvalid = react.useCallback(function (_, e) {
137
162
  var el = e.target;
138
163
  console.log("Invalid:", _, e);
@@ -145,7 +170,7 @@ var Form = function Form(_ref) {
145
170
  children: /*#__PURE__*/jsxRuntime.jsxs("form", _objectSpread(_objectSpread({
146
171
  ref: ref,
147
172
  onReset: function onReset() {
148
- return handleReset(defaultValues);
173
+ return handleReset(_defaultValues);
149
174
  },
150
175
  onSubmit: function onSubmit(e) {
151
176
  e.stopPropagation();
@@ -162,29 +187,5 @@ var Form = function Form(_ref) {
162
187
  }))
163
188
  }));
164
189
  };
165
- var useForm = function useForm() {
166
- var _useFormContext = reactHookForm.useFormContext(),
167
- formState = _useFormContext.formState,
168
- getValues = _useFormContext.getValues,
169
- setValue = _useFormContext.setValue,
170
- watch = _useFormContext.watch,
171
- reset = _useFormContext.reset,
172
- resetField = _useFormContext.resetField,
173
- setError = _useFormContext.setError,
174
- setFocus = _useFormContext.setFocus;
175
- var values = reactHookForm.useWatch();
176
- return {
177
- values: _objectSpread(_objectSpread({}, values), getValues()),
178
- formState: formState,
179
- getValues: getValues,
180
- setValue: setValue,
181
- watch: watch,
182
- reset: reset,
183
- resetField: resetField,
184
- setError: setError,
185
- setFocus: setFocus
186
- };
187
- };
188
190
 
189
191
  exports.Form = Form;
190
- exports.useForm = useForm;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var reactHookForm = require('react-hook-form');
5
+
6
+ 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; }
7
+ 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; }
8
+ var useForm = function useForm() {
9
+ var _useFormContext = reactHookForm.useFormContext(),
10
+ formState = _useFormContext.formState,
11
+ getValues = _useFormContext.getValues,
12
+ setValue = _useFormContext.setValue,
13
+ watch = _useFormContext.watch,
14
+ reset = _useFormContext.reset,
15
+ resetField = _useFormContext.resetField,
16
+ setError = _useFormContext.setError,
17
+ setFocus = _useFormContext.setFocus;
18
+ var values = reactHookForm.useWatch();
19
+ return {
20
+ values: _objectSpread(_objectSpread({}, values), getValues()),
21
+ formState: formState,
22
+ getValues: getValues,
23
+ setValue: setValue,
24
+ watch: watch,
25
+ reset: reset,
26
+ resetField: resetField,
27
+ setError: setError,
28
+ setFocus: setFocus
29
+ };
30
+ };
31
+
32
+ exports.useForm = useForm;
@@ -29,7 +29,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
29
29
  * ```
30
30
  */
31
31
  var useFileUploader = function useFileUploader(uploader, initialList) {
32
- var multiple = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
32
+ var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
33
+ _ref$multiple = _ref.multiple,
34
+ multiple = _ref$multiple === void 0 ? true : _ref$multiple,
35
+ onChange = _ref.onChange;
33
36
  var _useReducer = react.useReducer(function (state, action) {
34
37
  if (action.type === "start") {
35
38
  if (!multiple) state.files.clear();
@@ -76,40 +79,26 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
76
79
  if (action.type === "remove") {
77
80
  state.files["delete"](action.key);
78
81
  }
79
- state.list = Array.from(state.files.values()).map(function (file) {
80
- return !file.progress && !file.error && {
81
- key: file.key,
82
- path: file.path,
83
- mime: file.mime,
84
- size: file.size,
85
- uploaded: file.uploaded,
86
- filename: file.filename
87
- };
88
- }).filter(Boolean);
89
- return _objectSpread({}, state);
90
- }, {
91
- files: new Map(),
92
- count: 0
93
- }, function (state) {
94
- if (initialList) {
95
- if (utilities.isString(initialList)) {
82
+ if (action.type === "init") {
83
+ state.files = new Map();
84
+ if (utilities.isString(action.initialList)) {
96
85
  var key = utilities.uuid();
97
86
  state.files.set(key, {
98
87
  key: key,
99
- path: initialList,
88
+ path: action.initialList,
100
89
  filename: "",
101
90
  size: 0,
102
91
  mime: ""
103
92
  });
104
93
  }
105
- if (utilities.isObject(initialList)) {
94
+ if (utilities.isObject(action.initialList)) {
106
95
  var _key = utilities.uuid();
107
- state.files.set(_key, _objectSpread(_objectSpread({}, initialList), {}, {
96
+ state.files.set(_key, _objectSpread(_objectSpread({}, action.initialList), {}, {
108
97
  key: _key
109
98
  }));
110
99
  }
111
- if (utilities.isArray(initialList)) {
112
- initialList.forEach(function (file) {
100
+ if (utilities.isArray(action.initialList)) {
101
+ action.initialList.forEach(function (file) {
113
102
  var key = utilities.uuid();
114
103
  state.files.set(key, _objectSpread(_objectSpread({}, file), {}, {
115
104
  key: key
@@ -117,16 +106,40 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
117
106
  });
118
107
  }
119
108
  }
120
- state.list = Array.from(state.files.values());
121
- return state;
109
+ state.list = Array.from(state.files.values()).map(function (file) {
110
+ return !file.progress && !file.error && {
111
+ key: file.key,
112
+ path: file.path,
113
+ mime: file.mime,
114
+ size: file.size,
115
+ uploaded: file.uploaded,
116
+ filename: file.filename
117
+ };
118
+ }).filter(Boolean);
119
+ if (action.type === "remove" || action.type === "stop") {
120
+ setTimeout(function () {
121
+ var _state$list$;
122
+ onChange === null || onChange === void 0 || onChange(multiple ? state.list : (_state$list$ = state.list[0]) !== null && _state$list$ !== void 0 ? _state$list$ : null);
123
+ }, 100);
124
+ }
125
+ return _objectSpread({}, state);
126
+ }, {
127
+ files: new Map(),
128
+ count: 0
122
129
  }),
123
130
  _useReducer2 = _slicedToArray(_useReducer, 2),
124
131
  state = _useReducer2[0],
125
132
  dispatch = _useReducer2[1];
126
- var doUpload = react.useCallback( /*#__PURE__*/function () {
127
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(key, file) {
133
+ react.useEffect(function () {
134
+ dispatch({
135
+ type: "init",
136
+ initialList: initialList
137
+ });
138
+ }, [initialList]);
139
+ var doUpload = react.useCallback(/*#__PURE__*/function () {
140
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(key, file) {
128
141
  var data, _abort2;
129
- return _regeneratorRuntime.wrap(function _callee$(_context) {
142
+ return _regeneratorRuntime.wrap(function (_context) {
130
143
  while (1) switch (_context.prev = _context.next) {
131
144
  case 0:
132
145
  data = new FormData();
@@ -147,7 +160,7 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
147
160
  }
148
161
  }
149
162
  });
150
- _context.next = 6;
163
+ _context.next = 1;
151
164
  return uploader(data, {
152
165
  signal: _abort2.signal,
153
166
  onUploadProgress: function onUploadProgress(progressEvent) {
@@ -178,14 +191,14 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
178
191
  error: (_error$message = error === null || error === void 0 ? void 0 : error.message) !== null && _error$message !== void 0 ? _error$message : "form:fileUploadFailed"
179
192
  });
180
193
  });
181
- case 6:
194
+ case 1:
182
195
  case "end":
183
196
  return _context.stop();
184
197
  }
185
198
  }, _callee);
186
199
  }));
187
200
  return function (_x, _x2) {
188
- return _ref.apply(this, arguments);
201
+ return _ref2.apply(this, arguments);
189
202
  };
190
203
  }(), []);
191
204
  var upload = react.useCallback(function (files) {
@@ -212,7 +225,6 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
212
225
  remove: remove,
213
226
  retry: retry,
214
227
  pending: state.count,
215
- list: state.list,
216
228
  files: Array.from(state.files.values())
217
229
  };
218
230
  };
@@ -11,11 +11,11 @@ var jsxRuntime = require('react/jsx-runtime');
11
11
 
12
12
  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; }
13
13
  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; }
14
- var makeYupField = function makeYupField(field) {
14
+ var _makeYupField = function makeYupField(field) {
15
15
  var yupField = utilities.yup.string().trim();
16
16
  if (field.datatype === schema.DATA_TYPES.SCHEMA) {
17
17
  var child = Object.fromEntries(field.schema.map(function (field) {
18
- return [field.id, makeYupField(field)];
18
+ return [field.id, _makeYupField(field)];
19
19
  }));
20
20
  yupField = utilities.yup.object(child);
21
21
  }
@@ -103,7 +103,7 @@ var useFormBuilder = function useFormBuilder(schema$1) {
103
103
  }, [schema$1]);
104
104
  var schemaDef = react.useMemo(function () {
105
105
  return utilities.yup.object(Object.fromEntries(filteredSchema.map(function (field) {
106
- return [field.id, makeYupField(field)];
106
+ return [field.id, _makeYupField(field)];
107
107
  })));
108
108
  }, [filteredSchema]);
109
109
  var resolver = react.useMemo(function () {
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@react-fabric/core');
4
- var ar = require('./ar.json.js');
5
- var en = require('./en.json.js');
4
+ var form$1 = require('./ar/form.json.js');
5
+ var form = require('./en/form.json.js');
6
6
 
7
7
  /*
8
8
  * React Fabric
@@ -28,6 +28,6 @@ var en = require('./en.json.js');
28
28
  */
29
29
 
30
30
  core.addTranslationBundle("form", {
31
- en: en.default,
32
- ar: ar.default
31
+ en: form.default,
32
+ ar: form$1.default
33
33
  });
package/dist/cjs/index.js CHANGED
@@ -3,6 +3,7 @@
3
3
  require('./i18n/index.js');
4
4
  var Controller = require('./form/Controller.js');
5
5
  var Form = require('./form/Form.js');
6
+ var useForm = require('./form/useForm.js');
6
7
  var SchemaEditor = require('./builder/SchemaEditor.js');
7
8
  var useFileUploader = require('./hooks/useFileUploader.js');
8
9
  var useFormBuilder = require('./hooks/useFormBuilder.js');
@@ -35,7 +36,7 @@ var Select = require('./select/Select.js');
35
36
 
36
37
  exports.Controller = Controller.Controller;
37
38
  exports.Form = Form.Form;
38
- exports.useForm = Form.useForm;
39
+ exports.useForm = useForm.useForm;
39
40
  exports.SchemaEditor = SchemaEditor.SchemaEditor;
40
41
  exports.useFileUploader = useFileUploader.useFileUploader;
41
42
  exports.useFormBuilder = useFormBuilder.useFormBuilder;