@fuf-stack/uniform 0.8.1 → 0.8.2

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 (67) hide show
  1. package/dist/CheckboxGroup/index.cjs +4 -4
  2. package/dist/CheckboxGroup/index.js +3 -3
  3. package/dist/FieldArray/index.cjs +4 -4
  4. package/dist/FieldArray/index.js +3 -3
  5. package/dist/Form/index.cjs +3 -3
  6. package/dist/Form/index.js +2 -2
  7. package/dist/Input/index.cjs +4 -4
  8. package/dist/Input/index.js +3 -3
  9. package/dist/RadioGroup/index.cjs +4 -4
  10. package/dist/RadioGroup/index.js +3 -3
  11. package/dist/Select/index.cjs +4 -4
  12. package/dist/Select/index.js +3 -3
  13. package/dist/SubmitButton/index.cjs +3 -3
  14. package/dist/SubmitButton/index.js +2 -2
  15. package/dist/Switch/index.cjs +4 -4
  16. package/dist/Switch/index.js +3 -3
  17. package/dist/TextArea/index.cjs +4 -4
  18. package/dist/TextArea/index.js +3 -3
  19. package/dist/{chunk-OL5DXVY4.cjs → chunk-3IRZN73M.cjs} +15 -7
  20. package/dist/chunk-3IRZN73M.cjs.map +1 -0
  21. package/dist/{chunk-YTHRKULG.js → chunk-62BDESS6.js} +5 -5
  22. package/dist/{chunk-TN6ZHEXV.js → chunk-6SBXKABS.js} +2 -2
  23. package/dist/{chunk-WR2PNNMP.cjs → chunk-75DRYT5H.cjs} +6 -6
  24. package/dist/{chunk-WR2PNNMP.cjs.map → chunk-75DRYT5H.cjs.map} +1 -1
  25. package/dist/{chunk-B24NXJTR.js → chunk-7LPWP66H.js} +16 -8
  26. package/dist/chunk-7LPWP66H.js.map +1 -0
  27. package/dist/{chunk-JI7GA5XH.cjs → chunk-7SECN274.cjs} +5 -5
  28. package/dist/{chunk-JI7GA5XH.cjs.map → chunk-7SECN274.cjs.map} +1 -1
  29. package/dist/{chunk-FYP5BTHS.js → chunk-AAPGNWMO.js} +5 -5
  30. package/dist/{chunk-VGJQLCH3.cjs → chunk-GZ6L6KQK.cjs} +5 -5
  31. package/dist/{chunk-VGJQLCH3.cjs.map → chunk-GZ6L6KQK.cjs.map} +1 -1
  32. package/dist/{chunk-PDXVHUGH.js → chunk-I33DLA2M.js} +5 -5
  33. package/dist/{chunk-J23BIH72.cjs → chunk-K3YZUYTX.cjs} +5 -5
  34. package/dist/{chunk-J23BIH72.cjs.map → chunk-K3YZUYTX.cjs.map} +1 -1
  35. package/dist/{chunk-UIVSMVUT.js → chunk-P65LPFQR.js} +5 -5
  36. package/dist/{chunk-QP7FUODS.cjs → chunk-PCR7IVZT.cjs} +5 -5
  37. package/dist/{chunk-QP7FUODS.cjs.map → chunk-PCR7IVZT.cjs.map} +1 -1
  38. package/dist/{chunk-ZLLK6TCU.js → chunk-PQYNCJQH.js} +5 -5
  39. package/dist/{chunk-DZPPA4BG.cjs → chunk-PY4BNTSG.cjs} +5 -5
  40. package/dist/{chunk-DZPPA4BG.cjs.map → chunk-PY4BNTSG.cjs.map} +1 -1
  41. package/dist/{chunk-ZWRZZGMZ.cjs → chunk-TLTHAEG6.cjs} +4 -4
  42. package/dist/{chunk-ZWRZZGMZ.cjs.map → chunk-TLTHAEG6.cjs.map} +1 -1
  43. package/dist/{chunk-OD5BASYZ.js → chunk-TTR4MHYS.js} +5 -5
  44. package/dist/{chunk-RULU2SJ5.js → chunk-UQZQHW2Z.js} +5 -5
  45. package/dist/{chunk-ENVGJAWA.cjs → chunk-VZ2HCN6I.cjs} +5 -5
  46. package/dist/{chunk-ENVGJAWA.cjs.map → chunk-VZ2HCN6I.cjs.map} +1 -1
  47. package/dist/{chunk-VN4U7FEE.cjs → chunk-WS7CCWFF.cjs} +3 -3
  48. package/dist/{chunk-VN4U7FEE.cjs.map → chunk-WS7CCWFF.cjs.map} +1 -1
  49. package/dist/{chunk-X4CGRHLI.js → chunk-ZJSZH2M6.js} +2 -2
  50. package/dist/hooks/index.cjs +2 -2
  51. package/dist/hooks/index.d.cts +1 -3
  52. package/dist/hooks/index.d.ts +1 -3
  53. package/dist/hooks/index.js +1 -1
  54. package/dist/index.cjs +13 -13
  55. package/dist/index.js +15 -15
  56. package/package.json +6 -6
  57. package/dist/chunk-B24NXJTR.js.map +0 -1
  58. package/dist/chunk-OL5DXVY4.cjs.map +0 -1
  59. /package/dist/{chunk-YTHRKULG.js.map → chunk-62BDESS6.js.map} +0 -0
  60. /package/dist/{chunk-TN6ZHEXV.js.map → chunk-6SBXKABS.js.map} +0 -0
  61. /package/dist/{chunk-FYP5BTHS.js.map → chunk-AAPGNWMO.js.map} +0 -0
  62. /package/dist/{chunk-PDXVHUGH.js.map → chunk-I33DLA2M.js.map} +0 -0
  63. /package/dist/{chunk-UIVSMVUT.js.map → chunk-P65LPFQR.js.map} +0 -0
  64. /package/dist/{chunk-ZLLK6TCU.js.map → chunk-PQYNCJQH.js.map} +0 -0
  65. /package/dist/{chunk-OD5BASYZ.js.map → chunk-TTR4MHYS.js.map} +0 -0
  66. /package/dist/{chunk-RULU2SJ5.js.map → chunk-UQZQHW2Z.js.map} +0 -0
  67. /package/dist/{chunk-X4CGRHLI.js.map → chunk-ZJSZH2M6.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkQP7FUODScjs = require('../chunk-QP7FUODS.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunkPCR7IVZTcjs = require('../chunk-PCR7IVZT.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.CheckboxGroup = _chunkQP7FUODScjs.CheckboxGroup_default; exports.default = _chunkQP7FUODScjs.CheckboxGroup_default2;
12
+ exports.CheckboxGroup = _chunkPCR7IVZTcjs.CheckboxGroup_default; exports.default = _chunkPCR7IVZTcjs.CheckboxGroup_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  CheckboxGroup_default,
3
3
  CheckboxGroup_default2
4
- } from "../chunk-UIVSMVUT.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-P65LPFQR.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  CheckboxGroup_default as CheckboxGroup,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkWR2PNNMPcjs = require('../chunk-WR2PNNMP.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunk75DRYT5Hcjs = require('../chunk-75DRYT5H.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.FieldArray = _chunkWR2PNNMPcjs.FieldArray_default; exports.default = _chunkWR2PNNMPcjs.FieldArray_default2;
12
+ exports.FieldArray = _chunk75DRYT5Hcjs.FieldArray_default; exports.default = _chunk75DRYT5Hcjs.FieldArray_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  FieldArray_default,
3
3
  FieldArray_default2
4
- } from "../chunk-RULU2SJ5.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-UQZQHW2Z.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  FieldArray_default as FieldArray,
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkZWRZZGMZcjs = require('../chunk-ZWRZZGMZ.cjs');
5
- require('../chunk-OL5DXVY4.cjs');
4
+ var _chunkTLTHAEG6cjs = require('../chunk-TLTHAEG6.cjs');
5
+ require('../chunk-3IRZN73M.cjs');
6
6
  require('../chunk-BBB4FEY6.cjs');
7
7
 
8
8
 
9
9
 
10
- exports.Form = _chunkZWRZZGMZcjs.Form_default; exports.default = _chunkZWRZZGMZcjs.Form_default2;
10
+ exports.Form = _chunkTLTHAEG6cjs.Form_default; exports.default = _chunkTLTHAEG6cjs.Form_default2;
11
11
  //# sourceMappingURL=index.cjs.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Form_default,
3
3
  Form_default2
4
- } from "../chunk-X4CGRHLI.js";
5
- import "../chunk-B24NXJTR.js";
4
+ } from "../chunk-ZJSZH2M6.js";
5
+ import "../chunk-7LPWP66H.js";
6
6
  import "../chunk-V46BHM2U.js";
7
7
  export {
8
8
  Form_default as Form,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkJI7GA5XHcjs = require('../chunk-JI7GA5XH.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunk7SECN274cjs = require('../chunk-7SECN274.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.Input = _chunkJI7GA5XHcjs.Input_default; exports.default = _chunkJI7GA5XHcjs.Input_default2;
12
+ exports.Input = _chunk7SECN274cjs.Input_default; exports.default = _chunk7SECN274cjs.Input_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Input_default,
3
3
  Input_default2
4
- } from "../chunk-ZLLK6TCU.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-PQYNCJQH.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  Input_default as Input,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkJ23BIH72cjs = require('../chunk-J23BIH72.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunkK3YZUYTXcjs = require('../chunk-K3YZUYTX.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.RadioGroup = _chunkJ23BIH72cjs.RadioGroup_default; exports.default = _chunkJ23BIH72cjs.RadioGroup_default2;
12
+ exports.RadioGroup = _chunkK3YZUYTXcjs.RadioGroup_default; exports.default = _chunkK3YZUYTXcjs.RadioGroup_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  RadioGroup_default,
3
3
  RadioGroup_default2
4
- } from "../chunk-FYP5BTHS.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-AAPGNWMO.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  RadioGroup_default as RadioGroup,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkVGJQLCH3cjs = require('../chunk-VGJQLCH3.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunkGZ6L6KQKcjs = require('../chunk-GZ6L6KQK.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.Select = _chunkVGJQLCH3cjs.Select_default; exports.default = _chunkVGJQLCH3cjs.Select_default2;
12
+ exports.Select = _chunkGZ6L6KQKcjs.Select_default; exports.default = _chunkGZ6L6KQKcjs.Select_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Select_default,
3
3
  Select_default2
4
- } from "../chunk-YTHRKULG.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-62BDESS6.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  Select_default as Select,
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkVN4U7FEEcjs = require('../chunk-VN4U7FEE.cjs');
5
- require('../chunk-OL5DXVY4.cjs');
4
+ var _chunkWS7CCWFFcjs = require('../chunk-WS7CCWFF.cjs');
5
+ require('../chunk-3IRZN73M.cjs');
6
6
  require('../chunk-BBB4FEY6.cjs');
7
7
 
8
8
 
9
9
 
10
- exports.SubmitButton = _chunkVN4U7FEEcjs.SubmitButton_default; exports.default = _chunkVN4U7FEEcjs.SubmitButton_default2;
10
+ exports.SubmitButton = _chunkWS7CCWFFcjs.SubmitButton_default; exports.default = _chunkWS7CCWFFcjs.SubmitButton_default2;
11
11
  //# sourceMappingURL=index.cjs.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  SubmitButton_default,
3
3
  SubmitButton_default2
4
- } from "../chunk-TN6ZHEXV.js";
5
- import "../chunk-B24NXJTR.js";
4
+ } from "../chunk-6SBXKABS.js";
5
+ import "../chunk-7LPWP66H.js";
6
6
  import "../chunk-V46BHM2U.js";
7
7
  export {
8
8
  SubmitButton_default as SubmitButton,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkDZPPA4BGcjs = require('../chunk-DZPPA4BG.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunkPY4BNTSGcjs = require('../chunk-PY4BNTSG.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.Switch = _chunkDZPPA4BGcjs.Switch_default; exports.default = _chunkDZPPA4BGcjs.Switch_default2;
12
+ exports.Switch = _chunkPY4BNTSGcjs.Switch_default; exports.default = _chunkPY4BNTSGcjs.Switch_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Switch_default,
3
3
  Switch_default2
4
- } from "../chunk-OD5BASYZ.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-TTR4MHYS.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  Switch_default as Switch,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkENVGJAWAcjs = require('../chunk-ENVGJAWA.cjs');
5
- require('../chunk-KMMS4G7A.cjs');
4
+ var _chunkVZ2HCN6Icjs = require('../chunk-VZ2HCN6I.cjs');
6
5
  require('../chunk-QTL5FREE.cjs');
7
- require('../chunk-OL5DXVY4.cjs');
6
+ require('../chunk-KMMS4G7A.cjs');
7
+ require('../chunk-3IRZN73M.cjs');
8
8
  require('../chunk-BBB4FEY6.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.TextArea = _chunkENVGJAWAcjs.TextArea_default; exports.default = _chunkENVGJAWAcjs.TextArea_default2;
12
+ exports.TextArea = _chunkVZ2HCN6Icjs.TextArea_default; exports.default = _chunkVZ2HCN6Icjs.TextArea_default2;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  TextArea_default,
3
3
  TextArea_default2
4
- } from "../chunk-PDXVHUGH.js";
5
- import "../chunk-T3CCNJHK.js";
4
+ } from "../chunk-I33DLA2M.js";
6
5
  import "../chunk-DBLODROX.js";
7
- import "../chunk-B24NXJTR.js";
6
+ import "../chunk-T3CCNJHK.js";
7
+ import "../chunk-7LPWP66H.js";
8
8
  import "../chunk-V46BHM2U.js";
9
9
  export {
10
10
  TextArea_default as TextArea,
@@ -17,7 +17,10 @@ var removeNullishFields = (obj) => {
17
17
  })
18
18
  );
19
19
  };
20
- var UniformContext = _react2.default.createContext(void 0);
20
+ var UniformContext = _react2.default.createContext({
21
+ preventSubmit: () => void 0,
22
+ validation: void 0
23
+ });
21
24
  var FormProvider = ({
22
25
  children,
23
26
  initialValues = void 0,
@@ -25,11 +28,16 @@ var FormProvider = ({
25
28
  validation = void 0,
26
29
  validationTrigger
27
30
  }) => {
28
- const [canSubmit, setCanSubmit] = _react.useState.call(void 0, true);
31
+ const preventSubmit = _react.useRef.call(void 0, false);
29
32
  const contextValue = _react.useMemo.call(void 0,
30
- () => ({ canSubmit, setCanSubmit, validation }),
33
+ () => ({
34
+ preventSubmit: (prevent) => {
35
+ preventSubmit.current = prevent;
36
+ },
37
+ validation
38
+ }),
31
39
  // eslint-disable-next-line react-hooks/exhaustive-deps
32
- [canSubmit]
40
+ []
33
41
  );
34
42
  const methods = _reacthookform.useForm.call(void 0, {
35
43
  defaultValues: initialValues,
@@ -47,9 +55,9 @@ var FormProvider = ({
47
55
  } : {}
48
56
  });
49
57
  const handleSubmit = async (e) => {
50
- if (!canSubmit) {
58
+ if (preventSubmit.current) {
51
59
  console.warn(
52
- "[FormProvider] form submit was canceled canSubmit is false..."
60
+ "[FormProvider] form submit was prevented because preventSubmit is true..."
53
61
  );
54
62
  _optionalChain([e, 'optionalAccess', _ => _.preventDefault, 'call', _2 => _2()]);
55
63
  return Promise.resolve();
@@ -126,4 +134,4 @@ var useFormContext = () => {
126
134
 
127
135
 
128
136
  exports.FormContext_default = FormContext_default; exports.recursiveFieldKeySearch = recursiveFieldKeySearch; exports.useFormContext = useFormContext;
129
- //# sourceMappingURL=chunk-OL5DXVY4.cjs.map
137
+ //# sourceMappingURL=chunk-3IRZN73M.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/uniform/uniform/packages/uniform/dist/chunk-3IRZN73M.cjs","../src/hooks/useFormContext/useFormContext.ts","../src/Form/subcomponents/FormContext.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/uniform/uniform/packages/uniform/dist/chunk-3IRZN73M.cjs","sourcesContent":[null,"import type { VetoSchema } from '@fuf-stack/veto';\nimport type { FieldError } from 'react-hook-form';\n\nimport { useContext } from 'react';\nimport { useFormContext as useHookFormContext } from 'react-hook-form';\n\nimport { UniformContext } from '../../Form/subcomponents/FormContext';\nimport { slugify } from '../../helpers';\n\n/** Checks whether the field is an optional type by recursively checking inner types */\nconst recursiveSearchInnerType = (schema: VetoSchema): boolean => {\n let currentSchema = schema;\n\n // Loop through inner types to find the root type\n while (currentSchema?._def?.innerType) {\n currentSchema = currentSchema._def.innerType;\n if (currentSchema?._def?.typeName === 'ZodOptional') {\n // Stop recursion if optional is found\n return false;\n }\n }\n // If no optional was found, assume it's required\n return true;\n};\n\n/** Recursive search to check whether a field is required or optional */\nexport const recursiveFieldKeySearch = (\n schema: VetoSchema,\n path: string[],\n): boolean | null => {\n const [current, ...rest] = path;\n\n let currentSchema = schema;\n\n // Handle ZodOptional schema: unwrap and continue searching\n if (schema?._def?.typeName === 'ZodOptional') {\n // @ts-expect-error not sure here\n currentSchema = schema.unwrap();\n }\n\n // Handle ZodEffects (transformations or validation effects)\n if (schema?._def?.typeName === 'ZodEffects') {\n // Unwrap and continue\n return recursiveFieldKeySearch(schema._def.schema, path);\n }\n\n // Handle ZodIntersection (intersection types)\n if (currentSchema?._def?.typeName === 'ZodIntersection') {\n return (\n (currentSchema._def.left?.schema\n ? recursiveFieldKeySearch(currentSchema._def.left.schema, path)\n : recursiveFieldKeySearch(currentSchema._def.left, path)) ||\n (currentSchema._def.right?.schema\n ? recursiveFieldKeySearch(currentSchema._def.right.schema, path)\n : recursiveFieldKeySearch(currentSchema._def.right, path))\n );\n }\n\n // Get the shape of an object or elements of an array schema\n // @ts-expect-error not sure here\n const shape = currentSchema?.shape ?? currentSchema?.element?.shape;\n\n if (shape && shape[current]) {\n if (rest.length === 0) {\n // At the end of the path, check if the field is optional\n return (\n shape[current]?._def?.typeName !== 'ZodOptional' &&\n recursiveSearchInnerType(shape[current])\n );\n }\n return recursiveFieldKeySearch(shape[current], rest);\n }\n // Return null if field not found\n return null;\n};\n\n/**\n * Custom hook that extends react-hook-form's useFormContext to add validation and state management.\n */\nexport const useFormContext = () => {\n const {\n formState,\n // https://react-hook-form.com/docs/useform/getfieldstate\n // for getFieldState a subscription to formState properties is needed!\n getFieldState: getFieldStateOrig,\n ...otherMethods\n } = useHookFormContext();\n\n const uniformContext = useContext(UniformContext);\n\n /**\n * Updated getFieldState method which returns:\n * - Whether the field is required by checking the validation schema\n * - Existing field state information (errors, etc.)\n */\n const getFieldState = (name: string, testId?: string) => {\n const fieldPath =\n typeof name === 'string' ? name.replace(/\\[\\d+\\]/g, '').split('.') : name;\n\n // Check if the field is required using the validation schema\n const required =\n (uniformContext?.validation &&\n recursiveFieldKeySearch(uniformContext.validation.schema, fieldPath)) ||\n false;\n\n // Get the original field state (errors, etc.) from react-hook-form\n const { error, ...rest } = getFieldStateOrig(name, formState);\n\n return {\n ...rest,\n error: error as FieldError[] | undefined, // Ensure correct type for error\n required,\n testId: slugify(testId || name),\n };\n };\n\n return {\n ...otherMethods,\n ...uniformContext,\n getFieldState,\n formState,\n };\n};\n","import type { VetoInstance } from '@fuf-stack/veto';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, SubmitHandler } from 'react-hook-form';\n\nimport React, { useMemo, useRef } from 'react';\nimport { FormProvider as HookFormProvider, useForm } from 'react-hook-form';\n\n/**\n * recursively removes all fields that are null or undefined before\n * the form data is passed to the veto validation function\n */\nexport const removeNullishFields = (obj: Record<string, unknown>) => {\n return JSON.parse(\n JSON.stringify(obj, (_key, value) => {\n return value === null ? undefined : value;\n }),\n );\n};\n\n/**\n * The `UniformContext` provides control over the form's submission behavior and may optionally include\n * a Veto validation schema for form validation.\n *\n * Specifically, this context offers:\n * 1. **Form Submission Control**: The `preventSubmit` function allows components to enable or disable\n * form submissions.\n * 2. **Optional Validation Schema**: The `validation` property may hold a Veto validation schema instance\n * that can be used to validate form fields and handle validation logic.\n *\n * This context is useful for components that need to interact with or control the form submission state,\n * or access the validation schema for managing form validation logic.\n */\nexport const UniformContext = React.createContext<{\n /** Function to update if the form can currently be submitted */\n preventSubmit: (prevent: boolean) => void;\n /** Optional Veto validation schema instance for form validation */\n validation?: VetoInstance;\n}>({\n preventSubmit: () => undefined,\n validation: undefined,\n});\n\n// Define props for the FormProvider component, extending HookForm's props\ninterface FormProviderProps {\n /** children form render function */\n children: (childProps: {\n handleSubmit: (e?: React.BaseSyntheticEvent) => Promise<void>;\n }) => ReactNode;\n /** initial form values */\n initialValues?: FieldValues;\n /** form submit handler */\n onSubmit: SubmitHandler<FieldValues>;\n /** Veto validation schema instance */\n validation?: VetoInstance;\n /** when the validation should be triggered */\n validationTrigger: 'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all';\n}\n\n/**\n * FormProvider component provides:\n * - The veto validation schema context\n * - Submit handler creation and submission control with preventSubmit\n * - React Hook Form context\n */\nconst FormProvider: React.FC<FormProviderProps> = ({\n children,\n initialValues = undefined,\n onSubmit,\n validation = undefined,\n validationTrigger,\n}) => {\n // Control if the form can currently be submitted\n const preventSubmit = useRef(false);\n\n // Memoize the context value to prevent re-renders\n const contextValue = useMemo(\n () => ({\n preventSubmit: (prevent: boolean) => {\n preventSubmit.current = prevent;\n },\n validation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Initialize react hook form\n const methods = useForm({\n defaultValues: initialValues,\n // add validation config when validation schema provided\n ...(validation\n ? {\n // set rhf mode\n // see: https://react-hook-form.com/docs/useform#mode\n mode: validationTrigger,\n resolver: async (values) => {\n const { data, errors, ...rest } = await validation.validateAsync(\n removeNullishFields(values),\n );\n // https://github.com/react-hook-form/resolvers/blob/master/zod/src/zod.ts\n return { values: data || {}, errors: errors || {}, ...rest };\n },\n }\n : {}),\n });\n\n // Create submit handler\n // eslint-disable-next-line consistent-return\n const handleSubmit = async (e?: React.BaseSyntheticEvent) => {\n if (preventSubmit.current) {\n console.warn(\n '[FormProvider] form submit was prevented because preventSubmit is true...',\n );\n e?.preventDefault();\n return Promise.resolve();\n }\n await methods.handleSubmit(onSubmit)(e);\n };\n\n return (\n <UniformContext.Provider value={contextValue}>\n {/* Spread all hook form props into HookFormProvider */}\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <HookFormProvider {...methods}>\n {children({ handleSubmit })}\n </HookFormProvider>\n </UniformContext.Provider>\n );\n};\n\nexport default FormProvider;\n"]}
@@ -1,12 +1,12 @@
1
- import {
2
- FieldCopyTestIdButton_default
3
- } from "./chunk-T3CCNJHK.js";
4
1
  import {
5
2
  FieldValidationError_default
6
3
  } from "./chunk-DBLODROX.js";
4
+ import {
5
+ FieldCopyTestIdButton_default
6
+ } from "./chunk-T3CCNJHK.js";
7
7
  import {
8
8
  useFormContext
9
- } from "./chunk-B24NXJTR.js";
9
+ } from "./chunk-7LPWP66H.js";
10
10
 
11
11
  // src/Select/Select.tsx
12
12
  import { Controller } from "react-hook-form";
@@ -236,4 +236,4 @@ export {
236
236
  Select_default,
237
237
  Select_default2
238
238
  };
239
- //# sourceMappingURL=chunk-YTHRKULG.js.map
239
+ //# sourceMappingURL=chunk-62BDESS6.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useFormContext
3
- } from "./chunk-B24NXJTR.js";
3
+ } from "./chunk-7LPWP66H.js";
4
4
  import {
5
5
  slugify
6
6
  } from "./chunk-V46BHM2U.js";
@@ -45,4 +45,4 @@ export {
45
45
  SubmitButton_default,
46
46
  SubmitButton_default2
47
47
  };
48
- //# sourceMappingURL=chunk-TN6ZHEXV.js.map
48
+ //# sourceMappingURL=chunk-6SBXKABS.js.map
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkKMMS4G7Acjs = require('./chunk-KMMS4G7A.cjs');
3
+ var _chunkQTL5FREEcjs = require('./chunk-QTL5FREE.cjs');
4
4
 
5
5
 
6
- var _chunkQTL5FREEcjs = require('./chunk-QTL5FREE.cjs');
6
+ var _chunkKMMS4G7Acjs = require('./chunk-KMMS4G7A.cjs');
7
7
 
8
8
 
9
- var _chunkOL5DXVY4cjs = require('./chunk-OL5DXVY4.cjs');
9
+ var _chunk3IRZN73Mcjs = require('./chunk-3IRZN73M.cjs');
10
10
 
11
11
 
12
12
  var _chunkBBB4FEY6cjs = require('./chunk-BBB4FEY6.cjs');
@@ -62,7 +62,7 @@ var FieldArrayField = ({
62
62
  transform: _utilities.CSS.Translate.toString(transform),
63
63
  transition
64
64
  };
65
- const { getFieldState, register, watch, trigger } = _chunkOL5DXVY4cjs.useFormContext.call(void 0, );
65
+ const { getFieldState, register, watch, trigger } = _chunk3IRZN73Mcjs.useFormContext.call(void 0, );
66
66
  const { error, invalid } = getFieldState(`${name}`, void 0);
67
67
  const { getHelperWrapperProps, getErrorMessageProps } = _input.useInput.call(void 0, {
68
68
  isInvalid: invalid,
@@ -166,7 +166,7 @@ var FieldArray = ({
166
166
  testId: _testId = void 0,
167
167
  moveField = ["button"]
168
168
  }) => {
169
- const { control, getValues, getFieldState, register, trigger, watch } = _chunkOL5DXVY4cjs.useFormContext.call(void 0, );
169
+ const { control, getValues, getFieldState, register, trigger, watch } = _chunk3IRZN73Mcjs.useFormContext.call(void 0, );
170
170
  const { fields, append, remove, insert, move } = _reacthookform.useFieldArray.call(void 0, {
171
171
  control,
172
172
  name
@@ -284,4 +284,4 @@ var FieldArray_default2 = FieldArray_default;
284
284
 
285
285
 
286
286
  exports.FieldArray_default = FieldArray_default; exports.FieldArray_default2 = FieldArray_default2;
287
- //# sourceMappingURL=chunk-WR2PNNMP.cjs.map
287
+ //# sourceMappingURL=chunk-75DRYT5H.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/uniform/uniform/packages/uniform/dist/chunk-WR2PNNMP.cjs","../src/FieldArray/FieldArray.tsx","../src/FieldArray/FieldArrayField.tsx","../src/FieldArray/index.ts"],"names":["jsx","Button"],"mappings":"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","file":"/home/runner/work/uniform/uniform/packages/uniform/dist/chunk-WR2PNNMP.cjs","sourcesContent":[null,"import type { DragEndEvent } from '@dnd-kit/core';\nimport type {\n FieldValues,\n UseFieldArrayInsert,\n UseFieldArrayMove,\n UseFieldArrayRemove,\n} from 'react-hook-form';\n\nimport { useEffect } from 'react';\nimport { useFieldArray } from 'react-hook-form';\n\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n restrictToVerticalAxis,\n restrictToWindowEdges,\n} from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { useInput } from '@nextui-org/input';\n\nimport { Button } from '@fuf-stack/pixels';\n\nimport { useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\nimport FieldArrayField from './FieldArrayField';\n\nexport type FieldArrayHideOption = 'add' | 'remove' | 'move' | 'insert' | 'all';\nexport type FieldArrayFieldChildren = (\n name: string,\n index: number,\n length: number,\n move: UseFieldArrayMove,\n insert: UseFieldArrayInsert<FieldValues, string>,\n remove: UseFieldArrayRemove,\n duplicate: (i: number) => void,\n) => JSX.Element;\n\nexport type MoveField = 'drag-drop' | 'button';\n\nexport interface FieldArrayProps {\n /** function that renders the children with provided Properties. */\n children: FieldArrayFieldChildren;\n /** Hide a set of buttons. */\n hideButtons?: FieldArrayHideOption[];\n /** label of the FieldArray. */\n label?: React.ReactNode;\n /** stops user from deleting all items. */\n lastNotDeletable?: boolean;\n /** name the FieldArray is registered in RHF */\n name: string;\n /** ID for test purposes. */\n testId?: string;\n /* how the fields can be moved */\n moveField: MoveField[];\n}\n\n/**\n * FieldArray component using react-hook-form\n */\nconst FieldArray = ({\n children,\n hideButtons = [],\n label: _label = undefined,\n lastNotDeletable = true,\n name,\n testId: _testId = undefined,\n moveField = ['button'],\n}: FieldArrayProps) => {\n const { control, getValues, getFieldState, register, trigger, watch } =\n useFormContext();\n\n const { fields, append, remove, insert, move } = useFieldArray({\n control,\n name,\n });\n\n const { error, testId, invalid, required } = getFieldState(name, _testId);\n\n register(`${name}._errors`);\n\n const formValues = watch();\n\n useEffect(() => {\n trigger(`${name}._errors`);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(formValues)]);\n\n // TODO: what about input props?\n const { label, getLabelProps, getHelperWrapperProps, getErrorMessageProps } =\n useInput({\n isInvalid: invalid,\n isRequired: required,\n errorMessage: JSON.stringify(error),\n label: _label,\n labelPlacement: 'inside',\n placeholder: ' ',\n classNames: { helperWrapper: 'block' },\n });\n\n if (lastNotDeletable && fields.length === 0) {\n append({});\n }\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (active.id !== over?.id) {\n const oldIndex = fields.findIndex((field) => field.id === active.id);\n const newIndex = fields.findIndex((field) => field.id === over?.id);\n move(oldIndex, newIndex);\n }\n };\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis, restrictToWindowEdges]}\n >\n <SortableContext\n items={fields.map((field) => field.id)}\n strategy={verticalListSortingStrategy}\n >\n <ul data-testid={testId}>\n {label && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getLabelProps()}\n className={`${getLabelProps().className} !pointer-events-auto !static !z-0 -mb-1 ml-1 !inline-block`}\n >\n {label}\n </label>\n )}\n <FieldCopyTestIdButton testId={testId} />\n\n {fields.map((field, index) => {\n const duplicate = (i: number) => {\n const values = getValues(name);\n insert(i + 1, { ...values[i], id: null });\n };\n\n return (\n <FieldArrayField\n id={field.id}\n key={field.id}\n testId={`${testId}_${index}`}\n className=\"mb-3 mt-5 flex flex-row items-center\"\n field={field}\n fields={fields}\n hideButtons={hideButtons}\n index={index}\n insert={insert}\n lastNotDeletable={lastNotDeletable}\n move={move}\n moveField={moveField}\n name={name}\n remove={remove}\n >\n {children(\n `${name}[${index}]`,\n index,\n fields.length,\n move,\n insert,\n remove,\n duplicate,\n )}\n </FieldArrayField>\n );\n })}\n\n {!hideButtons.includes('add') && !hideButtons.includes('all') && (\n <Button\n testId={`${testId}_append`}\n size=\"sm\"\n onClick={() => append({})}\n >\n Add\n </Button>\n )}\n {/* @ts-expect-error rhf incompatibility */}\n {error?._errors && (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div {...getHelperWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <div {...getErrorMessageProps()}>\n {/* @ts-expect-error rhf incompatibility */}\n <FieldValidationError error={error?._errors} />\n </div>\n </div>\n )}\n </ul>\n </SortableContext>\n </DndContext>\n );\n};\n\nexport default FieldArray;\n","import type {\n FieldValues,\n UseFieldArrayInsert,\n UseFieldArrayMove,\n UseFieldArrayRemove,\n} from 'react-hook-form';\nimport type { FieldArrayHideOption, MoveField } from './FieldArray';\n\nimport { useEffect } from 'react';\nimport { FaAngleDown, FaAngleUp, FaGripLines } from 'react-icons/fa';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { useInput } from '@nextui-org/input';\n\nimport { Button } from '@fuf-stack/pixels';\n\nimport { slugify } from '../helpers';\nimport { useFormContext } from '../hooks';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\ninterface FieldArrayFieldProps {\n children: React.ReactNode;\n className?: string;\n field: Record<'id', string>;\n fields: Record<'id', string>[];\n hideButtons?: FieldArrayHideOption[];\n id: string | number;\n index: number;\n insert: UseFieldArrayInsert<FieldValues, string>;\n lastNotDeletable?: boolean;\n move: UseFieldArrayMove;\n moveField: MoveField[];\n testId?: string;\n name: string;\n remove: UseFieldArrayRemove;\n}\n\n/**\n * FieldArrayField component using react-hook-form\n */\nconst FieldArrayField = ({\n children,\n className = undefined,\n field,\n fields,\n hideButtons = [],\n id,\n index,\n insert,\n lastNotDeletable = true,\n move,\n moveField,\n name,\n remove,\n testId = undefined,\n}: FieldArrayFieldProps) => {\n const { attributes, listeners, setNodeRef, transform, transition } =\n useSortable({ id });\n\n const style = {\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n const { getFieldState, register, watch, trigger } = useFormContext();\n const { error, invalid } = getFieldState(`${name}`, undefined);\n\n // TODO: what about input props? and label props? Do we need a label?\n const { getHelperWrapperProps, getErrorMessageProps } = useInput({\n isInvalid: invalid,\n errorMessage: JSON.stringify(error),\n labelPlacement: 'inside',\n placeholder: ' ',\n classNames: { helperWrapper: 'block' },\n });\n\n // TODO: Check if this is a current issue: _error gets kicked out of the formValidation if no other errors exist. validationError exists, but the structure changes.\n register(`${name}.${index}._errors`);\n\n const formValues = watch();\n useEffect(() => {\n trigger(`${name}.${index}._errors`);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(formValues)]);\n\n return (\n <>\n <li ref={setNodeRef} style={style} className={className}>\n {/** Start Button up/down */}\n {!hideButtons.includes('move') && !hideButtons.includes('all') && (\n <div className=\"mr-6 flex flex-row items-center\">\n {moveField.includes('drag-drop') && (\n <div\n className=\"mr-2 text-base text-xl\"\n data-testid={slugify(`${name}_${index}_movebutton`)}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...attributes}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...listeners}\n >\n <FaGripLines />\n </div>\n )}\n {moveField.includes('button') && (\n <div className=\"flex flex-col\">\n <Button\n testId={`${name}.${index}.up`}\n disabled={index === 0}\n onClick={() => move(index, index - 1)}\n className=\"flex rounded-b-none rounded-t-md border border-gray-300 px-2 py-2 shadow-sm\"\n >\n <FaAngleUp />\n </Button>\n <Button\n testId={`${name}.${index}.down`}\n disabled={index === fields.length - 1}\n onClick={() => move(index, index + 1)}\n className=\"flex rounded-b-md rounded-t-none border border-gray-300 px-2 py-2 shadow-sm\"\n >\n <FaAngleDown />\n </Button>\n </div>\n )}\n </div>\n )}\n {/** End Button up/down */}\n <div key={`rest-${field.id}`} className=\"w-full\">\n <div className=\"mb-2 flex items-center\">\n {/** RENDER CHILDREN */}\n <div className=\"flex-grow\" data-testid={testId}>\n {children}\n </div>\n {!hideButtons.includes('remove') &&\n !hideButtons.includes('all') &&\n (lastNotDeletable && fields.length === 1 ? null : (\n <Button onClick={() => remove(index)} className=\"ml-1\">\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </Button>\n ))}\n </div>\n\n {!hideButtons.includes('insert') &&\n !hideButtons.includes('all') &&\n index !== fields.length - 1 ? (\n <Button\n className=\"text-xs font-medium\"\n testId={`add-harbor-button-${index}`}\n onClick={() => {\n insert(index + 1, {});\n }}\n >\n insert\n </Button>\n ) : null}\n </div>\n </li>\n {error &&\n typeof error[index] !== 'undefined' &&\n // @ts-expect-error rhf incompatibility\n error[Number(index)]?._errors && ( // TODO: was String(). Check if Number is correct. (same below in FieldValidationError)\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div {...getHelperWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <div {...getErrorMessageProps()}>\n {/* @ts-expect-error rhf incompatibility */}\n <FieldValidationError error={error[Number(index)]?._errors} />\n </div>\n </div>\n )}\n </>\n );\n};\nexport default FieldArrayField;\n","import FieldArray from './FieldArray';\n\nexport type {\n FieldArrayProps,\n FieldArrayHideOption,\n FieldArrayFieldChildren,\n} from './FieldArray';\n\nexport { FieldArray };\n\nexport default FieldArray;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/uniform/uniform/packages/uniform/dist/chunk-75DRYT5H.cjs","../src/FieldArray/FieldArray.tsx","../src/FieldArray/FieldArrayField.tsx","../src/FieldArray/index.ts"],"names":["jsx","Button"],"mappings":"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","file":"/home/runner/work/uniform/uniform/packages/uniform/dist/chunk-75DRYT5H.cjs","sourcesContent":[null,"import type { DragEndEvent } from '@dnd-kit/core';\nimport type {\n FieldValues,\n UseFieldArrayInsert,\n UseFieldArrayMove,\n UseFieldArrayRemove,\n} from 'react-hook-form';\n\nimport { useEffect } from 'react';\nimport { useFieldArray } from 'react-hook-form';\n\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n restrictToVerticalAxis,\n restrictToWindowEdges,\n} from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { useInput } from '@nextui-org/input';\n\nimport { Button } from '@fuf-stack/pixels';\n\nimport { useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\nimport FieldArrayField from './FieldArrayField';\n\nexport type FieldArrayHideOption = 'add' | 'remove' | 'move' | 'insert' | 'all';\nexport type FieldArrayFieldChildren = (\n name: string,\n index: number,\n length: number,\n move: UseFieldArrayMove,\n insert: UseFieldArrayInsert<FieldValues, string>,\n remove: UseFieldArrayRemove,\n duplicate: (i: number) => void,\n) => JSX.Element;\n\nexport type MoveField = 'drag-drop' | 'button';\n\nexport interface FieldArrayProps {\n /** function that renders the children with provided Properties. */\n children: FieldArrayFieldChildren;\n /** Hide a set of buttons. */\n hideButtons?: FieldArrayHideOption[];\n /** label of the FieldArray. */\n label?: React.ReactNode;\n /** stops user from deleting all items. */\n lastNotDeletable?: boolean;\n /** name the FieldArray is registered in RHF */\n name: string;\n /** ID for test purposes. */\n testId?: string;\n /* how the fields can be moved */\n moveField: MoveField[];\n}\n\n/**\n * FieldArray component using react-hook-form\n */\nconst FieldArray = ({\n children,\n hideButtons = [],\n label: _label = undefined,\n lastNotDeletable = true,\n name,\n testId: _testId = undefined,\n moveField = ['button'],\n}: FieldArrayProps) => {\n const { control, getValues, getFieldState, register, trigger, watch } =\n useFormContext();\n\n const { fields, append, remove, insert, move } = useFieldArray({\n control,\n name,\n });\n\n const { error, testId, invalid, required } = getFieldState(name, _testId);\n\n register(`${name}._errors`);\n\n const formValues = watch();\n\n useEffect(() => {\n trigger(`${name}._errors`);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(formValues)]);\n\n // TODO: what about input props?\n const { label, getLabelProps, getHelperWrapperProps, getErrorMessageProps } =\n useInput({\n isInvalid: invalid,\n isRequired: required,\n errorMessage: JSON.stringify(error),\n label: _label,\n labelPlacement: 'inside',\n placeholder: ' ',\n classNames: { helperWrapper: 'block' },\n });\n\n if (lastNotDeletable && fields.length === 0) {\n append({});\n }\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (active.id !== over?.id) {\n const oldIndex = fields.findIndex((field) => field.id === active.id);\n const newIndex = fields.findIndex((field) => field.id === over?.id);\n move(oldIndex, newIndex);\n }\n };\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis, restrictToWindowEdges]}\n >\n <SortableContext\n items={fields.map((field) => field.id)}\n strategy={verticalListSortingStrategy}\n >\n <ul data-testid={testId}>\n {label && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getLabelProps()}\n className={`${getLabelProps().className} !pointer-events-auto !static !z-0 -mb-1 ml-1 !inline-block`}\n >\n {label}\n </label>\n )}\n <FieldCopyTestIdButton testId={testId} />\n\n {fields.map((field, index) => {\n const duplicate = (i: number) => {\n const values = getValues(name);\n insert(i + 1, { ...values[i], id: null });\n };\n\n return (\n <FieldArrayField\n id={field.id}\n key={field.id}\n testId={`${testId}_${index}`}\n className=\"mb-3 mt-5 flex flex-row items-center\"\n field={field}\n fields={fields}\n hideButtons={hideButtons}\n index={index}\n insert={insert}\n lastNotDeletable={lastNotDeletable}\n move={move}\n moveField={moveField}\n name={name}\n remove={remove}\n >\n {children(\n `${name}[${index}]`,\n index,\n fields.length,\n move,\n insert,\n remove,\n duplicate,\n )}\n </FieldArrayField>\n );\n })}\n\n {!hideButtons.includes('add') && !hideButtons.includes('all') && (\n <Button\n testId={`${testId}_append`}\n size=\"sm\"\n onClick={() => append({})}\n >\n Add\n </Button>\n )}\n {/* @ts-expect-error rhf incompatibility */}\n {error?._errors && (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div {...getHelperWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <div {...getErrorMessageProps()}>\n {/* @ts-expect-error rhf incompatibility */}\n <FieldValidationError error={error?._errors} />\n </div>\n </div>\n )}\n </ul>\n </SortableContext>\n </DndContext>\n );\n};\n\nexport default FieldArray;\n","import type {\n FieldValues,\n UseFieldArrayInsert,\n UseFieldArrayMove,\n UseFieldArrayRemove,\n} from 'react-hook-form';\nimport type { FieldArrayHideOption, MoveField } from './FieldArray';\n\nimport { useEffect } from 'react';\nimport { FaAngleDown, FaAngleUp, FaGripLines } from 'react-icons/fa';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { useInput } from '@nextui-org/input';\n\nimport { Button } from '@fuf-stack/pixels';\n\nimport { slugify } from '../helpers';\nimport { useFormContext } from '../hooks';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\ninterface FieldArrayFieldProps {\n children: React.ReactNode;\n className?: string;\n field: Record<'id', string>;\n fields: Record<'id', string>[];\n hideButtons?: FieldArrayHideOption[];\n id: string | number;\n index: number;\n insert: UseFieldArrayInsert<FieldValues, string>;\n lastNotDeletable?: boolean;\n move: UseFieldArrayMove;\n moveField: MoveField[];\n testId?: string;\n name: string;\n remove: UseFieldArrayRemove;\n}\n\n/**\n * FieldArrayField component using react-hook-form\n */\nconst FieldArrayField = ({\n children,\n className = undefined,\n field,\n fields,\n hideButtons = [],\n id,\n index,\n insert,\n lastNotDeletable = true,\n move,\n moveField,\n name,\n remove,\n testId = undefined,\n}: FieldArrayFieldProps) => {\n const { attributes, listeners, setNodeRef, transform, transition } =\n useSortable({ id });\n\n const style = {\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n const { getFieldState, register, watch, trigger } = useFormContext();\n const { error, invalid } = getFieldState(`${name}`, undefined);\n\n // TODO: what about input props? and label props? Do we need a label?\n const { getHelperWrapperProps, getErrorMessageProps } = useInput({\n isInvalid: invalid,\n errorMessage: JSON.stringify(error),\n labelPlacement: 'inside',\n placeholder: ' ',\n classNames: { helperWrapper: 'block' },\n });\n\n // TODO: Check if this is a current issue: _error gets kicked out of the formValidation if no other errors exist. validationError exists, but the structure changes.\n register(`${name}.${index}._errors`);\n\n const formValues = watch();\n useEffect(() => {\n trigger(`${name}.${index}._errors`);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(formValues)]);\n\n return (\n <>\n <li ref={setNodeRef} style={style} className={className}>\n {/** Start Button up/down */}\n {!hideButtons.includes('move') && !hideButtons.includes('all') && (\n <div className=\"mr-6 flex flex-row items-center\">\n {moveField.includes('drag-drop') && (\n <div\n className=\"mr-2 text-base text-xl\"\n data-testid={slugify(`${name}_${index}_movebutton`)}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...attributes}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...listeners}\n >\n <FaGripLines />\n </div>\n )}\n {moveField.includes('button') && (\n <div className=\"flex flex-col\">\n <Button\n testId={`${name}.${index}.up`}\n disabled={index === 0}\n onClick={() => move(index, index - 1)}\n className=\"flex rounded-b-none rounded-t-md border border-gray-300 px-2 py-2 shadow-sm\"\n >\n <FaAngleUp />\n </Button>\n <Button\n testId={`${name}.${index}.down`}\n disabled={index === fields.length - 1}\n onClick={() => move(index, index + 1)}\n className=\"flex rounded-b-md rounded-t-none border border-gray-300 px-2 py-2 shadow-sm\"\n >\n <FaAngleDown />\n </Button>\n </div>\n )}\n </div>\n )}\n {/** End Button up/down */}\n <div key={`rest-${field.id}`} className=\"w-full\">\n <div className=\"mb-2 flex items-center\">\n {/** RENDER CHILDREN */}\n <div className=\"flex-grow\" data-testid={testId}>\n {children}\n </div>\n {!hideButtons.includes('remove') &&\n !hideButtons.includes('all') &&\n (lastNotDeletable && fields.length === 1 ? null : (\n <Button onClick={() => remove(index)} className=\"ml-1\">\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </Button>\n ))}\n </div>\n\n {!hideButtons.includes('insert') &&\n !hideButtons.includes('all') &&\n index !== fields.length - 1 ? (\n <Button\n className=\"text-xs font-medium\"\n testId={`add-harbor-button-${index}`}\n onClick={() => {\n insert(index + 1, {});\n }}\n >\n insert\n </Button>\n ) : null}\n </div>\n </li>\n {error &&\n typeof error[index] !== 'undefined' &&\n // @ts-expect-error rhf incompatibility\n error[Number(index)]?._errors && ( // TODO: was String(). Check if Number is correct. (same below in FieldValidationError)\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div {...getHelperWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <div {...getErrorMessageProps()}>\n {/* @ts-expect-error rhf incompatibility */}\n <FieldValidationError error={error[Number(index)]?._errors} />\n </div>\n </div>\n )}\n </>\n );\n};\nexport default FieldArrayField;\n","import FieldArray from './FieldArray';\n\nexport type {\n FieldArrayProps,\n FieldArrayHideOption,\n FieldArrayFieldChildren,\n} from './FieldArray';\n\nexport { FieldArray };\n\nexport default FieldArray;\n"]}
@@ -7,7 +7,7 @@ import { useContext } from "react";
7
7
  import { useFormContext as useHookFormContext } from "react-hook-form";
8
8
 
9
9
  // src/Form/subcomponents/FormContext.tsx
10
- import React, { useMemo, useState } from "react";
10
+ import React, { useMemo, useRef } from "react";
11
11
  import { FormProvider as HookFormProvider, useForm } from "react-hook-form";
12
12
  import { jsx } from "react/jsx-runtime";
13
13
  var removeNullishFields = (obj) => {
@@ -17,7 +17,10 @@ var removeNullishFields = (obj) => {
17
17
  })
18
18
  );
19
19
  };
20
- var UniformContext = React.createContext(void 0);
20
+ var UniformContext = React.createContext({
21
+ preventSubmit: () => void 0,
22
+ validation: void 0
23
+ });
21
24
  var FormProvider = ({
22
25
  children,
23
26
  initialValues = void 0,
@@ -25,11 +28,16 @@ var FormProvider = ({
25
28
  validation = void 0,
26
29
  validationTrigger
27
30
  }) => {
28
- const [canSubmit, setCanSubmit] = useState(true);
31
+ const preventSubmit = useRef(false);
29
32
  const contextValue = useMemo(
30
- () => ({ canSubmit, setCanSubmit, validation }),
33
+ () => ({
34
+ preventSubmit: (prevent) => {
35
+ preventSubmit.current = prevent;
36
+ },
37
+ validation
38
+ }),
31
39
  // eslint-disable-next-line react-hooks/exhaustive-deps
32
- [canSubmit]
40
+ []
33
41
  );
34
42
  const methods = useForm({
35
43
  defaultValues: initialValues,
@@ -47,9 +55,9 @@ var FormProvider = ({
47
55
  } : {}
48
56
  });
49
57
  const handleSubmit = async (e) => {
50
- if (!canSubmit) {
58
+ if (preventSubmit.current) {
51
59
  console.warn(
52
- "[FormProvider] form submit was canceled canSubmit is false..."
60
+ "[FormProvider] form submit was prevented because preventSubmit is true..."
53
61
  );
54
62
  e?.preventDefault();
55
63
  return Promise.resolve();
@@ -126,4 +134,4 @@ export {
126
134
  recursiveFieldKeySearch,
127
135
  useFormContext
128
136
  };
129
- //# sourceMappingURL=chunk-B24NXJTR.js.map
137
+ //# sourceMappingURL=chunk-7LPWP66H.js.map