@fuf-stack/uniform 1.4.2 → 1.5.1

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 (187) hide show
  1. package/dist/Checkboxes/index.cjs +16 -0
  2. package/dist/{RadioGroup → Checkboxes}/index.cjs.map +1 -1
  3. package/dist/Checkboxes/index.d.cts +10 -0
  4. package/dist/Checkboxes/index.d.ts +10 -0
  5. package/dist/Checkboxes/index.js +16 -0
  6. package/dist/{CheckboxGroup-B1g42iP0.d.cts → Checkboxes-CR0Uu2g9.d.cts} +9 -9
  7. package/dist/{CheckboxGroup-B1g42iP0.d.ts → Checkboxes-CR0Uu2g9.d.ts} +9 -9
  8. package/dist/FieldArray/index.cjs +5 -5
  9. package/dist/FieldArray/index.d.cts +2 -2
  10. package/dist/FieldArray/index.d.ts +2 -2
  11. package/dist/FieldArray/index.js +4 -4
  12. package/dist/FieldArray-EP4otr2x.d.cts +160 -0
  13. package/dist/FieldArray-EP4otr2x.d.ts +160 -0
  14. package/dist/{FieldValidationError-CU_xw0BL.d.ts → FieldValidationError-DwtLkGMo.d.cts} +2 -2
  15. package/dist/{FieldValidationError-CU_xw0BL.d.cts → FieldValidationError-DwtLkGMo.d.ts} +2 -2
  16. package/dist/Form/index.cjs +6 -4
  17. package/dist/Form/index.cjs.map +1 -1
  18. package/dist/Form/index.js +5 -3
  19. package/dist/Input/index.cjs +5 -5
  20. package/dist/Input/index.d.cts +2 -2
  21. package/dist/Input/index.d.ts +2 -2
  22. package/dist/Input/index.js +4 -4
  23. package/dist/{Input-C6ujfEkn.d.ts → Input-CCIEnvIp.d.ts} +1 -1
  24. package/dist/{Input-BQkZtJx8.d.cts → Input-D7HT_8jf.d.cts} +1 -1
  25. package/dist/RadioBoxes/index.cjs +5 -5
  26. package/dist/RadioBoxes/index.d.cts +3 -2
  27. package/dist/RadioBoxes/index.d.ts +3 -2
  28. package/dist/RadioBoxes/index.js +4 -4
  29. package/dist/{RadioBoxes-CE3mYoFk.d.cts → RadioBoxes-DpkI28l0.d.cts} +3 -2
  30. package/dist/{RadioBoxes-CE3mYoFk.d.ts → RadioBoxes-DpkI28l0.d.ts} +3 -2
  31. package/dist/RadioTabs/index.cjs +5 -5
  32. package/dist/RadioTabs/index.d.cts +2 -2
  33. package/dist/RadioTabs/index.d.ts +2 -2
  34. package/dist/RadioTabs/index.js +4 -4
  35. package/dist/{RadioTabs-BCWW3tru.d.cts → RadioTabs-DTDcAZoH.d.cts} +1 -1
  36. package/dist/{RadioTabs-BCWW3tru.d.ts → RadioTabs-DTDcAZoH.d.ts} +1 -1
  37. package/dist/Radios/index.cjs +16 -0
  38. package/dist/Radios/index.cjs.map +1 -0
  39. package/dist/Radios/index.d.cts +9 -0
  40. package/dist/Radios/index.d.ts +9 -0
  41. package/dist/Radios/index.js +16 -0
  42. package/dist/{RadioGroup-CAOX80Xx.d.cts → Radios-DprlJhoq.d.cts} +9 -9
  43. package/dist/{RadioGroup-CAOX80Xx.d.ts → Radios-DprlJhoq.d.ts} +9 -9
  44. package/dist/Select/index.cjs +5 -5
  45. package/dist/Select/index.d.cts +2 -2
  46. package/dist/Select/index.d.ts +2 -2
  47. package/dist/Select/index.js +4 -4
  48. package/dist/{Select-CTRWinmO.d.cts → Select-CDkZmZp2.d.cts} +1 -1
  49. package/dist/{Select-CTRWinmO.d.ts → Select-CDkZmZp2.d.ts} +1 -1
  50. package/dist/SubmitButton/index.cjs +6 -4
  51. package/dist/SubmitButton/index.cjs.map +1 -1
  52. package/dist/SubmitButton/index.js +5 -3
  53. package/dist/Switch/index.cjs +5 -5
  54. package/dist/Switch/index.js +4 -4
  55. package/dist/TextArea/index.cjs +5 -5
  56. package/dist/TextArea/index.d.cts +4 -2
  57. package/dist/TextArea/index.d.ts +4 -2
  58. package/dist/TextArea/index.js +4 -4
  59. package/dist/TextArea-DhxNWYNg.d.cts +86 -0
  60. package/dist/TextArea-DhxNWYNg.d.ts +86 -0
  61. package/dist/{chunk-Y3GELCDP.js → chunk-2QLCCB3L.js} +62 -67
  62. package/dist/chunk-2QLCCB3L.js.map +1 -0
  63. package/dist/chunk-3YDAYNNB.cjs +683 -0
  64. package/dist/chunk-3YDAYNNB.cjs.map +1 -0
  65. package/dist/chunk-4GBNXNCZ.js +683 -0
  66. package/dist/chunk-4GBNXNCZ.js.map +1 -0
  67. package/dist/{chunk-ULR4573W.cjs → chunk-4MMOSRT3.cjs} +40 -38
  68. package/dist/chunk-4MMOSRT3.cjs.map +1 -0
  69. package/dist/{chunk-FHRMVL6B.js → chunk-62BVHALF.js} +134 -89
  70. package/dist/chunk-62BVHALF.js.map +1 -0
  71. package/dist/{chunk-UGCZORU3.cjs → chunk-65BN4MRG.cjs} +9 -9
  72. package/dist/chunk-65BN4MRG.cjs.map +1 -0
  73. package/dist/{chunk-2B6CDMOZ.js → chunk-74NPRJVH.js} +16 -25
  74. package/dist/chunk-74NPRJVH.js.map +1 -0
  75. package/dist/chunk-76KOVUDN.js +138 -0
  76. package/dist/chunk-76KOVUDN.js.map +1 -0
  77. package/dist/{chunk-AYNTZPKL.cjs → chunk-7NWHDCME.cjs} +132 -87
  78. package/dist/chunk-7NWHDCME.cjs.map +1 -0
  79. package/dist/{chunk-IYDCKENI.js → chunk-CFH4VPJ4.js} +166 -26
  80. package/dist/chunk-CFH4VPJ4.js.map +1 -0
  81. package/dist/{chunk-KG4XCEPW.js → chunk-COLAXULB.js} +42 -40
  82. package/dist/chunk-COLAXULB.js.map +1 -0
  83. package/dist/{chunk-N2EEOWEP.cjs → chunk-DHO4HSO7.cjs} +59 -64
  84. package/dist/chunk-DHO4HSO7.cjs.map +1 -0
  85. package/dist/{chunk-77C6VN4L.cjs → chunk-EAJFV3AD.cjs} +50 -47
  86. package/dist/chunk-EAJFV3AD.cjs.map +1 -0
  87. package/dist/chunk-ELYGQTXB.js +47 -0
  88. package/dist/chunk-ELYGQTXB.js.map +1 -0
  89. package/dist/{chunk-FOVP54XP.cjs → chunk-EO4A7QGM.cjs} +18 -27
  90. package/dist/chunk-EO4A7QGM.cjs.map +1 -0
  91. package/dist/chunk-GVMEDVT5.cjs +117 -0
  92. package/dist/chunk-GVMEDVT5.cjs.map +1 -0
  93. package/dist/chunk-HSKFVCTS.js +103 -0
  94. package/dist/chunk-HSKFVCTS.js.map +1 -0
  95. package/dist/{chunk-2GYFDVXX.cjs → chunk-J5FFM7WG.cjs} +173 -33
  96. package/dist/chunk-J5FFM7WG.cjs.map +1 -0
  97. package/dist/{chunk-M2DNMSQZ.js → chunk-JLJB4A4K.js} +52 -49
  98. package/dist/chunk-JLJB4A4K.js.map +1 -0
  99. package/dist/{chunk-C64RKQEW.cjs → chunk-KBUECB4B.cjs} +3 -3
  100. package/dist/{chunk-C64RKQEW.cjs.map → chunk-KBUECB4B.cjs.map} +1 -1
  101. package/dist/chunk-NHEZXA4H.cjs +47 -0
  102. package/dist/chunk-NHEZXA4H.cjs.map +1 -0
  103. package/dist/chunk-RTFM4VRY.cjs +103 -0
  104. package/dist/chunk-RTFM4VRY.cjs.map +1 -0
  105. package/dist/{chunk-LJQ35BUK.js → chunk-RW35BB4P.js} +2 -2
  106. package/dist/{chunk-M7VM7XBE.js → chunk-SLTUNYTD.js} +8 -8
  107. package/dist/chunk-SLTUNYTD.js.map +1 -0
  108. package/dist/{chunk-YEKHVKS3.cjs → chunk-TFMVYQGN.cjs} +44 -42
  109. package/dist/chunk-TFMVYQGN.cjs.map +1 -0
  110. package/dist/chunk-TVMCTUQ4.js +117 -0
  111. package/dist/chunk-TVMCTUQ4.js.map +1 -0
  112. package/dist/chunk-Z353BLWI.cjs +138 -0
  113. package/dist/chunk-Z353BLWI.cjs.map +1 -0
  114. package/dist/{chunk-C52NGPIF.js → chunk-ZQ64MG7T.js} +48 -46
  115. package/dist/chunk-ZQ64MG7T.js.map +1 -0
  116. package/dist/helpers/index.cjs +4 -2
  117. package/dist/helpers/index.cjs.map +1 -1
  118. package/dist/helpers/index.d.cts +54 -10
  119. package/dist/helpers/index.d.ts +54 -10
  120. package/dist/helpers/index.js +3 -1
  121. package/dist/hooks/index.cjs +7 -3
  122. package/dist/hooks/index.cjs.map +1 -1
  123. package/dist/hooks/index.d.cts +86 -4
  124. package/dist/hooks/index.d.ts +86 -4
  125. package/dist/hooks/index.js +8 -4
  126. package/dist/index.cjs +20 -16
  127. package/dist/index.cjs.map +1 -1
  128. package/dist/index.d.cts +11 -11
  129. package/dist/index.d.ts +11 -11
  130. package/dist/index.js +30 -26
  131. package/dist/partials/FieldValidationError/index.cjs +2 -2
  132. package/dist/partials/FieldValidationError/index.d.cts +2 -2
  133. package/dist/partials/FieldValidationError/index.d.ts +2 -2
  134. package/dist/partials/FieldValidationError/index.js +1 -1
  135. package/package.json +12 -11
  136. package/dist/CheckboxGroup/index.cjs +0 -16
  137. package/dist/CheckboxGroup/index.cjs.map +0 -1
  138. package/dist/CheckboxGroup/index.d.cts +0 -10
  139. package/dist/CheckboxGroup/index.d.ts +0 -10
  140. package/dist/CheckboxGroup/index.js +0 -16
  141. package/dist/FieldArray-DVQka7Bh.d.cts +0 -130
  142. package/dist/FieldArray-DVQka7Bh.d.ts +0 -130
  143. package/dist/RadioGroup/index.cjs +0 -16
  144. package/dist/RadioGroup/index.d.cts +0 -9
  145. package/dist/RadioGroup/index.d.ts +0 -9
  146. package/dist/RadioGroup/index.js +0 -16
  147. package/dist/TextArea-DnFGyl4a.d.cts +0 -27
  148. package/dist/TextArea-DnFGyl4a.d.ts +0 -27
  149. package/dist/chunk-2B6CDMOZ.js.map +0 -1
  150. package/dist/chunk-2GYFDVXX.cjs.map +0 -1
  151. package/dist/chunk-77C6VN4L.cjs.map +0 -1
  152. package/dist/chunk-AYNTZPKL.cjs.map +0 -1
  153. package/dist/chunk-C52NGPIF.js.map +0 -1
  154. package/dist/chunk-CQWA2DFV.js +0 -37
  155. package/dist/chunk-CQWA2DFV.js.map +0 -1
  156. package/dist/chunk-EEBHFSBY.cjs +0 -112
  157. package/dist/chunk-EEBHFSBY.cjs.map +0 -1
  158. package/dist/chunk-FHRMVL6B.js.map +0 -1
  159. package/dist/chunk-FOVP54XP.cjs.map +0 -1
  160. package/dist/chunk-IYDCKENI.js.map +0 -1
  161. package/dist/chunk-JZF4HUYO.cjs +0 -409
  162. package/dist/chunk-JZF4HUYO.cjs.map +0 -1
  163. package/dist/chunk-KG4XCEPW.js.map +0 -1
  164. package/dist/chunk-KQN55PEW.js +0 -76
  165. package/dist/chunk-KQN55PEW.js.map +0 -1
  166. package/dist/chunk-M2DNMSQZ.js.map +0 -1
  167. package/dist/chunk-M7VM7XBE.js.map +0 -1
  168. package/dist/chunk-N2EEOWEP.cjs.map +0 -1
  169. package/dist/chunk-NAZIH6HV.js +0 -409
  170. package/dist/chunk-NAZIH6HV.js.map +0 -1
  171. package/dist/chunk-RDBCJJI7.cjs +0 -88
  172. package/dist/chunk-RDBCJJI7.cjs.map +0 -1
  173. package/dist/chunk-RF7KNUCI.js +0 -88
  174. package/dist/chunk-RF7KNUCI.js.map +0 -1
  175. package/dist/chunk-UGCZORU3.cjs.map +0 -1
  176. package/dist/chunk-ULR4573W.cjs.map +0 -1
  177. package/dist/chunk-XKMLCM5K.js +0 -112
  178. package/dist/chunk-XKMLCM5K.js.map +0 -1
  179. package/dist/chunk-Y3AB4GV6.cjs +0 -37
  180. package/dist/chunk-Y3AB4GV6.cjs.map +0 -1
  181. package/dist/chunk-Y3GELCDP.js.map +0 -1
  182. package/dist/chunk-YEKHVKS3.cjs.map +0 -1
  183. package/dist/chunk-YGNY6CKU.cjs +0 -76
  184. package/dist/chunk-YGNY6CKU.cjs.map +0 -1
  185. /package/dist/{CheckboxGroup → Checkboxes}/index.js.map +0 -0
  186. /package/dist/{RadioGroup → Radios}/index.js.map +0 -0
  187. /package/dist/{chunk-LJQ35BUK.js.map → chunk-RW35BB4P.js.map} +0 -0
@@ -1,19 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkOE5BOGGXcjs = require('./chunk-OE5BOGGX.cjs');
3
+ var _chunkJ5FFM7WGcjs = require('./chunk-J5FFM7WG.cjs');
4
4
 
5
5
 
6
- var _chunkY3AB4GV6cjs = require('./chunk-Y3AB4GV6.cjs');
6
+ var _chunkNHEZXA4Hcjs = require('./chunk-NHEZXA4H.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunk2GYFDVXXcjs = require('./chunk-2GYFDVXX.cjs');
11
-
12
-
13
10
 
14
11
  var _chunk555JRYCScjs = require('./chunk-555JRYCS.cjs');
15
12
 
16
- // src/CheckboxGroup/CheckboxGroup.tsx
13
+ // src/Checkboxes/Checkboxes.tsx
17
14
 
18
15
 
19
16
 
@@ -21,14 +18,14 @@ var _checkbox = require('@heroui/checkbox');
21
18
  var _theme = require('@heroui/theme');
22
19
  var _pixelutils = require('@fuf-stack/pixel-utils');
23
20
  var _jsxruntime = require('react/jsx-runtime');
24
- var checkboxGroupVariants = _pixelutils.tv.call(void 0, {
21
+ var checkboxesVariants = _pixelutils.tv.call(void 0, {
25
22
  slots: {
26
23
  base: "group",
27
24
  // Needs group for group-data condition
28
25
  errorMessage: "text-tiny",
29
26
  // see HeroUI styles for group-data condition,
30
27
  // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
31
- label: "text-foreground group-data-[invalid=true]:!text-danger text-sm subpixel-antialiased",
28
+ label: "text-foreground group-data-[invalid=true]:!text-danger inline-flex text-sm subpixel-antialiased",
32
29
  optionBase: "",
33
30
  optionIcon: "",
34
31
  optionLabel: "",
@@ -55,44 +52,39 @@ var checkboxGroupVariants = _pixelutils.tv.call(void 0, {
55
52
  }
56
53
  }
57
54
  });
58
- var CheckboxGroup = ({
59
- className = void 0,
60
- color = "primary",
61
- inline = false,
62
- label = void 0,
63
- lineThrough = false,
64
- options,
65
- disabled = false,
66
- name,
67
- testId: _testId = void 0
68
- }) => {
69
- const { control, debugMode, getFieldState } = _chunk2GYFDVXXcjs.useFormContext.call(void 0, );
55
+ var Checkboxes = (_a) => {
56
+ var _b = _a, {
57
+ className = void 0,
58
+ color = "primary",
59
+ inline = false,
60
+ lineThrough = false,
61
+ options,
62
+ name
63
+ } = _b, uniformFieldProps = _chunk555JRYCScjs.__objRest.call(void 0, _b, [
64
+ "className",
65
+ "color",
66
+ "inline",
67
+ "lineThrough",
68
+ "options",
69
+ "name"
70
+ ]);
71
+ var _a2;
70
72
  const {
73
+ disabled,
71
74
  error: _error,
75
+ field: { onChange, value = [], ref, onBlur },
72
76
  invalid,
77
+ label,
73
78
  required,
74
79
  testId
75
- } = getFieldState(name, _testId);
76
- const { field } = _chunk2GYFDVXXcjs.useController.call(void 0, { control, name, disabled });
77
- const { onChange, value = [], ref, onBlur } = field;
78
- const showTestIdCopyButton = debugMode === "debug-testids";
79
- const showLabel = label || showTestIdCopyButton;
80
- const variants = checkboxGroupVariants({ lineThrough });
81
- const classNames = _pixelutils.variantsToClassNames.call(void 0, variants, className, "base");
82
- const heroCheckboxGroupClassNames = {
83
- base: classNames.base,
84
- label: classNames.label,
85
- wrapper: classNames.wrapper
86
- };
87
- const heroCheckboxClassNames = {
88
- base: classNames.optionBase,
89
- icon: classNames.optionIcon,
90
- label: classNames.optionLabel,
91
- wrapper: classNames.optionWrapper
92
- };
93
- const errorFlat = _error && Object.values(
80
+ } = _chunkJ5FFM7WGcjs.useUniformField.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {
81
+ name,
82
+ showInvalidWhen: "immediate"
83
+ }, uniformFieldProps));
84
+ const errorFlat = (_a2 = _error && Object.values(
94
85
  _error
95
- ).flat() || [];
86
+ ).flat()) != null ? _a2 : [];
87
+ const errorMessage = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNHEZXA4Hcjs.FieldValidationError_default, { error: errorFlat, testId });
96
88
  const getCheckboxValue = (inputValue) => {
97
89
  if (Array.isArray(inputValue)) {
98
90
  return inputValue;
@@ -112,38 +104,41 @@ var CheckboxGroup = ({
112
104
  onChange,
113
105
  value: getCheckboxValue(value)
114
106
  };
115
- const checkboxGroupProps = options.length === 1 ? singleCheckboxProps : multipleCheckboxProps;
107
+ const checkboxesProps = options.length === 1 ? singleCheckboxProps : multipleCheckboxProps;
108
+ const variants = checkboxesVariants({ lineThrough });
109
+ const classNames = _pixelutils.variantsToClassNames.call(void 0, variants, className, "base");
110
+ const heroCheckboxGroupClassNames = {
111
+ base: classNames.base,
112
+ label: classNames.label,
113
+ wrapper: classNames.wrapper
114
+ };
115
+ const heroCheckboxClassNames = {
116
+ base: classNames.optionBase,
117
+ icon: classNames.optionIcon,
118
+ label: classNames.optionLabel,
119
+ wrapper: classNames.optionWrapper
120
+ };
116
121
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
117
122
  _checkbox.CheckboxGroup,
118
123
  _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {
124
+ ref,
119
125
  classNames: heroCheckboxGroupClassNames,
120
126
  color: color === "info" ? "primary" : color,
121
127
  "data-invalid": invalid,
122
128
  "data-testid": testId,
129
+ errorMessage,
123
130
  isDisabled: disabled,
124
131
  isInvalid: invalid,
125
132
  isRequired: required,
133
+ label: label ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "legend", { children: label }) : null,
126
134
  name,
127
135
  onBlur,
128
- orientation: inline ? "horizontal" : "vertical",
129
- errorMessage: errorFlat.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
130
- _chunkY3AB4GV6cjs.FieldValidationError_default,
131
- {
132
- className: classNames.errorMessage,
133
- error: errorFlat,
134
- testId
135
- }
136
- ),
137
- label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
138
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
139
- label,
140
- showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5BOGGXcjs.FieldCopyTestIdButton_default, { testId })
141
- ] }),
142
- ref
143
- }, checkboxGroupProps), {
136
+ orientation: inline ? "horizontal" : "vertical"
137
+ }, checkboxesProps), {
144
138
  children: options == null ? void 0 : options.map((option) => {
139
+ var _a3;
145
140
  const optionTestId = _pixelutils.slugify.call(void 0,
146
- `${testId}_option_${(option == null ? void 0 : option.testId) || (option == null ? void 0 : option.value)}`,
141
+ `${testId}_option_${(_a3 = option == null ? void 0 : option.testId) != null ? _a3 : option == null ? void 0 : option.value}`,
147
142
  { replaceDots: true }
148
143
  );
149
144
  const hasSubline = !!option.labelSubline;
@@ -164,7 +159,7 @@ var CheckboxGroup = ({
164
159
  classNames: optionClassNames,
165
160
  "data-invalid": invalid,
166
161
  "data-testid": optionTestId,
167
- isDisabled: disabled || option.disabled,
162
+ isDisabled: !!disabled || option.disabled,
168
163
  value: option == null ? void 0 : option.value,
169
164
  "aria-label": typeof option.label === "string" ? option.label : option.value,
170
165
  children: labelContent
@@ -175,13 +170,13 @@ var CheckboxGroup = ({
175
170
  })
176
171
  );
177
172
  };
178
- var CheckboxGroup_default = CheckboxGroup;
173
+ var Checkboxes_default = Checkboxes;
179
174
 
180
- // src/CheckboxGroup/index.ts
181
- var CheckboxGroup_default2 = CheckboxGroup_default;
175
+ // src/Checkboxes/index.ts
176
+ var Checkboxes_default2 = Checkboxes_default;
182
177
 
183
178
 
184
179
 
185
180
 
186
- exports.CheckboxGroup_default = CheckboxGroup_default; exports.CheckboxGroup_default2 = CheckboxGroup_default2;
187
- //# sourceMappingURL=chunk-N2EEOWEP.cjs.map
181
+ exports.Checkboxes_default = Checkboxes_default; exports.Checkboxes_default2 = Checkboxes_default2;
182
+ //# sourceMappingURL=chunk-DHO4HSO7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-DHO4HSO7.cjs","../src/Checkboxes/Checkboxes.tsx","../src/Checkboxes/index.ts"],"names":["_a","Checkboxes_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-DHO4HSO7.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type {\n CheckboxGroupProps as HeroCheckboxGroupProps,\n CheckboxProps as HeroCheckboxProps,\n} from '@heroui/checkbox';\nimport type { ReactNode } from 'react';\nimport type { FieldError } from 'react-hook-form';\n\nimport {\n Checkbox as HeroCheckbox,\n CheckboxGroup as HeroCheckboxGroup,\n} from '@heroui/checkbox';\nimport { checkbox as heroCheckboxVariants } from '@heroui/theme';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { useUniformField } from '../hooks';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const checkboxesVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\n errorMessage: 'text-tiny',\n // see HeroUI styles for group-data condition,\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'text-foreground group-data-[invalid=true]:!text-danger inline-flex text-sm subpixel-antialiased',\n optionBase: '',\n optionIcon: '',\n optionLabel: '',\n optionLabelSubline: '!text-small text-foreground-400',\n optionWrapper: '',\n wrapper: '',\n },\n variants: {\n // see: https://github.com/heroui-inc/heroui/blob/canary/packages/core/theme/src/components/checkbox.ts\n color: {\n info: {\n wrapper:\n 'text-info-foreground after:bg-info after:text-info-foreground',\n },\n ...heroCheckboxVariants.variants.color,\n } as const,\n lineThrough: {\n true: {\n optionLabel: [\n ...heroCheckboxVariants.variants.lineThrough.true.label,\n // fix stroke position when used with subline and enable animation\n 'relative before:transition-all before:duration-200',\n ],\n optionLabelSubline: 'group-data-[selected=true]:opacity-60',\n },\n },\n },\n});\n\ntype VariantProps = TVProps<typeof checkboxesVariants>;\ntype ClassName = TVClassName<typeof checkboxesVariants>;\n\nexport interface CheckboxOption {\n /** option label */\n label?: ReactNode;\n /** subline displayed below the label */\n labelSubline?: ReactNode;\n /** option value */\n value: string;\n /** disables the option */\n disabled?: boolean;\n /** HTML data-testid attribute of the option */\n testId?: string;\n}\n\nexport interface CheckboxesProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** Color scheme of the checkboxes */\n color?: VariantProps['color'];\n /** Sets all checkboxes disabled */\n disabled?: boolean;\n /** Orientation of the checkboxes */\n inline?: boolean;\n /** Label displayed above the checkboxes */\n label?: ReactNode;\n /** Whether the checkboxes label should be crossed out */\n lineThrough?: boolean;\n /** Name the Field is registered on the form */\n name: string;\n /** Checkboxes that should be displayed. */\n options: CheckboxOption[];\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * Checkboxes component based on [HeroUI CheckboxGroup](https://www.heroui.com//docs/components/checkbox-group)\n */\nconst Checkboxes = ({\n className = undefined,\n color = 'primary',\n inline = false,\n lineThrough = false,\n options,\n name,\n ...uniformFieldProps\n}: CheckboxesProps) => {\n const {\n disabled,\n error: _error,\n field: { onChange, value = [], ref, onBlur },\n invalid,\n label,\n required,\n testId,\n } = useUniformField({\n name,\n showInvalidWhen: 'immediate',\n ...uniformFieldProps,\n });\n\n // Convert React Hook Form's nested error object structure to a flat array\n // RHF errors can be nested like: checkboxField.0 (individual checkbox errors)\n // and checkboxField._error (global field errors) - this flattens all\n // error values into a single array for rendering with FieldValidationError\n const errorFlat: FieldError[] =\n (_error &&\n Object.values(\n _error as unknown as Record<string, FieldError[]>,\n ).flat()) ??\n [];\n const errorMessage = (\n <FieldValidationError error={errorFlat} testId={testId} />\n );\n\n /**\n * Handles the checkboxes value changes based on the number of options:\n * 1. For single checkbox (options.length === 1):\n * - Converts undefined/empty array to [] for consistent controlled behavior\n * - Extracts single value from array for onChange\n *\n * Example: undefined → []\n * [value] → value\n *\n * 2. For multiple checkboxes:\n * - Uses raw value array with fallback to empty array\n * - Passes through onChange directly\n *\n * Example: undefined → []\n * ['value1', 'value2'] → ['value1', 'value2']\n */\n const getCheckboxValue = (inputValue: unknown): string[] => {\n if (Array.isArray(inputValue)) {\n return inputValue as string[];\n }\n if (inputValue) {\n return [inputValue as string];\n }\n return [];\n };\n\n const singleCheckboxProps = {\n value: getCheckboxValue(value),\n onChange: (newValue: string[]) => {\n onChange(newValue?.[0]);\n },\n };\n\n const multipleCheckboxProps = {\n onChange,\n value: getCheckboxValue(value),\n };\n\n const checkboxesProps =\n options.length === 1 ? singleCheckboxProps : multipleCheckboxProps;\n\n // classNames from slots\n const variants = checkboxesVariants({ lineThrough });\n const classNames = variantsToClassNames(variants, className, 'base');\n\n // map slots to HeroUI class names\n const heroCheckboxGroupClassNames: HeroCheckboxGroupProps['classNames'] = {\n base: classNames.base,\n label: classNames.label,\n wrapper: classNames.wrapper,\n };\n const heroCheckboxClassNames: HeroCheckboxProps['classNames'] = {\n base: classNames.optionBase,\n icon: classNames.optionIcon,\n label: classNames.optionLabel,\n wrapper: classNames.optionWrapper,\n };\n\n return (\n <HeroCheckboxGroup\n ref={ref}\n classNames={heroCheckboxGroupClassNames}\n color={color === 'info' ? 'primary' : color}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-testid={testId}\n errorMessage={errorMessage}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label ? <legend>{label}</legend> : null}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n {...checkboxesProps}\n >\n {options?.map((option) => {\n const optionTestId = slugify(\n `${testId}_option_${option?.testId ?? option?.value}`,\n { replaceDots: true },\n );\n\n // set content and classes depending option has subline\n const hasSubline = !!option.labelSubline;\n let labelContent: ReactNode;\n let optionClassNames = heroCheckboxClassNames;\n if (hasSubline) {\n labelContent = (\n <div className=\"flex grow flex-col items-start\">\n <span className={classNames.optionLabel}>{option.label}</span>\n <span className={classNames.optionLabelSubline}>\n {option.labelSubline}\n </span>\n </div>\n );\n // remove label classes from outer label when subline is used\n optionClassNames = { ...optionClassNames, label: '' };\n } else {\n labelContent = option.label;\n }\n\n return (\n <HeroCheckbox\n key={`index_${option.value}`}\n classNames={optionClassNames}\n data-invalid={invalid}\n data-testid={optionTestId}\n isDisabled={!!disabled || option.disabled}\n value={option?.value}\n aria-label={\n typeof option.label === 'string' ? option.label : option.value\n }\n >\n {labelContent}\n </HeroCheckbox>\n );\n })}\n </HeroCheckboxGroup>\n );\n};\n\nexport default Checkboxes;\n","import Checkboxes from './Checkboxes';\n\nexport type { CheckboxesProps, CheckboxOption } from './Checkboxes';\n\nexport { Checkboxes };\n\nexport default Checkboxes;\n"]}
@@ -1,18 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkOE5BOGGXcjs = require('./chunk-OE5BOGGX.cjs');
4
-
5
-
6
- var _chunkY3AB4GV6cjs = require('./chunk-Y3AB4GV6.cjs');
7
-
8
-
9
-
10
- var _chunk2GYFDVXXcjs = require('./chunk-2GYFDVXX.cjs');
3
+ var _chunkJ5FFM7WGcjs = require('./chunk-J5FFM7WG.cjs');
11
4
 
12
5
 
13
6
  var _chunkFLK6OPFYcjs = require('./chunk-FLK6OPFY.cjs');
14
7
 
15
8
 
9
+
16
10
  var _chunk555JRYCScjs = require('./chunk-555JRYCS.cjs');
17
11
 
18
12
  // src/Input/Input.tsx
@@ -31,36 +25,47 @@ var inputVariants = _pixelutils.tv.call(void 0, {
31
25
  inputWrapper: "bg-content1 group-data-[focus=true]:border-focus"
32
26
  }
33
27
  });
34
- var Input = ({
35
- className: _className = void 0,
36
- clearable = false,
37
- debounceDelay = 300,
38
- disabled = false,
39
- endContent = void 0,
40
- label = void 0,
41
- name,
42
- onClear = void 0,
43
- placeholder = " ",
44
- size = void 0,
45
- startContent = void 0,
46
- testId: _testId = void 0,
47
- transform = void 0,
48
- type = void 0
49
- }) => {
50
- const { control, debugMode, getFieldState, resetField } = _chunk2GYFDVXXcjs.useFormContext.call(void 0, );
51
- const { error, invalid, required, testId } = getFieldState(name, _testId);
52
- const { field } = _chunk2GYFDVXXcjs.useController.call(void 0, {
53
- control,
54
- disabled,
55
- name
56
- });
28
+ var Input = (_a) => {
29
+ var _b = _a, {
30
+ className: _className = void 0,
31
+ clearable = false,
32
+ debounceDelay = 300,
33
+ endContent = void 0,
34
+ name,
35
+ onClear = void 0,
36
+ placeholder = " ",
37
+ size = void 0,
38
+ startContent = void 0,
39
+ transform = void 0,
40
+ type = void 0
41
+ } = _b, uniformFieldProps = _chunk555JRYCScjs.__objRest.call(void 0, _b, [
42
+ "className",
43
+ "clearable",
44
+ "debounceDelay",
45
+ "endContent",
46
+ "name",
47
+ "onClear",
48
+ "placeholder",
49
+ "size",
50
+ "startContent",
51
+ "transform",
52
+ "type"
53
+ ]);
57
54
  const {
58
- disabled: isDisabled,
59
- onChange: fieldOnChange,
60
- onBlur: fieldOnBlur,
61
- value: fieldValue,
62
- ref
63
- } = field;
55
+ disabled,
56
+ field: {
57
+ onChange: fieldOnChange,
58
+ onBlur: fieldOnBlur,
59
+ value: fieldValue,
60
+ ref
61
+ },
62
+ errorMessage,
63
+ invalid,
64
+ label,
65
+ required,
66
+ testId,
67
+ resetField
68
+ } = _chunkJ5FFM7WGcjs.useUniformField.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, { name }, uniformFieldProps));
64
69
  const { onChange, onBlur, value } = _chunkFLK6OPFYcjs.useInputValueDebounce.call(void 0, {
65
70
  debounceDelay,
66
71
  onBlur: fieldOnBlur,
@@ -78,8 +83,6 @@ var Input = ({
78
83
  }
79
84
  }
80
85
  } : {};
81
- const showTestIdCopyButton = debugMode === "debug-testids";
82
- const showLabel = label != null ? label : showTestIdCopyButton;
83
86
  const variants = inputVariants();
84
87
  const classNames = _pixelutils.variantsToClassNames.call(void 0, variants, _className, "base");
85
88
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -88,9 +91,12 @@ var Input = ({
88
91
  ref,
89
92
  "data-testid": testId,
90
93
  endContent,
91
- isDisabled,
94
+ errorMessage,
95
+ id: testId,
96
+ isDisabled: disabled,
92
97
  isInvalid: invalid,
93
98
  isRequired: required,
99
+ label,
94
100
  labelPlacement: "outside",
95
101
  name,
96
102
  onBlur,
@@ -105,14 +111,11 @@ var Input = ({
105
111
  classNames: {
106
112
  base: classNames.base,
107
113
  clearButton: classNames.clearButton,
114
+ // set padding to 0 for error message exit animation
115
+ helperWrapper: "p-0",
108
116
  input: classNames.input,
109
117
  inputWrapper: classNames.inputWrapper
110
- },
111
- errorMessage: error ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY3AB4GV6cjs.FieldValidationError_default, { error, testId }) : null,
112
- label: showLabel ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
113
- label,
114
- showTestIdCopyButton != null ? showTestIdCopyButton : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5BOGGXcjs.FieldCopyTestIdButton_default, { testId })
115
- ] }) : null
118
+ }
116
119
  }, clearableProps)
117
120
  );
118
121
  };
@@ -125,4 +128,4 @@ var Input_default2 = Input_default;
125
128
 
126
129
 
127
130
  exports.Input_default = Input_default; exports.Input_default2 = Input_default2;
128
- //# sourceMappingURL=chunk-77C6VN4L.cjs.map
131
+ //# sourceMappingURL=chunk-EAJFV3AD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-EAJFV3AD.cjs","../src/Input/Input.tsx","../src/Input/index.ts"],"names":["Input_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-EAJFV3AD.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { InputProps as HeroInputProps } from '@heroui/input';\nimport type { ReactNode } from 'react';\nimport type { InputValueTransform } from '../hooks';\n\nimport { Input as HeroInput } from '@heroui/input';\n\nimport { tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { useInputValueDebounce, useUniformField } from '../hooks';\n\n// input variants\nexport const inputVariants = tv({\n slots: {\n /** wrapper around the whole input */\n base: '',\n /** clear button */\n clearButton: '',\n /** actual input element */\n input: '',\n /** inner wrapper (HeroUI inputWrapper slot) */\n inputWrapper: 'bg-content1 group-data-[focus=true]:border-focus',\n },\n});\n\ntype VariantProps = TVProps<typeof inputVariants>;\ntype ClassName = TVClassName<typeof inputVariants>;\n\nexport interface InputProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** shows clear button when input has value */\n clearable?: boolean;\n /** debounce delay in milliseconds for form state updates (default: 300ms) */\n debounceDelay?: number;\n /** input field is disabled */\n disabled?: boolean;\n /** added content to the end of the input Field. */\n endContent?: ReactNode;\n /** form field label (set to false to disable label) */\n label?: string | false;\n /** form field name */\n name: string;\n /** callback that is fired when the value is cleared */\n onClear?: () => void;\n /** form field placeholder */\n placeholder?: string;\n /** size of the input */\n size?: 'sm' | 'md' | 'lg';\n /** content added to the start of the input field */\n startContent?: ReactNode;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n /** allows disentangled display and form values for a field */\n transform?: InputValueTransform;\n /** input type */\n type?: 'number' | 'password';\n}\n\n/**\n * Input component based on [HeroUI Input](https://www.heroui.com//docs/components/input)\n */\nconst Input = ({\n className: _className = undefined,\n clearable = false,\n debounceDelay = 300,\n endContent = undefined,\n name,\n onClear = undefined,\n placeholder = ' ',\n size = undefined,\n startContent = undefined,\n transform = undefined,\n type = undefined,\n ...uniformFieldProps\n}: InputProps) => {\n const {\n disabled,\n field: {\n onChange: fieldOnChange,\n onBlur: fieldOnBlur,\n value: fieldValue,\n ref,\n },\n errorMessage,\n invalid,\n label,\n required,\n testId,\n resetField,\n } = useUniformField({ name, ...uniformFieldProps });\n\n // Use hook that provides debounced onChange and enhanced blur handling\n const { onChange, onBlur, value } = useInputValueDebounce({\n debounceDelay,\n onBlur: fieldOnBlur,\n onChange: fieldOnChange,\n transform,\n type,\n value: fieldValue,\n });\n\n // If input is clearable add props for clearing input value\n const clearableProps: Pick<HeroInputProps, 'isClearable' | 'onClear'> =\n clearable\n ? {\n isClearable: true,\n onClear: () => {\n // if field had initial value we do not reset it\n // to that value, but clear it instead\n resetField(name, { defaultValue: null });\n // if onClear cb provided we call it\n if (onClear) {\n onClear();\n }\n },\n }\n : {};\n\n // classNames from slots\n const variants = inputVariants();\n const classNames = variantsToClassNames(variants, _className, 'base');\n\n return (\n <HeroInput\n ref={ref}\n data-testid={testId}\n endContent={endContent}\n errorMessage={errorMessage}\n id={testId}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label}\n labelPlacement=\"outside\"\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n radius=\"sm\"\n size={size}\n startContent={startContent}\n type={type}\n // @ts-expect-error can be number for input type number\n value={value}\n variant=\"bordered\"\n classNames={{\n base: classNames.base,\n clearButton: classNames.clearButton,\n // set padding to 0 for error message exit animation\n helperWrapper: 'p-0',\n input: classNames.input,\n inputWrapper: classNames.inputWrapper,\n }}\n {...clearableProps}\n />\n );\n};\n\nexport default Input;\n","import Input from './Input';\n\nexport type { InputProps } from './Input';\n\nexport { Input };\n\nexport default Input;\n"]}
@@ -0,0 +1,47 @@
1
+ // src/partials/FieldValidationError/FieldValidationError.tsx
2
+ import {
3
+ AnimatePresence,
4
+ motion,
5
+ useReducedMotion
6
+ } from "@fuf-stack/pixel-motion";
7
+ import { slugify } from "@fuf-stack/pixel-utils";
8
+ import { jsx } from "react/jsx-runtime";
9
+ var FieldValidationError = ({
10
+ className = void 0,
11
+ error = void 0,
12
+ testId
13
+ }) => {
14
+ const disableAnimation = useReducedMotion();
15
+ return /* @__PURE__ */ jsx(
16
+ "ul",
17
+ {
18
+ "aria-label": `Validation errors of field ${testId}`,
19
+ className,
20
+ "data-testid": slugify(`${testId}_error`),
21
+ children: /* @__PURE__ */ jsx(AnimatePresence, { initial: !disableAnimation, children: error == null ? void 0 : error.map(({ message }, i) => {
22
+ return /* @__PURE__ */ jsx(
23
+ motion.li,
24
+ {
25
+ exit: disableAnimation ? void 0 : { opacity: 0, height: 0 },
26
+ initial: disableAnimation ? false : { height: 0, opacity: 0 },
27
+ style: { overflow: "hidden" },
28
+ transition: { duration: 0.2, ease: "circOut" },
29
+ animate: disableAnimation ? void 0 : { opacity: 1, height: "auto" },
30
+ children: /* @__PURE__ */ jsx("div", { className: "px-1 pt-1", children: message })
31
+ },
32
+ slugify(`${testId}_error_${i}`)
33
+ );
34
+ }) })
35
+ }
36
+ );
37
+ };
38
+ var FieldValidationError_default = FieldValidationError;
39
+
40
+ // src/partials/FieldValidationError/index.ts
41
+ var FieldValidationError_default2 = FieldValidationError_default;
42
+
43
+ export {
44
+ FieldValidationError_default,
45
+ FieldValidationError_default2
46
+ };
47
+ //# sourceMappingURL=chunk-ELYGQTXB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/partials/FieldValidationError/FieldValidationError.tsx","../src/partials/FieldValidationError/index.ts"],"sourcesContent":["import type { FieldError } from 'react-hook-form';\n\nimport {\n AnimatePresence,\n motion,\n useReducedMotion,\n} from '@fuf-stack/pixel-motion';\nimport { slugify } from '@fuf-stack/pixel-utils';\n\nexport interface FieldValidationErrorProps {\n /** CSS class name */\n className?: string;\n /** Field errors */\n error?: FieldError[];\n /** HTML data-testid attribute used in e2e tests */\n testId: string;\n}\n\n/**\n * Renders a validation error of a field\n */\nconst FieldValidationError = ({\n className = undefined,\n error = undefined,\n testId,\n}: FieldValidationErrorProps) => {\n // disable all animation if user prefers reduced motion\n const disableAnimation = useReducedMotion();\n\n return (\n <ul\n aria-label={`Validation errors of field ${testId}`}\n className={className}\n data-testid={slugify(`${testId}_error`)}\n >\n <AnimatePresence initial={!disableAnimation}>\n {error?.map(({ message }, i) => {\n return (\n <motion.li\n key={slugify(`${testId}_error_${i}`)}\n exit={disableAnimation ? undefined : { opacity: 0, height: 0 }}\n initial={disableAnimation ? false : { height: 0, opacity: 0 }}\n style={{ overflow: 'hidden' }}\n transition={{ duration: 0.2, ease: 'circOut' }}\n animate={\n disableAnimation ? undefined : { opacity: 1, height: 'auto' }\n }\n >\n {/* wrap in div to apply padding and animation does not jump */}\n <div className=\"px-1 pt-1\">{message}</div>\n </motion.li>\n );\n })}\n </AnimatePresence>\n </ul>\n );\n};\n\nexport default FieldValidationError;\n","import FieldValidationError from './FieldValidationError';\n\nexport type { FieldValidationErrorProps } from './FieldValidationError';\n\nexport { FieldValidationError };\n\nexport default FieldValidationError;\n"],"mappings":";AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AA0CV;AA5Bd,IAAM,uBAAuB,CAAC;AAAA,EAC5B,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR;AACF,MAAiC;AAE/B,QAAM,mBAAmB,iBAAiB;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,8BAA8B,MAAM;AAAA,MAChD;AAAA,MACA,eAAa,QAAQ,GAAG,MAAM,QAAQ;AAAA,MAEtC,8BAAC,mBAAgB,SAAS,CAAC,kBACxB,yCAAO,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM;AAC9B,eACE;AAAA,UAAC,OAAO;AAAA,UAAP;AAAA,YAEC,MAAM,mBAAmB,SAAY,EAAE,SAAS,GAAG,QAAQ,EAAE;AAAA,YAC7D,SAAS,mBAAmB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE;AAAA,YAC5D,OAAO,EAAE,UAAU,SAAS;AAAA,YAC5B,YAAY,EAAE,UAAU,KAAK,MAAM,UAAU;AAAA,YAC7C,SACE,mBAAmB,SAAY,EAAE,SAAS,GAAG,QAAQ,OAAO;AAAA,YAI9D,8BAAC,SAAI,WAAU,aAAa,mBAAQ;AAAA;AAAA,UAV/B,QAAQ,GAAG,MAAM,UAAU,CAAC,EAAE;AAAA,QAWrC;AAAA,MAEJ,IACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,+BAAQ;;;ACpDf,IAAOA,gCAAQ;","names":["FieldValidationError_default"]}
@@ -1,13 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunk2GYFDVXXcjs = require('./chunk-2GYFDVXX.cjs');
4
+ var _chunkJ5FFM7WGcjs = require('./chunk-J5FFM7WG.cjs');
5
5
 
6
6
  // src/Form/Form.tsx
7
7
  var _pixelutils = require('@fuf-stack/pixel-utils');
8
8
 
9
9
  // src/Form/subcomponents/FormDebugViewer.tsx
10
- var _react = require('react');
11
10
  var _fa = require('react-icons/fa');
12
11
  var _fa6 = require('react-icons/fa6');
13
12
 
@@ -19,28 +18,15 @@ var _jsxruntime = require('react/jsx-runtime');
19
18
  var FormDebugViewer = ({ className = void 0 }) => {
20
19
  const {
21
20
  debugMode,
22
- formState: { isValid, isSubmitting },
23
- getValues,
21
+ formState: { isValid, isSubmitting, submitCount, isSubmitSuccessful },
24
22
  setDebugMode,
25
- subscribe,
26
- validation: { errors }
27
- } = _chunk2GYFDVXXcjs.useFormContext.call(void 0, );
23
+ validation: { errors },
24
+ watch
25
+ } = _chunkJ5FFM7WGcjs.useFormContext.call(void 0, );
28
26
  const showDebugButton = debugMode === "off";
29
27
  const showDebugCard = debugMode === "debug" || debugMode === "debug-testids";
30
28
  const showDebugTestIds = debugMode === "debug-testids";
31
- const [validationValues, setValidationValues] = _react.useState.call(void 0, getValues() || null);
32
- _react.useEffect.call(void 0, () => {
33
- if (!showDebugCard) {
34
- return void 0;
35
- }
36
- const unsubscribe = subscribe({
37
- formState: { values: true },
38
- callback: ({ values }) => {
39
- setValidationValues(values);
40
- }
41
- });
42
- return unsubscribe;
43
- }, [showDebugCard, subscribe]);
29
+ const values = watch();
44
30
  if (showDebugButton) {
45
31
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
46
32
  _Button.Button,
@@ -94,10 +80,14 @@ var FormDebugViewer = ({ className = void 0 }) => {
94
80
  _Json.Json,
95
81
  {
96
82
  value: {
97
- values: validationValues,
98
- errors: errors || null,
99
- isValid,
100
- isSubmitting
83
+ values,
84
+ errors: errors != null ? errors : null,
85
+ submit: {
86
+ isValid,
87
+ isSubmitting,
88
+ isSubmitSuccessful,
89
+ submitCount
90
+ }
101
91
  }
102
92
  }
103
93
  )
@@ -122,7 +112,7 @@ var Form = ({
122
112
  validationTrigger = "all"
123
113
  }) => {
124
114
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
125
- _chunk2GYFDVXXcjs.FormContext_default,
115
+ _chunkJ5FFM7WGcjs.FormContext_default,
126
116
  {
127
117
  debugModeSettings: debug,
128
118
  initialValues,
@@ -130,13 +120,14 @@ var Form = ({
130
120
  validation,
131
121
  validationTrigger,
132
122
  children: ({ handleSubmit, isValid }) => {
123
+ var _a;
133
124
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-row justify-between gap-6", children: [
134
125
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
135
126
  "form",
136
127
  {
137
128
  className: _pixelutils.cn.call(void 0, "grow", className),
138
129
  "data-form-is-valid": isValid,
139
- "data-testid": _pixelutils.slugify.call(void 0, testId || name || ""),
130
+ "data-testid": _pixelutils.slugify.call(void 0, (_a = testId != null ? testId : name) != null ? _a : ""),
140
131
  name,
141
132
  onSubmit: handleSubmit,
142
133
  children
@@ -157,4 +148,4 @@ var Form_default2 = Form_default;
157
148
 
158
149
 
159
150
  exports.Form_default = Form_default; exports.Form_default2 = Form_default2;
160
- //# sourceMappingURL=chunk-FOVP54XP.cjs.map
151
+ //# sourceMappingURL=chunk-EO4A7QGM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-EO4A7QGM.cjs","../src/Form/Form.tsx","../src/Form/subcomponents/FormDebugViewer.tsx","../src/Form/index.ts"],"names":["jsx","jsxs","cn","Form_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-EO4A7QGM.cjs","sourcesContent":[null,"import type { VetoInstance } from '@fuf-stack/veto';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, SubmitHandler } from 'react-hook-form';\nimport type { DebugModeSettings } from './subcomponents/FormContext';\n\nimport { cn, slugify } from '@fuf-stack/pixel-utils';\n\nimport FormProvider from './subcomponents/FormContext';\nimport FormDebugViewer from './subcomponents/FormDebugViewer';\n\nconst IS_TEST = process.env.NODE_ENV === 'test';\n\nexport interface FormProps {\n /** form children */\n children: ReactNode | ReactNode[];\n /** CSS class name */\n className?: string | string[];\n /** settings for from debug mode */\n debug?: DebugModeSettings;\n /** initial form values */\n initialValues?: FieldValues;\n /** name of the form */\n name?: string;\n /** form submit handler */\n onSubmit: SubmitHandler<FieldValues>;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n /** veto validation schema */\n validation?: VetoInstance;\n /** when the validation should be triggered */\n validationTrigger?: 'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all';\n}\n\n/**\n * Form component that has to wrap every uniform\n */\nconst Form = ({\n children,\n className = undefined,\n debug = undefined,\n initialValues = undefined,\n name = undefined,\n onSubmit,\n testId = undefined,\n validation = undefined,\n validationTrigger = 'all',\n}: FormProps) => {\n return (\n <FormProvider\n debugModeSettings={debug}\n initialValues={initialValues}\n onSubmit={onSubmit}\n validation={validation}\n validationTrigger={validationTrigger}\n >\n {({ handleSubmit, isValid }) => {\n return (\n <div className=\"flex w-full flex-row justify-between gap-6\">\n <form\n className={cn('grow', className)}\n data-form-is-valid={isValid}\n data-testid={slugify(testId ?? name ?? '')}\n name={name}\n onSubmit={handleSubmit}\n >\n {children}\n </form>\n {/* render debug viewer when not in test environment and debug not disabled */}\n {!IS_TEST && !debug?.disable && (\n <FormDebugViewer className=\"w-96 shrink\" />\n )}\n </div>\n );\n }}\n </FormProvider>\n );\n};\n\nexport default Form;\n","import { FaTimes } from 'react-icons/fa';\nimport { FaBug, FaBullseye } from 'react-icons/fa6';\n\nimport { cn } from '@fuf-stack/pixel-utils';\nimport { Button } from '@fuf-stack/pixels/Button';\nimport { Card } from '@fuf-stack/pixels/Card';\nimport { Json } from '@fuf-stack/pixels/Json';\n\nimport { useFormContext } from '../../hooks';\n\n// import Json css (theme)\nimport '@fuf-stack/pixels/Json.css';\n\ninterface FormDebugViewerProps {\n /** CSS class name */\n className?: string;\n}\n\n/** Renders a form debug panel with information about the current form state */\nconst FormDebugViewer = ({ className = undefined }: FormDebugViewerProps) => {\n const {\n debugMode,\n formState: { isValid, isSubmitting, submitCount, isSubmitSuccessful },\n setDebugMode,\n validation: { errors },\n watch,\n } = useFormContext();\n\n const showDebugButton = debugMode === 'off';\n const showDebugCard = debugMode === 'debug' || debugMode === 'debug-testids';\n const showDebugTestIds = debugMode === 'debug-testids';\n\n // TODO: maybe use new Watch component?\n // see: https://github.com/react-hook-form/react-hook-form/pull/12986\n const values = watch();\n\n if (showDebugButton) {\n return (\n <Button\n ariaLabel=\"Enable form debug mode\"\n className=\"text-default-400 fixed right-2.5 bottom-2.5 w-5\"\n icon={<FaBug />}\n variant=\"light\"\n onClick={() => {\n setDebugMode('debug');\n }}\n />\n );\n }\n\n // do not show card\n if (!showDebugCard) {\n return null;\n }\n\n return (\n <Card\n className={cn(className)}\n header={\n <div className=\"flex w-full flex-row justify-between\">\n <span className=\"text-lg\">Debug Mode</span>\n <Button\n color=\"danger\"\n icon={<FaTimes />}\n size=\"sm\"\n variant=\"light\"\n onClick={() => {\n setDebugMode('off');\n }}\n />\n </div>\n }\n >\n <Button\n className=\"mr-auto mb-4 ml-auto\"\n icon={<FaBullseye />}\n variant={showDebugTestIds ? 'solid' : 'light'}\n onClick={() => {\n setDebugMode(debugMode === 'debug' ? 'debug-testids' : 'debug');\n }}\n >\n {showDebugTestIds ? 'Hide CopyButton' : 'Show CopyButton'}\n </Button>\n <Json\n value={{\n values,\n errors: errors ?? null,\n submit: {\n isValid,\n isSubmitting,\n isSubmitSuccessful,\n submitCount,\n },\n }}\n />\n </Card>\n );\n};\n\nexport default FormDebugViewer;\n","import Form from './Form';\n\nexport type { FormProps } from './Form';\n\nexport { Form };\n\nexport default Form;\n"]}