@bigbinary/neeto-atoms 1.0.103 → 1.0.104

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 (254) hide show
  1. package/dist/{Avatar-ChF94Ken.js → Avatar-Dg5-X_dH.js} +8 -2
  2. package/dist/Avatar-Dg5-X_dH.js.map +1 -0
  3. package/dist/{Checkbox-DiAngQvO.js → Checkbox-BalUzegZ.js} +26 -7
  4. package/dist/Checkbox-BalUzegZ.js.map +1 -0
  5. package/dist/{DataTable-CwWARMEv.js → DataTable-mxDU-16D.js} +75 -55
  6. package/dist/DataTable-mxDU-16D.js.map +1 -0
  7. package/dist/{DatePicker-Uf_h3ohA.js → DatePicker-BoXx1Wve.js} +13 -4
  8. package/dist/DatePicker-BoXx1Wve.js.map +1 -0
  9. package/dist/{Dialog-D8C0-nEo.js → Dialog-Yw34WDqY.js} +2 -2
  10. package/dist/Dialog-Yw34WDqY.js.map +1 -0
  11. package/dist/{HelpIcon-CbnRiSjn.js → HelpIcon-xh488VXs.js} +11 -3
  12. package/dist/HelpIcon-xh488VXs.js.map +1 -0
  13. package/dist/{Input-CuIurquS.js → Input-W8foyOcS.js} +35 -7
  14. package/dist/Input-W8foyOcS.js.map +1 -0
  15. package/dist/{Label-DjOaTM4Q.js → Label-B-R4PNNq.js} +2 -2
  16. package/dist/{Label-DjOaTM4Q.js.map → Label-B-R4PNNq.js.map} +1 -1
  17. package/dist/{MultiEmailInput-BB334s4C.js → MultiEmailInput-Bzd2dPFC.js} +68 -25
  18. package/dist/MultiEmailInput-Bzd2dPFC.js.map +1 -0
  19. package/dist/{RadioGroup-CpgVdPzz.js → RadioGroup-CBXByAMW.js} +63 -34
  20. package/dist/RadioGroup-CBXByAMW.js.map +1 -0
  21. package/dist/{Select-YWCfd2p1.js → Select-N5Ten-tn.js} +3 -10
  22. package/dist/Select-N5Ten-tn.js.map +1 -0
  23. package/dist/{Slider-Bokg8-oi.js → Slider-CxQdlyHZ.js} +32 -7
  24. package/dist/Slider-CxQdlyHZ.js.map +1 -0
  25. package/dist/{Stepper-DO7EBWYL.js → Stepper-GK8gDn-s.js} +2 -1
  26. package/dist/Stepper-GK8gDn-s.js.map +1 -0
  27. package/dist/{Switch-Am2l2UdV.js → Switch-C9fqpoNR.js} +16 -2
  28. package/dist/Switch-C9fqpoNR.js.map +1 -0
  29. package/dist/{Tabs-ModAabFc.js → Tabs-DaXiF_67.js} +3 -3
  30. package/dist/Tabs-DaXiF_67.js.map +1 -0
  31. package/dist/{Textarea-CMGZZ4rL.js → Textarea-CUe09-sr.js} +34 -7
  32. package/dist/Textarea-CUe09-sr.js.map +1 -0
  33. package/dist/{TimePicker-Ca7iF-a_.js → TimePicker-BixF9wdU.js} +21 -4
  34. package/dist/TimePicker-BixF9wdU.js.map +1 -0
  35. package/dist/{Toastr-Cka6pudu.js → Toastr-CXqmoXjn.js} +9 -2
  36. package/dist/Toastr-CXqmoXjn.js.map +1 -0
  37. package/dist/{TreeSelect-wYDOZ5yD.js → TreeSelect-DMbr7J2H.js} +2 -1
  38. package/dist/TreeSelect-DMbr7J2H.js.map +1 -0
  39. package/dist/cjs/{Avatar-DGuMcBnh.js → Avatar-D2k6WnzD.js} +8 -2
  40. package/dist/cjs/Avatar-D2k6WnzD.js.map +1 -0
  41. package/dist/cjs/{Checkbox-7lX2aMKA.js → Checkbox-83g1FDsc.js} +26 -7
  42. package/dist/cjs/Checkbox-83g1FDsc.js.map +1 -0
  43. package/dist/cjs/{DataTable-ChgPVrRB.js → DataTable-OtA15NKE.js} +75 -55
  44. package/dist/cjs/DataTable-OtA15NKE.js.map +1 -0
  45. package/dist/cjs/{DatePicker-Czp9QLy0.js → DatePicker-DtmJ-VkV.js} +13 -4
  46. package/dist/cjs/DatePicker-DtmJ-VkV.js.map +1 -0
  47. package/dist/cjs/{Dialog-DNv7j7ts.js → Dialog-ZUHGaoAE.js} +2 -2
  48. package/dist/cjs/Dialog-ZUHGaoAE.js.map +1 -0
  49. package/dist/cjs/{HelpIcon-QpZY6Zmc.js → HelpIcon-BF1ePUQf.js} +11 -3
  50. package/dist/cjs/HelpIcon-BF1ePUQf.js.map +1 -0
  51. package/dist/cjs/{Input-lWo0YoZ9.js → Input-DIq7T9D0.js} +35 -7
  52. package/dist/cjs/Input-DIq7T9D0.js.map +1 -0
  53. package/dist/cjs/{Label-D8RFE9hd.js → Label-CpsdGBV8.js} +2 -2
  54. package/dist/cjs/{Label-D8RFE9hd.js.map → Label-CpsdGBV8.js.map} +1 -1
  55. package/dist/cjs/{MultiEmailInput-BlIqzq-o.js → MultiEmailInput-FNRR9b74.js} +68 -25
  56. package/dist/cjs/MultiEmailInput-FNRR9b74.js.map +1 -0
  57. package/dist/cjs/{RadioGroup-DCEw94Dk.js → RadioGroup-B-u8rdbf.js} +63 -34
  58. package/dist/cjs/RadioGroup-B-u8rdbf.js.map +1 -0
  59. package/dist/cjs/{Select-Bs5Fp3wj.js → Select-CGG3J9NS.js} +7 -14
  60. package/dist/cjs/Select-CGG3J9NS.js.map +1 -0
  61. package/dist/cjs/{Slider-CRmd_VMs.js → Slider-DIUSlx_m.js} +32 -7
  62. package/dist/cjs/Slider-DIUSlx_m.js.map +1 -0
  63. package/dist/cjs/{Stepper-BtZG_XmC.js → Stepper-BZBdL6JW.js} +2 -1
  64. package/dist/cjs/Stepper-BZBdL6JW.js.map +1 -0
  65. package/dist/cjs/{Switch-DY7bdiEz.js → Switch-BbRK3HUZ.js} +16 -2
  66. package/dist/cjs/Switch-BbRK3HUZ.js.map +1 -0
  67. package/dist/cjs/{Tabs-CA0QAWp0.js → Tabs-BQl63Ewe.js} +3 -3
  68. package/dist/cjs/Tabs-BQl63Ewe.js.map +1 -0
  69. package/dist/cjs/{Textarea-Cw7Uea82.js → Textarea-bxleSw86.js} +34 -7
  70. package/dist/cjs/Textarea-bxleSw86.js.map +1 -0
  71. package/dist/cjs/{TimePicker-DW7OM3IE.js → TimePicker-lJ2985nh.js} +21 -4
  72. package/dist/cjs/TimePicker-lJ2985nh.js.map +1 -0
  73. package/dist/cjs/{Toastr-E0yLh_MW.js → Toastr-9DXjD-Mq.js} +9 -2
  74. package/dist/cjs/Toastr-9DXjD-Mq.js.map +1 -0
  75. package/dist/cjs/{TreeSelect-C9BSJt1d.js → TreeSelect-3APPRsqr.js} +2 -1
  76. package/dist/cjs/TreeSelect-3APPRsqr.js.map +1 -0
  77. package/dist/cjs/components/Avatar.js +1 -1
  78. package/dist/cjs/components/Checkbox.js +4 -2
  79. package/dist/cjs/components/Checkbox.js.map +1 -1
  80. package/dist/cjs/components/DataTable.js +2 -1
  81. package/dist/cjs/components/DataTable.js.map +1 -1
  82. package/dist/cjs/components/DatePicker.js +4 -2
  83. package/dist/cjs/components/DatePicker.js.map +1 -1
  84. package/dist/cjs/components/Dialog.js +1 -1
  85. package/dist/cjs/components/DropdownMenu.js +3 -1
  86. package/dist/cjs/components/DropdownMenu.js.map +1 -1
  87. package/dist/cjs/components/Input.js +4 -2
  88. package/dist/cjs/components/Input.js.map +1 -1
  89. package/dist/cjs/components/Label.js +2 -2
  90. package/dist/cjs/components/MultiEmailInput.js +4 -2
  91. package/dist/cjs/components/MultiEmailInput.js.map +1 -1
  92. package/dist/cjs/components/RadioGroup.js +4 -2
  93. package/dist/cjs/components/RadioGroup.js.map +1 -1
  94. package/dist/cjs/components/Select.js +4 -3
  95. package/dist/cjs/components/Select.js.map +1 -1
  96. package/dist/cjs/components/Slider.js +4 -2
  97. package/dist/cjs/components/Slider.js.map +1 -1
  98. package/dist/cjs/components/Stepper.js +1 -1
  99. package/dist/cjs/components/Switch.js +4 -2
  100. package/dist/cjs/components/Switch.js.map +1 -1
  101. package/dist/cjs/components/Tabs.js +2 -2
  102. package/dist/cjs/components/Textarea.js +4 -2
  103. package/dist/cjs/components/Textarea.js.map +1 -1
  104. package/dist/cjs/components/TimePicker.js +4 -2
  105. package/dist/cjs/components/TimePicker.js.map +1 -1
  106. package/dist/cjs/components/Toastr.js +1 -1
  107. package/dist/cjs/components/TreeSelect.js +2 -2
  108. package/dist/cjs/components/index.js +21 -20
  109. package/dist/cjs/components/index.js.map +1 -1
  110. package/dist/cjs/fieldIds-DiVU6GVS.js +14 -0
  111. package/dist/cjs/fieldIds-DiVU6GVS.js.map +1 -0
  112. package/dist/cjs/formik/BlockNavigation.js +1 -1
  113. package/dist/cjs/formik/Checkbox.js +4 -2
  114. package/dist/cjs/formik/Checkbox.js.map +1 -1
  115. package/dist/cjs/formik/Input.js +4 -2
  116. package/dist/cjs/formik/Input.js.map +1 -1
  117. package/dist/cjs/formik/MultiEmailInput.js +4 -2
  118. package/dist/cjs/formik/MultiEmailInput.js.map +1 -1
  119. package/dist/cjs/formik/RadioGroup.js +4 -2
  120. package/dist/cjs/formik/RadioGroup.js.map +1 -1
  121. package/dist/cjs/formik/Select.js +4 -3
  122. package/dist/cjs/formik/Select.js.map +1 -1
  123. package/dist/cjs/formik/Slider.js +4 -2
  124. package/dist/cjs/formik/Slider.js.map +1 -1
  125. package/dist/cjs/formik/Switch.js +4 -2
  126. package/dist/cjs/formik/Switch.js.map +1 -1
  127. package/dist/cjs/formik/Textarea.js +4 -2
  128. package/dist/cjs/formik/Textarea.js.map +1 -1
  129. package/dist/cjs/formik/TreeSelect.js +2 -2
  130. package/dist/cjs/formik/index.js +13 -12
  131. package/dist/cjs/formik/index.js.map +1 -1
  132. package/dist/cjs/hyphenize-BTrVNVv3.js +13 -0
  133. package/dist/cjs/hyphenize-BTrVNVv3.js.map +1 -0
  134. package/dist/cjs/index.js +21 -20
  135. package/dist/cjs/index.js.map +1 -1
  136. package/dist/cjs/primitives/Field.js +1 -1
  137. package/dist/cjs/primitives/index.js +1 -1
  138. package/dist/components/Avatar.js +1 -1
  139. package/dist/components/Checkbox/Checkbox.d.ts +2 -0
  140. package/dist/components/Checkbox.js +4 -2
  141. package/dist/components/Checkbox.js.map +1 -1
  142. package/dist/components/DataTable.js +2 -1
  143. package/dist/components/DataTable.js.map +1 -1
  144. package/dist/components/DatePicker/DatePickerField.d.ts +1 -0
  145. package/dist/components/DatePicker/DatePickerTrigger.d.ts +1 -0
  146. package/dist/components/DatePicker/types.d.ts +2 -0
  147. package/dist/components/DatePicker.js +4 -2
  148. package/dist/components/DatePicker.js.map +1 -1
  149. package/dist/components/Dialog.js +1 -1
  150. package/dist/components/DropdownMenu.js +3 -1
  151. package/dist/components/DropdownMenu.js.map +1 -1
  152. package/dist/components/Input/Input.d.ts +2 -0
  153. package/dist/components/Input.js +4 -2
  154. package/dist/components/Input.js.map +1 -1
  155. package/dist/components/Label.js +2 -2
  156. package/dist/components/MultiEmailInput/types.d.ts +2 -0
  157. package/dist/components/MultiEmailInput.js +4 -2
  158. package/dist/components/MultiEmailInput.js.map +1 -1
  159. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -0
  160. package/dist/components/RadioGroup.js +4 -2
  161. package/dist/components/RadioGroup.js.map +1 -1
  162. package/dist/components/Select/hooks/useMultiSelectState.d.ts +1 -1
  163. package/dist/components/Select/hooks/useSelectState.d.ts +1 -1
  164. package/dist/components/Select.js +4 -3
  165. package/dist/components/Select.js.map +1 -1
  166. package/dist/components/Slider/Slider.d.ts +2 -0
  167. package/dist/components/Slider.js +4 -2
  168. package/dist/components/Slider.js.map +1 -1
  169. package/dist/components/Stepper.js +1 -1
  170. package/dist/components/Switch/Switch.d.ts +2 -0
  171. package/dist/components/Switch.js +4 -2
  172. package/dist/components/Switch.js.map +1 -1
  173. package/dist/components/Tabs.js +2 -2
  174. package/dist/components/Textarea/Textarea.d.ts +2 -0
  175. package/dist/components/Textarea.js +4 -2
  176. package/dist/components/Textarea.js.map +1 -1
  177. package/dist/components/TimePicker/types.d.ts +2 -0
  178. package/dist/components/TimePicker.js +4 -2
  179. package/dist/components/TimePicker.js.map +1 -1
  180. package/dist/components/Toastr.js +1 -1
  181. package/dist/components/TreeSelect.js +2 -2
  182. package/dist/components/index.js +21 -20
  183. package/dist/components/index.js.map +1 -1
  184. package/dist/fieldIds-VpluAAMl.js +11 -0
  185. package/dist/fieldIds-VpluAAMl.js.map +1 -0
  186. package/dist/formik/BlockNavigation.js +1 -1
  187. package/dist/formik/Checkbox.js +4 -2
  188. package/dist/formik/Checkbox.js.map +1 -1
  189. package/dist/formik/Input.js +4 -2
  190. package/dist/formik/Input.js.map +1 -1
  191. package/dist/formik/MultiEmailInput.js +4 -2
  192. package/dist/formik/MultiEmailInput.js.map +1 -1
  193. package/dist/formik/RadioGroup.js +4 -2
  194. package/dist/formik/RadioGroup.js.map +1 -1
  195. package/dist/formik/Select.js +4 -3
  196. package/dist/formik/Select.js.map +1 -1
  197. package/dist/formik/Slider.js +4 -2
  198. package/dist/formik/Slider.js.map +1 -1
  199. package/dist/formik/Switch.js +4 -2
  200. package/dist/formik/Switch.js.map +1 -1
  201. package/dist/formik/Textarea.js +4 -2
  202. package/dist/formik/Textarea.js.map +1 -1
  203. package/dist/formik/TreeSelect.js +2 -2
  204. package/dist/formik/index.js +13 -12
  205. package/dist/formik/index.js.map +1 -1
  206. package/dist/hyphenize-TRhMI0tl.js +11 -0
  207. package/dist/hyphenize-TRhMI0tl.js.map +1 -0
  208. package/dist/index.js +21 -20
  209. package/dist/index.js.map +1 -1
  210. package/dist/primitives/Field.js +1 -1
  211. package/dist/primitives/index.js +1 -1
  212. package/dist/utils/fieldIds.d.ts +1 -1
  213. package/dist/utils/hyphenize.d.ts +1 -1
  214. package/package.json +1 -1
  215. package/dist/Avatar-ChF94Ken.js.map +0 -1
  216. package/dist/Checkbox-DiAngQvO.js.map +0 -1
  217. package/dist/DataTable-CwWARMEv.js.map +0 -1
  218. package/dist/DatePicker-Uf_h3ohA.js.map +0 -1
  219. package/dist/Dialog-D8C0-nEo.js.map +0 -1
  220. package/dist/HelpIcon-CbnRiSjn.js.map +0 -1
  221. package/dist/Input-CuIurquS.js.map +0 -1
  222. package/dist/MultiEmailInput-BB334s4C.js.map +0 -1
  223. package/dist/RadioGroup-CpgVdPzz.js.map +0 -1
  224. package/dist/Select-YWCfd2p1.js.map +0 -1
  225. package/dist/Slider-Bokg8-oi.js.map +0 -1
  226. package/dist/Stepper-DO7EBWYL.js.map +0 -1
  227. package/dist/Switch-Am2l2UdV.js.map +0 -1
  228. package/dist/Tabs-ModAabFc.js.map +0 -1
  229. package/dist/Textarea-CMGZZ4rL.js.map +0 -1
  230. package/dist/TimePicker-Ca7iF-a_.js.map +0 -1
  231. package/dist/Toastr-Cka6pudu.js.map +0 -1
  232. package/dist/TreeSelect-wYDOZ5yD.js.map +0 -1
  233. package/dist/cjs/Avatar-DGuMcBnh.js.map +0 -1
  234. package/dist/cjs/Checkbox-7lX2aMKA.js.map +0 -1
  235. package/dist/cjs/DataTable-ChgPVrRB.js.map +0 -1
  236. package/dist/cjs/DatePicker-Czp9QLy0.js.map +0 -1
  237. package/dist/cjs/Dialog-DNv7j7ts.js.map +0 -1
  238. package/dist/cjs/HelpIcon-QpZY6Zmc.js.map +0 -1
  239. package/dist/cjs/Input-lWo0YoZ9.js.map +0 -1
  240. package/dist/cjs/MultiEmailInput-BlIqzq-o.js.map +0 -1
  241. package/dist/cjs/RadioGroup-DCEw94Dk.js.map +0 -1
  242. package/dist/cjs/Select-Bs5Fp3wj.js.map +0 -1
  243. package/dist/cjs/Slider-CRmd_VMs.js.map +0 -1
  244. package/dist/cjs/Stepper-BtZG_XmC.js.map +0 -1
  245. package/dist/cjs/Switch-DY7bdiEz.js.map +0 -1
  246. package/dist/cjs/Tabs-CA0QAWp0.js.map +0 -1
  247. package/dist/cjs/Textarea-Cw7Uea82.js.map +0 -1
  248. package/dist/cjs/TimePicker-DW7OM3IE.js.map +0 -1
  249. package/dist/cjs/Toastr-E0yLh_MW.js.map +0 -1
  250. package/dist/cjs/TreeSelect-C9BSJt1d.js.map +0 -1
  251. package/dist/cjs/hyphenize-B8IGPzjp.js +0 -8
  252. package/dist/cjs/hyphenize-B8IGPzjp.js.map +0 -1
  253. package/dist/hyphenize-BU4K8zjb.js +0 -6
  254. package/dist/hyphenize-BU4K8zjb.js.map +0 -1
@@ -4,6 +4,8 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var utils = require('./utils-BhM0B89p.js');
6
6
  var primitives_Field = require('./primitives/Field.js');
7
+ var fieldIds = require('./fieldIds-DiVU6GVS.js');
8
+ var hyphenize = require('./hyphenize-BTrVNVv3.js');
7
9
  var withIconSize = require('./withIconSize-C6LP0R7o.js');
8
10
  var x = require('./x-Brw3FJst.js');
9
11
 
@@ -151,9 +153,11 @@ const MultiEmailInput = React.forwardRef((props, ref) => {
151
153
  prefix,
152
154
  suffix,
153
155
  labelProps,
154
- className
156
+ className,
157
+ dataTestId
155
158
  } = props;
156
159
  const id = React.useId();
160
+ const testIdPrefix = fieldIds.buildTestIdPrefix(dataTestId, label);
157
161
  const {
158
162
  isCounterVisible,
159
163
  validCount,
@@ -177,19 +181,35 @@ const MultiEmailInput = React.forwardRef((props, ref) => {
177
181
  "data-testid": "email-input-wrapper",
178
182
  children: [
179
183
  (label || isCounterVisible) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
180
- label && /* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldLabel, { htmlFor: id, ...labelProps, children: [
181
- label,
182
- required && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: " *" })
183
- ] }),
184
- isCounterVisible && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
185
- validCount,
186
- " ",
187
- typeof counter === "object" && counter?.label ? counter.label : pluralizeEmail(validCount)
188
- ] })
184
+ label && /* @__PURE__ */ jsxRuntime.jsxs(
185
+ primitives_Field.FieldLabel,
186
+ {
187
+ htmlFor: id,
188
+ "data-testid": `${testIdPrefix}-input-label`,
189
+ ...labelProps,
190
+ children: [
191
+ label,
192
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: " *" })
193
+ ]
194
+ }
195
+ ),
196
+ isCounterVisible && /* @__PURE__ */ jsxRuntime.jsxs(
197
+ "span",
198
+ {
199
+ className: "text-xs text-muted-foreground",
200
+ "data-testid": `${testIdPrefix}-email-counter`,
201
+ children: [
202
+ validCount,
203
+ " ",
204
+ typeof counter === "object" && counter?.label ? counter.label : pluralizeEmail(validCount)
205
+ ]
206
+ }
207
+ )
189
208
  ] }),
190
209
  /* @__PURE__ */ jsxRuntime.jsxs(
191
210
  "div",
192
211
  {
212
+ "data-testid": "multi-email-select-container",
193
213
  className: utils.cn(
194
214
  CHIPS_CONTAINER,
195
215
  !!error && CHIPS_ERROR,
@@ -209,6 +229,7 @@ const MultiEmailInput = React.forwardRef((props, ref) => {
209
229
  {
210
230
  type: "button",
211
231
  tabIndex: -1,
232
+ "data-testid": `${hyphenize.hyphenize(email.label)}-remove-icon`,
212
233
  className: "-ms-0.5 rounded-xs opacity-50 hover:opacity-100",
213
234
  onMouseDown: (e) => e.preventDefault(),
214
235
  onClick: () => handleChipRemove(email.value),
@@ -231,6 +252,7 @@ const MultiEmailInput = React.forwardRef((props, ref) => {
231
252
  ref,
232
253
  id,
233
254
  type: "text",
255
+ "data-testid": "email-select-input-field",
234
256
  value: inputValue,
235
257
  onChange: (e) => setInputValue(e.target.value),
236
258
  onKeyDown: handleKeyDown,
@@ -247,20 +269,41 @@ const MultiEmailInput = React.forwardRef((props, ref) => {
247
269
  }
248
270
  ),
249
271
  /* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldContent, { children: [
250
- !!error && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[0.8rem] text-destructive", children: [
251
- error,
252
- isFilterLinkVisible && /* @__PURE__ */ jsxRuntime.jsx(
253
- "button",
254
- {
255
- type: "button",
256
- className: "ml-1 cursor-pointer font-semibold underline",
257
- onClick: handleFilterInvalidEmails,
258
- children: filterInvalidEmails?.label ?? "Click here to remove invalid emails."
259
- }
260
- )
261
- ] }),
262
- !!helpText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.8rem] text-muted-foreground", children: helpText }),
263
- duplicateEmails.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.8rem] text-amber-600 dark:text-amber-400", children: formatDuplicateWarning(duplicateEmails) })
272
+ !!error && /* @__PURE__ */ jsxRuntime.jsxs(
273
+ "p",
274
+ {
275
+ className: "text-[0.8rem] text-destructive",
276
+ "data-testid": `${testIdPrefix}-input-error`,
277
+ children: [
278
+ error,
279
+ isFilterLinkVisible && /* @__PURE__ */ jsxRuntime.jsx(
280
+ "button",
281
+ {
282
+ type: "button",
283
+ className: "ml-1 cursor-pointer font-semibold underline",
284
+ onClick: handleFilterInvalidEmails,
285
+ children: filterInvalidEmails?.label ?? "Click here to remove invalid emails."
286
+ }
287
+ )
288
+ ]
289
+ }
290
+ ),
291
+ !!helpText && /* @__PURE__ */ jsxRuntime.jsx(
292
+ "p",
293
+ {
294
+ className: "text-[0.8rem] text-muted-foreground",
295
+ "data-testid": `${testIdPrefix}-input-help`,
296
+ children: helpText
297
+ }
298
+ ),
299
+ duplicateEmails.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
300
+ "p",
301
+ {
302
+ className: "text-[0.8rem] text-amber-600 dark:text-amber-400",
303
+ "data-testid": `${testIdPrefix}-duplicate-emails-warning`,
304
+ children: formatDuplicateWarning(duplicateEmails)
305
+ }
306
+ )
264
307
  ] })
265
308
  ]
266
309
  }
@@ -269,4 +312,4 @@ const MultiEmailInput = React.forwardRef((props, ref) => {
269
312
  MultiEmailInput.displayName = "MultiEmailInput";
270
313
 
271
314
  exports.MultiEmailInput = MultiEmailInput;
272
- //# sourceMappingURL=MultiEmailInput-BlIqzq-o.js.map
315
+ //# sourceMappingURL=MultiEmailInput-FNRR9b74.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiEmailInput-FNRR9b74.js","sources":["../../src/components/MultiEmailInput/constants.ts","../../src/components/MultiEmailInput/utils.ts","../../src/components/MultiEmailInput/useMultiEmailState.ts","../../src/components/MultiEmailInput/MultiEmailInput.tsx"],"sourcesContent":["export const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\\.[A-Z0-9-]+)*\\.[A-Z]{2,}$/i;\n\nexport const UNSTRICT_EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\n\nexport const EMAIL_SEPARATION_REGEX = /[^\\s,]+/g;\n","import { EMAIL_REGEX } from \"./constants\";\nimport type { EmailValue } from \"./types\";\n\nexport const formatEmailInputOption = (email: string): EmailValue => ({\n label: email,\n value: email,\n valid: EMAIL_REGEX.test(email),\n});\n\nexport const pruneDuplicates = (\n existing: EmailValue[],\n newEmailStrings: string[]\n): { uniqueEmails: EmailValue[]; duplicates: string[] } => {\n const seen = new Set(existing.map(e => e.value.toLowerCase()));\n const duplicates: string[] = [];\n const added: EmailValue[] = [];\n\n for (const emailStr of newEmailStrings) {\n const lower = emailStr.toLowerCase();\n if (seen.has(lower)) {\n duplicates.push(emailStr);\n } else {\n seen.add(lower);\n added.push(formatEmailInputOption(emailStr));\n }\n }\n\n return { uniqueEmails: [...existing, ...added], duplicates };\n};\n\nexport const filterValidEmails = (emails: EmailValue[]): EmailValue[] =>\n emails.filter(email => email.valid);\n\nexport const pluralizeEmail = (count: number): string =>\n count === 1 ? \"email\" : \"emails\";\n\nexport const formatDuplicateWarning = (duplicates: string[]): string => {\n const count = duplicates.length;\n\n return `Removed ${count} duplicate ${pluralizeEmail(count)} from the list: ${duplicates.join(\", \")}`;\n};\n","import { useState, useCallback, useMemo } from \"react\";\n\nimport { UNSTRICT_EMAIL_REGEX, EMAIL_SEPARATION_REGEX } from \"./constants\";\nimport { pruneDuplicates, filterValidEmails } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nexport function useMultiEmailState(props: MultiEmailInputProps) {\n const {\n value = [],\n onChange,\n onBlur,\n visibleEmailsCount = 3,\n isAlwaysExpanded = false,\n counter,\n filterInvalidEmails,\n } = props;\n\n const [inputValue, setInputValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [duplicateEmails, setDuplicateEmails] = useState<string[]>([]);\n\n const addEmails = useCallback(\n (input: string) => {\n const trimmed = input.trim();\n if (!trimmed) return;\n UNSTRICT_EMAIL_REGEX.lastIndex = 0;\n EMAIL_SEPARATION_REGEX.lastIndex = 0;\n const emailMatches =\n trimmed.match(UNSTRICT_EMAIL_REGEX) ||\n trimmed.match(EMAIL_SEPARATION_REGEX) ||\n [];\n if (emailMatches.length === 0) return;\n const { uniqueEmails, duplicates } = pruneDuplicates(value, emailMatches);\n onChange?.(uniqueEmails);\n setDuplicateEmails(duplicates);\n setInputValue(\"\");\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!inputValue && event.key === \"Backspace\" && value.length > 0) {\n onChange?.(value.slice(0, -1));\n return;\n }\n if (!inputValue) return;\n if ([\"Enter\", \"Tab\", \",\", \" \"].includes(event.key)) {\n addEmails(inputValue);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [inputValue, value, onChange, addEmails]\n );\n\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const text = event.clipboardData.getData(\"text\");\n if (!text) return;\n event.preventDefault();\n addEmails(text);\n },\n [addEmails]\n );\n\n const handleBlur = useCallback(() => {\n if (inputValue) {\n addEmails(inputValue);\n } else {\n onBlur?.();\n }\n setIsFocused(false);\n setDuplicateEmails([]);\n }, [inputValue, addEmails, onBlur]);\n\n const handleFocus = useCallback(() => setIsFocused(true), []);\n\n const handleChipRemove = useCallback(\n (emailValue: string) =>\n onChange?.(value.filter(e => e.value !== emailValue)),\n [value, onChange]\n );\n\n const handleFilterInvalidEmails = useCallback(\n () => onChange?.(filterValidEmails(value)),\n [value, onChange]\n );\n\n const validCount = useMemo(() => value.filter(e => e.valid).length, [value]);\n const isCounterVisible =\n !!counter &&\n (typeof counter === \"boolean\" ||\n !counter.startsFrom ||\n validCount >= counter.startsFrom);\n const shouldCollapse =\n !isAlwaysExpanded && !isFocused && value.length > visibleEmailsCount;\n const visibleEmails = shouldCollapse\n ? value.slice(0, visibleEmailsCount)\n : value;\n const hiddenCount = shouldCollapse ? value.length - visibleEmailsCount : 0;\n const isFilterLinkVisible =\n !!filterInvalidEmails && value.length > validCount;\n\n return {\n inputValue,\n setInputValue,\n isFocused,\n duplicateEmails,\n handleKeyDown,\n handlePaste,\n handleBlur,\n handleFocus,\n handleChipRemove,\n handleFilterInvalidEmails,\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n isFilterLinkVisible,\n };\n}\n","import { forwardRef, useId } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Field, FieldLabel, FieldContent } from \"src/primitives/Field\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { hyphenize } from \"src/utils/hyphenize\";\nimport { withIconSize } from \"src/utils/withIconSize\";\nimport { useMultiEmailState } from \"./useMultiEmailState\";\nimport { pluralizeEmail, formatDuplicateWarning } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nconst CHIP_BASE =\n \"flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground\";\nconst CHIP_INVALID =\n \"border border-destructive text-destructive bg-destructive/10\";\nconst CHIPS_CONTAINER =\n \"flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-base md:text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\";\nconst CHIPS_ERROR =\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\";\n\nexport const MultiEmailInput = forwardRef<\n HTMLInputElement,\n MultiEmailInputProps\n>((props, ref) => {\n const {\n label,\n placeholder = \"\",\n helpText,\n error,\n disabled = false,\n required = false,\n maxHeight = 200,\n counter,\n filterInvalidEmails,\n prefix,\n suffix,\n labelProps,\n className,\n dataTestId,\n } = props;\n const id = useId();\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const {\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n inputValue,\n setInputValue,\n handleKeyDown,\n handlePaste,\n handleFocus,\n handleBlur,\n handleChipRemove,\n isFilterLinkVisible,\n handleFilterInvalidEmails,\n duplicateEmails,\n } = useMultiEmailState(props);\n\n return (\n <Field\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-testid=\"email-input-wrapper\"\n >\n {(label || isCounterVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel\n htmlFor={id}\n data-testid={`${testIdPrefix}-input-label`}\n {...labelProps}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n {\" *\"}\n </span>\n )}\n </FieldLabel>\n )}\n {isCounterVisible && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-testid={`${testIdPrefix}-email-counter`}\n >\n {validCount}{\" \"}\n {typeof counter === \"object\" && counter?.label\n ? counter.label\n : pluralizeEmail(validCount)}\n </span>\n )}\n </div>\n )}\n <div\n data-testid=\"multi-email-select-container\"\n className={cn(\n CHIPS_CONTAINER,\n !!error && CHIPS_ERROR,\n disabled && \"pointer-events-none opacity-50\"\n )}\n style={{ maxHeight: `${maxHeight}px`, overflowY: \"auto\" }}\n >\n {prefix && (\n <div className=\"shrink-0 text-muted-foreground\">\n {withIconSize(prefix, \"size-4\")}\n </div>\n )}\n {visibleEmails.map(email => (\n <span\n key={email.value}\n className={cn(CHIP_BASE, !email.valid && CHIP_INVALID)}\n >\n {email.label}\n {!disabled && (\n <button\n type=\"button\"\n tabIndex={-1}\n data-testid={`${hyphenize(email.label)}-remove-icon`}\n className=\"-ms-0.5 rounded-xs opacity-50 hover:opacity-100\"\n onMouseDown={e => e.preventDefault()}\n onClick={() => handleChipRemove(email.value)}\n aria-label={`Remove ${email.label}`}\n >\n <XIcon className=\"size-3 pointer-events-none\" />\n </button>\n )}\n </span>\n ))}\n {hiddenCount > 0 && (\n <span className=\"flex h-[calc(--spacing(5.25))] items-center rounded-sm bg-secondary px-1.5 text-xs font-medium text-secondary-foreground\">\n +{hiddenCount} more\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type=\"text\"\n data-testid=\"email-select-input-field\"\n value={inputValue}\n onChange={e => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={props.value?.length ? \"\" : placeholder}\n disabled={disabled}\n className=\"min-w-16 flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground md:text-sm\"\n />\n {suffix && (\n <div className=\"shrink-0 text-muted-foreground\">\n {withIconSize(suffix, \"size-4\")}\n </div>\n )}\n </div>\n <FieldContent>\n {!!error && (\n <p\n className=\"text-[0.8rem] text-destructive\"\n data-testid={`${testIdPrefix}-input-error`}\n >\n {error}\n {isFilterLinkVisible && (\n <button\n type=\"button\"\n className=\"ml-1 cursor-pointer font-semibold underline\"\n onClick={handleFilterInvalidEmails}\n >\n {filterInvalidEmails?.label ??\n \"Click here to remove invalid emails.\"}\n </button>\n )}\n </p>\n )}\n {!!helpText && (\n <p\n className=\"text-[0.8rem] text-muted-foreground\"\n data-testid={`${testIdPrefix}-input-help`}\n >\n {helpText}\n </p>\n )}\n {duplicateEmails.length > 0 && (\n <p\n className=\"text-[0.8rem] text-amber-600 dark:text-amber-400\"\n data-testid={`${testIdPrefix}-duplicate-emails-warning`}\n >\n {formatDuplicateWarning(duplicateEmails)}\n </p>\n )}\n </FieldContent>\n </Field>\n );\n});\nMultiEmailInput.displayName = \"MultiEmailInput\";\n"],"names":["useState","useCallback","useMemo","forwardRef","useId","buildTestIdPrefix","jsxs","Field","cn","FieldLabel","jsx","withIconSize","hyphenize","XIcon","FieldContent"],"mappings":"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"}
@@ -6,39 +6,52 @@ var utils = require('./utils-BhM0B89p.js');
6
6
  var primitives_RadioGroup = require('./primitives/RadioGroup.js');
7
7
  var primitives_Label = require('./primitives/Label.js');
8
8
  var primitives_Field = require('./primitives/Field.js');
9
+ var fieldIds = require('./fieldIds-DiVU6GVS.js');
9
10
 
10
- const RadioGroupItem = React.forwardRef(({ label, helpText, value, className, id: idProp, ...props }, ref) => {
11
- const generatedId = React.useId();
12
- const id = idProp ?? generatedId;
13
- const helpTextId = `helpText_${id}`;
14
- return /* @__PURE__ */ jsxRuntime.jsxs(
15
- "div",
16
- {
17
- className: utils.cn(
18
- "flex gap-2",
19
- helpText ? "items-start" : "items-center",
20
- className
21
- ),
22
- children: [
23
- /* @__PURE__ */ jsxRuntime.jsx(
24
- primitives_RadioGroup.RadioGroupItem,
25
- {
26
- ref,
27
- id,
28
- value,
29
- "aria-describedby": helpText ? helpTextId : void 0,
30
- className: helpText ? "mt-0.5" : void 0,
31
- ...props
32
- }
11
+ const RadioGroupItem = React.forwardRef(
12
+ ({ label, helpText, value, className, id: idProp, dataTestId, ...props }, ref) => {
13
+ const generatedId = React.useId();
14
+ const id = idProp ?? generatedId;
15
+ const helpTextId = `helpText_${id}`;
16
+ const testIdPrefix = fieldIds.buildTestIdPrefix(dataTestId, label);
17
+ return /* @__PURE__ */ jsxRuntime.jsxs(
18
+ "div",
19
+ {
20
+ className: utils.cn(
21
+ "flex gap-2",
22
+ helpText ? "items-start" : "items-center",
23
+ className
33
24
  ),
34
- (label || helpText) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [
35
- label && /* @__PURE__ */ jsxRuntime.jsx(primitives_Label.Label, { htmlFor: id, className: "cursor-pointer", children: label }),
36
- helpText && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText })
37
- ] })
38
- ]
39
- }
40
- );
41
- });
25
+ children: [
26
+ /* @__PURE__ */ jsxRuntime.jsx(
27
+ primitives_RadioGroup.RadioGroupItem,
28
+ {
29
+ ref,
30
+ id,
31
+ value,
32
+ "aria-describedby": helpText ? helpTextId : void 0,
33
+ className: helpText ? "mt-0.5" : void 0,
34
+ "data-testid": `${testIdPrefix}-radio-input`,
35
+ ...props
36
+ }
37
+ ),
38
+ (label || helpText) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [
39
+ label && /* @__PURE__ */ jsxRuntime.jsx(
40
+ primitives_Label.Label,
41
+ {
42
+ htmlFor: id,
43
+ className: "cursor-pointer",
44
+ "data-testid": `${testIdPrefix}-radio-label`,
45
+ children: label
46
+ }
47
+ ),
48
+ helpText && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText })
49
+ ] })
50
+ ]
51
+ }
52
+ );
53
+ }
54
+ );
42
55
  RadioGroupItem.displayName = "RadioGroup.Item";
43
56
  const RadioGroupRoot = React.forwardRef(
44
57
  ({
@@ -51,11 +64,13 @@ const RadioGroupRoot = React.forwardRef(
51
64
  required,
52
65
  children,
53
66
  labelProps,
67
+ dataTestId,
54
68
  ...props
55
69
  }, ref) => {
56
70
  const generatedId = React.useId();
57
71
  const errorId = `error_${generatedId}`;
58
72
  const helpTextId = `helpText_${generatedId}`;
73
+ const testIdPrefix = fieldIds.buildTestIdPrefix(dataTestId, label);
59
74
  const hasField = !!(label || error || helpText);
60
75
  const radioGroup = /* @__PURE__ */ jsxRuntime.jsx(
61
76
  primitives_RadioGroup.RadioGroup,
@@ -89,11 +104,25 @@ const RadioGroupRoot = React.forwardRef(
89
104
  label,
90
105
  required && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" })
91
106
  ] }),
92
- helpText && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText })
107
+ helpText && /* @__PURE__ */ jsxRuntime.jsx(
108
+ primitives_Field.FieldDescription,
109
+ {
110
+ id: helpTextId,
111
+ "data-testid": `${testIdPrefix}-radio-input-help`,
112
+ children: helpText
113
+ }
114
+ )
93
115
  ] }),
94
116
  /* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldContent, { children: [
95
117
  radioGroup,
96
- !!error && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldError, { id: errorId, children: error })
118
+ !!error && /* @__PURE__ */ jsxRuntime.jsx(
119
+ primitives_Field.FieldError,
120
+ {
121
+ id: errorId,
122
+ "data-testid": `${testIdPrefix}-radio-input-error`,
123
+ children: error
124
+ }
125
+ )
97
126
  ] })
98
127
  ]
99
128
  }
@@ -106,4 +135,4 @@ const RadioGroup = Object.assign(RadioGroupRoot, {
106
135
  });
107
136
 
108
137
  exports.RadioGroup = RadioGroup;
109
- //# sourceMappingURL=RadioGroup-DCEw94Dk.js.map
138
+ //# sourceMappingURL=RadioGroup-B-u8rdbf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup-B-u8rdbf.js","sources":["../../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n RadioGroup as PrimitiveRadioGroup,\n RadioGroupItem as PrimitiveRadioGroupItem,\n} from \"src/primitives/RadioGroup\";\nimport { Label } from \"src/primitives/Label\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\n\nexport interface RadioGroupProps extends Omit<\n React.ComponentProps<typeof PrimitiveRadioGroup>,\n \"children\"\n> {\n /** Group label displayed above the radio items. */\n label?: string;\n /** Error message displayed below the group. */\n error?: string;\n /** Helper text displayed below the group label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Layout orientation. Defaults to \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** RadioGroup.Item children. */\n children?: React.ReactNode;\n /** Props forwarded to the group Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Prefix for the group's error testid(radio-input-error). Falls back to the hyphenized group label. */\n dataTestId?: string;\n}\n\nexport interface RadioGroupItemProps extends React.ComponentProps<\n typeof PrimitiveRadioGroupItem\n> {\n /** Label displayed next to the radio. */\n label?: string;\n /** Helper text displayed below the item label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Radio value (required). */\n value: string;\n /** Additional class name for the item wrapper. */\n className?: string;\n /** Optional id override; auto-generated if omitted. */\n id?: string;\n /** Prefix for the item's testid family(radio-input, radio-label). Falls back to the hyphenized item label. */\n dataTestId?: string;\n}\n\nconst RadioGroupItem = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroupItem>,\n RadioGroupItemProps\n>(\n (\n { label, helpText, value, className, id: idProp, dataTestId, ...props },\n ref\n ) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const helpTextId = `helpText_${id}`;\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n\n return (\n <div\n className={cn(\n \"flex gap-2\",\n helpText ? \"items-start\" : \"items-center\",\n className\n )}\n >\n <PrimitiveRadioGroupItem\n ref={ref}\n id={id}\n value={value}\n aria-describedby={helpText ? helpTextId : undefined}\n className={helpText ? \"mt-0.5\" : undefined}\n data-testid={`${testIdPrefix}-radio-input`}\n {...props}\n />\n {(label || helpText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <Label\n htmlFor={id}\n className=\"cursor-pointer\"\n data-testid={`${testIdPrefix}-radio-label`}\n >\n {label}\n </Label>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nRadioGroupItem.displayName = \"RadioGroup.Item\";\n\nconst RadioGroupRoot = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroup>,\n RadioGroupProps\n>(\n (\n {\n label,\n error,\n helpText,\n orientation = \"horizontal\",\n className,\n disabled,\n required,\n children,\n labelProps,\n dataTestId,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n\n const hasField = !!(label || error || helpText);\n\n const radioGroup = (\n <PrimitiveRadioGroup\n ref={ref}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n orientation={orientation}\n className={cn(\n \"data-[orientation=vertical]:grid data-[orientation=vertical]:gap-2 data-[orientation=horizontal]:flex data-[orientation=horizontal]:flex-row data-[orientation=horizontal]:flex-wrap data-[orientation=horizontal]:items-center data-[orientation=horizontal]:gap-4\",\n !hasField && className\n )}\n {...props}\n >\n {children}\n </PrimitiveRadioGroup>\n );\n\n if (!hasField) {\n return radioGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || helpText) && (\n <div>\n {label && (\n <FieldLabel {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {helpText && (\n <FieldDescription\n id={helpTextId}\n data-testid={`${testIdPrefix}-radio-input-help`}\n >\n {helpText}\n </FieldDescription>\n )}\n </div>\n )}\n <FieldContent>\n {radioGroup}\n {!!error && (\n <FieldError\n id={errorId}\n data-testid={`${testIdPrefix}-radio-input-error`}\n >\n {error}\n </FieldError>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nRadioGroupRoot.displayName = \"RadioGroup\";\n\nconst RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});\n\nexport { RadioGroup };\n"],"names":["forwardRef","useId","buildTestIdPrefix","jsxs","cn","jsx","PrimitiveRadioGroupItem","Label","FieldDescription","PrimitiveRadioGroup","Field","FieldLabel","FieldContent","FieldError"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
- var hyphenize = require('./hyphenize-B8IGPzjp.js');
5
+ var fieldIds = require('./fieldIds-DiVU6GVS.js');
6
6
  var SelectFieldWrapper = require('./SelectFieldWrapper-BLVvwUcK.js');
7
7
  var utils = require('./utils-BhM0B89p.js');
8
8
  var primitives_Combobox = require('./Combobox-BE8LT4yq.js');
@@ -14,13 +14,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
14
 
15
15
  var React__default = /*#__PURE__*/_interopDefault(React);
16
16
 
17
- function buildAriaDescribedBy(error, errorId, helpText, helpTextId) {
18
- return [error ? errorId : null, helpText ? helpTextId : null].filter(Boolean).join(" ") || void 0;
19
- }
20
- function buildTestIdPrefix(dataTestId, label) {
21
- return dataTestId ?? (label ? hyphenize.hyphenize(label) : void 0);
22
- }
23
-
24
17
  function useAsyncOptions({
25
18
  loadOptions,
26
19
  defaultOptions = false,
@@ -399,13 +392,13 @@ function useSelectState(props) {
399
392
  },
400
393
  []
401
394
  );
402
- const ariaDescribedBy = buildAriaDescribedBy(
395
+ const ariaDescribedBy = fieldIds.buildAriaDescribedBy(
403
396
  error,
404
397
  errorId,
405
398
  helpText,
406
399
  helpTextId
407
400
  );
408
- const testIdPrefix = buildTestIdPrefix(dataTestId, label);
401
+ const testIdPrefix = fieldIds.buildTestIdPrefix(dataTestId, label);
409
402
  const showClearButton = isClearable && !!currentValue && !isDisabled;
410
403
  const flatOptionsMap = React.useMemo(
411
404
  () => new Map(opt.flatOptions.map((o) => [o.value, o])),
@@ -526,13 +519,13 @@ function useMultiSelectState(props) {
526
519
  onAsyncInputChange: opt.isAsync ? opt.handleAsyncInputChange : void 0,
527
520
  children
528
521
  });
529
- const ariaDescribedBy = buildAriaDescribedBy(
522
+ const ariaDescribedBy = fieldIds.buildAriaDescribedBy(
530
523
  error,
531
524
  errorId,
532
525
  helpText,
533
526
  helpTextId
534
527
  );
535
- const testIdPrefix = buildTestIdPrefix(dataTestId, label);
528
+ const testIdPrefix = fieldIds.buildTestIdPrefix(dataTestId, label);
536
529
  const flatOptionsMap = React.useMemo(
537
530
  () => new Map(opt.flatOptions.map((o) => [o.value, o])),
538
531
  [opt.flatOptions]
@@ -655,7 +648,7 @@ function MultiSelectDropdown({
655
648
  {
656
649
  ref: loaderCallbackRef,
657
650
  className: "flex w-full items-center justify-center py-3",
658
- "data-testid": testIdPrefix ? `${testIdPrefix}-lazy-loader` : "lazy-loader",
651
+ "data-testid": `${testIdPrefix}-lazy-loader`,
659
652
  children: /* @__PURE__ */ jsxRuntime.jsx(primitives_Spinner.Spinner, {})
660
653
  }
661
654
  )
@@ -1203,4 +1196,4 @@ const Select = React.forwardRef((props, ref) => {
1203
1196
  Select.displayName = "Select";
1204
1197
 
1205
1198
  exports.Select = Select;
1206
- //# sourceMappingURL=Select-Bs5Fp3wj.js.map
1199
+ //# sourceMappingURL=Select-CGG3J9NS.js.map