@fuf-stack/uniform 1.8.1 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Checkboxes/index.cjs +10 -10
- package/dist/Checkboxes/index.js +9 -9
- package/dist/FieldArray/index.cjs +10 -10
- package/dist/FieldArray/index.js +9 -9
- package/dist/Form/index.cjs +10 -10
- package/dist/Form/index.js +9 -9
- package/dist/Input/index.cjs +10 -10
- package/dist/Input/index.js +9 -9
- package/dist/RadioBoxes/index.cjs +10 -10
- package/dist/RadioBoxes/index.js +9 -9
- package/dist/RadioTabs/index.cjs +10 -10
- package/dist/RadioTabs/index.js +9 -9
- package/dist/Radios/index.cjs +10 -10
- package/dist/Radios/index.js +9 -9
- package/dist/Select/index.cjs +10 -10
- package/dist/Select/index.js +9 -9
- package/dist/SubmitButton/index.cjs +10 -10
- package/dist/SubmitButton/index.js +9 -9
- package/dist/Switch/index.cjs +10 -10
- package/dist/Switch/index.js +9 -9
- package/dist/TextArea/index.cjs +10 -10
- package/dist/TextArea/index.js +9 -9
- package/dist/{chunk-U45RW4FC.js → chunk-2BWUTUVE.js} +5 -5
- package/dist/chunk-2BWUTUVE.js.map +1 -0
- package/dist/{chunk-LKR6D3RL.js → chunk-2YHO6FBK.js} +2 -2
- package/dist/{chunk-S3H432Z2.cjs → chunk-4UBIV2LI.cjs} +3 -3
- package/dist/{chunk-S3H432Z2.cjs.map → chunk-4UBIV2LI.cjs.map} +1 -1
- package/dist/{chunk-KQQAESO7.js → chunk-5ASOVFNF.js} +4 -4
- package/dist/{chunk-K33E67GR.js → chunk-5RNATZD6.js} +3 -3
- package/dist/{chunk-5RPUTRV5.js → chunk-64YW5GV2.js} +3 -3
- package/dist/{chunk-4TQ53WAY.js → chunk-6NJJHUKF.js} +3 -3
- package/dist/{chunk-BUJNCVUR.js → chunk-BGNZCW7J.js} +2 -2
- package/dist/{chunk-6LQ2O6SC.cjs → chunk-C2JPKUCY.cjs} +11 -11
- package/dist/chunk-C2JPKUCY.cjs.map +1 -0
- package/dist/{chunk-ZFZK6EM2.cjs → chunk-CHBLPOFP.cjs} +3 -3
- package/dist/{chunk-ZFZK6EM2.cjs.map → chunk-CHBLPOFP.cjs.map} +1 -1
- package/dist/{chunk-IFBKJ5UZ.cjs → chunk-CUVHORQH.cjs} +7 -7
- package/dist/{chunk-IFBKJ5UZ.cjs.map → chunk-CUVHORQH.cjs.map} +1 -1
- package/dist/{chunk-EUO4VWRX.js → chunk-DFVZ4AV5.js} +2 -2
- package/dist/{chunk-ZEJ45LLM.cjs → chunk-FBH7RW4U.cjs} +3 -3
- package/dist/{chunk-ZEJ45LLM.cjs.map → chunk-FBH7RW4U.cjs.map} +1 -1
- package/dist/{chunk-EUTTXFWA.cjs → chunk-FP5KRDUN.cjs} +5 -5
- package/dist/{chunk-EUTTXFWA.cjs.map → chunk-FP5KRDUN.cjs.map} +1 -1
- package/dist/{chunk-EGFB5WEK.js → chunk-G3A7AEDA.js} +3 -3
- package/dist/{chunk-VUW522KH.js → chunk-GNK45IFM.js} +2 -2
- package/dist/{chunk-FND5Z5BW.js → chunk-HH7YK5QR.js} +4 -4
- package/dist/{chunk-OQUTHTOK.cjs → chunk-IXJISVRO.cjs} +5 -5
- package/dist/{chunk-OQUTHTOK.cjs.map → chunk-IXJISVRO.cjs.map} +1 -1
- package/dist/{chunk-N24A7PIL.js → chunk-K6TW2OY3.js} +2 -2
- package/dist/{chunk-4L3JXJ62.cjs → chunk-KQEM5HFD.cjs} +5 -5
- package/dist/{chunk-4L3JXJ62.cjs.map → chunk-KQEM5HFD.cjs.map} +1 -1
- package/dist/{chunk-6F5EZ6QN.cjs → chunk-LB6GH6FJ.cjs} +3 -3
- package/dist/{chunk-6F5EZ6QN.cjs.map → chunk-LB6GH6FJ.cjs.map} +1 -1
- package/dist/{chunk-OJGPW4Z6.cjs → chunk-M5CEG4RM.cjs} +3 -3
- package/dist/{chunk-OJGPW4Z6.cjs.map → chunk-M5CEG4RM.cjs.map} +1 -1
- package/dist/{chunk-ZLTMRO6X.cjs → chunk-MKANLM7V.cjs} +3 -3
- package/dist/{chunk-ZLTMRO6X.cjs.map → chunk-MKANLM7V.cjs.map} +1 -1
- package/dist/{chunk-SWPFSD3Y.js → chunk-MUKDMHP6.js} +2 -2
- package/dist/{chunk-7KEUEGRC.cjs → chunk-MZIVLP3U.cjs} +7 -7
- package/dist/chunk-MZIVLP3U.cjs.map +1 -0
- package/dist/{chunk-CST35FDK.cjs → chunk-NAHYXRGT.cjs} +5 -5
- package/dist/{chunk-CST35FDK.cjs.map → chunk-NAHYXRGT.cjs.map} +1 -1
- package/dist/{chunk-76KOVUDN.js → chunk-O2XJNQQK.js} +18 -2
- package/dist/chunk-O2XJNQQK.js.map +1 -0
- package/dist/{chunk-PY4GCAFN.js → chunk-O56EUQR7.js} +2 -2
- package/dist/{chunk-Z353BLWI.cjs → chunk-OKJWLH7T.cjs} +18 -2
- package/dist/chunk-OKJWLH7T.cjs.map +1 -0
- package/dist/{chunk-KGN5JQGG.js → chunk-QOBWD4QR.js} +3 -3
- package/dist/{chunk-UT6VUGFP.cjs → chunk-ROFP3IVU.cjs} +9 -9
- package/dist/{chunk-UT6VUGFP.cjs.map → chunk-ROFP3IVU.cjs.map} +1 -1
- package/dist/{chunk-4F45XA7Y.cjs → chunk-SDHZAPPA.cjs} +3 -3
- package/dist/{chunk-4F45XA7Y.cjs.map → chunk-SDHZAPPA.cjs.map} +1 -1
- package/dist/{chunk-GEJUMUTH.js → chunk-TGYJUEO2.js} +2 -2
- package/dist/{chunk-TJY5FK4B.cjs → chunk-TJK2MERL.cjs} +5 -5
- package/dist/{chunk-TJY5FK4B.cjs.map → chunk-TJK2MERL.cjs.map} +1 -1
- package/dist/{chunk-WWGKXYZB.js → chunk-TPZTWRPL.js} +2 -2
- package/dist/{chunk-4CWB5XBW.cjs → chunk-TZSGJQNR.cjs} +3 -3
- package/dist/{chunk-4CWB5XBW.cjs.map → chunk-TZSGJQNR.cjs.map} +1 -1
- package/dist/{chunk-EB3RNELT.cjs → chunk-XOXGE2E3.cjs} +5 -5
- package/dist/{chunk-EB3RNELT.cjs.map → chunk-XOXGE2E3.cjs.map} +1 -1
- package/dist/{chunk-GKP3ONKO.js → chunk-ZLFYOJ4M.js} +4 -4
- package/dist/{chunk-GKP3ONKO.js.map → chunk-ZLFYOJ4M.js.map} +1 -1
- package/dist/helpers/index.cjs +4 -2
- package/dist/helpers/index.cjs.map +1 -1
- package/dist/helpers/index.d.cts +21 -1
- package/dist/helpers/index.d.ts +21 -1
- package/dist/helpers/index.js +3 -1
- package/dist/hooks/index.cjs +9 -9
- package/dist/hooks/index.d.cts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.js +8 -8
- package/dist/hooks/useClientValidation/index.cjs +5 -5
- package/dist/hooks/useClientValidation/index.d.cts +2 -2
- package/dist/hooks/useClientValidation/index.d.ts +2 -2
- package/dist/hooks/useClientValidation/index.js +4 -4
- package/dist/hooks/useController/index.cjs +4 -4
- package/dist/hooks/useController/index.js +3 -3
- package/dist/hooks/useFormContext/index.cjs +4 -4
- package/dist/hooks/useFormContext/index.d.cts +7 -0
- package/dist/hooks/useFormContext/index.d.ts +7 -0
- package/dist/hooks/useFormContext/index.js +3 -3
- package/dist/hooks/useUniformField/index.cjs +6 -6
- package/dist/hooks/useUniformField/index.js +5 -5
- package/dist/hooks/useUniformFieldArray/index.cjs +7 -7
- package/dist/hooks/useUniformFieldArray/index.js +6 -6
- package/dist/hooks/useWatchUserChange/index.cjs +5 -5
- package/dist/hooks/useWatchUserChange/index.js +4 -4
- package/dist/index.cjs +22 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +21 -19
- package/package.json +13 -11
- package/dist/chunk-6LQ2O6SC.cjs.map +0 -1
- package/dist/chunk-76KOVUDN.js.map +0 -1
- package/dist/chunk-7KEUEGRC.cjs.map +0 -1
- package/dist/chunk-U45RW4FC.js.map +0 -1
- package/dist/chunk-Z353BLWI.cjs.map +0 -1
- /package/dist/{chunk-LKR6D3RL.js.map → chunk-2YHO6FBK.js.map} +0 -0
- /package/dist/{chunk-KQQAESO7.js.map → chunk-5ASOVFNF.js.map} +0 -0
- /package/dist/{chunk-K33E67GR.js.map → chunk-5RNATZD6.js.map} +0 -0
- /package/dist/{chunk-5RPUTRV5.js.map → chunk-64YW5GV2.js.map} +0 -0
- /package/dist/{chunk-4TQ53WAY.js.map → chunk-6NJJHUKF.js.map} +0 -0
- /package/dist/{chunk-BUJNCVUR.js.map → chunk-BGNZCW7J.js.map} +0 -0
- /package/dist/{chunk-EUO4VWRX.js.map → chunk-DFVZ4AV5.js.map} +0 -0
- /package/dist/{chunk-EGFB5WEK.js.map → chunk-G3A7AEDA.js.map} +0 -0
- /package/dist/{chunk-VUW522KH.js.map → chunk-GNK45IFM.js.map} +0 -0
- /package/dist/{chunk-FND5Z5BW.js.map → chunk-HH7YK5QR.js.map} +0 -0
- /package/dist/{chunk-N24A7PIL.js.map → chunk-K6TW2OY3.js.map} +0 -0
- /package/dist/{chunk-SWPFSD3Y.js.map → chunk-MUKDMHP6.js.map} +0 -0
- /package/dist/{chunk-PY4GCAFN.js.map → chunk-O56EUQR7.js.map} +0 -0
- /package/dist/{chunk-KGN5JQGG.js.map → chunk-QOBWD4QR.js.map} +0 -0
- /package/dist/{chunk-GEJUMUTH.js.map → chunk-TGYJUEO2.js.map} +0 -0
- /package/dist/{chunk-WWGKXYZB.js.map → chunk-TPZTWRPL.js.map} +0 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,82DAAC","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/index.cjs"}
|
package/dist/index.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ export { b as CheckboxOption, C as Checkboxes, a as CheckboxesProps } from './Ch
|
|
|
2
2
|
export { F as FieldArray, a as FieldArrayChildrenRenderFn, b as FieldArrayFeatures, c as FieldArrayProps } from './FieldArray-Cql1zcch.cjs';
|
|
3
3
|
export { F as Form, a as FormProps } from './Form-BZZJPLsi.cjs';
|
|
4
4
|
export { G as Grid, a as GridProps } from './Grid-DF3L9NF3.cjs';
|
|
5
|
-
export { flatArrayKey, fromNullishString, toFormFormat, toNullishString, toValidationFormat } from './helpers/index.cjs';
|
|
5
|
+
export { flatArrayKey, fromNullishString, nameToTestId, toFormFormat, toNullishString, toValidationFormat } from './helpers/index.cjs';
|
|
6
6
|
export { clientValidationSchemaByName, useClientValidation } from './hooks/useClientValidation/index.cjs';
|
|
7
7
|
export { UseControllerProps, UseControllerReturn, useController } from './hooks/useController/index.cjs';
|
|
8
8
|
export { UseUniformFieldArrayProps, useUniformFieldArray } from './hooks/useUniformFieldArray/index.cjs';
|
|
@@ -29,7 +29,7 @@ import 'react';
|
|
|
29
29
|
import '@fuf-stack/veto';
|
|
30
30
|
import 'react-hook-form';
|
|
31
31
|
import './FormContext-9Firwt4k.cjs';
|
|
32
|
-
import '@fuf-stack/veto/dist/types.d-
|
|
32
|
+
import '@fuf-stack/veto/dist/types.d-CNPgNK-V';
|
|
33
33
|
import '@fuf-stack/pixels';
|
|
34
34
|
import 'react-select';
|
|
35
35
|
import '@heroui/switch';
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { b as CheckboxOption, C as Checkboxes, a as CheckboxesProps } from './Ch
|
|
|
2
2
|
export { F as FieldArray, a as FieldArrayChildrenRenderFn, b as FieldArrayFeatures, c as FieldArrayProps } from './FieldArray-Cql1zcch.js';
|
|
3
3
|
export { F as Form, a as FormProps } from './Form-zsUjI2yq.js';
|
|
4
4
|
export { G as Grid, a as GridProps } from './Grid-DF3L9NF3.js';
|
|
5
|
-
export { flatArrayKey, fromNullishString, toFormFormat, toNullishString, toValidationFormat } from './helpers/index.js';
|
|
5
|
+
export { flatArrayKey, fromNullishString, nameToTestId, toFormFormat, toNullishString, toValidationFormat } from './helpers/index.js';
|
|
6
6
|
export { clientValidationSchemaByName, useClientValidation } from './hooks/useClientValidation/index.js';
|
|
7
7
|
export { UseControllerProps, UseControllerReturn, useController } from './hooks/useController/index.js';
|
|
8
8
|
export { UseUniformFieldArrayProps, useUniformFieldArray } from './hooks/useUniformFieldArray/index.js';
|
|
@@ -29,7 +29,7 @@ import 'react';
|
|
|
29
29
|
import '@fuf-stack/veto';
|
|
30
30
|
import 'react-hook-form';
|
|
31
31
|
import './FormContext-9Firwt4k.js';
|
|
32
|
-
import '@fuf-stack/veto/dist/types.d-
|
|
32
|
+
import '@fuf-stack/veto/dist/types.d-CNPgNK-V';
|
|
33
33
|
import '@fuf-stack/pixels';
|
|
34
34
|
import 'react-select';
|
|
35
35
|
import '@heroui/switch';
|
package/dist/index.js
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Radios_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K6TW2OY3.js";
|
|
4
4
|
import {
|
|
5
5
|
Select_default
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-64YW5GV2.js";
|
|
7
7
|
import {
|
|
8
8
|
SubmitButton_default
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GNK45IFM.js";
|
|
10
10
|
import {
|
|
11
11
|
Switch_default
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-5RNATZD6.js";
|
|
13
13
|
import {
|
|
14
14
|
TextArea_default
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-BGNZCW7J.js";
|
|
16
16
|
import {
|
|
17
17
|
Checkboxes_default
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-MUKDMHP6.js";
|
|
19
19
|
import {
|
|
20
20
|
FieldArray_default
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-5ASOVFNF.js";
|
|
22
22
|
import {
|
|
23
23
|
Form_default
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-QOBWD4QR.js";
|
|
25
25
|
import {
|
|
26
26
|
Grid_default
|
|
27
27
|
} from "./chunk-B62HKKMS.js";
|
|
28
28
|
import {
|
|
29
29
|
Input_default
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-TGYJUEO2.js";
|
|
31
31
|
import {
|
|
32
32
|
RadioBoxes_default
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-TPZTWRPL.js";
|
|
34
34
|
import {
|
|
35
35
|
RadioTabs_default
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-DFVZ4AV5.js";
|
|
37
37
|
import "./chunk-V3GDAELU.js";
|
|
38
38
|
import {
|
|
39
39
|
useInputValueDebounce
|
|
40
40
|
} from "./chunk-ZJDU5EPE.js";
|
|
41
41
|
import {
|
|
42
42
|
useUniformFieldArray
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-HH7YK5QR.js";
|
|
44
44
|
import {
|
|
45
45
|
useUniformField
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-G3A7AEDA.js";
|
|
47
47
|
import {
|
|
48
48
|
FieldCopyTestIdButton_default
|
|
49
49
|
} from "./chunk-NTDKZW4E.js";
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
} from "./chunk-ELYGQTXB.js";
|
|
53
53
|
import {
|
|
54
54
|
useController
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-ZLFYOJ4M.js";
|
|
56
56
|
import {
|
|
57
57
|
useInput
|
|
58
58
|
} from "./chunk-AHJJIANM.js";
|
|
@@ -61,23 +61,24 @@ import {
|
|
|
61
61
|
} from "./chunk-CNTOODUQ.js";
|
|
62
62
|
import {
|
|
63
63
|
useWatchUserChange
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-O56EUQR7.js";
|
|
65
65
|
import {
|
|
66
66
|
clientValidationSchemaByName,
|
|
67
67
|
useClientValidation
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-6NJJHUKF.js";
|
|
69
69
|
import {
|
|
70
70
|
checkFieldIsRequired,
|
|
71
71
|
useFormContext
|
|
72
|
-
} from "./chunk-
|
|
73
|
-
import "./chunk-
|
|
72
|
+
} from "./chunk-2BWUTUVE.js";
|
|
73
|
+
import "./chunk-2YHO6FBK.js";
|
|
74
74
|
import {
|
|
75
75
|
flatArrayKey,
|
|
76
76
|
fromNullishString,
|
|
77
|
+
nameToTestId,
|
|
77
78
|
toFormFormat,
|
|
78
79
|
toNullishString,
|
|
79
80
|
toValidationFormat
|
|
80
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-O2XJNQQK.js";
|
|
81
82
|
import "./chunk-K2V4ULA2.js";
|
|
82
83
|
export {
|
|
83
84
|
Checkboxes_default as Checkboxes,
|
|
@@ -98,6 +99,7 @@ export {
|
|
|
98
99
|
clientValidationSchemaByName,
|
|
99
100
|
flatArrayKey,
|
|
100
101
|
fromNullishString,
|
|
102
|
+
nameToTestId,
|
|
101
103
|
toFormFormat,
|
|
102
104
|
toNullishString,
|
|
103
105
|
toValidationFormat,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fuf-stack/uniform",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.4",
|
|
4
4
|
"description": "fuf react form library",
|
|
5
5
|
"author": "Fröhlich ∧ Frei",
|
|
6
6
|
"homepage": "https://github.com/fuf-stack/pixels#readme",
|
|
@@ -156,6 +156,11 @@
|
|
|
156
156
|
"bugs": {
|
|
157
157
|
"url": "https://github.com/fuf-stack/pixels/issues"
|
|
158
158
|
},
|
|
159
|
+
"scripts": {
|
|
160
|
+
"build": "tsup --config node_modules/@repo/tsup-config/config.ts",
|
|
161
|
+
"prepack": "pnpm build",
|
|
162
|
+
"test": "vitest ./src"
|
|
163
|
+
},
|
|
159
164
|
"peerDependencies": {
|
|
160
165
|
"react": ">=18",
|
|
161
166
|
"react-dom": ">=18"
|
|
@@ -165,6 +170,10 @@
|
|
|
165
170
|
"@dnd-kit/modifiers": "9.0.0",
|
|
166
171
|
"@dnd-kit/sortable": "10.0.0",
|
|
167
172
|
"@dnd-kit/utilities": "3.2.2",
|
|
173
|
+
"@fuf-stack/pixel-motion": "1.0.26",
|
|
174
|
+
"@fuf-stack/pixel-utils": "1.0.5",
|
|
175
|
+
"@fuf-stack/pixels": "1.4.0",
|
|
176
|
+
"@fuf-stack/veto": "0.12.6",
|
|
168
177
|
"@heroui/button": "2.2.24",
|
|
169
178
|
"@heroui/checkbox": "2.3.24",
|
|
170
179
|
"@heroui/input": "2.4.25",
|
|
@@ -176,13 +185,9 @@
|
|
|
176
185
|
"@heroui/theme": "2.4.20",
|
|
177
186
|
"@react-aria/visually-hidden": "3.8.28",
|
|
178
187
|
"framer-motion": "12.23.24",
|
|
179
|
-
"react-icons": "5.5.0",
|
|
180
188
|
"react-hook-form": "7.55.0",
|
|
181
|
-
"react-
|
|
182
|
-
"
|
|
183
|
-
"@fuf-stack/pixel-motion": "1.0.26",
|
|
184
|
-
"@fuf-stack/pixels": "1.3.8",
|
|
185
|
-
"@fuf-stack/veto": "0.12.6"
|
|
189
|
+
"react-icons": "5.5.0",
|
|
190
|
+
"react-select": "5.10.2"
|
|
186
191
|
},
|
|
187
192
|
"devDependencies": {
|
|
188
193
|
"@types/debug": "4.1.12",
|
|
@@ -191,8 +196,5 @@
|
|
|
191
196
|
"react": "19.1.1",
|
|
192
197
|
"react-dom": "19.1.1"
|
|
193
198
|
},
|
|
194
|
-
"
|
|
195
|
-
"build": "tsup --config node_modules/@repo/tsup-config/config.ts",
|
|
196
|
-
"test": "vitest ./src"
|
|
197
|
-
}
|
|
199
|
+
"gitHead": "fc794f7f6cbe9baed0a95c1afd1f63ababb323f4"
|
|
198
200
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-6LQ2O6SC.cjs","../src/hooks/useFormContext/useFormContext.ts"],"names":["_a"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-6LQ2O6SC.cjs","sourcesContent":[null,"/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { VetoFormattedError, VetoInstance } from '@fuf-stack/veto';\nimport type { FieldError, FieldValues, Path } from 'react-hook-form';\n\nimport { useContext } from 'react';\nimport { useFormContext as useHookFormContext } from 'react-hook-form';\n\nimport { slugify } from '@fuf-stack/pixel-utils';\n\nimport { UniformContext } from '../../Form/subcomponents/FormContext';\nimport { flatArrayKey, toValidationFormat } from '../../helpers';\n\n/** Schema check whether a field is required or optional */\nexport const checkFieldIsRequired = (\n validation: VetoInstance,\n path: string[],\n): boolean => {\n // Handle flat array paths: strip the flatArrayKey to check the array element schema\n // e.g., ['arrayField', '0', '__FLAT__'] -> check schema at ['arrayField', '0']\n const checkPath =\n path[path.length - 1] === flatArrayKey ? path.slice(0, -1) : path;\n\n const checkRequired = (schema: any) => {\n // arrays ...\n if (schema.type === 'array') {\n // ... if array is optional or nullable it is not required\n if (schema.isOptional || schema.isNullable) {\n return false;\n }\n // ... otherwise arrays are required (display logic wise -> no asterisk in the label)\n return true;\n }\n\n // all other fields are required if they are\n // not optional and not nullable\n return !schema.isOptional && !schema.isNullable;\n };\n\n return validation.checkSchemaPath(checkRequired, checkPath);\n};\n\n/**\n * Resolve validation errors for a given field path.\n *\n * Traverses a nested `VetoFormattedError` structure using a dotted path\n * (for example: \"user.address.0.street\") and returns the matching\n * `FieldError[]` if present. If no error exists at the path, returns\n * `undefined`.\n *\n * @param errors - The formatted validation errors from Uniform's context\n * @param name - The dotted field path to resolve\n * @returns An array of `FieldError` entries for the field, or `undefined`\n */\nconst getValidationErrorsByName = (\n errors: VetoFormattedError,\n name: string,\n) => {\n // Traverse nested error structure; ignore flat array wrapper key\n const keys = name.split('.').filter((k) => {\n return k !== flatArrayKey;\n });\n let current: unknown = errors as unknown;\n keys.forEach((key) => {\n if (current && typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n current = undefined;\n }\n });\n return current as FieldError[] | undefined;\n};\n\n/**\n * Custom hook that extends react-hook-form's useFormContext to add validation and state management.\n */\nexport const useFormContext = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues = TFieldValues,\n>() => {\n const {\n formState,\n // some methods that will be enhanced below\n getFieldState: getFieldStateOrig,\n getValues: getValuesOrig,\n watch: watchOrig,\n subscribe: subscribeOrig,\n // the rest of the methods pass through unchanged\n ...otherMethods\n } = useHookFormContext<TFieldValues, TContext, TTransformedValues>();\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: Path<TFieldValues>, testId?: string) => {\n const fieldPath =\n typeof name === 'string' ? name.replace(/\\[\\d+\\]/g, '').split('.') : name;\n\n // Use base validation instance for checking \"required\" status\n // Client validation often uses .nullish() which would incorrectly mark fields as optional\n const validationInstance =\n uniformContext?.validation.baseInstance ??\n uniformContext?.validation.instance;\n\n // Check if the field is required using the validation schema\n const required = validationInstance\n ? checkFieldIsRequired(validationInstance, fieldPath)\n : false;\n\n const error = getValidationErrorsByName(\n uniformContext?.validation.errors ?? {},\n name,\n ) as unknown as FieldError[] | undefined;\n\n // Get everything but the error from the original field state\n const fieldState = getFieldStateOrig(name, formState);\n\n return {\n ...fieldState,\n error,\n invalid: !!error,\n required,\n testId: slugify(testId ?? name, { replaceDots: true }),\n };\n };\n\n /**\n * Wrap form value accessor methods to automatically convert from internal storage format\n * to component-friendly format:\n *\n * - Convert nullish string markers: \"__NULL__\" → null, \"__FALSE__\" → false, \"__ZERO__\" → 0\n * - Filter out empty/null values: fields with converted null/empty values are removed entirely\n *\n * This ensures components receive clean, predictable data without needing to handle\n * the internal nullish string conversion system manually.\n */\n const getValues = ((...args: any[]) => {\n const result = (getValuesOrig as any)(...args);\n return toValidationFormat(result);\n }) as typeof getValuesOrig;\n\n const watch = ((...args: any[]) => {\n const result = (watchOrig as any)(...args);\n return toValidationFormat(result);\n }) as typeof watchOrig;\n\n const subscribe = ((...args: any[]) => {\n // For subscribe, we need to wrap the callback to convert the values property\n const [options] = args;\n if (options?.callback) {\n const originalCallback = options.callback;\n const wrappedOptions = {\n ...options,\n callback: (subscribeFormState: any) => {\n // Convert the values property if it exists\n const convertedFormState = {\n ...subscribeFormState,\n ...(subscribeFormState.values && {\n values: toValidationFormat(subscribeFormState.values),\n }),\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return originalCallback(convertedFormState);\n },\n };\n return subscribeOrig(wrappedOptions);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (subscribeOrig as any)(...args);\n }) as typeof subscribeOrig;\n\n return {\n ...otherMethods,\n ...uniformContext,\n formState,\n getFieldState,\n getValues,\n subscribe,\n watch,\n };\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/helpers/nullishFields/nullishFields.ts"],"sourcesContent":["/** Key used to wrap flat array elements when converting to form format */\nexport const flatArrayKey = '__FLAT__';\n\n/**\n * String markers used to preserve null, false, and 0 values during JSON processing\n */\nconst nullString = '__NULL__';\nconst falseString = '__FALSE__';\nconst zeroString = '__ZERO__';\n\n/**\n * Converts marker strings back to their original values when processing arrays\n */\nexport const fromNullishString = (value: unknown): unknown => {\n // Support arrays: unwrap flat wrappers and convert marker strings per entry\n if (Array.isArray(value)) {\n return (value as unknown[]).map((entry) => {\n if (entry && typeof entry === 'object') {\n const record = entry as Record<string, unknown>;\n if (flatArrayKey in record) {\n const inner = record[flatArrayKey];\n // For arrays, treat empty string as null (placeholder input)\n if (inner === '') {\n return null;\n }\n return fromNullishString(inner);\n }\n }\n return fromNullishString(entry);\n });\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n switch (value) {\n case nullString:\n return null;\n case falseString:\n return false;\n case zeroString:\n return 0;\n default:\n return value;\n }\n};\n\n/**\n * Converts null/falsy values to marker strings for JSON processing\n */\nexport const toNullishString = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n // Only wrap arrays of primitives; leave arrays of objects as-is\n const isPrimitive = (v: unknown) => {\n return v === null || ['string', 'number', 'boolean'].includes(typeof v);\n };\n const isPrimitiveArray = (value as unknown[]).every(isPrimitive);\n if (isPrimitiveArray) {\n return (value as unknown[]).map((v) => {\n // Store raw primitive; do not convert to marker strings inside the wrapper\n return { [flatArrayKey]: v } as Record<string, unknown>;\n });\n }\n return value;\n }\n if (value === null || value === '') {\n return nullString;\n }\n if (value === false) {\n return falseString;\n }\n if (value === 0) {\n return zeroString;\n }\n return value;\n};\n\n/**\n * Converts field values to a format suitable for forms by:\n * - Wrapping arrays of primitives as objects using the flatArrayKey `__FLAT__`\n * to satisfy RHF's requirement that array fields contain objects\n * - Removing empty strings and null values from objects\n *\n * This conversion is required because React Hook Form does not support arrays with\n * flat values (string, number, boolean, null). Array fields must contain objects.\n * We work around this by wrapping primitive entries: `{ __FLAT__: <value> }`.\n *\n * @example\n * const fields = {\n * name: 'John',\n * scores: [0, null, 75, false],\n * scoresDetailed: [\n * { score: 1 },\n * { score: null },\n * { score: 0 },\n * { score: false },\n * { score: '' },\n * ],\n * contact: {\n * email: '',\n * phone: null,\n * address: '123 Main St'\n * }\n * };\n *\n * // Result:\n * {\n * name: 'John',\n * scores: [\n * { __FLAT__: 0 },\n * { __FLAT__: null },\n * { __FLAT__: 75 },\n * { __FLAT__: false }\n * ],\n * // Arrays of objects are left as objects; empty/null properties are removed\n * scoresDetailed: [\n * { score: 1 },\n * {}, // null score removed\n * { score: 0 },\n * { score: false },\n * {}, // empty string removed\n * ],\n * contact: {\n * address: '123 Main St'\n * }\n * }\n */\nexport const toFormFormat = (fields: Record<string, unknown>) => {\n const formFormatJson = JSON.stringify(fields, (_, value) => {\n if (Array.isArray(value)) {\n // Delegate to toNullishString to ensure consistent handling\n return toNullishString(value);\n }\n\n if (value && typeof value === 'object') {\n // Preserve flat-array wrappers as-is (do not filter their inner values here)\n const record = value as Record<string, unknown>;\n if (flatArrayKey in record) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).filter(([_key, v]) => {\n return v !== '' && v !== null;\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n });\n\n return JSON.parse(formFormatJson) as Record<string, unknown>;\n};\n\n/**\n * Converts form state to a format suitable for validation by:\n * - Unwrapping flat array wrappers `{ __FLAT__: <value> }` back to primitives\n * - Converting legacy string markers (__NULL__, __FALSE__, __ZERO__) back to their original values\n * - Removing fields whose converted value is empty string or null\n * - Removing empty arrays\n *\n * @example\n * const formState = {\n * name: 'John',\n * scores: [\n * { __FLAT__: 75 },\n * { __FLAT__: 0 },\n * { __FLAT__: null },\n * { __FLAT__: false }\n * ],\n * emptyArray: [],\n * scoresDetailed: [\n * { score: 1 },\n * {},\n * { score: 0 },\n * { score: false },\n * {},\n * ],\n * contact: {\n * address: '123 Main St',\n * fax: null\n * }\n * };\n *\n * // Result:\n * {\n * name: 'John',\n * scores: [75, 0, null, false],\n * // emptyArray is removed\n * // Objects inside arrays remain objects; empty entries remain empty objects\n * scoresDetailed: [\n * { score: 1 },\n * {},\n * { score: 0 },\n * { score: false },\n * {},\n * ],\n * contact: {\n * address: '123 Main St'\n * }\n * }\n */\nexport const toValidationFormat = (\n formState: Record<string, unknown> | null | undefined,\n): Record<string, unknown> | null | undefined => {\n // Handle null or undefined input\n if (formState === undefined || formState === null) {\n return formState;\n }\n\n const validationFormatJson = JSON.stringify(formState, (_, value) => {\n if (Array.isArray(value)) {\n return value.map((v) => {\n // Unwrap new wrapper format { __FLAT__: <value> }\n if (v && typeof v === 'object') {\n const record = v as Record<string, unknown>;\n if (flatArrayKey in record) {\n const inner = record[flatArrayKey];\n // Treat empty string from forms as null in validation format\n if (inner === '') {\n return null;\n }\n return fromNullishString(inner);\n }\n }\n // Backward compatibility for string markers\n return fromNullishString(v);\n });\n }\n\n if (value && typeof value === 'object') {\n // Object branch: remove keys that resolve to empty/null after marker conversion\n // and unwrap flat-array wrappers if present.\n //\n // Why this shape?\n // - Forms may contain objects with placeholder/empty values that should not\n // be part of the validation payload (e.g. \"\" or __NULL__ markers).\n // - Arrays of primitives are stored as wrapper objects { __FLAT__: <value> }\n // to satisfy RHF structure constraints. When converting back for\n // validation, we need to treat wrappers whose inner value resolves to\n // empty/null as removable, and unwrap non-empty wrappers to the primitive.\n return Object.fromEntries(\n Object.entries(value)\n .filter(([_key, v]) => {\n // If this is a flat-array wrapper, convert the inner value first and\n // drop the key when the inner resolves to empty string or null.\n if (v && typeof v === 'object') {\n const record = v as Record<string, unknown>;\n if (flatArrayKey in record) {\n const convertedInner = fromNullishString(record[flatArrayKey]);\n return convertedInner !== '' && convertedInner !== null;\n }\n }\n // Drop empty arrays\n if (Array.isArray(v) && v.length === 0) {\n return false;\n }\n // For regular values, convert markers and drop when empty/null.\n const converted = fromNullishString(v);\n return converted !== '' && converted !== null;\n })\n .map(([k, v]) => {\n // Unwrap flat-array wrappers to raw primitives after conversion.\n if (v && typeof v === 'object') {\n const record = v as Record<string, unknown>;\n if (flatArrayKey in record) {\n return [k, fromNullishString(record[flatArrayKey])];\n }\n }\n // For other values, just convert markers.\n return [k, fromNullishString(v)];\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n });\n\n return JSON.parse(validationFormatJson) as Record<string, unknown>;\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-7KEUEGRC.cjs","../src/hooks/useController/useController.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACLA,8BAA2B;AAC3B,gDAAkD;AAkC3C,IAAM,cAAA,EAAgB,CAC3B,KAAA,EAAA,GACsC;AACtC,EAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,WAAW,EAAA,EAAI,0CAAA,KAAsB,CAAA;AAC/D,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,+BAAA,gCAAyB,CAAA;AAEhD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,6CAAA,8CAAA,CAAA,CAAA,EACF,KAAA,CAAA,EADE;AAAA;AAAA;AAAA,MAIL,QAAA,EAAU,CAAA,GAAI,KAAA,EAAA,GAAiB;AArDrC,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsDQ,QAAA,MAAM,MAAA,EAAA,CAAQ,GAAA,EAAA,CAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,CAAM,CAAC,CAAA,EAAA,GAAP,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAU,MAAA,EAAA,GAAV,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAkB,KAAA,EAAA,GAAlB,KAAA,EAAA,GAAA,EAA2B,KAAA,CAAM,CAAC,CAAA;AAChD,QAAA,MAAM,eAAA,EAAiB,MAAA,IAAU,GAAA,EAAK,GAAA,EAAK,+CAAA,KAAqB,CAAA;AAGhE,QAAA,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA;AAI7B,QAAA,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,cAAc,CAAA;AAAA,MAC9C,CAAA;AAAA;AAAA,MAEA,KAAA,EAAO,iDAAA,KAAkB,CAAM,KAAK;AAAA,IACtC,CAAA,CAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,EACF,CAAA;AACF,CAAA;ADlCA;AACA;AACE;AACF,sCAAC","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-7KEUEGRC.cjs","sourcesContent":[null,"import type {\n ControllerFieldState,\n ControllerRenderProps,\n UseControllerProps as RHFUseControllerProps,\n UseFormStateReturn,\n} from 'react-hook-form';\n\nimport { useContext } from 'react';\nimport { useController as useRHFController } from 'react-hook-form';\n\nimport { UniformContext } from '../../Form/subcomponents/FormContext';\nimport { fromNullishString, toNullishString } from '../../helpers';\n\nexport type UseControllerProps<TFieldValues extends object = object> =\n RHFUseControllerProps<TFieldValues>;\n\nexport interface UseControllerReturn<TFieldValues extends object = object> {\n field: Omit<ControllerRenderProps<TFieldValues>, 'onChange' | 'value'> & {\n // Using any[] to support both direct value changes and React synthetic events\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (...event: any[]) => void;\n value: string;\n };\n formState: UseFormStateReturn<TFieldValues>;\n fieldState: ControllerFieldState;\n}\n\n/**\n * A wrapper around react-hook-form's useController that transparently handles nullish string conversions.\n *\n * Key features:\n * 1. Empty strings ('') in the UI are stored as null in form state\n * 2. Null/undefined values in form state are displayed as empty strings in the UI\n * 3. Handles both direct value changes and React synthetic events\n * 4. Maintains the same API as react-hook-form's useController\n * 5. Notifies UniformContext's userChange listeners on field changes (enables useWatchUserChange hook)\n *\n * This enables consistent handling of empty/null values while keeping a clean API\n * for form inputs that expect string values.\n *\n * @see https://react-hook-form.com/docs/usecontroller\n */\nexport const useController = <TFieldValues extends object = object>(\n props: UseControllerProps<TFieldValues>,\n): UseControllerReturn<TFieldValues> => {\n const { field, formState, fieldState } = useRHFController(props);\n const { userChange } = useContext(UniformContext);\n\n return {\n field: {\n ...field,\n // Handles both direct values (onChange(\"value\")) and events (onChange(event))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (...event: any[]) => {\n const value = event[0]?.target?.value ?? event[0];\n const formattedValue = value === '' ? '' : toNullishString(value);\n\n // Update form state first\n field.onChange(formattedValue);\n\n // Then notify userChange listeners (for useWatchUserChange hook)\n // This ensures getValues() in listeners returns the updated value\n userChange.notify(field.name, formattedValue);\n },\n // Convert null/undefined to empty string for UI display\n value: fromNullishString(field.value) as string,\n },\n formState,\n fieldState,\n };\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useFormContext/useFormContext.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { VetoFormattedError, VetoInstance } from '@fuf-stack/veto';\nimport type { FieldError, FieldValues, Path } from 'react-hook-form';\n\nimport { useContext } from 'react';\nimport { useFormContext as useHookFormContext } from 'react-hook-form';\n\nimport { slugify } from '@fuf-stack/pixel-utils';\n\nimport { UniformContext } from '../../Form/subcomponents/FormContext';\nimport { flatArrayKey, toValidationFormat } from '../../helpers';\n\n/** Schema check whether a field is required or optional */\nexport const checkFieldIsRequired = (\n validation: VetoInstance,\n path: string[],\n): boolean => {\n // Handle flat array paths: strip the flatArrayKey to check the array element schema\n // e.g., ['arrayField', '0', '__FLAT__'] -> check schema at ['arrayField', '0']\n const checkPath =\n path[path.length - 1] === flatArrayKey ? path.slice(0, -1) : path;\n\n const checkRequired = (schema: any) => {\n // arrays ...\n if (schema.type === 'array') {\n // ... if array is optional or nullable it is not required\n if (schema.isOptional || schema.isNullable) {\n return false;\n }\n // ... otherwise arrays are required (display logic wise -> no asterisk in the label)\n return true;\n }\n\n // all other fields are required if they are\n // not optional and not nullable\n return !schema.isOptional && !schema.isNullable;\n };\n\n return validation.checkSchemaPath(checkRequired, checkPath);\n};\n\n/**\n * Resolve validation errors for a given field path.\n *\n * Traverses a nested `VetoFormattedError` structure using a dotted path\n * (for example: \"user.address.0.street\") and returns the matching\n * `FieldError[]` if present. If no error exists at the path, returns\n * `undefined`.\n *\n * @param errors - The formatted validation errors from Uniform's context\n * @param name - The dotted field path to resolve\n * @returns An array of `FieldError` entries for the field, or `undefined`\n */\nconst getValidationErrorsByName = (\n errors: VetoFormattedError,\n name: string,\n) => {\n // Traverse nested error structure; ignore flat array wrapper key\n const keys = name.split('.').filter((k) => {\n return k !== flatArrayKey;\n });\n let current: unknown = errors as unknown;\n keys.forEach((key) => {\n if (current && typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n current = undefined;\n }\n });\n return current as FieldError[] | undefined;\n};\n\n/**\n * Custom hook that extends react-hook-form's useFormContext to add validation and state management.\n */\nexport const useFormContext = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues = TFieldValues,\n>() => {\n const {\n formState,\n // some methods that will be enhanced below\n getFieldState: getFieldStateOrig,\n getValues: getValuesOrig,\n watch: watchOrig,\n subscribe: subscribeOrig,\n // the rest of the methods pass through unchanged\n ...otherMethods\n } = useHookFormContext<TFieldValues, TContext, TTransformedValues>();\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: Path<TFieldValues>, testId?: string) => {\n const fieldPath =\n typeof name === 'string' ? name.replace(/\\[\\d+\\]/g, '').split('.') : name;\n\n // Use base validation instance for checking \"required\" status\n // Client validation often uses .nullish() which would incorrectly mark fields as optional\n const validationInstance =\n uniformContext?.validation.baseInstance ??\n uniformContext?.validation.instance;\n\n // Check if the field is required using the validation schema\n const required = validationInstance\n ? checkFieldIsRequired(validationInstance, fieldPath)\n : false;\n\n const error = getValidationErrorsByName(\n uniformContext?.validation.errors ?? {},\n name,\n ) as unknown as FieldError[] | undefined;\n\n // Get everything but the error from the original field state\n const fieldState = getFieldStateOrig(name, formState);\n\n return {\n ...fieldState,\n error,\n invalid: !!error,\n required,\n testId: slugify(testId ?? name, { replaceDots: true }),\n };\n };\n\n /**\n * Wrap form value accessor methods to automatically convert from internal storage format\n * to component-friendly format:\n *\n * - Convert nullish string markers: \"__NULL__\" → null, \"__FALSE__\" → false, \"__ZERO__\" → 0\n * - Filter out empty/null values: fields with converted null/empty values are removed entirely\n *\n * This ensures components receive clean, predictable data without needing to handle\n * the internal nullish string conversion system manually.\n */\n const getValues = ((...args: any[]) => {\n const result = (getValuesOrig as any)(...args);\n return toValidationFormat(result);\n }) as typeof getValuesOrig;\n\n const watch = ((...args: any[]) => {\n const result = (watchOrig as any)(...args);\n return toValidationFormat(result);\n }) as typeof watchOrig;\n\n const subscribe = ((...args: any[]) => {\n // For subscribe, we need to wrap the callback to convert the values property\n const [options] = args;\n if (options?.callback) {\n const originalCallback = options.callback;\n const wrappedOptions = {\n ...options,\n callback: (subscribeFormState: any) => {\n // Convert the values property if it exists\n const convertedFormState = {\n ...subscribeFormState,\n ...(subscribeFormState.values && {\n values: toValidationFormat(subscribeFormState.values),\n }),\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return originalCallback(convertedFormState);\n },\n };\n return subscribeOrig(wrappedOptions);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (subscribeOrig as any)(...args);\n }) as typeof subscribeOrig;\n\n return {\n ...otherMethods,\n ...uniformContext,\n formState,\n getFieldState,\n getValues,\n subscribe,\n watch,\n };\n};\n"],"mappings":"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","names":["_a"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-Z353BLWI.cjs","../src/helpers/nullishFields/nullishFields.ts"],"names":[],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-Z353BLWI.cjs","sourcesContent":[null,"/** Key used to wrap flat array elements when converting to form format */\nexport const flatArrayKey = '__FLAT__';\n\n/**\n * String markers used to preserve null, false, and 0 values during JSON processing\n */\nconst nullString = '__NULL__';\nconst falseString = '__FALSE__';\nconst zeroString = '__ZERO__';\n\n/**\n * Converts marker strings back to their original values when processing arrays\n */\nexport const fromNullishString = (value: unknown): unknown => {\n // Support arrays: unwrap flat wrappers and convert marker strings per entry\n if (Array.isArray(value)) {\n return (value as unknown[]).map((entry) => {\n if (entry && typeof entry === 'object') {\n const record = entry as Record<string, unknown>;\n if (flatArrayKey in record) {\n const inner = record[flatArrayKey];\n // For arrays, treat empty string as null (placeholder input)\n if (inner === '') {\n return null;\n }\n return fromNullishString(inner);\n }\n }\n return fromNullishString(entry);\n });\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n switch (value) {\n case nullString:\n return null;\n case falseString:\n return false;\n case zeroString:\n return 0;\n default:\n return value;\n }\n};\n\n/**\n * Converts null/falsy values to marker strings for JSON processing\n */\nexport const toNullishString = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n // Only wrap arrays of primitives; leave arrays of objects as-is\n const isPrimitive = (v: unknown) => {\n return v === null || ['string', 'number', 'boolean'].includes(typeof v);\n };\n const isPrimitiveArray = (value as unknown[]).every(isPrimitive);\n if (isPrimitiveArray) {\n return (value as unknown[]).map((v) => {\n // Store raw primitive; do not convert to marker strings inside the wrapper\n return { [flatArrayKey]: v } as Record<string, unknown>;\n });\n }\n return value;\n }\n if (value === null || value === '') {\n return nullString;\n }\n if (value === false) {\n return falseString;\n }\n if (value === 0) {\n return zeroString;\n }\n return value;\n};\n\n/**\n * Converts field values to a format suitable for forms by:\n * - Wrapping arrays of primitives as objects using the flatArrayKey `__FLAT__`\n * to satisfy RHF's requirement that array fields contain objects\n * - Removing empty strings and null values from objects\n *\n * This conversion is required because React Hook Form does not support arrays with\n * flat values (string, number, boolean, null). Array fields must contain objects.\n * We work around this by wrapping primitive entries: `{ __FLAT__: <value> }`.\n *\n * @example\n * const fields = {\n * name: 'John',\n * scores: [0, null, 75, false],\n * scoresDetailed: [\n * { score: 1 },\n * { score: null },\n * { score: 0 },\n * { score: false },\n * { score: '' },\n * ],\n * contact: {\n * email: '',\n * phone: null,\n * address: '123 Main St'\n * }\n * };\n *\n * // Result:\n * {\n * name: 'John',\n * scores: [\n * { __FLAT__: 0 },\n * { __FLAT__: null },\n * { __FLAT__: 75 },\n * { __FLAT__: false }\n * ],\n * // Arrays of objects are left as objects; empty/null properties are removed\n * scoresDetailed: [\n * { score: 1 },\n * {}, // null score removed\n * { score: 0 },\n * { score: false },\n * {}, // empty string removed\n * ],\n * contact: {\n * address: '123 Main St'\n * }\n * }\n */\nexport const toFormFormat = (fields: Record<string, unknown>) => {\n const formFormatJson = JSON.stringify(fields, (_, value) => {\n if (Array.isArray(value)) {\n // Delegate to toNullishString to ensure consistent handling\n return toNullishString(value);\n }\n\n if (value && typeof value === 'object') {\n // Preserve flat-array wrappers as-is (do not filter their inner values here)\n const record = value as Record<string, unknown>;\n if (flatArrayKey in record) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).filter(([_key, v]) => {\n return v !== '' && v !== null;\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n });\n\n return JSON.parse(formFormatJson) as Record<string, unknown>;\n};\n\n/**\n * Converts form state to a format suitable for validation by:\n * - Unwrapping flat array wrappers `{ __FLAT__: <value> }` back to primitives\n * - Converting legacy string markers (__NULL__, __FALSE__, __ZERO__) back to their original values\n * - Removing fields whose converted value is empty string or null\n * - Removing empty arrays\n *\n * @example\n * const formState = {\n * name: 'John',\n * scores: [\n * { __FLAT__: 75 },\n * { __FLAT__: 0 },\n * { __FLAT__: null },\n * { __FLAT__: false }\n * ],\n * emptyArray: [],\n * scoresDetailed: [\n * { score: 1 },\n * {},\n * { score: 0 },\n * { score: false },\n * {},\n * ],\n * contact: {\n * address: '123 Main St',\n * fax: null\n * }\n * };\n *\n * // Result:\n * {\n * name: 'John',\n * scores: [75, 0, null, false],\n * // emptyArray is removed\n * // Objects inside arrays remain objects; empty entries remain empty objects\n * scoresDetailed: [\n * { score: 1 },\n * {},\n * { score: 0 },\n * { score: false },\n * {},\n * ],\n * contact: {\n * address: '123 Main St'\n * }\n * }\n */\nexport const toValidationFormat = (\n formState: Record<string, unknown> | null | undefined,\n): Record<string, unknown> | null | undefined => {\n // Handle null or undefined input\n if (formState === undefined || formState === null) {\n return formState;\n }\n\n const validationFormatJson = JSON.stringify(formState, (_, value) => {\n if (Array.isArray(value)) {\n return value.map((v) => {\n // Unwrap new wrapper format { __FLAT__: <value> }\n if (v && typeof v === 'object') {\n const record = v as Record<string, unknown>;\n if (flatArrayKey in record) {\n const inner = record[flatArrayKey];\n // Treat empty string from forms as null in validation format\n if (inner === '') {\n return null;\n }\n return fromNullishString(inner);\n }\n }\n // Backward compatibility for string markers\n return fromNullishString(v);\n });\n }\n\n if (value && typeof value === 'object') {\n // Object branch: remove keys that resolve to empty/null after marker conversion\n // and unwrap flat-array wrappers if present.\n //\n // Why this shape?\n // - Forms may contain objects with placeholder/empty values that should not\n // be part of the validation payload (e.g. \"\" or __NULL__ markers).\n // - Arrays of primitives are stored as wrapper objects { __FLAT__: <value> }\n // to satisfy RHF structure constraints. When converting back for\n // validation, we need to treat wrappers whose inner value resolves to\n // empty/null as removable, and unwrap non-empty wrappers to the primitive.\n return Object.fromEntries(\n Object.entries(value)\n .filter(([_key, v]) => {\n // If this is a flat-array wrapper, convert the inner value first and\n // drop the key when the inner resolves to empty string or null.\n if (v && typeof v === 'object') {\n const record = v as Record<string, unknown>;\n if (flatArrayKey in record) {\n const convertedInner = fromNullishString(record[flatArrayKey]);\n return convertedInner !== '' && convertedInner !== null;\n }\n }\n // Drop empty arrays\n if (Array.isArray(v) && v.length === 0) {\n return false;\n }\n // For regular values, convert markers and drop when empty/null.\n const converted = fromNullishString(v);\n return converted !== '' && converted !== null;\n })\n .map(([k, v]) => {\n // Unwrap flat-array wrappers to raw primitives after conversion.\n if (v && typeof v === 'object') {\n const record = v as Record<string, unknown>;\n if (flatArrayKey in record) {\n return [k, fromNullishString(record[flatArrayKey])];\n }\n }\n // For other values, just convert markers.\n return [k, fromNullishString(v)];\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n });\n\n return JSON.parse(validationFormatJson) as Record<string, unknown>;\n};\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|