@fuf-stack/uniform 0.18.4 → 0.19.0

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 (171) hide show
  1. package/dist/CheckboxGroup/index.cjs +6 -7
  2. package/dist/CheckboxGroup/index.cjs.map +1 -1
  3. package/dist/CheckboxGroup/index.js +5 -6
  4. package/dist/FieldArray/index.cjs +6 -6
  5. package/dist/FieldArray/index.js +5 -5
  6. package/dist/{FieldCopyTestIdButton-DnbovhMk.d.ts → FieldCopyTestIdButton-_TDlmw0L.d.cts} +2 -0
  7. package/dist/{FieldCopyTestIdButton-DnbovhMk.d.cts → FieldCopyTestIdButton-_TDlmw0L.d.ts} +2 -0
  8. package/dist/{FieldValidationError-DAT12Ess.d.ts → FieldValidationError-CU_xw0BL.d.cts} +5 -2
  9. package/dist/{FieldValidationError-DAT12Ess.d.cts → FieldValidationError-CU_xw0BL.d.ts} +5 -2
  10. package/dist/Form/index.cjs +4 -4
  11. package/dist/Form/index.js +3 -3
  12. package/dist/Grid/index.cjs +1 -1
  13. package/dist/Grid/index.js +1 -1
  14. package/dist/Input/index.cjs +6 -7
  15. package/dist/Input/index.cjs.map +1 -1
  16. package/dist/Input/index.js +5 -6
  17. package/dist/RadioBoxes/index.cjs +6 -7
  18. package/dist/RadioBoxes/index.cjs.map +1 -1
  19. package/dist/RadioBoxes/index.js +5 -6
  20. package/dist/RadioGroup/index.cjs +6 -7
  21. package/dist/RadioGroup/index.cjs.map +1 -1
  22. package/dist/RadioGroup/index.js +5 -6
  23. package/dist/RadioTabs/index.cjs +6 -7
  24. package/dist/RadioTabs/index.cjs.map +1 -1
  25. package/dist/RadioTabs/index.js +5 -6
  26. package/dist/Select/index.cjs +6 -7
  27. package/dist/Select/index.cjs.map +1 -1
  28. package/dist/Select/index.js +5 -6
  29. package/dist/SubmitButton/index.cjs +4 -4
  30. package/dist/SubmitButton/index.js +3 -3
  31. package/dist/Switch/index.cjs +6 -7
  32. package/dist/Switch/index.cjs.map +1 -1
  33. package/dist/Switch/index.js +5 -6
  34. package/dist/TextArea/index.cjs +6 -7
  35. package/dist/TextArea/index.cjs.map +1 -1
  36. package/dist/TextArea/index.js +5 -6
  37. package/dist/chunk-25Y2Q5CX.cjs +110 -0
  38. package/dist/chunk-25Y2Q5CX.cjs.map +1 -0
  39. package/dist/{chunk-IOIYK6UC.js → chunk-35I663WR.js} +29 -29
  40. package/dist/chunk-35I663WR.js.map +1 -0
  41. package/dist/{chunk-FNY55CAR.js → chunk-3JRZ5YNE.js} +10 -9
  42. package/dist/chunk-3JRZ5YNE.js.map +1 -0
  43. package/dist/chunk-4DVYBP2O.cjs +236 -0
  44. package/dist/chunk-4DVYBP2O.cjs.map +1 -0
  45. package/dist/chunk-4IQKCUZC.cjs +145 -0
  46. package/dist/chunk-4IQKCUZC.cjs.map +1 -0
  47. package/dist/{chunk-4DAZAO6Y.cjs → chunk-555JRYCS.cjs} +4 -2
  48. package/dist/chunk-555JRYCS.cjs.map +1 -0
  49. package/dist/{chunk-WI6FEFKD.cjs → chunk-5NKR4C73.cjs} +18 -17
  50. package/dist/chunk-5NKR4C73.cjs.map +1 -0
  51. package/dist/chunk-5W2IWHSE.js +89 -0
  52. package/dist/chunk-5W2IWHSE.js.map +1 -0
  53. package/dist/{chunk-TONXQKTY.cjs → chunk-6GCMM22R.cjs} +36 -48
  54. package/dist/chunk-6GCMM22R.cjs.map +1 -0
  55. package/dist/chunk-7BLVIVDU.cjs +281 -0
  56. package/dist/chunk-7BLVIVDU.cjs.map +1 -0
  57. package/dist/{chunk-BLAMCAGB.js → chunk-7NZKBUL6.js} +37 -49
  58. package/dist/chunk-7NZKBUL6.js.map +1 -0
  59. package/dist/{chunk-5NRHHIFP.js → chunk-7R2P54VS.js} +38 -50
  60. package/dist/chunk-7R2P54VS.js.map +1 -0
  61. package/dist/{chunk-2CRY7VDQ.js → chunk-BQGN3JTU.js} +1 -1
  62. package/dist/chunk-BQGN3JTU.js.map +1 -0
  63. package/dist/{chunk-P332MPVH.js → chunk-BXQ3MVNH.js} +5 -5
  64. package/dist/chunk-BXQ3MVNH.js.map +1 -0
  65. package/dist/chunk-CN5XEGV4.js +281 -0
  66. package/dist/chunk-CN5XEGV4.js.map +1 -0
  67. package/dist/chunk-DBKDDOS2.cjs +89 -0
  68. package/dist/chunk-DBKDDOS2.cjs.map +1 -0
  69. package/dist/chunk-E62JDTFS.js +110 -0
  70. package/dist/chunk-E62JDTFS.js.map +1 -0
  71. package/dist/chunk-F2LWLSBT.cjs +98 -0
  72. package/dist/chunk-F2LWLSBT.cjs.map +1 -0
  73. package/dist/{chunk-OE5IW4ZG.cjs → chunk-GNYQC5IJ.cjs} +8 -17
  74. package/dist/chunk-GNYQC5IJ.cjs.map +1 -0
  75. package/dist/{chunk-4RDTC7R6.cjs → chunk-HECO3HXR.cjs} +31 -31
  76. package/dist/chunk-HECO3HXR.cjs.map +1 -0
  77. package/dist/{chunk-CRTRMMJ7.js → chunk-K2V4ULA2.js} +3 -1
  78. package/dist/{chunk-AEUUTAJB.cjs → chunk-LYI2IDCW.cjs} +6 -6
  79. package/dist/chunk-LYI2IDCW.cjs.map +1 -0
  80. package/dist/chunk-N2MRIHRX.js +236 -0
  81. package/dist/chunk-N2MRIHRX.js.map +1 -0
  82. package/dist/{chunk-2DJMYFRZ.cjs → chunk-NEHRI4EM.cjs} +61 -71
  83. package/dist/chunk-NEHRI4EM.cjs.map +1 -0
  84. package/dist/{chunk-JU5RT22Y.cjs → chunk-PA2DQCBY.cjs} +1 -1
  85. package/dist/chunk-PA2DQCBY.cjs.map +1 -0
  86. package/dist/{chunk-ASPOGQPS.js → chunk-UTFZRBBS.js} +8 -17
  87. package/dist/chunk-UTFZRBBS.js.map +1 -0
  88. package/dist/chunk-UU7SXXNI.cjs +70 -0
  89. package/dist/chunk-UU7SXXNI.cjs.map +1 -0
  90. package/dist/chunk-W2K5WX3O.js +145 -0
  91. package/dist/chunk-W2K5WX3O.js.map +1 -0
  92. package/dist/chunk-Y4YQH2QB.js +70 -0
  93. package/dist/chunk-Y4YQH2QB.js.map +1 -0
  94. package/dist/{chunk-5RFFXDXC.js → chunk-YK2XHKK2.js} +56 -66
  95. package/dist/chunk-YK2XHKK2.js.map +1 -0
  96. package/dist/helpers/index.cjs +1 -1
  97. package/dist/helpers/index.js +1 -1
  98. package/dist/hooks/index.cjs +7 -3
  99. package/dist/hooks/index.cjs.map +1 -1
  100. package/dist/hooks/index.d.cts +47 -6
  101. package/dist/hooks/index.d.ts +47 -6
  102. package/dist/hooks/index.js +6 -2
  103. package/dist/index.cjs +18 -18
  104. package/dist/index.cjs.map +1 -1
  105. package/dist/index.d.cts +3 -4
  106. package/dist/index.d.ts +3 -4
  107. package/dist/index.js +24 -24
  108. package/dist/partials/FieldCopyTestIdButton/index.cjs +3 -3
  109. package/dist/partials/FieldCopyTestIdButton/index.d.cts +2 -2
  110. package/dist/partials/FieldCopyTestIdButton/index.d.ts +2 -2
  111. package/dist/partials/FieldCopyTestIdButton/index.js +2 -2
  112. package/dist/partials/FieldValidationError/index.cjs +3 -3
  113. package/dist/partials/FieldValidationError/index.d.cts +2 -2
  114. package/dist/partials/FieldValidationError/index.d.ts +2 -2
  115. package/dist/partials/FieldValidationError/index.js +2 -2
  116. package/package.json +6 -11
  117. package/dist/Controller/index.cjs +0 -11
  118. package/dist/Controller/index.cjs.map +0 -1
  119. package/dist/Controller/index.d.cts +0 -8
  120. package/dist/Controller/index.d.ts +0 -8
  121. package/dist/Controller/index.js +0 -11
  122. package/dist/Controller-8Nqugui5.d.cts +0 -37
  123. package/dist/Controller-8Nqugui5.d.ts +0 -37
  124. package/dist/chunk-2CRY7VDQ.js.map +0 -1
  125. package/dist/chunk-2DJMYFRZ.cjs.map +0 -1
  126. package/dist/chunk-3ULE3TIW.js +0 -249
  127. package/dist/chunk-3ULE3TIW.js.map +0 -1
  128. package/dist/chunk-4DAZAO6Y.cjs.map +0 -1
  129. package/dist/chunk-4RDTC7R6.cjs.map +0 -1
  130. package/dist/chunk-5NRHHIFP.js.map +0 -1
  131. package/dist/chunk-5RFFXDXC.js.map +0 -1
  132. package/dist/chunk-AEUUTAJB.cjs.map +0 -1
  133. package/dist/chunk-ASPOGQPS.js.map +0 -1
  134. package/dist/chunk-AT2VVPRD.js +0 -52
  135. package/dist/chunk-AT2VVPRD.js.map +0 -1
  136. package/dist/chunk-BLAMCAGB.js.map +0 -1
  137. package/dist/chunk-C5ZRTXUD.cjs +0 -249
  138. package/dist/chunk-C5ZRTXUD.cjs.map +0 -1
  139. package/dist/chunk-CRTRMMJ7.js.map +0 -1
  140. package/dist/chunk-EPYFZXEI.cjs +0 -52
  141. package/dist/chunk-EPYFZXEI.cjs.map +0 -1
  142. package/dist/chunk-FAXFHN7Z.cjs +0 -145
  143. package/dist/chunk-FAXFHN7Z.cjs.map +0 -1
  144. package/dist/chunk-FNY55CAR.js.map +0 -1
  145. package/dist/chunk-IOIYK6UC.js.map +0 -1
  146. package/dist/chunk-JU5RT22Y.cjs.map +0 -1
  147. package/dist/chunk-MKFKX5QX.cjs +0 -97
  148. package/dist/chunk-MKFKX5QX.cjs.map +0 -1
  149. package/dist/chunk-NBAVP4ER.js +0 -135
  150. package/dist/chunk-NBAVP4ER.js.map +0 -1
  151. package/dist/chunk-O3TBUVDW.js +0 -97
  152. package/dist/chunk-O3TBUVDW.js.map +0 -1
  153. package/dist/chunk-OE5IW4ZG.cjs.map +0 -1
  154. package/dist/chunk-P332MPVH.js.map +0 -1
  155. package/dist/chunk-Q6DCHTBA.js +0 -145
  156. package/dist/chunk-Q6DCHTBA.js.map +0 -1
  157. package/dist/chunk-QQW2FHSC.cjs +0 -135
  158. package/dist/chunk-QQW2FHSC.cjs.map +0 -1
  159. package/dist/chunk-QXD6XP3Y.js +0 -120
  160. package/dist/chunk-QXD6XP3Y.js.map +0 -1
  161. package/dist/chunk-TONXQKTY.cjs.map +0 -1
  162. package/dist/chunk-UOK3TF4G.cjs +0 -82
  163. package/dist/chunk-UOK3TF4G.cjs.map +0 -1
  164. package/dist/chunk-VZC5LLW4.cjs +0 -120
  165. package/dist/chunk-VZC5LLW4.cjs.map +0 -1
  166. package/dist/chunk-WI6FEFKD.cjs.map +0 -1
  167. package/dist/chunk-XL3FJ3VX.js +0 -82
  168. package/dist/chunk-XL3FJ3VX.js.map +0 -1
  169. package/dist/chunk-ZFJ5NEHU.cjs +0 -110
  170. package/dist/chunk-ZFJ5NEHU.cjs.map +0 -1
  171. /package/dist/{Controller/index.js.map → chunk-K2V4ULA2.js.map} +0 -0
@@ -1,20 +1,18 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkEPYFZXEIcjs = require('./chunk-EPYFZXEI.cjs');
3
+ var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
4
4
 
5
5
 
6
- var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
6
+ var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
7
7
 
8
8
 
9
- var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
10
9
 
10
+ var _chunk7BLVIVDUcjs = require('./chunk-7BLVIVDU.cjs');
11
11
 
12
- var _chunkQQW2FHSCcjs = require('./chunk-QQW2FHSC.cjs');
13
12
 
14
13
 
15
14
 
16
-
17
- var _chunk4DAZAO6Ycjs = require('./chunk-4DAZAO6Y.cjs');
15
+ var _chunk555JRYCScjs = require('./chunk-555JRYCS.cjs');
18
16
 
19
17
  // src/RadioBoxes/RadioBoxes.tsx
20
18
  var _radio = require('@heroui/radio');
@@ -26,7 +24,7 @@ var _visuallyhidden = require('@react-aria/visually-hidden');
26
24
 
27
25
  var _jsxruntime = require('react/jsx-runtime');
28
26
  var RadioBox = (_a) => {
29
- var _b = _a, { icon = void 0 } = _b, props = _chunk4DAZAO6Ycjs.__objRest.call(void 0, _b, ["icon"]);
27
+ var _b = _a, { icon = void 0 } = _b, props = _chunk555JRYCScjs.__objRest.call(void 0, _b, ["icon"]);
30
28
  const {
31
29
  children,
32
30
  Component,
@@ -41,7 +39,7 @@ var RadioBox = (_a) => {
41
39
  } = _radio.useRadio.call(void 0, props);
42
40
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
43
41
  Component,
44
- _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getBaseProps()), {
42
+ _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getBaseProps()), {
45
43
  className: _pixelutils.cn.call(void 0,
46
44
  "group inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 border-default p-4 hover:bg-content2 data-[selected=true]:border-focus",
47
45
  {
@@ -50,15 +48,15 @@ var RadioBox = (_a) => {
50
48
  }
51
49
  ),
52
50
  children: [
53
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _visuallyhidden.VisuallyHidden, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "input", _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getInputProps())) }),
54
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getWrapperProps()), { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getControlProps())) })),
51
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _visuallyhidden.VisuallyHidden, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "input", _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getInputProps())) }),
52
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getWrapperProps()), { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getControlProps())) })),
55
53
  icon,
56
54
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
57
55
  "div",
58
- _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getLabelWrapperProps()), {
56
+ _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getLabelWrapperProps()), {
59
57
  className: _pixelutils.cn.call(void 0, getLabelWrapperProps().className, "grow"),
60
58
  children: [
61
- children && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getLabelProps()), { children })),
59
+ children && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getLabelProps()), { children })),
62
60
  description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-small text-foreground opacity-70", children: description })
63
61
  ]
64
62
  })
@@ -96,72 +94,64 @@ var RadioBoxes = ({
96
94
  options,
97
95
  testId: _testId = void 0
98
96
  }) => {
99
- const { control, debugMode, getFieldState, getValues } = _chunkQQW2FHSCcjs.useFormContext.call(void 0, );
97
+ const { control, debugMode, getFieldState, getValues } = _chunk7BLVIVDUcjs.useFormContext.call(void 0, );
100
98
  const { error, invalid, required, testId } = getFieldState(name, _testId);
99
+ const { field } = _chunk7BLVIVDUcjs.useController.call(void 0, { control, disabled, name });
100
+ const { onChange, disabled: isDisabled, onBlur, ref } = field;
101
101
  const showTestIdCopyButton = debugMode === "debug-testids";
102
102
  const showLabel = label || showTestIdCopyButton;
103
103
  const variants = radioBoxesVariants();
104
104
  const classNames = _pixelutils.variantsToClassNames.call(void 0, variants, className, "base");
105
+ const itemClassNames = {
106
+ base: classNames.itemBase,
107
+ control: classNames.itemControl,
108
+ description: classNames.itemDescription,
109
+ label: classNames.itemLabel,
110
+ labelWrapper: classNames.itemLabelWrapper,
111
+ wrapper: classNames.itemWrapper
112
+ };
105
113
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
106
- _chunkEPYFZXEIcjs.Controller_default,
114
+ _radio.RadioGroup,
107
115
  {
108
- control,
109
- disabled,
116
+ classNames,
117
+ "data-invalid": invalid,
118
+ "data-required": required,
119
+ "data-testid": testId,
120
+ defaultValue: getValues()[name],
121
+ errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGNYQC5IJcjs.FieldValidationError_default, { error, testId }),
122
+ isDisabled,
123
+ isInvalid: invalid,
124
+ isRequired: required,
125
+ label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
126
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
127
+ label,
128
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default, { testId })
129
+ ] }),
110
130
  name,
111
- render: ({ field: { onChange, disabled: isDisabled, onBlur, ref } }) => {
112
- const itemClassNames = {
113
- base: classNames.itemBase,
114
- control: classNames.itemControl,
115
- description: classNames.itemDescription,
116
- label: classNames.itemLabel,
117
- labelWrapper: classNames.itemLabelWrapper,
118
- wrapper: classNames.itemWrapper
119
- };
120
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
121
- _radio.RadioGroup,
122
- {
123
- classNames,
124
- "data-invalid": invalid,
125
- "data-required": required,
126
- "data-testid": testId,
127
- defaultValue: getValues()[name],
128
- errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5IW4ZGcjs.FieldValidationError_default, { error }),
129
- isDisabled,
130
- isInvalid: invalid,
131
- isRequired: required,
132
- label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
133
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
134
- label,
135
- showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default, { testId })
136
- ] }),
137
- name,
138
- orientation: inline ? "horizontal" : "vertical",
139
- onBlur,
140
- ref,
141
- children: options.map((option) => {
142
- if ("value" in option) {
143
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
144
- RadioBox,
145
- {
146
- classNames: itemClassNames,
147
- "data-testid": _pixelutils.slugify.call(void 0,
148
- `${testId}_option_${option.testId || option.value}`
149
- ),
150
- description: option.description,
151
- icon: option.icon,
152
- isDisabled: isDisabled || option.disabled,
153
- onChange,
154
- value: option.value,
155
- children: option.label ? option.label : option.value
156
- },
157
- option.value
158
- );
159
- }
160
- return null;
161
- })
162
- }
163
- );
164
- }
131
+ orientation: inline ? "horizontal" : "vertical",
132
+ onBlur,
133
+ ref,
134
+ children: options.map((option) => {
135
+ if ("value" in option) {
136
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
137
+ RadioBox,
138
+ {
139
+ classNames: itemClassNames,
140
+ "data-testid": _pixelutils.slugify.call(void 0,
141
+ `${testId}_option_${option.testId || option.value}`
142
+ ),
143
+ description: option.description,
144
+ icon: option.icon,
145
+ isDisabled: isDisabled || option.disabled,
146
+ onChange,
147
+ value: option.value,
148
+ children: option.label ? option.label : option.value
149
+ },
150
+ option.value
151
+ );
152
+ }
153
+ return null;
154
+ })
165
155
  }
166
156
  );
167
157
  };
@@ -174,4 +164,4 @@ var RadioBoxes_default2 = RadioBoxes_default;
174
164
 
175
165
 
176
166
  exports.RadioBoxes_default = RadioBoxes_default; exports.RadioBoxes_default2 = RadioBoxes_default2;
177
- //# sourceMappingURL=chunk-2DJMYFRZ.cjs.map
167
+ //# sourceMappingURL=chunk-NEHRI4EM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-NEHRI4EM.cjs","../src/RadioBoxes/RadioBoxes.tsx","../src/RadioBoxes/RadioBox.tsx","../src/RadioBoxes/index.ts"],"names":["jsx","jsxs","RadioBoxes_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-NEHRI4EM.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { RadioGroup as HeroRadioGroup } from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\nimport { RadioBox } from './RadioBox';\n\nexport const radioBoxesVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\n itemBase: '',\n itemControl: 'bg-focus group-data-[invalid=true]:bg-danger',\n itemDescription: '',\n itemLabel: 'text-sm',\n itemLabelWrapper: '',\n itemWrapper:\n 'group-data-[invalid=true]:!border-danger [&:not(group-data-[invalid=\"true\"]):not(group-data-[selected=\"false\"])]:border-focus', // TODO: get rid of !.\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-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radioBoxesVariants>;\ntype ClassName = TVClassName<typeof radioBoxesVariants>;\n\nexport interface RadioBoxesOption {\n /** Description of the value. Works with variant radioBox. */\n description?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string;\n}\n\nexport interface RadioBoxesProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioBoxesOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * RadioBoxes component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst RadioBoxes = ({\n className = undefined,\n disabled = false,\n inline = false,\n label = undefined,\n name,\n options,\n testId: _testId = undefined,\n}: RadioBoxesProps): ReactElement => {\n const { control, debugMode, getFieldState, getValues } = useFormContext();\n\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const { field } = useController({ control, disabled, name });\n const { onChange, disabled: isDisabled, onBlur, ref } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = radioBoxesVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const itemClassNames = {\n base: classNames.itemBase,\n control: classNames.itemControl,\n description: classNames.itemDescription,\n label: classNames.itemLabel,\n labelWrapper: classNames.itemLabelWrapper,\n wrapper: classNames.itemWrapper,\n };\n\n return (\n <HeroRadioGroup\n classNames={classNames}\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-required={required}\n data-testid={testId}\n defaultValue={getValues()[name]}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n isDisabled={isDisabled}\n isInvalid={invalid}\n isRequired={required}\n label={\n showLabel && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </label>\n )\n }\n name={name}\n orientation={inline ? 'horizontal' : 'vertical'}\n onBlur={onBlur}\n ref={ref}\n >\n {options.map((option) => {\n if ('value' in option) {\n return (\n <RadioBox\n classNames={itemClassNames}\n data-testid={slugify(\n `${testId}_option_${option.testId || option.value}`,\n )}\n description={option.description}\n icon={option.icon}\n isDisabled={isDisabled || option.disabled}\n key={option.value}\n onChange={onChange}\n value={option.value}\n >\n {option.label ? option.label : option.value}\n </RadioBox>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default RadioBoxes;\n","import type { RadioProps as HeroRadioProps } from '@heroui/radio';\nimport type { ReactNode } from 'react';\n\nimport { useRadio } from '@heroui/radio';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\n\nimport { cn } from '@fuf-stack/pixel-utils';\n\ninterface RadioProps extends HeroRadioProps {\n /** icon for the option */\n icon?: ReactNode;\n}\n\nexport const RadioBox = ({ icon = undefined, ...props }: RadioProps) => {\n const {\n children,\n Component,\n description,\n getBaseProps,\n getControlProps,\n getInputProps,\n getLabelProps,\n getLabelWrapperProps,\n getWrapperProps,\n isDisabled,\n } = useRadio(props);\n\n return (\n <Component\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getBaseProps()}\n className={cn(\n 'group inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 border-default p-4 hover:bg-content2 data-[selected=true]:border-focus',\n {\n // disabled styles\n 'pointer-events-none opacity-disabled': isDisabled,\n },\n )}\n >\n <VisuallyHidden>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <input {...getInputProps()} />\n </VisuallyHidden>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <span {...getWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <span {...getControlProps()} />\n </span>\n {icon}\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getLabelWrapperProps()}\n className={cn(getLabelWrapperProps().className, 'grow')}\n >\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n {children && <span {...getLabelProps()}>{children}</span>}\n {description && (\n <span className=\"text-small text-foreground opacity-70\">\n {description}\n </span>\n )}\n </div>\n </Component>\n );\n};\n\nexport default RadioBox;\n","import RadioBoxes from './RadioBoxes';\n\nexport type { RadioBoxesProps } from './RadioBoxes';\n\nexport { RadioBoxes };\n\nexport default RadioBoxes;\n"]}
@@ -32,4 +32,4 @@ var FieldCopyTestIdButton_default2 = FieldCopyTestIdButton_default;
32
32
 
33
33
 
34
34
  exports.FieldCopyTestIdButton_default = FieldCopyTestIdButton_default; exports.FieldCopyTestIdButton_default2 = FieldCopyTestIdButton_default2;
35
- //# sourceMappingURL=chunk-JU5RT22Y.cjs.map
35
+ //# sourceMappingURL=chunk-PA2DQCBY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-PA2DQCBY.cjs","../src/partials/FieldCopyTestIdButton/FieldCopyTestIdButton.tsx","../src/partials/FieldCopyTestIdButton/index.ts"],"names":["FieldCopyTestIdButton_default"],"mappings":"AAAA;ACAA,sCAA2B;AAE3B,oDAAmB;AACnB,2CAAuB;AAwBX,+CAAA;AAfZ,IAAM,sBAAA,EAAwB,CAAC;AAAA,EAC7B,UAAA,EAAY,KAAA,CAAA;AAAA,EACZ;AACF,CAAA,EAAA,GAAkC;AAChC,EAAA,MAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AAC5B,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,MAAM,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,EAAA,GAAQ;AACnD,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAA,EAAqC,GAAG,CAAA;AAAA,IACxD,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,6BAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,4BAAA,SAAG,EAAW,qBAAqB,CAAA;AAAA,MAC9C,OAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS,eAAA;AAAA,MACT,IAAA,kBAAM,6BAAA,eAAC,EAAA,CAAA,CAAW,CAAA;AAAA,MAClB,IAAA,EAAK;AAAA,IAAA;AAAA,EACP,CAAA;AAEJ,CAAA;AACA,IAAO,8BAAA,EAAQ,qBAAA;ADNf;AACA;AErBA,IAAOA,+BAAAA,EAAQ,6BAAA;AFuBf;AACA;AACE;AACA;AACF,+IAAC","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-PA2DQCBY.cjs","sourcesContent":[null,"import { FaBullseye } from 'react-icons/fa6';\n\nimport { cn } from '@fuf-stack/pixel-utils';\nimport { Button } from '@fuf-stack/pixels';\n\nexport interface FieldCopyTestIdButtonProps {\n /** CSS class name */\n className?: string;\n /** HTML data-testid attribute used in e2e tests */\n testId: string;\n}\n\nconst FieldCopyTestIdButton = ({\n className = undefined,\n testId,\n}: FieldCopyTestIdButtonProps) => {\n const copyToClipboard = () => {\n navigator.clipboard.writeText(testId).catch((err) => {\n console.error('Error copying TestId to clipboard', err);\n });\n };\n\n return (\n <Button\n className={cn(className, 'pointer-events-auto')}\n variant=\"light\"\n onClick={copyToClipboard}\n icon={<FaBullseye />}\n size=\"sm\"\n />\n );\n};\nexport default FieldCopyTestIdButton;\n","import FieldCopyTestIdButton from './FieldCopyTestIdButton';\n\nexport type { FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton';\n\nexport { FieldCopyTestIdButton };\n\nexport default FieldCopyTestIdButton;\n"]}
@@ -4,30 +4,21 @@ import { jsx } from "react/jsx-runtime";
4
4
  var FieldValidationError = ({
5
5
  className = void 0,
6
6
  error,
7
- testId = void 0
7
+ testId
8
8
  }) => {
9
- if (!error) {
9
+ if (!error || Array.isArray(error) && !error.length) {
10
10
  return null;
11
11
  }
12
- let tmpErrors = [];
13
- if (typeof error === "object" && !(error instanceof Array)) {
14
- const errorObject = error;
15
- Object.keys(error).forEach((key) => {
16
- tmpErrors = [...tmpErrors, ...errorObject[key]];
17
- });
18
- }
19
- const errorArray = JSON.stringify(tmpErrors) !== "[]" ? tmpErrors : error;
20
- const errorStrings = errorArray.map((e) => e.message);
21
- const ariaString = `Error: ${errorStrings.join("\n")}`;
12
+ const errors = Array.isArray(error) ? error : [error];
22
13
  return /* @__PURE__ */ jsx(
23
14
  "ul",
24
15
  {
25
- "data-testid": slugify(testId || errorStrings.join()),
26
- "aria-label": ariaString,
16
+ "aria-label": `Validation errors of field ${testId}`,
27
17
  className,
28
- children: errorStrings.map((errorString, i) => (
18
+ "data-testid": slugify(`${testId}_error`),
19
+ children: errors.map(({ message }, i) => (
29
20
  // eslint-disable-next-line react/no-array-index-key
30
- /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("div", { children: errorString }) }, `error_${i}`)
21
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("div", { children: message }) }, `error_${i}`)
31
22
  ))
32
23
  }
33
24
  );
@@ -41,4 +32,4 @@ export {
41
32
  FieldValidationError_default,
42
33
  FieldValidationError_default2
43
34
  };
44
- //# sourceMappingURL=chunk-ASPOGQPS.js.map
35
+ //# sourceMappingURL=chunk-UTFZRBBS.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 { slugify } from '@fuf-stack/pixel-utils';\n\nexport interface FieldValidationErrorProps {\n /** CSS class name */\n className?: string;\n /** Field errors */\n error: FieldError | 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,\n testId,\n}: FieldValidationErrorProps) => {\n // render nothing when no errors\n if (!error || (Array.isArray(error) && !error.length)) {\n return null;\n }\n\n // get errors as array\n const errors: FieldError[] = Array.isArray(error) ? error : [error];\n\n return (\n <ul\n aria-label={`Validation errors of field ${testId}`}\n className={className}\n data-testid={slugify(`${testId}_error`)}\n >\n {errors.map(({ message }, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <li key={`error_${i}`}>\n <div>{message}</div>\n </li>\n ))}\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,SAAS,eAAe;AAoCd;AAtBV,IAAM,uBAAuB,CAAC;AAAA,EAC5B,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAiC;AAE/B,MAAI,CAAC,SAAU,MAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,QAAS;AACrD,WAAO;AAAA,EACT;AAGA,QAAM,SAAuB,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAElE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,8BAA8B,MAAM;AAAA,MAChD;AAAA,MACA,eAAa,QAAQ,GAAG,MAAM,QAAQ;AAAA,MAErC,iBAAO,IAAI,CAAC,EAAE,QAAQ,GAAG;AAAA;AAAA,QAExB,oBAAC,QACC,8BAAC,SAAK,mBAAQ,KADP,SAAS,CAAC,EAEnB;AAAA,OACD;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,+BAAQ;;;ACvCf,IAAOA,gCAAQ;","names":["FieldValidationError_default"]}
@@ -0,0 +1,70 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
4
+
5
+
6
+ var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
7
+
8
+
9
+
10
+ var _chunk7BLVIVDUcjs = require('./chunk-7BLVIVDU.cjs');
11
+
12
+ // src/TextArea/TextArea.tsx
13
+ var _input = require('@heroui/input');
14
+ var _pixelutils = require('@fuf-stack/pixel-utils');
15
+ var _jsxruntime = require('react/jsx-runtime');
16
+ var TextArea = ({
17
+ children = null,
18
+ className = void 0,
19
+ disabled = false,
20
+ label = void 0,
21
+ name,
22
+ placeholder = " ",
23
+ testId: _testId = void 0
24
+ }) => {
25
+ var _a;
26
+ const { control, debugMode, getFieldState } = _chunk7BLVIVDUcjs.useFormContext.call(void 0, );
27
+ const { error, invalid, required, testId } = getFieldState(name, _testId);
28
+ const { field } = _chunk7BLVIVDUcjs.useController.call(void 0, { control, name, disabled });
29
+ const { disabled: isDisabled, onChange, onBlur, value = "", ref } = field;
30
+ const showTestIdCopyButton = debugMode === "debug-testids";
31
+ const showLabel = label || showTestIdCopyButton;
32
+ const displayValue = (_a = value == null ? void 0 : value.toString()) != null ? _a : "";
33
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
34
+ _input.Textarea,
35
+ {
36
+ className: _pixelutils.cn.call(void 0, className),
37
+ classNames: {
38
+ inputWrapper: "group-data-[focus=true]:border-focus"
39
+ },
40
+ "data-testid": testId,
41
+ errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGNYQC5IJcjs.FieldValidationError_default, { error, testId }),
42
+ isDisabled,
43
+ isRequired: required,
44
+ isInvalid: invalid,
45
+ label: showLabel && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
46
+ label,
47
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default, { testId })
48
+ ] }),
49
+ labelPlacement: "outside",
50
+ placeholder,
51
+ name,
52
+ value: displayValue,
53
+ onChange,
54
+ onBlur,
55
+ ref,
56
+ variant: "bordered",
57
+ children
58
+ }
59
+ );
60
+ };
61
+ var TextArea_default = TextArea;
62
+
63
+ // src/TextArea/index.ts
64
+ var TextArea_default2 = TextArea_default;
65
+
66
+
67
+
68
+
69
+ exports.TextArea_default = TextArea_default; exports.TextArea_default2 = TextArea_default2;
70
+ //# sourceMappingURL=chunk-UU7SXXNI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-UU7SXXNI.cjs","../src/TextArea/TextArea.tsx","../src/TextArea/index.ts"],"names":["TextArea_default"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACTA,sCAAyC;AAEzC,oDAAmB;AA8EF,+CAAA;AApDjB,IAAM,SAAA,EAAW,CAAC;AAAA,EAChB,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY,KAAA,CAAA;AAAA,EACZ,SAAA,EAAW,KAAA;AAAA,EACX,MAAA,EAAQ,KAAA,CAAA;AAAA,EACR,IAAA;AAAA,EACA,YAAA,EAAc,GAAA;AAAA,EACd,MAAA,EAAQ,QAAA,EAAU,KAAA;AACpB,CAAA,EAAA,GAAqB;AAtCrB,EAAA,IAAA,EAAA;AAuCE,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAc,EAAA,EAAI,8CAAA,CAAe;AAC7D,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,OAAO,EAAA,EAAI,aAAA,CAAc,IAAA,EAAM,OAAO,CAAA;AAExE,EAAA,MAAM,EAAE,MAAM,EAAA,EAAI,6CAAA,EAAgB,OAAA,EAAS,IAAA,EAAM,SAAS,CAAC,CAAA;AAC3D,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,IAAI,EAAA,EAAI,KAAA;AAEpE,EAAA,MAAM,qBAAA,EAAuB,UAAA,IAAc,eAAA;AAC3C,EAAA,MAAM,UAAA,EAAY,MAAA,GAAS,oBAAA;AA0B3B,EAAA,MAAM,aAAA,EAAA,CAAe,GAAA,EAAA,MAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,KAAA,CAAO,QAAA,CAAA,CAAA,EAAA,GAAP,KAAA,EAAA,GAAA,EAAqB,EAAA;AAE1C,EAAA,uBACE,6BAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,4BAAA,SAAY,CAAA;AAAA,MACvB,UAAA,EAAY;AAAA,QACV,YAAA,EAAc;AAAA,MAChB,CAAA;AAAA,MACA,aAAA,EAAa,MAAA;AAAA,MACb,YAAA,EACE,MAAA,mBAAS,6BAAA,8CAAC,EAAA,EAAqB,KAAA,EAAc,OAAA,CAAgB,CAAA;AAAA,MAE/D,UAAA;AAAA,MACA,UAAA,EAAY,QAAA;AAAA,MACZ,SAAA,EAAW,OAAA;AAAA,MACX,KAAA,EACE,UAAA,mBACE,8BAAA,oBAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QACA,qBAAA,mBAAwB,6BAAA,+CAAC,EAAA,EAAsB,OAAA,CAAgB;AAAA,MAAA,EAAA,CAClE,CAAA;AAAA,MAGJ,cAAA,EAAe,SAAA;AAAA,MACf,WAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,YAAA;AAAA,MACP,QAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,OAAA,EAAQ,UAAA;AAAA,MAEP;AAAA,IAAA;AAAA,EACH,CAAA;AAEJ,CAAA;AAEA,IAAO,iBAAA,EAAQ,QAAA;ADhDf;AACA;AExDA,IAAOA,kBAAAA,EAAQ,gBAAA;AF0Df;AACA;AACE;AACA;AACF,2FAAC","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-UU7SXXNI.cjs","sourcesContent":[null,"import type { ReactNode } from 'react';\n\nimport { Textarea as HeroTextArea } from '@heroui/input';\n\nimport { cn } from '@fuf-stack/pixel-utils';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport interface TextAreaProps {\n /** Child components. The content of the textarea. */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** Determines if the TextArea is disabled or not. */\n disabled?: boolean;\n /** Label displayed above the TextArea. */\n label?: ReactNode;\n /** Name the TextArea is registered at in HTML forms (react-hook-form). */\n name: string;\n /** placeholder for the textArea content. */\n placeholder?: string;\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * TextArea component based on [HeroUI TextArea](https://www.heroui.com//docs/components/textarea)\n */\nconst TextArea = ({\n children = null,\n className = undefined,\n disabled = false,\n label = undefined,\n name,\n placeholder = ' ',\n testId: _testId = undefined,\n}: TextAreaProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const { field } = useController({ control, name, disabled });\n const { disabled: isDisabled, onChange, onBlur, value = '', ref } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n /**\n * Ensures the textarea always has a defined string value to prevent uncontrolled to\n * controlled component warnings:\n *\n * 1. Warning Prevention:\n * - Sets default value to '' in field destructuring\n * - Guarantees the value prop is never undefined/null\n * - Prevents React warning: \"A component is changing from uncontrolled to controlled\"\n *\n * 2. Value Handling:\n * - Converts undefined/null to empty string\n * - Converts non-string values to strings\n * - Maintains existing string values\n *\n * Examples:\n * - undefined → \"\" (prevents uncontrolled warning)\n * - null → \"\" (prevents uncontrolled warning)\n * - \"hello\" → \"hello\" (maintains string value)\n * - 123 → \"123\" (converts to string)\n *\n * Without this handling, the textarea could switch between controlled/uncontrolled\n * states when the form value changes from undefined to defined, causing React warnings\n * and potential rendering issues.\n */\n const displayValue = value?.toString() ?? '';\n\n return (\n <HeroTextArea\n className={cn(className)}\n classNames={{\n inputWrapper: 'group-data-[focus=true]:border-focus',\n }}\n data-testid={testId}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n isDisabled={isDisabled}\n isRequired={required}\n isInvalid={invalid}\n label={\n showLabel && (\n <>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </>\n )\n }\n labelPlacement=\"outside\"\n placeholder={placeholder}\n name={name}\n value={displayValue}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n variant=\"bordered\"\n >\n {children}\n </HeroTextArea>\n );\n};\n\nexport default TextArea;\n","import TextArea from './TextArea';\n\nexport type { TextAreaProps } from './TextArea';\n\nexport { TextArea };\n\nexport default TextArea;\n"]}
@@ -0,0 +1,145 @@
1
+ import {
2
+ FieldValidationError_default
3
+ } from "./chunk-UTFZRBBS.js";
4
+ import {
5
+ FieldCopyTestIdButton_default
6
+ } from "./chunk-BQGN3JTU.js";
7
+ import {
8
+ useController,
9
+ useFormContext
10
+ } from "./chunk-CN5XEGV4.js";
11
+ import {
12
+ __spreadProps,
13
+ __spreadValues
14
+ } from "./chunk-K2V4ULA2.js";
15
+
16
+ // src/CheckboxGroup/CheckboxGroup.tsx
17
+ import { Checkbox, CheckboxGroup as HeroCheckboxGroup } from "@heroui/checkbox";
18
+ import { slugify, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ var checkboxGroupVariants = tv({
21
+ slots: {
22
+ base: "group",
23
+ // Needs group for group-data condition
24
+ errorMessage: "text-tiny",
25
+ itemBase: "",
26
+ itemIcon: "",
27
+ itemLabel: "text-sm",
28
+ itemWrapper: "",
29
+ // see HeroUI styles for group-data condition,
30
+ // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
31
+ label: "text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:!text-danger",
32
+ wrapper: ""
33
+ }
34
+ });
35
+ var CheckboxGroup = ({
36
+ className = void 0,
37
+ inline = false,
38
+ label = void 0,
39
+ options,
40
+ disabled = false,
41
+ name,
42
+ testId: _testId = void 0
43
+ }) => {
44
+ const { control, debugMode, getFieldState } = useFormContext();
45
+ const {
46
+ error: _error,
47
+ invalid,
48
+ required,
49
+ testId
50
+ } = getFieldState(name, _testId);
51
+ const { field } = useController({ control, name, disabled });
52
+ const { onChange, value = [], ref, onBlur } = field;
53
+ const showTestIdCopyButton = debugMode === "debug-testids";
54
+ const showLabel = label || showTestIdCopyButton;
55
+ const variants = checkboxGroupVariants();
56
+ const classNames = variantsToClassNames(variants, className, "base");
57
+ const itemClassName = {
58
+ base: classNames.itemBase,
59
+ wrapper: classNames.itemWrapper,
60
+ icon: classNames.itemIcon,
61
+ label: classNames.itemLabel
62
+ };
63
+ const itemGroupClassName = {
64
+ base: classNames.base,
65
+ wrapper: classNames.wrapper,
66
+ label: classNames.label
67
+ };
68
+ const errorFlat = _error && Object.values(
69
+ _error
70
+ ).flat() || [];
71
+ const getCheckboxValue = (inputValue) => {
72
+ if (Array.isArray(inputValue)) {
73
+ return inputValue;
74
+ }
75
+ if (inputValue) {
76
+ return [inputValue];
77
+ }
78
+ return [];
79
+ };
80
+ const singleCheckboxProps = {
81
+ value: getCheckboxValue(value),
82
+ onChange: (newValue) => onChange(newValue && newValue[0])
83
+ };
84
+ const multipleCheckboxProps = {
85
+ onChange,
86
+ value: getCheckboxValue(value)
87
+ };
88
+ const checkboxGroupProps = options.length === 1 ? singleCheckboxProps : multipleCheckboxProps;
89
+ return /* @__PURE__ */ jsx(
90
+ HeroCheckboxGroup,
91
+ __spreadProps(__spreadValues({
92
+ name,
93
+ classNames: itemGroupClassName,
94
+ "data-testid": testId,
95
+ "data-invalid": invalid,
96
+ errorMessage: errorFlat.length && /* @__PURE__ */ jsx(
97
+ FieldValidationError_default,
98
+ {
99
+ className: classNames.errorMessage,
100
+ error: errorFlat,
101
+ testId
102
+ }
103
+ ),
104
+ isDisabled: disabled,
105
+ isInvalid: invalid,
106
+ isRequired: required,
107
+ label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
108
+ /* @__PURE__ */ jsxs("label", { children: [
109
+ label,
110
+ showTestIdCopyButton && /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
111
+ ] }),
112
+ onBlur,
113
+ orientation: inline ? "horizontal" : "vertical",
114
+ ref
115
+ }, checkboxGroupProps), {
116
+ children: options == null ? void 0 : options.map((option) => {
117
+ const optionTestId = slugify(
118
+ `${testId}_option_${(option == null ? void 0 : option.testId) || (option == null ? void 0 : option.value)}`
119
+ );
120
+ return /* @__PURE__ */ jsx(
121
+ Checkbox,
122
+ {
123
+ "data-invalid": invalid,
124
+ classNames: itemClassName,
125
+ isDisabled: disabled || option.disabled,
126
+ value: option == null ? void 0 : option.value,
127
+ "data-testid": optionTestId,
128
+ children: option == null ? void 0 : option.label
129
+ },
130
+ `index_${option.value}`
131
+ );
132
+ })
133
+ })
134
+ );
135
+ };
136
+ var CheckboxGroup_default = CheckboxGroup;
137
+
138
+ // src/CheckboxGroup/index.ts
139
+ var CheckboxGroup_default2 = CheckboxGroup_default;
140
+
141
+ export {
142
+ CheckboxGroup_default,
143
+ CheckboxGroup_default2
144
+ };
145
+ //# sourceMappingURL=chunk-W2K5WX3O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/CheckboxGroup/CheckboxGroup.tsx","../src/CheckboxGroup/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { FieldError } from 'react-hook-form';\n\nimport { Checkbox, CheckboxGroup as HeroCheckboxGroup } from '@heroui/checkbox';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const checkboxGroupVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\n errorMessage: 'text-tiny',\n itemBase: '',\n itemIcon: '',\n itemLabel: 'text-sm',\n itemWrapper: '',\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-sm text-foreground subpixel-antialiased group-data-[invalid=true]:!text-danger',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof checkboxGroupVariants>;\ntype ClassName = TVClassName<typeof checkboxGroupVariants>;\n\nexport type CheckboxGroupOption = {\n /** option label */\n label?: React.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 CheckboxGroupProps extends VariantProps {\n /** CSS class name. ClassName: string | { buttons?: string | { base?: string; active?: string }; base?: string;} */\n className?: ClassName;\n /** determines orientation of the boxes. */\n inline?: boolean;\n /** label displayed above the Checkboxes */\n label?: React.ReactNode;\n /** Name the Field is registered on the form. */\n name: string;\n /** Checkboxes that should be displayed. */\n options: CheckboxGroupOption[];\n /** sets all buttons disabled */\n disabled?: boolean;\n /** id for internal testing. */\n testId?: string;\n}\n\n/**\n * CheckboxGroup component based on [HeroUI CheckboxGroup](https://www.heroui.com//docs/components/checkbox-group)\n */\nconst CheckboxGroup = ({\n className = undefined,\n inline = false,\n label = undefined,\n options,\n disabled = false,\n name,\n testId: _testId = undefined,\n}: CheckboxGroupProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const {\n error: _error,\n invalid,\n required,\n testId,\n } = getFieldState(name, _testId);\n\n const { field } = useController({ control, name, disabled });\n const { onChange, value = [], ref, onBlur } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = checkboxGroupVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const itemClassName = {\n base: classNames.itemBase,\n wrapper: classNames.itemWrapper,\n icon: classNames.itemIcon,\n label: classNames.itemLabel,\n };\n const itemGroupClassName = {\n base: classNames.base,\n wrapper: classNames.wrapper,\n label: classNames.label,\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\n /**\n * Handles the checkbox group 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;\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[]) => onChange(newValue && newValue[0]),\n };\n\n const multipleCheckboxProps = {\n onChange,\n value: getCheckboxValue(value),\n };\n\n const checkboxGroupProps =\n options.length === 1 ? singleCheckboxProps : multipleCheckboxProps;\n\n return (\n <HeroCheckboxGroup\n name={name}\n classNames={itemGroupClassName}\n data-testid={testId}\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 errorMessage={\n errorFlat.length && (\n <FieldValidationError\n className={classNames.errorMessage}\n error={errorFlat}\n testId={testId}\n />\n )\n }\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={\n showLabel && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </label>\n )\n }\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...checkboxGroupProps}\n >\n {options?.map((option) => {\n const optionTestId = slugify(\n `${testId}_option_${option?.testId || option?.value}`,\n );\n return (\n <Checkbox\n data-invalid={invalid}\n classNames={itemClassName}\n key={`index_${option.value}`}\n isDisabled={disabled || option.disabled}\n value={option?.value}\n data-testid={optionTestId}\n >\n {option?.label}\n </Checkbox>\n );\n })}\n </HeroCheckboxGroup>\n );\n};\n\nexport default CheckboxGroup;\n","import CheckboxGroup from './CheckboxGroup';\n\nexport type { CheckboxGroupProps, CheckboxGroupOption } from './CheckboxGroup';\n\nexport { CheckboxGroup };\n\nexport default CheckboxGroup;\n"],"mappings":"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","names":["CheckboxGroup_default"]}
@@ -0,0 +1,70 @@
1
+ import {
2
+ FieldValidationError_default
3
+ } from "./chunk-UTFZRBBS.js";
4
+ import {
5
+ FieldCopyTestIdButton_default
6
+ } from "./chunk-BQGN3JTU.js";
7
+ import {
8
+ useController,
9
+ useFormContext
10
+ } from "./chunk-CN5XEGV4.js";
11
+
12
+ // src/TextArea/TextArea.tsx
13
+ import { Textarea as HeroTextArea } from "@heroui/input";
14
+ import { cn } from "@fuf-stack/pixel-utils";
15
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
+ var TextArea = ({
17
+ children = null,
18
+ className = void 0,
19
+ disabled = false,
20
+ label = void 0,
21
+ name,
22
+ placeholder = " ",
23
+ testId: _testId = void 0
24
+ }) => {
25
+ var _a;
26
+ const { control, debugMode, getFieldState } = useFormContext();
27
+ const { error, invalid, required, testId } = getFieldState(name, _testId);
28
+ const { field } = useController({ control, name, disabled });
29
+ const { disabled: isDisabled, onChange, onBlur, value = "", ref } = field;
30
+ const showTestIdCopyButton = debugMode === "debug-testids";
31
+ const showLabel = label || showTestIdCopyButton;
32
+ const displayValue = (_a = value == null ? void 0 : value.toString()) != null ? _a : "";
33
+ return /* @__PURE__ */ jsx(
34
+ HeroTextArea,
35
+ {
36
+ className: cn(className),
37
+ classNames: {
38
+ inputWrapper: "group-data-[focus=true]:border-focus"
39
+ },
40
+ "data-testid": testId,
41
+ errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error, testId }),
42
+ isDisabled,
43
+ isRequired: required,
44
+ isInvalid: invalid,
45
+ label: showLabel && /* @__PURE__ */ jsxs(Fragment, { children: [
46
+ label,
47
+ showTestIdCopyButton && /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
48
+ ] }),
49
+ labelPlacement: "outside",
50
+ placeholder,
51
+ name,
52
+ value: displayValue,
53
+ onChange,
54
+ onBlur,
55
+ ref,
56
+ variant: "bordered",
57
+ children
58
+ }
59
+ );
60
+ };
61
+ var TextArea_default = TextArea;
62
+
63
+ // src/TextArea/index.ts
64
+ var TextArea_default2 = TextArea_default;
65
+
66
+ export {
67
+ TextArea_default,
68
+ TextArea_default2
69
+ };
70
+ //# sourceMappingURL=chunk-Y4YQH2QB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/TextArea/TextArea.tsx","../src/TextArea/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Textarea as HeroTextArea } from '@heroui/input';\n\nimport { cn } from '@fuf-stack/pixel-utils';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport interface TextAreaProps {\n /** Child components. The content of the textarea. */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** Determines if the TextArea is disabled or not. */\n disabled?: boolean;\n /** Label displayed above the TextArea. */\n label?: ReactNode;\n /** Name the TextArea is registered at in HTML forms (react-hook-form). */\n name: string;\n /** placeholder for the textArea content. */\n placeholder?: string;\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * TextArea component based on [HeroUI TextArea](https://www.heroui.com//docs/components/textarea)\n */\nconst TextArea = ({\n children = null,\n className = undefined,\n disabled = false,\n label = undefined,\n name,\n placeholder = ' ',\n testId: _testId = undefined,\n}: TextAreaProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const { field } = useController({ control, name, disabled });\n const { disabled: isDisabled, onChange, onBlur, value = '', ref } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n /**\n * Ensures the textarea always has a defined string value to prevent uncontrolled to\n * controlled component warnings:\n *\n * 1. Warning Prevention:\n * - Sets default value to '' in field destructuring\n * - Guarantees the value prop is never undefined/null\n * - Prevents React warning: \"A component is changing from uncontrolled to controlled\"\n *\n * 2. Value Handling:\n * - Converts undefined/null to empty string\n * - Converts non-string values to strings\n * - Maintains existing string values\n *\n * Examples:\n * - undefined → \"\" (prevents uncontrolled warning)\n * - null → \"\" (prevents uncontrolled warning)\n * - \"hello\" → \"hello\" (maintains string value)\n * - 123 → \"123\" (converts to string)\n *\n * Without this handling, the textarea could switch between controlled/uncontrolled\n * states when the form value changes from undefined to defined, causing React warnings\n * and potential rendering issues.\n */\n const displayValue = value?.toString() ?? '';\n\n return (\n <HeroTextArea\n className={cn(className)}\n classNames={{\n inputWrapper: 'group-data-[focus=true]:border-focus',\n }}\n data-testid={testId}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n isDisabled={isDisabled}\n isRequired={required}\n isInvalid={invalid}\n label={\n showLabel && (\n <>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </>\n )\n }\n labelPlacement=\"outside\"\n placeholder={placeholder}\n name={name}\n value={displayValue}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n variant=\"bordered\"\n >\n {children}\n </HeroTextArea>\n );\n};\n\nexport default TextArea;\n","import TextArea from './TextArea';\n\nexport type { TextAreaProps } from './TextArea';\n\nexport { TextArea };\n\nexport default TextArea;\n"],"mappings":";;;;;;;;;;;;AAEA,SAAS,YAAY,oBAAoB;AAEzC,SAAS,UAAU;AA8EF,SAOP,UAPO,KAOP,YAPO;AApDjB,IAAM,WAAW,CAAC;AAAA,EAChB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,QAAQ,UAAU;AACpB,MAAqB;AAtCrB;AAuCE,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI,eAAe;AAC7D,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,EAAE,MAAM,IAAI,cAAc,EAAE,SAAS,MAAM,SAAS,CAAC;AAC3D,QAAM,EAAE,UAAU,YAAY,UAAU,QAAQ,QAAQ,IAAI,IAAI,IAAI;AAEpE,QAAM,uBAAuB,cAAc;AAC3C,QAAM,YAAY,SAAS;AA0B3B,QAAM,gBAAe,oCAAO,eAAP,YAAqB;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,SAAS;AAAA,MACvB,YAAY;AAAA,QACV,cAAc;AAAA,MAChB;AAAA,MACA,eAAa;AAAA,MACb,cACE,SAAS,oBAAC,gCAAqB,OAAc,QAAgB;AAAA,MAE/D;AAAA,MACA,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,OACE,aACE,iCACG;AAAA;AAAA,QACA,wBAAwB,oBAAC,iCAAsB,QAAgB;AAAA,SAClE;AAAA,MAGJ,gBAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MAEP;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,mBAAQ;;;ACvGf,IAAOA,oBAAQ;","names":["TextArea_default"]}