@purpur/library 9.0.6 → 9.0.7

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 (251) hide show
  1. package/CHANGELOG.json +33 -0
  2. package/CHANGELOG.md +15 -1
  3. package/dist/{RichText-DRacgpis.mjs → RichText-Bi51HE6X.mjs} +3 -3
  4. package/dist/{RichText-DRacgpis.mjs.map → RichText-Bi51HE6X.mjs.map} +1 -1
  5. package/dist/{RichText-DMyGiMN0.js → RichText-DNroJJXv.js} +2 -2
  6. package/dist/{RichText-DMyGiMN0.js.map → RichText-DNroJJXv.js.map} +1 -1
  7. package/dist/{ThemeProvider-CrjMv3M8.mjs → ThemeProvider-BR1hJQOD.mjs} +85 -85
  8. package/dist/{ThemeProvider-CrjMv3M8.mjs.map → ThemeProvider-BR1hJQOD.mjs.map} +1 -1
  9. package/dist/{accordion-DWflnyWa.mjs → accordion-BKTz9DM6.mjs} +18 -18
  10. package/dist/{accordion-DWflnyWa.mjs.map → accordion-BKTz9DM6.mjs.map} +1 -1
  11. package/dist/{accordion-CF2fj2uq.js → accordion-DX8efWOt.js} +2 -2
  12. package/dist/{accordion-CF2fj2uq.js.map → accordion-DX8efWOt.js.map} +1 -1
  13. package/dist/accordion.cjs.js +1 -1
  14. package/dist/accordion.es.js +1 -1
  15. package/dist/{alert-badge-u7qAhYbR.mjs → alert-badge-DR8cigWu.mjs} +3 -3
  16. package/dist/{alert-badge-u7qAhYbR.mjs.map → alert-badge-DR8cigWu.mjs.map} +1 -1
  17. package/dist/alert-badge.es.js +1 -1
  18. package/dist/{autocomplete-yD0-1vlF.js → autocomplete-6qSqK3SI.js} +2 -2
  19. package/dist/{autocomplete-yD0-1vlF.js.map → autocomplete-6qSqK3SI.js.map} +1 -1
  20. package/dist/{autocomplete-0kGG_STe.mjs → autocomplete-B4dZx9zF.mjs} +3 -3
  21. package/dist/{autocomplete-0kGG_STe.mjs.map → autocomplete-B4dZx9zF.mjs.map} +1 -1
  22. package/dist/autocomplete.cjs.js +1 -1
  23. package/dist/autocomplete.es.js +1 -1
  24. package/dist/button-BfYKNBmC.mjs +102 -0
  25. package/dist/button-BfYKNBmC.mjs.map +1 -0
  26. package/dist/button-DDYGuqZ0.js +2 -0
  27. package/dist/button-DDYGuqZ0.js.map +1 -0
  28. package/dist/button.cjs.js +1 -1
  29. package/dist/button.es.js +1 -1
  30. package/dist/{calendar-pMM0fKEu.js → calendar-CxkJMONO.js} +2 -2
  31. package/dist/{calendar-pMM0fKEu.js.map → calendar-CxkJMONO.js.map} +1 -1
  32. package/dist/{calendar-DDie8jSH.mjs → calendar-vALLklKV.mjs} +2 -2
  33. package/dist/{calendar-DDie8jSH.mjs.map → calendar-vALLklKV.mjs.map} +1 -1
  34. package/dist/calendar.cjs.js +1 -1
  35. package/dist/calendar.es.js +1 -1
  36. package/dist/{card-DiMVw06l.mjs → card-CkZQZOz1.mjs} +9 -9
  37. package/dist/{card-DiMVw06l.mjs.map → card-CkZQZOz1.mjs.map} +1 -1
  38. package/dist/{card-B512KHpr.js → card-VMa3cGCP.js} +2 -2
  39. package/dist/{card-B512KHpr.js.map → card-VMa3cGCP.js.map} +1 -1
  40. package/dist/card.cjs.js +1 -1
  41. package/dist/card.es.js +1 -1
  42. package/dist/{checkbox-LYzMiXu7.mjs → checkbox-D6qWgpWR.mjs} +8 -8
  43. package/dist/{checkbox-LYzMiXu7.mjs.map → checkbox-D6qWgpWR.mjs.map} +1 -1
  44. package/dist/checkbox.es.js +1 -1
  45. package/dist/{chip-group-aj1fdnjC.js → chip-group-B775zvKD.js} +2 -2
  46. package/dist/{chip-group-aj1fdnjC.js.map → chip-group-B775zvKD.js.map} +1 -1
  47. package/dist/{chip-group-CJVvfl_J.mjs → chip-group-xuOe7nL3.mjs} +3 -3
  48. package/dist/{chip-group-CJVvfl_J.mjs.map → chip-group-xuOe7nL3.mjs.map} +1 -1
  49. package/dist/chip-group.cjs.js +1 -1
  50. package/dist/chip-group.es.js +1 -1
  51. package/dist/components/button/src/button.d.ts +1 -2
  52. package/dist/components/button/src/button.d.ts.map +1 -1
  53. package/dist/components/date-field/src/date-field.d.ts.map +1 -1
  54. package/dist/components/stepper/src/stepper-button.d.ts.map +1 -1
  55. package/dist/components/table/src/table-toolbar.d.ts.map +1 -1
  56. package/dist/components/tabs/src/tab-content.d.ts.map +1 -1
  57. package/dist/components/tabs/src/tabs.d.ts.map +1 -1
  58. package/dist/{container-Bw12NgHN.mjs → container-DLjBTB_w.mjs} +3 -3
  59. package/dist/{container-Bw12NgHN.mjs.map → container-DLjBTB_w.mjs.map} +1 -1
  60. package/dist/container.es.js +1 -1
  61. package/dist/{content-block-DUcjAZgG.mjs → content-block-BMOvlH7a.mjs} +6 -6
  62. package/dist/{content-block-DUcjAZgG.mjs.map → content-block-BMOvlH7a.mjs.map} +1 -1
  63. package/dist/{content-block-kzdUWgvH.js → content-block-Cd7xSE8t.js} +2 -2
  64. package/dist/{content-block-kzdUWgvH.js.map → content-block-Cd7xSE8t.js.map} +1 -1
  65. package/dist/content-block.cjs.js +1 -1
  66. package/dist/content-block.es.js +1 -1
  67. package/dist/{countdown-DxAGVUFI.mjs → countdown-DZ4IwkNy.mjs} +12 -12
  68. package/dist/{countdown-DxAGVUFI.mjs.map → countdown-DZ4IwkNy.mjs.map} +1 -1
  69. package/dist/countdown.es.js +1 -1
  70. package/dist/date-field-CORqon6B.js +2 -0
  71. package/dist/{date-field-CPiTZqa0.js.map → date-field-CORqon6B.js.map} +1 -1
  72. package/dist/{date-field-D_6iP2fC.mjs → date-field-CTJB8O0e.mjs} +325 -310
  73. package/dist/{date-field-D_6iP2fC.mjs.map → date-field-CTJB8O0e.mjs.map} +1 -1
  74. package/dist/date-field.cjs.js +1 -1
  75. package/dist/date-field.es.js +1 -1
  76. package/dist/{date-picker-BRnwwZv1.mjs → date-picker-CJcIJ5VL.mjs} +5 -5
  77. package/dist/{date-picker-BRnwwZv1.mjs.map → date-picker-CJcIJ5VL.mjs.map} +1 -1
  78. package/dist/{date-picker-DlJGggam.js → date-picker-Dv3W05Hf.js} +2 -2
  79. package/dist/{date-picker-DlJGggam.js.map → date-picker-Dv3W05Hf.js.map} +1 -1
  80. package/dist/date-picker.cjs.js +1 -1
  81. package/dist/date-picker.es.js +1 -1
  82. package/dist/{dismissable-chip-group-DsO2cZaF.js → dismissable-chip-group-CnziecOt.js} +2 -2
  83. package/dist/{dismissable-chip-group-DsO2cZaF.js.map → dismissable-chip-group-CnziecOt.js.map} +1 -1
  84. package/dist/{dismissable-chip-group-Bl0D18qM.mjs → dismissable-chip-group-ZCYOt1sB.mjs} +2 -2
  85. package/dist/{dismissable-chip-group-Bl0D18qM.mjs.map → dismissable-chip-group-ZCYOt1sB.mjs.map} +1 -1
  86. package/dist/dismissable-chip-group.cjs.js +1 -1
  87. package/dist/dismissable-chip-group.es.js +1 -1
  88. package/dist/{drawer-nBpCtIdI.js → drawer-Ce5LNpU2.js} +2 -2
  89. package/dist/{drawer-nBpCtIdI.js.map → drawer-Ce5LNpU2.js.map} +1 -1
  90. package/dist/{drawer-Boqmgh-i.mjs → drawer-DSFZ61OH.mjs} +14 -14
  91. package/dist/{drawer-Boqmgh-i.mjs.map → drawer-DSFZ61OH.mjs.map} +1 -1
  92. package/dist/drawer.cjs.js +1 -1
  93. package/dist/drawer.es.js +1 -1
  94. package/dist/{floating-ui.react-dom-0ol4sFzt.mjs → floating-ui.react-dom-gsHLgcoR.mjs} +5 -5
  95. package/dist/{floating-ui.react-dom-0ol4sFzt.mjs.map → floating-ui.react-dom-gsHLgcoR.mjs.map} +1 -1
  96. package/dist/{footer-DrjAwjuL.js → footer-BL0ewBZT.js} +2 -2
  97. package/dist/{footer-DrjAwjuL.js.map → footer-BL0ewBZT.js.map} +1 -1
  98. package/dist/{footer-DcWsihxS.mjs → footer-cH07Xqil.mjs} +5 -5
  99. package/dist/{footer-DcWsihxS.mjs.map → footer-cH07Xqil.mjs.map} +1 -1
  100. package/dist/footer.cjs.js +1 -1
  101. package/dist/footer.es.js +1 -1
  102. package/dist/heading-drD5ugCC.js +2 -0
  103. package/dist/{heading-DLCdW6gx.js.map → heading-drD5ugCC.js.map} +1 -1
  104. package/dist/heading-xwBuT_-9.mjs +75 -0
  105. package/dist/{heading-gqtQNo5n.mjs.map → heading-xwBuT_-9.mjs.map} +1 -1
  106. package/dist/heading.cjs.js +1 -1
  107. package/dist/heading.es.js +1 -1
  108. package/dist/{hero-banner-B8fRHxXc.mjs → hero-banner-CkSSlxTW.mjs} +5 -5
  109. package/dist/{hero-banner-B8fRHxXc.mjs.map → hero-banner-CkSSlxTW.mjs.map} +1 -1
  110. package/dist/{hero-banner-D3peC1NR.js → hero-banner-JFaqW20R.js} +2 -2
  111. package/dist/{hero-banner-D3peC1NR.js.map → hero-banner-JFaqW20R.js.map} +1 -1
  112. package/dist/hero-banner.cjs.js +1 -1
  113. package/dist/hero-banner.es.js +1 -1
  114. package/dist/library.cjs.js +1 -1
  115. package/dist/library.es.js +44 -44
  116. package/dist/{listbox-u6__DsLw.mjs → listbox-oDeP8FvH.mjs} +2 -2
  117. package/dist/{listbox-u6__DsLw.mjs.map → listbox-oDeP8FvH.mjs.map} +1 -1
  118. package/dist/listbox.es.js +1 -1
  119. package/dist/{modal-C2UQsW-g.mjs → modal-2ymCXTup.mjs} +19 -19
  120. package/dist/{modal-C2UQsW-g.mjs.map → modal-2ymCXTup.mjs.map} +1 -1
  121. package/dist/{modal-nyhf5zxG.js → modal-CXi2xez5.js} +2 -2
  122. package/dist/{modal-nyhf5zxG.js.map → modal-CXi2xez5.js.map} +1 -1
  123. package/dist/modal.cjs.js +1 -1
  124. package/dist/modal.es.js +1 -1
  125. package/dist/{notification-C32wHljA.mjs → notification-BFSOuDp8.mjs} +22 -22
  126. package/dist/{notification-C32wHljA.mjs.map → notification-BFSOuDp8.mjs.map} +1 -1
  127. package/dist/{notification-Bg1vQkQ3.js → notification-DdnI2rOh.js} +2 -2
  128. package/dist/{notification-Bg1vQkQ3.js.map → notification-DdnI2rOh.js.map} +1 -1
  129. package/dist/{notification-banner-BY2iZOIa.mjs → notification-banner-CQvBezAL.mjs} +3 -3
  130. package/dist/{notification-banner-BY2iZOIa.mjs.map → notification-banner-CQvBezAL.mjs.map} +1 -1
  131. package/dist/{notification-banner-C8XsBDTq.js → notification-banner-CT4ew8IQ.js} +2 -2
  132. package/dist/{notification-banner-C8XsBDTq.js.map → notification-banner-CT4ew8IQ.js.map} +1 -1
  133. package/dist/notification-banner.cjs.js +1 -1
  134. package/dist/notification-banner.es.js +1 -1
  135. package/dist/notification.cjs.js +1 -1
  136. package/dist/notification.es.js +1 -1
  137. package/dist/{pagination-CVVCAQ65.mjs → pagination-BdCjh1Pi.mjs} +2 -2
  138. package/dist/{pagination-CVVCAQ65.mjs.map → pagination-BdCjh1Pi.mjs.map} +1 -1
  139. package/dist/pagination.es.js +1 -1
  140. package/dist/{paragraph-DNtj7OLr.mjs → paragraph-Ci50OF1u.mjs} +3 -3
  141. package/dist/{paragraph-DNtj7OLr.mjs.map → paragraph-Ci50OF1u.mjs.map} +1 -1
  142. package/dist/paragraph.es.js +1 -1
  143. package/dist/{popover-B1BgSoQx.js → popover-D3qWbbU4.js} +2 -2
  144. package/dist/{popover-B1BgSoQx.js.map → popover-D3qWbbU4.js.map} +1 -1
  145. package/dist/{popover-DBMI9Jy1.mjs → popover-ZeQKmyEb.mjs} +25 -25
  146. package/dist/{popover-DBMI9Jy1.mjs.map → popover-ZeQKmyEb.mjs.map} +1 -1
  147. package/dist/popover.cjs.js +1 -1
  148. package/dist/popover.es.js +1 -1
  149. package/dist/{product-card-rfpJbzzV.mjs → product-card-BU1ThhCx.mjs} +12 -12
  150. package/dist/{product-card-rfpJbzzV.mjs.map → product-card-BU1ThhCx.mjs.map} +1 -1
  151. package/dist/{product-card-DOBHGAa2.js → product-card-CNBegEBW.js} +2 -2
  152. package/dist/{product-card-DOBHGAa2.js.map → product-card-CNBegEBW.js.map} +1 -1
  153. package/dist/product-card.cjs.js +1 -1
  154. package/dist/product-card.es.js +1 -1
  155. package/dist/{promotion-card-BIFOwMrw.js → promotion-card-CXNhskRl.js} +2 -2
  156. package/dist/{promotion-card-BIFOwMrw.js.map → promotion-card-CXNhskRl.js.map} +1 -1
  157. package/dist/{promotion-card-DeyqFnyP.mjs → promotion-card-_bPyVr9t.mjs} +9 -9
  158. package/dist/{promotion-card-DeyqFnyP.mjs.map → promotion-card-_bPyVr9t.mjs.map} +1 -1
  159. package/dist/promotion-card.cjs.js +1 -1
  160. package/dist/promotion-card.es.js +1 -1
  161. package/dist/purpur.css +1 -1
  162. package/dist/{quantity-selector-DPOTlMSq.js → quantity-selector-CjSAaj7d.js} +2 -2
  163. package/dist/{quantity-selector-DPOTlMSq.js.map → quantity-selector-CjSAaj7d.js.map} +1 -1
  164. package/dist/{quantity-selector-_VcZYLjR.mjs → quantity-selector-HvyYSKah.mjs} +5 -5
  165. package/dist/{quantity-selector-_VcZYLjR.mjs.map → quantity-selector-HvyYSKah.mjs.map} +1 -1
  166. package/dist/quantity-selector.cjs.js +1 -1
  167. package/dist/quantity-selector.es.js +1 -1
  168. package/dist/{radio-button-group-CZ_FnVAi.js → radio-button-group-BaFpGAcD.js} +2 -2
  169. package/dist/{radio-button-group-CZ_FnVAi.js.map → radio-button-group-BaFpGAcD.js.map} +1 -1
  170. package/dist/{radio-button-group-BnCPcmSN.mjs → radio-button-group-CFqPsu5A.mjs} +5 -5
  171. package/dist/{radio-button-group-BnCPcmSN.mjs.map → radio-button-group-CFqPsu5A.mjs.map} +1 -1
  172. package/dist/radio-button-group.cjs.js +1 -1
  173. package/dist/radio-button-group.es.js +1 -1
  174. package/dist/{radio-card-group-DkaMcmen.mjs → radio-card-group-BlRZBa-9.mjs} +16 -16
  175. package/dist/{radio-card-group-DkaMcmen.mjs.map → radio-card-group-BlRZBa-9.mjs.map} +1 -1
  176. package/dist/{radio-card-group-BT5pV3tA.js → radio-card-group-sYcfDPJq.js} +2 -2
  177. package/dist/{radio-card-group-BT5pV3tA.js.map → radio-card-group-sYcfDPJq.js.map} +1 -1
  178. package/dist/radio-card-group.cjs.js +1 -1
  179. package/dist/radio-card-group.es.js +1 -1
  180. package/dist/rich-text.cjs.js +1 -1
  181. package/dist/rich-text.es.js +1 -1
  182. package/dist/scss/heading.mixins.scss +1 -1
  183. package/dist/{search-field-DH0xeW_J.mjs → search-field-BOmCVr5b.mjs} +11 -11
  184. package/dist/{search-field-DH0xeW_J.mjs.map → search-field-BOmCVr5b.mjs.map} +1 -1
  185. package/dist/{search-field-CxX4BBcg.js → search-field-CanOlkIY.js} +2 -2
  186. package/dist/{search-field-CxX4BBcg.js.map → search-field-CanOlkIY.js.map} +1 -1
  187. package/dist/search-field.cjs.js +1 -1
  188. package/dist/search-field.es.js +1 -1
  189. package/dist/{stepper-BfIbJwZn.mjs → stepper-D7T0wed7.mjs} +68 -71
  190. package/dist/stepper-D7T0wed7.mjs.map +1 -0
  191. package/dist/stepper-DYjJgEHL.js +2 -0
  192. package/dist/stepper-DYjJgEHL.js.map +1 -0
  193. package/dist/stepper.cjs.js +1 -1
  194. package/dist/stepper.es.js +1 -1
  195. package/dist/{table-DvcpczWf.mjs → table-B4pts_r4.mjs} +181 -179
  196. package/dist/{table-DvcpczWf.mjs.map → table-B4pts_r4.mjs.map} +1 -1
  197. package/dist/{table-BNeo_B1h.js → table-Bv_BISXV.js} +4 -4
  198. package/dist/{table-BNeo_B1h.js.map → table-Bv_BISXV.js.map} +1 -1
  199. package/dist/table.cjs.js +1 -1
  200. package/dist/table.es.js +1 -1
  201. package/dist/tabs-Bye5lgZ1.mjs +424 -0
  202. package/dist/tabs-Bye5lgZ1.mjs.map +1 -0
  203. package/dist/tabs-D-nfZHIA.js +2 -0
  204. package/dist/tabs-D-nfZHIA.js.map +1 -0
  205. package/dist/tabs.cjs.js +1 -1
  206. package/dist/tabs.es.js +1 -1
  207. package/dist/{text-area-Cb9Hm2Z9.mjs → text-area-CpYWt99s.mjs} +3 -3
  208. package/dist/{text-area-Cb9Hm2Z9.mjs.map → text-area-CpYWt99s.mjs.map} +1 -1
  209. package/dist/text-area.es.js +1 -1
  210. package/dist/{text-field-PKAaXO1N.mjs → text-field-5rIuW8gc.mjs} +2 -2
  211. package/dist/{text-field-PKAaXO1N.mjs.map → text-field-5rIuW8gc.mjs.map} +1 -1
  212. package/dist/{text-field-B8a-NKm4.js → text-field-Xt6T3zjO.js} +2 -2
  213. package/dist/{text-field-B8a-NKm4.js.map → text-field-Xt6T3zjO.js.map} +1 -1
  214. package/dist/text-field.cjs.js +1 -1
  215. package/dist/text-field.es.js +1 -1
  216. package/dist/theme.es.js +2 -2
  217. package/dist/{toggle-Cezg5MUc.mjs → toggle-D23x1wWk.mjs} +9 -9
  218. package/dist/{toggle-Cezg5MUc.mjs.map → toggle-D23x1wWk.mjs.map} +1 -1
  219. package/dist/toggle.es.js +1 -1
  220. package/dist/tokens.es.js +3 -3
  221. package/dist/{tooltip-DXi7ikUT.mjs → tooltip-DkwyNxrQ.mjs} +12 -12
  222. package/dist/{tooltip-DXi7ikUT.mjs.map → tooltip-DkwyNxrQ.mjs.map} +1 -1
  223. package/dist/{tooltip-CLQLxoaf.js → tooltip-svlZkXBs.js} +2 -2
  224. package/dist/{tooltip-CLQLxoaf.js.map → tooltip-svlZkXBs.js.map} +1 -1
  225. package/dist/tooltip.cjs.js +1 -1
  226. package/dist/tooltip.es.js +1 -1
  227. package/dist/{useColorScheme-DRQcbSog.mjs → useColorScheme-9rgSgG0N.mjs} +2 -2
  228. package/dist/{useColorScheme-DRQcbSog.mjs.map → useColorScheme-9rgSgG0N.mjs.map} +1 -1
  229. package/dist/{variables-91UvS2rU.mjs → variables-BVgnpUH9.mjs} +253 -253
  230. package/dist/{variables-91UvS2rU.mjs.map → variables-BVgnpUH9.mjs.map} +1 -1
  231. package/dist/{variables-BSsIx39i.mjs → variables-DkCN2x27.mjs} +7 -7
  232. package/dist/{variables-BSsIx39i.mjs.map → variables-DkCN2x27.mjs.map} +1 -1
  233. package/dist/{variables-BUfnQw6H.mjs → variables-Dr3Hsdn-.mjs} +9 -9
  234. package/dist/{variables-BUfnQw6H.mjs.map → variables-Dr3Hsdn-.mjs.map} +1 -1
  235. package/package.json +18 -18
  236. package/scripts/generate.mts +4 -1
  237. package/vite-plugin-generate-components-metadata.js +4 -1
  238. package/dist/button-ChYUPi2k.js +0 -2
  239. package/dist/button-ChYUPi2k.js.map +0 -1
  240. package/dist/button-DBX_tvfJ.mjs +0 -105
  241. package/dist/button-DBX_tvfJ.mjs.map +0 -1
  242. package/dist/date-field-CPiTZqa0.js +0 -2
  243. package/dist/heading-DLCdW6gx.js +0 -2
  244. package/dist/heading-gqtQNo5n.mjs +0 -75
  245. package/dist/stepper-B248FwO-.js +0 -2
  246. package/dist/stepper-B248FwO-.js.map +0 -1
  247. package/dist/stepper-BfIbJwZn.mjs.map +0 -1
  248. package/dist/tabs-CfHd4UQ2.js +0 -2
  249. package/dist/tabs-CfHd4UQ2.js.map +0 -1
  250. package/dist/tabs-CoXMAwMx.mjs +0 -396
  251. package/dist/tabs-CoXMAwMx.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";const n=require("react/jsx-runtime"),_=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-B8a-NKm4.js"),C=require("./bind-DeUYJ6m9.js"),K=require("./button-ChYUPi2k.js"),V=require("./icon-DNHpBTHs-faYHqTXU.js"),L={"purpur-quantity-selector":"_purpur-quantity-selector_pun3b_1","purpur-quantity-selector--full-width":"_purpur-quantity-selector--full-width_pun3b_25","purpur-quantity-selector--loading":"_purpur-quantity-selector--loading_pun3b_31","purpur-quantity-selector--no-gap":"_purpur-quantity-selector--no-gap_pun3b_34","purpur-quantity-selector--no-gap-disabled-left":"_purpur-quantity-selector--no-gap-disabled-left_pun3b_39","purpur-quantity-selector--no-gap-disabled-right":"_purpur-quantity-selector--no-gap-disabled-right_pun3b_43","purpur-quantity-selector--no-gap-disabled":"_purpur-quantity-selector--no-gap-disabled_pun3b_39","purpur-quantity-selector__spinner":"_purpur-quantity-selector__spinner_pun3b_50","purpur-quantity-selector__spinner--full-width":"_purpur-quantity-selector__spinner--full-width_pun3b_57","purpur-quantity-selector__spinner--separated":"_purpur-quantity-selector__spinner--separated_pun3b_61"},Y={name:"minus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["minus"],category:"utility"},D=u=>n.jsx(V.b,{...u,svg:Y});D.displayName="IconMinus";const G={name:"plus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z" clip-rule="evenodd"/></svg>',keywords:["plus"],category:"utility"},F=u=>n.jsx(V.b,{...u,svg:G});F.displayName="IconPlus";const W={"purpur-quantity-selector-button":"_purpur-quantity-selector-button_qjlbs_1","purpur-quantity-selector-button--gap-left":"_purpur-quantity-selector-button--gap-left_qjlbs_4","purpur-quantity-selector-button--gap-right":"_purpur-quantity-selector-button--gap-right_qjlbs_7","purpur-quantity-selector-button--no-gap-right":"_purpur-quantity-selector-button--no-gap-right_qjlbs_10","purpur-quantity-selector-button--no-gap-left":"_purpur-quantity-selector-button--no-gap-left_qjlbs_13"},T=C.c.bind(W),b="purpur-quantity-selector-button",tt=({["data-testid"]:u,disabled:m,hasGap:e,variant:f,buttonType:r,onClick:o})=>{const h=T(b,{[`${b}--gap-left`]:e&&r==="decrement",[`${b}--gap-right`]:e&&r==="increment",[`${b}--no-gap-left`]:!e&&r==="decrement",[`${b}--no-gap-right`]:!e&&r==="increment"});return n.jsx(K.Button,{"data-testid":u,className:h,size:"sm",type:"submit",variant:f,onClick:()=>o(r),iconOnly:!0,disabled:m,tabIndex:-1,children:r==="increment"?n.jsx(F,{size:"xs"}):n.jsx(D,{size:"xs"})})},B=C.c.bind(L),et=["attached","separated"],nt=["primary","secondary"],s="purpur-quantity-selector",R=_.forwardRef(({["data-testid"]:u,className:m,variant:e,buttonVariant:f,onChange:r,value:o,defaultValue:h,fullWidth:x,disabled:k,loading:v,minValue:E,maxValue:H,ariaLabelDecrement:M,ariaLabelIncrement:z,...Q},I)=>{const[O,$]=_.useState(h??0),[w,j]=_.useState(O),a=o!==void 0,l=a?o:w,S=t=>u?`${u}-${t}`:void 0,i=k||v,g=Math.max(E??0,0),q=H??Number.MAX_SAFE_INTEGER,p=l===q,d=l===g;_.useEffect(()=>{a&&$(o)},[o,a]),_.useEffect(()=>{if(!a){const t=setTimeout(()=>{$(w)},300);return()=>clearTimeout(t)}},[w,a,r]);const A=B(m,s,{[`${s}--no-gap`]:e==="attached"&&!i&&!d&&!p,[`${s}--no-gap-disabled-left`]:e==="attached"&&!i&&!p&&d,[`${s}--no-gap-disabled-right`]:e==="attached"&&!i&&!d&&p,[`${s}--no-gap-disabled`]:e==="attached"&&(i||p&&d),[`${s}--full-width`]:x,[`${s}--loading`]:v}),Z=t=>{if(!/^[0-9]*$/.test(t.target.value))return;const y=+t.target.value;y<g||y>q||(a||j(y),r(y))},P=t=>{const c=t==="increment"?l+1:l-1;c<0||(a||j(c),r(c))},N=t=>{const c=t==="increment"&&p||t==="decrement"&&d;return n.jsx(tt,{"data-testid":S("button-"+t),variant:f,buttonType:t,hasGap:e==="separated",onClick:P,disabled:i||c,"aria-label":t==="increment"?z:M})},U=n.jsxs(n.Fragment,{children:[v&&n.jsx("div",{className:B(`${s}__spinner`,{[`${s}__spinner--full-width`]:x,[`${s}__spinner--separated`]:!x&&e==="separated"}),children:n.jsx(X.Spinner,{disabled:i,size:"xs","data-testid":S("spinner")},"spinner")}),N("decrement")]});return n.jsx(J.TextField,{value:l,type:"number",ref:I,className:A,"data-testid":u,onChange:Z,beforeField:U,afterField:N("increment"),disabled:i,min:g,max:q,role:"spinbutton","aria-valuenow":l,"aria-valuemax":q,"aria-valuemin":g,...Q})});R.displayName="QuantitySelector";exports.QuantitySelector=R;exports.quantitySelectorButtonVariants=nt;exports.quantitySelectorVariants=et;
2
- //# sourceMappingURL=quantity-selector-DPOTlMSq.js.map
1
+ "use strict";const n=require("react/jsx-runtime"),_=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-Xt6T3zjO.js"),C=require("./bind-DeUYJ6m9.js"),K=require("./button-DDYGuqZ0.js"),V=require("./icon-DNHpBTHs-faYHqTXU.js"),L={"purpur-quantity-selector":"_purpur-quantity-selector_pun3b_1","purpur-quantity-selector--full-width":"_purpur-quantity-selector--full-width_pun3b_25","purpur-quantity-selector--loading":"_purpur-quantity-selector--loading_pun3b_31","purpur-quantity-selector--no-gap":"_purpur-quantity-selector--no-gap_pun3b_34","purpur-quantity-selector--no-gap-disabled-left":"_purpur-quantity-selector--no-gap-disabled-left_pun3b_39","purpur-quantity-selector--no-gap-disabled-right":"_purpur-quantity-selector--no-gap-disabled-right_pun3b_43","purpur-quantity-selector--no-gap-disabled":"_purpur-quantity-selector--no-gap-disabled_pun3b_39","purpur-quantity-selector__spinner":"_purpur-quantity-selector__spinner_pun3b_50","purpur-quantity-selector__spinner--full-width":"_purpur-quantity-selector__spinner--full-width_pun3b_57","purpur-quantity-selector__spinner--separated":"_purpur-quantity-selector__spinner--separated_pun3b_61"},Y={name:"minus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["minus"],category:"utility"},D=u=>n.jsx(V.b,{...u,svg:Y});D.displayName="IconMinus";const G={name:"plus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z" clip-rule="evenodd"/></svg>',keywords:["plus"],category:"utility"},F=u=>n.jsx(V.b,{...u,svg:G});F.displayName="IconPlus";const W={"purpur-quantity-selector-button":"_purpur-quantity-selector-button_qjlbs_1","purpur-quantity-selector-button--gap-left":"_purpur-quantity-selector-button--gap-left_qjlbs_4","purpur-quantity-selector-button--gap-right":"_purpur-quantity-selector-button--gap-right_qjlbs_7","purpur-quantity-selector-button--no-gap-right":"_purpur-quantity-selector-button--no-gap-right_qjlbs_10","purpur-quantity-selector-button--no-gap-left":"_purpur-quantity-selector-button--no-gap-left_qjlbs_13"},T=C.c.bind(W),b="purpur-quantity-selector-button",tt=({["data-testid"]:u,disabled:m,hasGap:e,variant:f,buttonType:r,onClick:o})=>{const h=T(b,{[`${b}--gap-left`]:e&&r==="decrement",[`${b}--gap-right`]:e&&r==="increment",[`${b}--no-gap-left`]:!e&&r==="decrement",[`${b}--no-gap-right`]:!e&&r==="increment"});return n.jsx(K.Button,{"data-testid":u,className:h,size:"sm",type:"submit",variant:f,onClick:()=>o(r),iconOnly:!0,disabled:m,tabIndex:-1,children:r==="increment"?n.jsx(F,{size:"xs"}):n.jsx(D,{size:"xs"})})},B=C.c.bind(L),et=["attached","separated"],nt=["primary","secondary"],s="purpur-quantity-selector",R=_.forwardRef(({["data-testid"]:u,className:m,variant:e,buttonVariant:f,onChange:r,value:o,defaultValue:h,fullWidth:x,disabled:k,loading:v,minValue:E,maxValue:H,ariaLabelDecrement:M,ariaLabelIncrement:z,...Q},I)=>{const[O,$]=_.useState(h??0),[w,j]=_.useState(O),a=o!==void 0,l=a?o:w,S=t=>u?`${u}-${t}`:void 0,i=k||v,g=Math.max(E??0,0),q=H??Number.MAX_SAFE_INTEGER,p=l===q,d=l===g;_.useEffect(()=>{a&&$(o)},[o,a]),_.useEffect(()=>{if(!a){const t=setTimeout(()=>{$(w)},300);return()=>clearTimeout(t)}},[w,a,r]);const A=B(m,s,{[`${s}--no-gap`]:e==="attached"&&!i&&!d&&!p,[`${s}--no-gap-disabled-left`]:e==="attached"&&!i&&!p&&d,[`${s}--no-gap-disabled-right`]:e==="attached"&&!i&&!d&&p,[`${s}--no-gap-disabled`]:e==="attached"&&(i||p&&d),[`${s}--full-width`]:x,[`${s}--loading`]:v}),Z=t=>{if(!/^[0-9]*$/.test(t.target.value))return;const y=+t.target.value;y<g||y>q||(a||j(y),r(y))},P=t=>{const c=t==="increment"?l+1:l-1;c<0||(a||j(c),r(c))},N=t=>{const c=t==="increment"&&p||t==="decrement"&&d;return n.jsx(tt,{"data-testid":S("button-"+t),variant:f,buttonType:t,hasGap:e==="separated",onClick:P,disabled:i||c,"aria-label":t==="increment"?z:M})},U=n.jsxs(n.Fragment,{children:[v&&n.jsx("div",{className:B(`${s}__spinner`,{[`${s}__spinner--full-width`]:x,[`${s}__spinner--separated`]:!x&&e==="separated"}),children:n.jsx(X.Spinner,{disabled:i,size:"xs","data-testid":S("spinner")},"spinner")}),N("decrement")]});return n.jsx(J.TextField,{value:l,type:"number",ref:I,className:A,"data-testid":u,onChange:Z,beforeField:U,afterField:N("increment"),disabled:i,min:g,max:q,role:"spinbutton","aria-valuenow":l,"aria-valuemax":q,"aria-valuemin":g,...Q})});R.displayName="QuantitySelector";exports.QuantitySelector=R;exports.quantitySelectorButtonVariants=nt;exports.quantitySelectorVariants=et;
2
+ //# sourceMappingURL=quantity-selector-CjSAaj7d.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quantity-selector-DPOTlMSq.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"spCAEMA,EAAI,CACR,KAAM,QACN,IAAK,6MACL,SAAU,CAAC,OAAO,EAClB,SAAU,SACZ,EAAGC,EAAKC,GAAsBC,MAAEC,EAAAA,EAAG,CAAE,GAAGF,EAAG,IAAKF,EAAG,EACnDC,EAAE,YAAc,YCNhB,MAAMA,EAAI,CACR,KAAM,OACN,IAAK,qQACL,SAAU,CAAC,MAAM,EACjB,SAAU,SACZ,EAAGI,EAAKH,GAAsBC,MAAEG,EAAAA,EAAG,CAAE,GAAGJ,EAAG,IAAKD,EAAG,EACnDI,EAAE,YAAc,wfCYVE,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,kCAETC,GAAyB,CAAC,CACrC,CAAC,eAAgBC,EACjB,SAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,QAAAC,CACF,IAAmC,CACjC,MAAMC,EAAUX,EAAGG,EAAe,CAChC,CAAC,GAAGA,CAAa,YAAY,EAAGI,GAAUE,IAAe,YACzD,CAAC,GAAGN,CAAa,aAAa,EAAGI,GAAUE,IAAe,YAC1D,CAAC,GAAGN,CAAa,eAAe,EAAG,CAACI,GAAUE,IAAe,YAC7D,CAAC,GAAGN,CAAa,gBAAgB,EAAG,CAACI,GAAUE,IAAe,WAAA,CAC/D,EAED,OACEG,EAAAA,IAACC,EAAAA,OAAA,CACC,cAAaR,EACb,UAAWM,EACX,KAAK,KACL,KAAK,SACL,QAAAH,EACA,QAAS,IAAME,EAAQD,CAAU,EACjC,SAAU,GACV,SAAAH,EACA,SAAU,GAET,SAAAG,IAAe,YAAcG,EAAAA,IAACE,EAAA,CAAS,KAAK,KAAK,EAAKF,EAAAA,IAACG,EAAA,CAAU,KAAK,IAAA,CAAK,CAAA,CAAA,CAGlF,EC5CMf,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAEXc,GAA2B,CAAC,WAAY,WAAW,EACnDC,GAAiC,CAAC,UAAW,WAAW,EAyB/Dd,EAAgB,2BAETe,EAAmBC,EAAAA,WAC9B,CACE,CACE,CAAC,eAAgBC,EACjB,UAAAC,EACA,QAAAb,EACA,cAAAc,EACA,SAAAC,EACA,MAAOC,EACP,aAAAC,EACA,UAAAC,EACA,SAAApB,EACA,QAAAqB,EACA,SAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,mBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAACC,EAAmBC,CAAoB,EAAIC,EAAAA,SAASX,GAAgB,CAAC,EACtE,CAACY,EAAgBC,CAAiB,EAAIF,EAAAA,SAASF,CAAiB,EAChEK,EAAef,IAAoB,OACnCgB,EAAQD,EAAef,EAAkBa,EAEzCI,EAAaC,GAAkBtB,EAAa,GAAGA,CAAU,IAAIsB,CAAI,GAAK,OACtEC,EAAarC,GAAYqB,EACzBiB,EAAM,KAAK,IAAIhB,GAAY,EAAG,CAAC,EAC/BiB,EAAMhB,GAAY,OAAO,iBACzBiB,EAAoBN,IAAUK,EAC9BE,EAAoBP,IAAUI,EAEpCI,EAAAA,UAAU,IAAM,CACVT,GACFJ,EAAqBX,CAAe,CAExC,EAAG,CAACA,EAAiBe,CAAY,CAAC,EAElCS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACT,EAAc,CACjB,MAAMU,EAAQ,WAAW,IAAM,CAC7Bd,EAAqBE,CAAc,CACrC,EAAG,GAAG,EAEN,MAAO,IAAM,aAAaY,CAAK,CACjC,CAEF,EAAG,CAACZ,EAAgBE,EAAchB,CAAQ,CAAC,EAE3C,MAAMZ,EAAUX,EAAGqB,EAAWlB,EAAe,CAC3C,CAAC,GAAGA,CAAa,UAAU,EACzBK,IAAY,YAAc,CAACmC,GAAc,CAACI,GAAqB,CAACD,EAClE,CAAC,GAAG3C,CAAa,wBAAwB,EACvCK,IAAY,YAAc,CAACmC,GAAc,CAACG,GAAqBC,EACjE,CAAC,GAAG5C,CAAa,yBAAyB,EACxCK,IAAY,YAAc,CAACmC,GAAc,CAACI,GAAqBD,EACjE,CAAC,GAAG3C,CAAa,mBAAmB,EAClCK,IAAY,aAAemC,GAAeG,GAAqBC,GACjE,CAAC,GAAG5C,CAAa,cAAc,EAAGuB,EAClC,CAAC,GAAGvB,CAAa,WAAW,EAAGwB,CAAA,CAChC,EAEKuB,EAAkBxD,GAAqC,CAE3D,GAAI,CADiB,WACH,KAAKA,EAAE,OAAO,KAAK,EACnC,OAEF,MAAMyD,EAAM,CAACzD,EAAE,OAAO,MAClByD,EAAMP,GAAOO,EAAMN,IAIlBN,GACHD,EAAkBa,CAAG,EAEvB5B,EAAS4B,CAAG,EACd,EAEMC,EAAiBC,GAA8C,CACnE,MAAMC,EAAgBD,IAAmB,YAAcb,EAAQ,EAAIA,EAAQ,EACvEc,EAAgB,IAIff,GACHD,EAAkBgB,CAAa,EAEjC/B,EAAS+B,CAAa,EACxB,EAEMC,EAAoBF,GAA8C,CACtE,MAAMG,EACHH,IAAmB,aAAeP,GAClCO,IAAmB,aAAeN,EACrC,OACEnC,EAAAA,IAACR,GAAA,CACC,cAAaqC,EAAU,UAAYY,CAAc,EACjD,QAAS/B,EACT,WAAY+B,EACZ,OAAQ7C,IAAY,YACpB,QAAS4C,EACT,SAAUT,GAAca,EACxB,aAAYH,IAAmB,YAActB,EAAqBD,CAAA,CAAA,CAGxE,EAEM2B,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAhC,GACCf,EAAAA,IAAC,MAAA,CACC,UAAWZ,EAAG,GAAGG,CAAa,YAAa,CACzC,CAAC,GAAGA,CAAa,uBAAuB,EAAGuB,EAC3C,CAAC,GAAGvB,CAAa,sBAAsB,EAAG,CAACuB,GAAalB,IAAY,WAAA,CACrE,EAED,SAAAI,EAAAA,IAACgD,EAAAA,QAAA,CAEC,SAAUjB,EACV,KAAK,KACL,cAAaF,EAAU,SAAS,CAAA,EAH5B,SAAA,CAIN,CAAA,EAGHc,EAAiB,WAAW,CAAA,EAC/B,EAGF,OACE3C,EAAAA,IAACiD,EAAAA,UAAA,CACC,MAAArB,EACA,KAAK,SACL,IAAAP,EACA,UAAWtB,EACX,cAAaS,EACb,SAAU8B,EACV,YAAAO,EACA,WAAYF,EAAiB,WAAW,EACxC,SAAUZ,EACV,IAAAC,EACA,IAAAC,EACA,KAAK,aACL,gBAAeL,EACf,gBAAeK,EACf,gBAAeD,EACd,GAAGZ,CAAA,CAAA,CAGV,CACF,EAEAd,EAAiB,YAAc"}
1
+ {"version":3,"file":"quantity-selector-CjSAaj7d.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as a, jsxs as X, Fragment as J } from "react/jsx-runtime";
2
2
  import { forwardRef as K, useState as S, useEffect as B } from "react";
3
3
  import { a as L } from "./spinner-DRQN6YdK.mjs";
4
- import { T as Y } from "./text-field-PKAaXO1N.mjs";
4
+ import { T as Y } from "./text-field-5rIuW8gc.mjs";
5
5
  import { c as j } from "./bind-CU-R61T-.mjs";
6
- import { c as G } from "./button-DBX_tvfJ.mjs";
6
+ import { b as G } from "./button-BfYKNBmC.mjs";
7
7
  import { b as k } from "./icon-DNHpBTHs-JfI8WyiR.mjs";
8
8
  const W = {
9
9
  "purpur-quantity-selector": "_purpur-quantity-selector_pun3b_1",
@@ -170,7 +170,7 @@ const et = {
170
170
  st.displayName = "QuantitySelector";
171
171
  export {
172
172
  st as Q,
173
- _t as a,
174
- dt as q
173
+ dt as a,
174
+ _t as q
175
175
  };
176
- //# sourceMappingURL=quantity-selector-_VcZYLjR.mjs.map
176
+ //# sourceMappingURL=quantity-selector-HvyYSKah.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"quantity-selector-_VcZYLjR.mjs","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
1
+ {"version":3,"file":"quantity-selector-HvyYSKah.mjs","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./quantity-selector-DPOTlMSq.js");exports.QuantitySelector=t.QuantitySelector;exports.quantitySelectorButtonVariants=t.quantitySelectorButtonVariants;exports.quantitySelectorVariants=t.quantitySelectorVariants;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./quantity-selector-CjSAaj7d.js");exports.QuantitySelector=t.QuantitySelector;exports.quantitySelectorButtonVariants=t.quantitySelectorButtonVariants;exports.quantitySelectorVariants=t.quantitySelectorVariants;
2
2
  //# sourceMappingURL=quantity-selector.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { Q as e, a as r, q as n } from "./quantity-selector-_VcZYLjR.mjs";
1
+ import { Q as e, q as r, a as n } from "./quantity-selector-HvyYSKah.mjs";
2
2
  export {
3
3
  e as QuantitySelector,
4
4
  r as quantitySelectorButtonVariants,
@@ -1,2 +1,2 @@
1
- "use strict";const t=require("react/jsx-runtime"),R=require("react"),I=require("./field-helper-text-DSKO-Tce.js"),v=require("./label-yHK80hhV.js"),d=require("./index-BbtRr5Q6.js"),N=require("./bind-DeUYJ6m9.js"),T=require("./heading-DLCdW6gx.js"),B={"purpur-radio-button-group-item":"_purpur-radio-button-group-item_1j3ch_1","purpur-radio-button-group-item__radio":"_purpur-radio-button-group-item__radio_1j3ch_14","purpur-radio-button-group-item__label":"_purpur-radio-button-group-item__label_1j3ch_42","purpur-radio-button-group-item__container":"_purpur-radio-button-group-item__container_1j3ch_45","purpur-radio-button-group-item__item-label-container":"_purpur-radio-button-group-item__item-label-container_1j3ch_53","purpur-radio-button-group-item__item-helper":"_purpur-radio-button-group-item__item-helper_1j3ch_53","purpur-radio-button-group-item__label-container":"_purpur-radio-button-group-item__label-container_1j3ch_56","purpur-radio-button-group-item__indicator":"_purpur-radio-button-group-item__indicator_1j3ch_79"},u=N.c.bind(B),G=["ltr","rtl"],q=["horizontal","vertical"],i="purpur-radio-button-group-item",j=R.forwardRef(({disabled:o,id:r,value:_,label:a,"data-testid":e,helperText:n,...p},l)=>t.jsxs("div",{className:u(`${i}__container`),...p,children:[t.jsx(d.Item2,{className:u(i),"data-testid":e,disabled:o,id:r,ref:l,value:_,"aria-labelledby":`${r}-label ${r}-helper-text`,children:t.jsx("span",{className:u(`${i}__radio`),children:t.jsx(d.Indicator,{className:u(`${i}__indicator`)})})}),t.jsxs("span",{className:u(`${i}__label-container`),children:[t.jsx(v.Label,{htmlFor:r,id:`${r}-label`,className:u(`${i}__label`),disabled:o,children:a}),n&&t.jsx(I.FieldHelperText,{className:u(`${i}__helper`),"data-testid":e&&`${e}-helper-text`,disabled:o,id:`${r}-helper-text`,children:n})]})]},r)),U={"purpur-radio-button-group":"_purpur-radio-button-group_v7z64_1","purpur-radio-button-group__item-container":"_purpur-radio-button-group__item-container_v7z64_10","purpur-radio-button-group__container":"_purpur-radio-button-group__container_v7z64_13"},g=N.c.bind(U),h="purpur-radio-button-group",x=R.forwardRef(({id:o,"data-testid":r,className:_,items:a,heading:e,loop:n=!0,orientation:p="vertical",headingTag:l="h2",children:b,...c},O)=>{if(!a?.length&&!b)return null;const $=()=>a?.map(m=>t.jsx(j,{disabled:c.disabled,...m},`radio-item-${m.value}`));return t.jsxs("div",{className:g(_,`${h}__container`),children:[e&&t.jsxs(T.Heading,{tag:l,"data-testid":r?`${r}-heading`:void 0,id:`${o}-heading`,variant:"subsection-100",children:[c.required&&t.jsx("span",{"aria-hidden":!0,children:"* "}),e]}),t.jsx(d.Root2,{...c,"aria-labelledby":e?`${o}-heading`:void 0,className:g(h),"data-testid":r,loop:n,orientation:p,ref:O,children:a?.length?$():b})]})});x.displayName="RadioButtonGroupRoot";const s=({children:o,...r})=>t.jsx(x,{...r,children:o});s.Item=j;s.displayName="RadioButtonGroup";exports.RADIO_BUTTON_GROUP_DIRECTION=G;exports.RADIO_BUTTON_GROUP_ORIENTATION=q;exports.RadioButtonGroup=s;
2
- //# sourceMappingURL=radio-button-group-CZ_FnVAi.js.map
1
+ "use strict";const t=require("react/jsx-runtime"),R=require("react"),I=require("./field-helper-text-DSKO-Tce.js"),v=require("./label-yHK80hhV.js"),d=require("./index-BbtRr5Q6.js"),N=require("./bind-DeUYJ6m9.js"),T=require("./heading-drD5ugCC.js"),B={"purpur-radio-button-group-item":"_purpur-radio-button-group-item_1j3ch_1","purpur-radio-button-group-item__radio":"_purpur-radio-button-group-item__radio_1j3ch_14","purpur-radio-button-group-item__label":"_purpur-radio-button-group-item__label_1j3ch_42","purpur-radio-button-group-item__container":"_purpur-radio-button-group-item__container_1j3ch_45","purpur-radio-button-group-item__item-label-container":"_purpur-radio-button-group-item__item-label-container_1j3ch_53","purpur-radio-button-group-item__item-helper":"_purpur-radio-button-group-item__item-helper_1j3ch_53","purpur-radio-button-group-item__label-container":"_purpur-radio-button-group-item__label-container_1j3ch_56","purpur-radio-button-group-item__indicator":"_purpur-radio-button-group-item__indicator_1j3ch_79"},u=N.c.bind(B),G=["ltr","rtl"],q=["horizontal","vertical"],i="purpur-radio-button-group-item",j=R.forwardRef(({disabled:o,id:r,value:_,label:a,"data-testid":e,helperText:n,...p},l)=>t.jsxs("div",{className:u(`${i}__container`),...p,children:[t.jsx(d.Item2,{className:u(i),"data-testid":e,disabled:o,id:r,ref:l,value:_,"aria-labelledby":`${r}-label ${r}-helper-text`,children:t.jsx("span",{className:u(`${i}__radio`),children:t.jsx(d.Indicator,{className:u(`${i}__indicator`)})})}),t.jsxs("span",{className:u(`${i}__label-container`),children:[t.jsx(v.Label,{htmlFor:r,id:`${r}-label`,className:u(`${i}__label`),disabled:o,children:a}),n&&t.jsx(I.FieldHelperText,{className:u(`${i}__helper`),"data-testid":e&&`${e}-helper-text`,disabled:o,id:`${r}-helper-text`,children:n})]})]},r)),U={"purpur-radio-button-group":"_purpur-radio-button-group_v7z64_1","purpur-radio-button-group__item-container":"_purpur-radio-button-group__item-container_v7z64_10","purpur-radio-button-group__container":"_purpur-radio-button-group__container_v7z64_13"},g=N.c.bind(U),h="purpur-radio-button-group",x=R.forwardRef(({id:o,"data-testid":r,className:_,items:a,heading:e,loop:n=!0,orientation:p="vertical",headingTag:l="h2",children:b,...c},O)=>{if(!a?.length&&!b)return null;const $=()=>a?.map(m=>t.jsx(j,{disabled:c.disabled,...m},`radio-item-${m.value}`));return t.jsxs("div",{className:g(_,`${h}__container`),children:[e&&t.jsxs(T.Heading,{tag:l,"data-testid":r?`${r}-heading`:void 0,id:`${o}-heading`,variant:"subsection-100",children:[c.required&&t.jsx("span",{"aria-hidden":!0,children:"* "}),e]}),t.jsx(d.Root2,{...c,"aria-labelledby":e?`${o}-heading`:void 0,className:g(h),"data-testid":r,loop:n,orientation:p,ref:O,children:a?.length?$():b})]})});x.displayName="RadioButtonGroupRoot";const s=({children:o,...r})=>t.jsx(x,{...r,children:o});s.Item=j;s.displayName="RadioButtonGroup";exports.RADIO_BUTTON_GROUP_DIRECTION=G;exports.RADIO_BUTTON_GROUP_ORIENTATION=q;exports.RadioButtonGroup=s;
2
+ //# sourceMappingURL=radio-button-group-BaFpGAcD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button-group-CZ_FnVAi.js","sources":["../../../components/radio-button-group/src/radio-button-group-item.tsx","../../../components/radio-button-group/src/radio-button-group-root.tsx","../../../components/radio-button-group/src/radio-button-group.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { Label } from \"@purpur/label\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group-item.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nexport type RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n id: string;\n label: string;\n value: string;\n helperText?: string;\n};\n\nconst rootClassName = \"purpur-radio-button-group-item\";\n\nexport const RadioButtonGroupItem = forwardRef<HTMLButtonElement, RadioButtonGroupItem>(\n ({ disabled, id, value, label, \"data-testid\": dataTestId, helperText, ...props }, ref) => {\n return (\n <div key={id} className={cx(`${rootClassName}__container`)} {...props}>\n <RadixRadioGroup.Item\n className={cx(rootClassName)}\n data-testid={dataTestId}\n disabled={disabled}\n id={id}\n ref={ref}\n value={value}\n aria-labelledby={`${id}-label ${id}-helper-text`}\n >\n <span className={cx(`${rootClassName}__radio`)}>\n <RadixRadioGroup.Indicator className={cx(`${rootClassName}__indicator`)} />\n </span>\n </RadixRadioGroup.Item>\n <span className={cx(`${rootClassName}__label-container`)}>\n <Label\n htmlFor={id}\n id={`${id}-label`}\n className={cx(`${rootClassName}__label`)}\n disabled={disabled}\n >\n {label}\n </Label>\n {helperText && (\n <FieldHelperText\n className={cx(`${rootClassName}__helper`)}\n data-testid={dataTestId && `${dataTestId}-helper-text`}\n disabled={disabled}\n id={`${id}-helper-text`}\n >\n {helperText}\n </FieldHelperText>\n )}\n </span>\n </div>\n );\n }\n);\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group.module.scss\";\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nconst cx = c.bind(styles);\n\nexport type RadioButtonGroupRootProps = Omit<BaseProps, \"id\"> & {\n /**\n * ID of the radio group container.\n * */\n id: string;\n /**\n * To use when no heading is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * The value of the radio item that should be checked when initially rendered. Use when you do not need to control the state of the radio items.\n * */\n defaultValue?: string;\n /**\n * The reading direction of the radio group. If omitted, it assumes LTR (left-to-right) reading mode.\n * */\n dir?: (typeof RADIO_BUTTON_GROUP_DIRECTION)[number];\n /**\n * When true, prevents the user from interacting with radio items.\n * */\n disabled?: boolean;\n /**\n * The radio items.\n *\n RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n helperText?: string;\n id: string;\n label: string;\n ref?: Ref<HTMLButtonElement>;\n value: string;\n }[]\n * */\n items?: RadioButtonGroupItem[];\n /**\n * Radio group children. Best used with `RadioButtonGroup.Item`.\n */\n children?: ReactNode;\n /**\n * When true, keyboard navigation will loop from last item to first, and vice versa.\n * */\n loop?: boolean;\n /**\n * The name of the group. Submitted with its owning form as part of a name/value pair.\n * */\n name?: string;\n /**\n * Event handler called when the value changes.\n * */\n onValueChange?: (value: string) => void;\n /**\n * The orientation of the component.\n * */\n orientation?: (typeof RADIO_BUTTON_GROUP_ORIENTATION)[number];\n /**\n * When true, indicates that the user must check a radio item before the owning form can be submitted.\n * */\n required?: boolean;\n /**\n * The controlled value of the radio item to check. Should be used in conjunction with onValueChange.\n * */\n value?: string;\n /**\n * Renders above the radio group as a heading.\n * */\n heading?: string;\n /**\n * Changes heading level for heading.\n */\n headingTag?: HeadingTagType;\n};\n\nconst rootClassName = \"purpur-radio-button-group\";\n\nexport const RadioButtonGroupRoot = forwardRef<HTMLDivElement, RadioButtonGroupRootProps>(\n (\n {\n id,\n \"data-testid\": dataTestId,\n className,\n items,\n heading,\n loop = true,\n orientation = \"vertical\",\n headingTag = \"h2\",\n children,\n ...props\n },\n ref\n ) => {\n if (!items?.length && !children) {\n return null;\n }\n\n const itemsRenderer = () => {\n return items?.map((item) => (\n <RadioButtonGroupItem\n key={`radio-item-${item.value}`}\n disabled={props.disabled}\n {...item}\n />\n ));\n };\n\n return (\n <div className={cx(className, `${rootClassName}__container`)}>\n {heading && (\n <Heading\n tag={headingTag}\n data-testid={dataTestId ? `${dataTestId}-heading` : undefined}\n id={`${id}-heading`}\n variant=\"subsection-100\"\n >\n {props.required && <span aria-hidden>{\"* \"}</span>}\n {heading}\n </Heading>\n )}\n <RadixRadioGroup.Root\n {...props}\n aria-labelledby={heading ? `${id}-heading` : undefined}\n className={cx(rootClassName)}\n data-testid={dataTestId}\n loop={loop}\n orientation={orientation}\n ref={ref}\n >\n {items?.length ? itemsRenderer() : children}\n </RadixRadioGroup.Root>\n </div>\n );\n }\n);\n\nRadioButtonGroupRoot.displayName = \"RadioButtonGroupRoot\";\n","import React from \"react\";\n\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\nimport type { RadioButtonGroupRootProps } from \"./radio-button-group-root\";\nimport { RadioButtonGroupRoot } from \"./radio-button-group-root\";\n\nexport {\n RADIO_BUTTON_GROUP_DIRECTION,\n RADIO_BUTTON_GROUP_ORIENTATION,\n} from \"./radio-button-group-item\";\n\ntype RadioButtonGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof RadioButtonGroupItem;\n};\n\nexport type RadioButtonGroupProps = RadioButtonGroupRootProps;\n\nexport const RadioButtonGroup: RadioButtonGroupCmp<RadioButtonGroupProps> = ({\n children,\n ...props\n}: RadioButtonGroupProps) => {\n return <RadioButtonGroupRoot {...props}>{children}</RadioButtonGroupRoot>;\n};\n\nRadioButtonGroup.Item = RadioButtonGroupItem;\n\nRadioButtonGroup.displayName = \"RadioButtonGroup\";\n"],"names":["cx","c","styles","RADIO_BUTTON_GROUP_DIRECTION","RADIO_BUTTON_GROUP_ORIENTATION","rootClassName","RadioButtonGroupItem","forwardRef","disabled","id","value","label","dataTestId","helperText","props","ref","jsxs","jsx","RadixRadioGroup.Item","RadixRadioGroup.Indicator","Label","FieldHelperText","RadioButtonGroupRoot","className","items","heading","loop","orientation","headingTag","children","itemsRenderer","item","Heading","RadixRadioGroup.Root","RadioButtonGroup"],"mappings":"0gCAQMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAEXC,EAA+B,CAAC,MAAO,KAAK,EAC5CC,EAAiC,CAAC,aAAc,UAAU,EAWjEC,EAAgB,iCAETC,EAAuBC,EAAAA,WAClC,CAAC,CAAE,SAAAC,EAAU,GAAAC,EAAI,MAAAC,QAAOC,EAAO,cAAeC,EAAY,WAAAC,EAAY,GAAGC,CAAA,EAASC,IAE9EC,OAAC,OAAa,UAAWhB,EAAG,GAAGK,CAAa,aAAa,EAAI,GAAGS,EAC9D,SAAA,CAAAG,EAAAA,IAACC,EAAAA,MAAA,CACC,UAAWlB,EAAGK,CAAa,EAC3B,cAAaO,EACb,SAAAJ,EACA,GAAAC,EACA,IAAAM,EACA,MAAAL,EACA,kBAAiB,GAAGD,CAAE,UAAUA,CAAE,eAElC,eAAC,OAAA,CAAK,UAAWT,EAAG,GAAGK,CAAa,SAAS,EAC3C,SAAAY,MAACE,EAAAA,UAAA,CAA0B,UAAWnB,EAAG,GAAGK,CAAa,aAAa,EAAG,CAAA,CAC3E,CAAA,CAAA,SAED,OAAA,CAAK,UAAWL,EAAG,GAAGK,CAAa,mBAAmB,EACrD,SAAA,CAAAY,EAAAA,IAACG,EAAAA,MAAA,CACC,QAASX,EACT,GAAI,GAAGA,CAAE,SACT,UAAWT,EAAG,GAAGK,CAAa,SAAS,EACvC,SAAAG,EAEC,SAAAG,CAAA,CAAA,EAEFE,GACCI,EAAAA,IAACI,EAAAA,gBAAA,CACC,UAAWrB,EAAG,GAAGK,CAAa,UAAU,EACxC,cAAaO,GAAc,GAAGA,CAAU,eACxC,SAAAJ,EACA,GAAI,GAAGC,CAAE,eAER,SAAAI,CAAA,CAAA,CACH,CAAA,CAEJ,CAAA,CAAA,EAjCQJ,CAkCV,CAGN,iQCpDMT,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EA2ElBG,EAAgB,4BAETiB,EAAuBf,EAAAA,WAClC,CACE,CACE,GAAAE,EACA,cAAeG,EACf,UAAAW,EACA,MAAAC,EAAA,QACAC,EACA,KAAAC,EAAO,GACP,YAAAC,EAAc,WACd,WAAAC,EAAa,KACb,SAAAC,EACA,GAAGf,CAAA,EAELC,IACG,CACH,GAAI,CAACS,GAAO,QAAU,CAACK,EACrB,OAAO,KAGT,MAAMC,EAAgB,IACbN,GAAO,IAAKO,GACjBd,EAAAA,IAACX,EAAA,CAEC,SAAUQ,EAAM,SACf,GAAGiB,CAAA,EAFC,cAAcA,EAAK,KAAK,EAAA,CAIhC,EAGH,OACEf,OAAC,OAAI,UAAWhB,EAAGuB,EAAW,GAAGlB,CAAa,aAAa,EACxD,SAAA,CAAAoB,GACCT,EAAAA,KAACgB,EAAAA,QAAA,CACC,IAAKJ,EACL,cAAahB,EAAa,GAAGA,CAAU,WAAa,OACpD,GAAI,GAAGH,CAAE,WACT,QAAQ,iBAEP,SAAA,CAAAK,EAAM,UAAYG,EAAAA,IAAC,OAAA,CAAK,cAAW,GAAE,SAAA,KAAK,EAC1CQ,CAAA,CAAA,CAAA,EAGLR,EAAAA,IAACgB,EAAAA,MAAA,CACE,GAAGnB,EACJ,kBAAiBW,EAAU,GAAGhB,CAAE,WAAa,OAC7C,UAAWT,EAAGK,CAAa,EAC3B,cAAaO,EACb,KAAAc,EACA,YAAAC,EACA,IAAAZ,EAEC,SAAAS,GAAO,OAASM,IAAkBD,CAAA,CAAA,CACrC,EACF,CAEJ,CACF,EAEAP,EAAqB,YAAc,uBCnI5B,MAAMY,EAA+D,CAAC,CAC3E,SAAAL,EACA,GAAGf,CACL,IACSG,EAAAA,IAACK,EAAA,CAAsB,GAAGR,EAAQ,SAAAe,CAAA,CAAS,EAGpDK,EAAiB,KAAO5B,EAExB4B,EAAiB,YAAc"}
1
+ {"version":3,"file":"radio-button-group-BaFpGAcD.js","sources":["../../../components/radio-button-group/src/radio-button-group-item.tsx","../../../components/radio-button-group/src/radio-button-group-root.tsx","../../../components/radio-button-group/src/radio-button-group.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { Label } from \"@purpur/label\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group-item.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nexport type RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n id: string;\n label: string;\n value: string;\n helperText?: string;\n};\n\nconst rootClassName = \"purpur-radio-button-group-item\";\n\nexport const RadioButtonGroupItem = forwardRef<HTMLButtonElement, RadioButtonGroupItem>(\n ({ disabled, id, value, label, \"data-testid\": dataTestId, helperText, ...props }, ref) => {\n return (\n <div key={id} className={cx(`${rootClassName}__container`)} {...props}>\n <RadixRadioGroup.Item\n className={cx(rootClassName)}\n data-testid={dataTestId}\n disabled={disabled}\n id={id}\n ref={ref}\n value={value}\n aria-labelledby={`${id}-label ${id}-helper-text`}\n >\n <span className={cx(`${rootClassName}__radio`)}>\n <RadixRadioGroup.Indicator className={cx(`${rootClassName}__indicator`)} />\n </span>\n </RadixRadioGroup.Item>\n <span className={cx(`${rootClassName}__label-container`)}>\n <Label\n htmlFor={id}\n id={`${id}-label`}\n className={cx(`${rootClassName}__label`)}\n disabled={disabled}\n >\n {label}\n </Label>\n {helperText && (\n <FieldHelperText\n className={cx(`${rootClassName}__helper`)}\n data-testid={dataTestId && `${dataTestId}-helper-text`}\n disabled={disabled}\n id={`${id}-helper-text`}\n >\n {helperText}\n </FieldHelperText>\n )}\n </span>\n </div>\n );\n }\n);\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group.module.scss\";\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nconst cx = c.bind(styles);\n\nexport type RadioButtonGroupRootProps = Omit<BaseProps, \"id\"> & {\n /**\n * ID of the radio group container.\n * */\n id: string;\n /**\n * To use when no heading is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * The value of the radio item that should be checked when initially rendered. Use when you do not need to control the state of the radio items.\n * */\n defaultValue?: string;\n /**\n * The reading direction of the radio group. If omitted, it assumes LTR (left-to-right) reading mode.\n * */\n dir?: (typeof RADIO_BUTTON_GROUP_DIRECTION)[number];\n /**\n * When true, prevents the user from interacting with radio items.\n * */\n disabled?: boolean;\n /**\n * The radio items.\n *\n RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n helperText?: string;\n id: string;\n label: string;\n ref?: Ref<HTMLButtonElement>;\n value: string;\n }[]\n * */\n items?: RadioButtonGroupItem[];\n /**\n * Radio group children. Best used with `RadioButtonGroup.Item`.\n */\n children?: ReactNode;\n /**\n * When true, keyboard navigation will loop from last item to first, and vice versa.\n * */\n loop?: boolean;\n /**\n * The name of the group. Submitted with its owning form as part of a name/value pair.\n * */\n name?: string;\n /**\n * Event handler called when the value changes.\n * */\n onValueChange?: (value: string) => void;\n /**\n * The orientation of the component.\n * */\n orientation?: (typeof RADIO_BUTTON_GROUP_ORIENTATION)[number];\n /**\n * When true, indicates that the user must check a radio item before the owning form can be submitted.\n * */\n required?: boolean;\n /**\n * The controlled value of the radio item to check. Should be used in conjunction with onValueChange.\n * */\n value?: string;\n /**\n * Renders above the radio group as a heading.\n * */\n heading?: string;\n /**\n * Changes heading level for heading.\n */\n headingTag?: HeadingTagType;\n};\n\nconst rootClassName = \"purpur-radio-button-group\";\n\nexport const RadioButtonGroupRoot = forwardRef<HTMLDivElement, RadioButtonGroupRootProps>(\n (\n {\n id,\n \"data-testid\": dataTestId,\n className,\n items,\n heading,\n loop = true,\n orientation = \"vertical\",\n headingTag = \"h2\",\n children,\n ...props\n },\n ref\n ) => {\n if (!items?.length && !children) {\n return null;\n }\n\n const itemsRenderer = () => {\n return items?.map((item) => (\n <RadioButtonGroupItem\n key={`radio-item-${item.value}`}\n disabled={props.disabled}\n {...item}\n />\n ));\n };\n\n return (\n <div className={cx(className, `${rootClassName}__container`)}>\n {heading && (\n <Heading\n tag={headingTag}\n data-testid={dataTestId ? `${dataTestId}-heading` : undefined}\n id={`${id}-heading`}\n variant=\"subsection-100\"\n >\n {props.required && <span aria-hidden>{\"* \"}</span>}\n {heading}\n </Heading>\n )}\n <RadixRadioGroup.Root\n {...props}\n aria-labelledby={heading ? `${id}-heading` : undefined}\n className={cx(rootClassName)}\n data-testid={dataTestId}\n loop={loop}\n orientation={orientation}\n ref={ref}\n >\n {items?.length ? itemsRenderer() : children}\n </RadixRadioGroup.Root>\n </div>\n );\n }\n);\n\nRadioButtonGroupRoot.displayName = \"RadioButtonGroupRoot\";\n","import React from \"react\";\n\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\nimport type { RadioButtonGroupRootProps } from \"./radio-button-group-root\";\nimport { RadioButtonGroupRoot } from \"./radio-button-group-root\";\n\nexport {\n RADIO_BUTTON_GROUP_DIRECTION,\n RADIO_BUTTON_GROUP_ORIENTATION,\n} from \"./radio-button-group-item\";\n\ntype RadioButtonGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof RadioButtonGroupItem;\n};\n\nexport type RadioButtonGroupProps = RadioButtonGroupRootProps;\n\nexport const RadioButtonGroup: RadioButtonGroupCmp<RadioButtonGroupProps> = ({\n children,\n ...props\n}: RadioButtonGroupProps) => {\n return <RadioButtonGroupRoot {...props}>{children}</RadioButtonGroupRoot>;\n};\n\nRadioButtonGroup.Item = RadioButtonGroupItem;\n\nRadioButtonGroup.displayName = \"RadioButtonGroup\";\n"],"names":["cx","c","styles","RADIO_BUTTON_GROUP_DIRECTION","RADIO_BUTTON_GROUP_ORIENTATION","rootClassName","RadioButtonGroupItem","forwardRef","disabled","id","value","label","dataTestId","helperText","props","ref","jsxs","jsx","RadixRadioGroup.Item","RadixRadioGroup.Indicator","Label","FieldHelperText","RadioButtonGroupRoot","className","items","heading","loop","orientation","headingTag","children","itemsRenderer","item","Heading","RadixRadioGroup.Root","RadioButtonGroup"],"mappings":"0gCAQMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAEXC,EAA+B,CAAC,MAAO,KAAK,EAC5CC,EAAiC,CAAC,aAAc,UAAU,EAWjEC,EAAgB,iCAETC,EAAuBC,EAAAA,WAClC,CAAC,CAAE,SAAAC,EAAU,GAAAC,EAAI,MAAAC,QAAOC,EAAO,cAAeC,EAAY,WAAAC,EAAY,GAAGC,CAAA,EAASC,IAE9EC,OAAC,OAAa,UAAWhB,EAAG,GAAGK,CAAa,aAAa,EAAI,GAAGS,EAC9D,SAAA,CAAAG,EAAAA,IAACC,EAAAA,MAAA,CACC,UAAWlB,EAAGK,CAAa,EAC3B,cAAaO,EACb,SAAAJ,EACA,GAAAC,EACA,IAAAM,EACA,MAAAL,EACA,kBAAiB,GAAGD,CAAE,UAAUA,CAAE,eAElC,eAAC,OAAA,CAAK,UAAWT,EAAG,GAAGK,CAAa,SAAS,EAC3C,SAAAY,MAACE,EAAAA,UAAA,CAA0B,UAAWnB,EAAG,GAAGK,CAAa,aAAa,EAAG,CAAA,CAC3E,CAAA,CAAA,SAED,OAAA,CAAK,UAAWL,EAAG,GAAGK,CAAa,mBAAmB,EACrD,SAAA,CAAAY,EAAAA,IAACG,EAAAA,MAAA,CACC,QAASX,EACT,GAAI,GAAGA,CAAE,SACT,UAAWT,EAAG,GAAGK,CAAa,SAAS,EACvC,SAAAG,EAEC,SAAAG,CAAA,CAAA,EAEFE,GACCI,EAAAA,IAACI,EAAAA,gBAAA,CACC,UAAWrB,EAAG,GAAGK,CAAa,UAAU,EACxC,cAAaO,GAAc,GAAGA,CAAU,eACxC,SAAAJ,EACA,GAAI,GAAGC,CAAE,eAER,SAAAI,CAAA,CAAA,CACH,CAAA,CAEJ,CAAA,CAAA,EAjCQJ,CAkCV,CAGN,iQCpDMT,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EA2ElBG,EAAgB,4BAETiB,EAAuBf,EAAAA,WAClC,CACE,CACE,GAAAE,EACA,cAAeG,EACf,UAAAW,EACA,MAAAC,EAAA,QACAC,EACA,KAAAC,EAAO,GACP,YAAAC,EAAc,WACd,WAAAC,EAAa,KACb,SAAAC,EACA,GAAGf,CAAA,EAELC,IACG,CACH,GAAI,CAACS,GAAO,QAAU,CAACK,EACrB,OAAO,KAGT,MAAMC,EAAgB,IACbN,GAAO,IAAKO,GACjBd,EAAAA,IAACX,EAAA,CAEC,SAAUQ,EAAM,SACf,GAAGiB,CAAA,EAFC,cAAcA,EAAK,KAAK,EAAA,CAIhC,EAGH,OACEf,OAAC,OAAI,UAAWhB,EAAGuB,EAAW,GAAGlB,CAAa,aAAa,EACxD,SAAA,CAAAoB,GACCT,EAAAA,KAACgB,EAAAA,QAAA,CACC,IAAKJ,EACL,cAAahB,EAAa,GAAGA,CAAU,WAAa,OACpD,GAAI,GAAGH,CAAE,WACT,QAAQ,iBAEP,SAAA,CAAAK,EAAM,UAAYG,EAAAA,IAAC,OAAA,CAAK,cAAW,GAAE,SAAA,KAAK,EAC1CQ,CAAA,CAAA,CAAA,EAGLR,EAAAA,IAACgB,EAAAA,MAAA,CACE,GAAGnB,EACJ,kBAAiBW,EAAU,GAAGhB,CAAE,WAAa,OAC7C,UAAWT,EAAGK,CAAa,EAC3B,cAAaO,EACb,KAAAc,EACA,YAAAC,EACA,IAAAZ,EAEC,SAAAS,GAAO,OAASM,IAAkBD,CAAA,CAAA,CACrC,EACF,CAEJ,CACF,EAEAP,EAAqB,YAAc,uBCnI5B,MAAMY,EAA+D,CAAC,CAC3E,SAAAL,EACA,GAAGf,CACL,IACSG,EAAAA,IAACK,EAAA,CAAsB,GAAGR,EAAQ,SAAAe,CAAA,CAAS,EAGpDK,EAAiB,KAAO5B,EAExB4B,EAAiB,YAAc"}
@@ -4,7 +4,7 @@ import { F as O } from "./field-helper-text-C5ee4SFV.mjs";
4
4
  import { L as x } from "./label-7sJe5-pX.mjs";
5
5
  import { I as B, a as G, R as I } from "./index-DSf4qCR-.mjs";
6
6
  import { c as $ } from "./bind-CU-R61T-.mjs";
7
- import { a as y } from "./heading-gqtQNo5n.mjs";
7
+ import { H as y } from "./heading-xwBuT_-9.mjs";
8
8
  const z = {
9
9
  "purpur-radio-button-group-item": "_purpur-radio-button-group-item_1j3ch_1",
10
10
  "purpur-radio-button-group-item__radio": "_purpur-radio-button-group-item__radio_1j3ch_14",
@@ -117,8 +117,8 @@ const v = ({
117
117
  v.Item = N;
118
118
  v.displayName = "RadioButtonGroup";
119
119
  export {
120
- v as R,
121
- L as a,
122
- P as b
120
+ L as R,
121
+ P as a,
122
+ v as b
123
123
  };
124
- //# sourceMappingURL=radio-button-group-BnCPcmSN.mjs.map
124
+ //# sourceMappingURL=radio-button-group-CFqPsu5A.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button-group-BnCPcmSN.mjs","sources":["../../../components/radio-button-group/src/radio-button-group-item.tsx","../../../components/radio-button-group/src/radio-button-group-root.tsx","../../../components/radio-button-group/src/radio-button-group.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { Label } from \"@purpur/label\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group-item.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nexport type RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n id: string;\n label: string;\n value: string;\n helperText?: string;\n};\n\nconst rootClassName = \"purpur-radio-button-group-item\";\n\nexport const RadioButtonGroupItem = forwardRef<HTMLButtonElement, RadioButtonGroupItem>(\n ({ disabled, id, value, label, \"data-testid\": dataTestId, helperText, ...props }, ref) => {\n return (\n <div key={id} className={cx(`${rootClassName}__container`)} {...props}>\n <RadixRadioGroup.Item\n className={cx(rootClassName)}\n data-testid={dataTestId}\n disabled={disabled}\n id={id}\n ref={ref}\n value={value}\n aria-labelledby={`${id}-label ${id}-helper-text`}\n >\n <span className={cx(`${rootClassName}__radio`)}>\n <RadixRadioGroup.Indicator className={cx(`${rootClassName}__indicator`)} />\n </span>\n </RadixRadioGroup.Item>\n <span className={cx(`${rootClassName}__label-container`)}>\n <Label\n htmlFor={id}\n id={`${id}-label`}\n className={cx(`${rootClassName}__label`)}\n disabled={disabled}\n >\n {label}\n </Label>\n {helperText && (\n <FieldHelperText\n className={cx(`${rootClassName}__helper`)}\n data-testid={dataTestId && `${dataTestId}-helper-text`}\n disabled={disabled}\n id={`${id}-helper-text`}\n >\n {helperText}\n </FieldHelperText>\n )}\n </span>\n </div>\n );\n }\n);\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group.module.scss\";\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nconst cx = c.bind(styles);\n\nexport type RadioButtonGroupRootProps = Omit<BaseProps, \"id\"> & {\n /**\n * ID of the radio group container.\n * */\n id: string;\n /**\n * To use when no heading is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * The value of the radio item that should be checked when initially rendered. Use when you do not need to control the state of the radio items.\n * */\n defaultValue?: string;\n /**\n * The reading direction of the radio group. If omitted, it assumes LTR (left-to-right) reading mode.\n * */\n dir?: (typeof RADIO_BUTTON_GROUP_DIRECTION)[number];\n /**\n * When true, prevents the user from interacting with radio items.\n * */\n disabled?: boolean;\n /**\n * The radio items.\n *\n RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n helperText?: string;\n id: string;\n label: string;\n ref?: Ref<HTMLButtonElement>;\n value: string;\n }[]\n * */\n items?: RadioButtonGroupItem[];\n /**\n * Radio group children. Best used with `RadioButtonGroup.Item`.\n */\n children?: ReactNode;\n /**\n * When true, keyboard navigation will loop from last item to first, and vice versa.\n * */\n loop?: boolean;\n /**\n * The name of the group. Submitted with its owning form as part of a name/value pair.\n * */\n name?: string;\n /**\n * Event handler called when the value changes.\n * */\n onValueChange?: (value: string) => void;\n /**\n * The orientation of the component.\n * */\n orientation?: (typeof RADIO_BUTTON_GROUP_ORIENTATION)[number];\n /**\n * When true, indicates that the user must check a radio item before the owning form can be submitted.\n * */\n required?: boolean;\n /**\n * The controlled value of the radio item to check. Should be used in conjunction with onValueChange.\n * */\n value?: string;\n /**\n * Renders above the radio group as a heading.\n * */\n heading?: string;\n /**\n * Changes heading level for heading.\n */\n headingTag?: HeadingTagType;\n};\n\nconst rootClassName = \"purpur-radio-button-group\";\n\nexport const RadioButtonGroupRoot = forwardRef<HTMLDivElement, RadioButtonGroupRootProps>(\n (\n {\n id,\n \"data-testid\": dataTestId,\n className,\n items,\n heading,\n loop = true,\n orientation = \"vertical\",\n headingTag = \"h2\",\n children,\n ...props\n },\n ref\n ) => {\n if (!items?.length && !children) {\n return null;\n }\n\n const itemsRenderer = () => {\n return items?.map((item) => (\n <RadioButtonGroupItem\n key={`radio-item-${item.value}`}\n disabled={props.disabled}\n {...item}\n />\n ));\n };\n\n return (\n <div className={cx(className, `${rootClassName}__container`)}>\n {heading && (\n <Heading\n tag={headingTag}\n data-testid={dataTestId ? `${dataTestId}-heading` : undefined}\n id={`${id}-heading`}\n variant=\"subsection-100\"\n >\n {props.required && <span aria-hidden>{\"* \"}</span>}\n {heading}\n </Heading>\n )}\n <RadixRadioGroup.Root\n {...props}\n aria-labelledby={heading ? `${id}-heading` : undefined}\n className={cx(rootClassName)}\n data-testid={dataTestId}\n loop={loop}\n orientation={orientation}\n ref={ref}\n >\n {items?.length ? itemsRenderer() : children}\n </RadixRadioGroup.Root>\n </div>\n );\n }\n);\n\nRadioButtonGroupRoot.displayName = \"RadioButtonGroupRoot\";\n","import React from \"react\";\n\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\nimport type { RadioButtonGroupRootProps } from \"./radio-button-group-root\";\nimport { RadioButtonGroupRoot } from \"./radio-button-group-root\";\n\nexport {\n RADIO_BUTTON_GROUP_DIRECTION,\n RADIO_BUTTON_GROUP_ORIENTATION,\n} from \"./radio-button-group-item\";\n\ntype RadioButtonGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof RadioButtonGroupItem;\n};\n\nexport type RadioButtonGroupProps = RadioButtonGroupRootProps;\n\nexport const RadioButtonGroup: RadioButtonGroupCmp<RadioButtonGroupProps> = ({\n children,\n ...props\n}: RadioButtonGroupProps) => {\n return <RadioButtonGroupRoot {...props}>{children}</RadioButtonGroupRoot>;\n};\n\nRadioButtonGroup.Item = RadioButtonGroupItem;\n\nRadioButtonGroup.displayName = \"RadioButtonGroup\";\n"],"names":["cx","c","styles","RADIO_BUTTON_GROUP_DIRECTION","RADIO_BUTTON_GROUP_ORIENTATION","rootClassName","RadioButtonGroupItem","forwardRef","disabled","id","value","label","dataTestId","helperText","props","ref","jsxs","jsx","RadixRadioGroup.Item","RadixRadioGroup.Indicator","Label","FieldHelperText","RadioButtonGroupRoot","className","items","heading","loop","orientation","headingTag","children","itemsRenderer","item","Heading","RadixRadioGroup.Root","RadioButtonGroup"],"mappings":"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"}
1
+ {"version":3,"file":"radio-button-group-CFqPsu5A.mjs","sources":["../../../components/radio-button-group/src/radio-button-group-item.tsx","../../../components/radio-button-group/src/radio-button-group-root.tsx","../../../components/radio-button-group/src/radio-button-group.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { Label } from \"@purpur/label\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group-item.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nexport type RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n id: string;\n label: string;\n value: string;\n helperText?: string;\n};\n\nconst rootClassName = \"purpur-radio-button-group-item\";\n\nexport const RadioButtonGroupItem = forwardRef<HTMLButtonElement, RadioButtonGroupItem>(\n ({ disabled, id, value, label, \"data-testid\": dataTestId, helperText, ...props }, ref) => {\n return (\n <div key={id} className={cx(`${rootClassName}__container`)} {...props}>\n <RadixRadioGroup.Item\n className={cx(rootClassName)}\n data-testid={dataTestId}\n disabled={disabled}\n id={id}\n ref={ref}\n value={value}\n aria-labelledby={`${id}-label ${id}-helper-text`}\n >\n <span className={cx(`${rootClassName}__radio`)}>\n <RadixRadioGroup.Indicator className={cx(`${rootClassName}__indicator`)} />\n </span>\n </RadixRadioGroup.Item>\n <span className={cx(`${rootClassName}__label-container`)}>\n <Label\n htmlFor={id}\n id={`${id}-label`}\n className={cx(`${rootClassName}__label`)}\n disabled={disabled}\n >\n {label}\n </Label>\n {helperText && (\n <FieldHelperText\n className={cx(`${rootClassName}__helper`)}\n data-testid={dataTestId && `${dataTestId}-helper-text`}\n disabled={disabled}\n id={`${id}-helper-text`}\n >\n {helperText}\n </FieldHelperText>\n )}\n </span>\n </div>\n );\n }\n);\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./radio-button-group.module.scss\";\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\n\nexport const RADIO_BUTTON_GROUP_DIRECTION = [\"ltr\", \"rtl\"] as const;\nexport const RADIO_BUTTON_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\n\nconst cx = c.bind(styles);\n\nexport type RadioButtonGroupRootProps = Omit<BaseProps, \"id\"> & {\n /**\n * ID of the radio group container.\n * */\n id: string;\n /**\n * To use when no heading is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * The value of the radio item that should be checked when initially rendered. Use when you do not need to control the state of the radio items.\n * */\n defaultValue?: string;\n /**\n * The reading direction of the radio group. If omitted, it assumes LTR (left-to-right) reading mode.\n * */\n dir?: (typeof RADIO_BUTTON_GROUP_DIRECTION)[number];\n /**\n * When true, prevents the user from interacting with radio items.\n * */\n disabled?: boolean;\n /**\n * The radio items.\n *\n RadioButtonGroupItem = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n helperText?: string;\n id: string;\n label: string;\n ref?: Ref<HTMLButtonElement>;\n value: string;\n }[]\n * */\n items?: RadioButtonGroupItem[];\n /**\n * Radio group children. Best used with `RadioButtonGroup.Item`.\n */\n children?: ReactNode;\n /**\n * When true, keyboard navigation will loop from last item to first, and vice versa.\n * */\n loop?: boolean;\n /**\n * The name of the group. Submitted with its owning form as part of a name/value pair.\n * */\n name?: string;\n /**\n * Event handler called when the value changes.\n * */\n onValueChange?: (value: string) => void;\n /**\n * The orientation of the component.\n * */\n orientation?: (typeof RADIO_BUTTON_GROUP_ORIENTATION)[number];\n /**\n * When true, indicates that the user must check a radio item before the owning form can be submitted.\n * */\n required?: boolean;\n /**\n * The controlled value of the radio item to check. Should be used in conjunction with onValueChange.\n * */\n value?: string;\n /**\n * Renders above the radio group as a heading.\n * */\n heading?: string;\n /**\n * Changes heading level for heading.\n */\n headingTag?: HeadingTagType;\n};\n\nconst rootClassName = \"purpur-radio-button-group\";\n\nexport const RadioButtonGroupRoot = forwardRef<HTMLDivElement, RadioButtonGroupRootProps>(\n (\n {\n id,\n \"data-testid\": dataTestId,\n className,\n items,\n heading,\n loop = true,\n orientation = \"vertical\",\n headingTag = \"h2\",\n children,\n ...props\n },\n ref\n ) => {\n if (!items?.length && !children) {\n return null;\n }\n\n const itemsRenderer = () => {\n return items?.map((item) => (\n <RadioButtonGroupItem\n key={`radio-item-${item.value}`}\n disabled={props.disabled}\n {...item}\n />\n ));\n };\n\n return (\n <div className={cx(className, `${rootClassName}__container`)}>\n {heading && (\n <Heading\n tag={headingTag}\n data-testid={dataTestId ? `${dataTestId}-heading` : undefined}\n id={`${id}-heading`}\n variant=\"subsection-100\"\n >\n {props.required && <span aria-hidden>{\"* \"}</span>}\n {heading}\n </Heading>\n )}\n <RadixRadioGroup.Root\n {...props}\n aria-labelledby={heading ? `${id}-heading` : undefined}\n className={cx(rootClassName)}\n data-testid={dataTestId}\n loop={loop}\n orientation={orientation}\n ref={ref}\n >\n {items?.length ? itemsRenderer() : children}\n </RadixRadioGroup.Root>\n </div>\n );\n }\n);\n\nRadioButtonGroupRoot.displayName = \"RadioButtonGroupRoot\";\n","import React from \"react\";\n\nimport { RadioButtonGroupItem } from \"./radio-button-group-item\";\nimport type { RadioButtonGroupRootProps } from \"./radio-button-group-root\";\nimport { RadioButtonGroupRoot } from \"./radio-button-group-root\";\n\nexport {\n RADIO_BUTTON_GROUP_DIRECTION,\n RADIO_BUTTON_GROUP_ORIENTATION,\n} from \"./radio-button-group-item\";\n\ntype RadioButtonGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof RadioButtonGroupItem;\n};\n\nexport type RadioButtonGroupProps = RadioButtonGroupRootProps;\n\nexport const RadioButtonGroup: RadioButtonGroupCmp<RadioButtonGroupProps> = ({\n children,\n ...props\n}: RadioButtonGroupProps) => {\n return <RadioButtonGroupRoot {...props}>{children}</RadioButtonGroupRoot>;\n};\n\nRadioButtonGroup.Item = RadioButtonGroupItem;\n\nRadioButtonGroup.displayName = \"RadioButtonGroup\";\n"],"names":["cx","c","styles","RADIO_BUTTON_GROUP_DIRECTION","RADIO_BUTTON_GROUP_ORIENTATION","rootClassName","RadioButtonGroupItem","forwardRef","disabled","id","value","label","dataTestId","helperText","props","ref","jsxs","jsx","RadixRadioGroup.Item","RadixRadioGroup.Indicator","Label","FieldHelperText","RadioButtonGroupRoot","className","items","heading","loop","orientation","headingTag","children","itemsRenderer","item","Heading","RadixRadioGroup.Root","RadioButtonGroup"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const O=require("./radio-button-group-CZ_FnVAi.js");exports.RADIO_BUTTON_GROUP_DIRECTION=O.RADIO_BUTTON_GROUP_DIRECTION;exports.RADIO_BUTTON_GROUP_ORIENTATION=O.RADIO_BUTTON_GROUP_ORIENTATION;exports.RadioButtonGroup=O.RadioButtonGroup;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const O=require("./radio-button-group-BaFpGAcD.js");exports.RADIO_BUTTON_GROUP_DIRECTION=O.RADIO_BUTTON_GROUP_DIRECTION;exports.RADIO_BUTTON_GROUP_ORIENTATION=O.RADIO_BUTTON_GROUP_ORIENTATION;exports.RadioButtonGroup=O.RadioButtonGroup;
2
2
  //# sourceMappingURL=radio-button-group.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { a as T, b as I, R as _ } from "./radio-button-group-BnCPcmSN.mjs";
1
+ import { R as T, a as I, b as _ } from "./radio-button-group-CFqPsu5A.mjs";
2
2
  export {
3
3
  T as RADIO_BUTTON_GROUP_DIRECTION,
4
4
  I as RADIO_BUTTON_GROUP_ORIENTATION,
@@ -1,11 +1,11 @@
1
1
  import { jsxs as _, Fragment as I, jsx as o } from "react/jsx-runtime";
2
2
  import { useState as O, forwardRef as v, isValidElement as A, Children as C, cloneElement as x } from "react";
3
- import { a as z } from "./heading-gqtQNo5n.mjs";
4
- import { I as E, a as S, R as D } from "./index-DSf4qCR-.mjs";
5
- import { c as G } from "./bind-CU-R61T-.mjs";
6
- import { a as R } from "./paragraph-DNtj7OLr.mjs";
7
- import { S as L } from "./skeleton-CDGzLI-T.mjs";
8
- const P = {
3
+ import { H as z } from "./heading-xwBuT_-9.mjs";
4
+ import { I as E, a as P, R as S } from "./index-DSf4qCR-.mjs";
5
+ import { c as D } from "./bind-CU-R61T-.mjs";
6
+ import { P as R } from "./paragraph-Ci50OF1u.mjs";
7
+ import { S as G } from "./skeleton-CDGzLI-T.mjs";
8
+ const L = {
9
9
  "purpur-radio-card-group": "_purpur-radio-card-group_19msf_1",
10
10
  "purpur-radio-card-group--vertical": "_purpur-radio-card-group--vertical_19msf_5",
11
11
  "purpur-radio-card-group--horizontal": "_purpur-radio-card-group--horizontal_19msf_9",
@@ -25,7 +25,7 @@ const P = {
25
25
  "purpur-radio-card-group__item-image-placeholder": "_purpur-radio-card-group__item-image-placeholder_19msf_167",
26
26
  "purpur-radio-card-group__item-image-placeholder--loaded": "_purpur-radio-card-group__item-image-placeholder--loaded_19msf_172",
27
27
  "purpur-radio-card-group__item-children": "_purpur-radio-card-group__item-children_19msf_175"
28
- }, a = G.bind(P), f = "purpur-radio-card-group__item-image", j = (r) => !!r?.src && !!r.altText, k = ({
28
+ }, a = D.bind(L), f = "purpur-radio-card-group__item-image", j = (r) => !!r?.src && !!r.altText, H = ({
29
29
  src: r,
30
30
  altText: p,
31
31
  noPlaceholder: n,
@@ -49,7 +49,7 @@ const P = {
49
49
  onLoad: l
50
50
  }
51
51
  ),
52
- !n && /* @__PURE__ */ o(L, { className: g })
52
+ !n && /* @__PURE__ */ o(G, { className: g })
53
53
  ] });
54
54
  }, t = "purpur-radio-card-group__item", $ = (r, { disabled: p }) => typeof r == "function" ? r({ disabled: p }) : r, N = v(
55
55
  ({ title: r, ...p }, n) => {
@@ -64,7 +64,7 @@ const P = {
64
64
  id: l,
65
65
  value: g,
66
66
  children: [
67
- c && /* @__PURE__ */ o("span", { className: a(`${t}-image-container`), children: j(c) ? /* @__PURE__ */ o(k, { ...c, "data-testid": i && `${i}-image` }) : $(c, d) }),
67
+ c && /* @__PURE__ */ o("span", { className: a(`${t}-image-container`), children: j(c) ? /* @__PURE__ */ o(H, { ...c, "data-testid": i && `${i}-image` }) : $(c, d) }),
68
68
  /* @__PURE__ */ _("span", { className: a(`${t}-content`), children: [
69
69
  /* @__PURE__ */ _("span", { className: a(`${t}-top-container`), children: [
70
70
  typeof r == "string" ? /* @__PURE__ */ o(
@@ -77,7 +77,7 @@ const P = {
77
77
  children: r
78
78
  }
79
79
  ) : $(r, d),
80
- /* @__PURE__ */ o("span", { className: a(`${t}-radio`), children: /* @__PURE__ */ o(S, { className: a(`${t}-indicator`) }) })
80
+ /* @__PURE__ */ o("span", { className: a(`${t}-radio`), children: /* @__PURE__ */ o(P, { className: a(`${t}-indicator`) }) })
81
81
  ] }),
82
82
  e && /* @__PURE__ */ o("span", { className: a(`${t}-bottom-container`), children: typeof e == "string" ? /* @__PURE__ */ o(
83
83
  R,
@@ -97,7 +97,7 @@ const P = {
97
97
  }
98
98
  );
99
99
  N.displayName = "RadioCardItem";
100
- const q = (r) => A(r) && r?.type === N, K = ["horizontal", "vertical"], M = ["right", "left"], h = "purpur-radio-card-group", w = v(
100
+ const k = (r) => A(r) && r?.type === N, K = ["horizontal", "vertical"], M = ["right", "left"], h = "purpur-radio-card-group", q = v(
101
101
  ({
102
102
  "data-testid": r,
103
103
  "aria-labelledby": p,
@@ -111,7 +111,7 @@ const q = (r) => A(r) && r?.type === N, K = ["horizontal", "vertical"], M = ["ri
111
111
  radioPosition: g = "right",
112
112
  ...d
113
113
  }, y) => {
114
- const b = C.toArray(n).filter(q);
114
+ const b = C.toArray(n).filter(k);
115
115
  return /* @__PURE__ */ _("div", { className: a(i, `${h}__container`), ref: y, children: [
116
116
  u && /* @__PURE__ */ _(
117
117
  z,
@@ -127,7 +127,7 @@ const q = (r) => A(r) && r?.type === N, K = ["horizontal", "vertical"], M = ["ri
127
127
  }
128
128
  ),
129
129
  (!!e?.length || b.length) && /* @__PURE__ */ _(
130
- D,
130
+ S,
131
131
  {
132
132
  ...d,
133
133
  "aria-labelledby": p || (u ? `${d.id}-heading` : void 0),
@@ -158,11 +158,11 @@ const q = (r) => A(r) && r?.type === N, K = ["horizontal", "vertical"], M = ["ri
158
158
  ] });
159
159
  }
160
160
  );
161
- w.displayName = "RadioCardGroup";
161
+ q.displayName = "RadioCardGroup";
162
162
  export {
163
163
  K as R,
164
164
  M as a,
165
- w as b,
165
+ q as b,
166
166
  N as c
167
167
  };
168
- //# sourceMappingURL=radio-card-group-DkaMcmen.mjs.map
168
+ //# sourceMappingURL=radio-card-group-BlRZBa-9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-card-group-DkaMcmen.mjs","sources":["../../../components/radio-card-group/src/classnames.ts","../../../components/radio-card-group/src/radio-card-item-image.tsx","../../../components/radio-card-group/src/radio-card-item.tsx","../../../components/radio-card-group/src/radio-card-group.tsx"],"sourcesContent":["import c from \"classnames/bind\";\n\nimport styles from \"./radio-card-group.module.scss\";\nexport const cx = c.bind(styles);\n","import React from \"react\";\nimport { useState } from \"react\";\nimport { Skeleton } from \"@purpur/skeleton\";\n\nimport { cx } from \"./classnames\";\n\nexport type RadioCardImageProps = {\n [\"data-testid\"]?: string;\n altText: string;\n loading?: \"lazy\" | \"eager\";\n noPlaceholder?: boolean;\n src: string;\n};\n\nconst rootClassName = \"purpur-radio-card-group__item-image\";\n\nexport const isRadioCardItemImageProps = (\n imageProps?: RadioCardImageProps | unknown\n): imageProps is RadioCardImageProps =>\n !!(imageProps as RadioCardImageProps)?.src && !!(imageProps as RadioCardImageProps).altText;\n\nexport const RadioCardImage = ({\n src,\n altText,\n noPlaceholder,\n loading = \"lazy\",\n [\"data-testid\"]: dataTestid,\n}: RadioCardImageProps) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const onLoad = () => setIsLoaded(true);\n\n const imageClassName = cx(rootClassName, {\n [`${rootClassName}--loaded`]: isLoaded,\n });\n\n const placeholderClassName = cx(`${rootClassName}-placeholder`, {\n [`${rootClassName}-placeholder--loaded`]: isLoaded,\n });\n\n return (\n <>\n <img\n data-testid={dataTestid}\n className={imageClassName}\n src={src}\n alt={altText}\n loading={loading}\n onLoad={onLoad}\n />\n {!noPlaceholder && <Skeleton className={placeholderClassName} />}\n </>\n );\n};\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\n\nimport { cx } from \"./classnames\";\nimport {\n isRadioCardItemImageProps,\n RadioCardImage,\n type RadioCardImageProps,\n} from \"./radio-card-item-image\";\n\nconst rootClassName = \"purpur-radio-card-group__item\";\n\ntype CustomElement = ((props: { disabled?: boolean }) => ReactNode) | ReactNode;\ntype NonNullCustomElement =\n | ((props: { disabled?: boolean }) => NonNullable<ReactNode>)\n | NonNullable<ReactNode>;\n\nexport type RadioCardItemProps = Omit<BaseProps, \"id\" | \"title\"> & {\n /**\n * `string | ReactNode | (props: { disabled?: boolean }) => ReactNode`\n */\n body?: string | CustomElement;\n disabled?: boolean;\n id: string;\n /**\n * The radio image.\n *\n union = {\n \"data-testid\"?: string | undefined;\n altText: string;\n loading?: \"lazy\" | \"eager\" | undefined;\n noPlaceholder?: boolean | undefined;\n src: string;\n } |\n ((props: {\n disabled?: boolean;\n }) => ReactNode) | React.ReactNode\n * */\n image?: RadioCardImageProps | CustomElement;\n value: string;\n /**\n * `union = string | Omit<ReactNode, \"undefined\" | \"null\">`\n */\n title: string | NonNullCustomElement;\n};\n\nconst renderCustomElement = (\n element: CustomElement | NonNullCustomElement,\n { disabled }: Pick<RadioCardItemProps, \"disabled\">\n) => (typeof element === \"function\" ? element({ disabled }) : element);\n\nexport const RadioCardItem = forwardRef<HTMLDivElement, RadioCardItemProps>(\n ({ title, ...propsx }, ref) => {\n const { [\"data-testid\"]: dataTestid, body, children, disabled, id, image, value } = propsx;\n\n const props = { title, ...propsx };\n\n return (\n <div className={cx(`${rootClassName}-container`)} ref={ref}>\n <RadixRadioGroup.Item\n className={cx(rootClassName)}\n data-testid={dataTestid}\n disabled={disabled}\n id={id}\n value={value}\n >\n {image && (\n <span className={cx(`${rootClassName}-image-container`)}>\n {isRadioCardItemImageProps(image) ? (\n <RadioCardImage {...image} data-testid={dataTestid && `${dataTestid}-image`} />\n ) : (\n renderCustomElement(image, props)\n )}\n </span>\n )}\n <span className={cx(`${rootClassName}-content`)}>\n <span className={cx(`${rootClassName}-top-container`)}>\n {typeof title === \"string\" ? (\n <Paragraph\n className={cx(`${rootClassName}-title`)}\n data-testid={dataTestid && `${dataTestid}-title`}\n variant=\"paragraph-100\"\n disabled={disabled}\n >\n {title}\n </Paragraph>\n ) : (\n renderCustomElement(title, props)\n )}\n <span className={cx(`${rootClassName}-radio`)}>\n <RadixRadioGroup.Indicator className={cx(`${rootClassName}-indicator`)} />\n </span>\n </span>\n {body && (\n <span className={cx(`${rootClassName}-bottom-container`)}>\n {typeof body === \"string\" ? (\n <Paragraph\n data-testid={dataTestid && `${dataTestid}-body`}\n variant=\"paragraph-100\"\n disabled={disabled}\n >\n {body}\n </Paragraph>\n ) : (\n renderCustomElement(body, props)\n )}\n </span>\n )}\n </span>\n </RadixRadioGroup.Item>\n {children}\n </div>\n );\n }\n);\n\nRadioCardItem.displayName = \"RadioCardItem\";\n\nexport const isRadioCardItem = (child?: ReactNode): child is ReactElement<RadioCardItemProps> =>\n isValidElement<RadioCardItemProps>(child) && child?.type === RadioCardItem;\n","import React, { Children, cloneElement, forwardRef, type ReactNode, type Ref } from \"react\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\n\nimport { cx } from \"./classnames\";\nimport { isRadioCardItem, RadioCardItem, type RadioCardItemProps } from \"./radio-card-item\";\n\nexport type RadioCardGroupItem = RadioCardItemProps & { ref?: Ref<HTMLDivElement> };\nexport const RADIO_CARD_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\nexport const RADIO_POSITION = [\"right\", \"left\"] as const;\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"className\" | \"style\">;\n\nexport type RadioCardGroupProps = StylingProps & {\n /**\n * To use when no heading is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * To use with custom label.\n * */\n [\"aria-labelledby\"]?: string;\n [\"data-testid\"]?: string;\n /**\n * The value of the radio card item that should be checked when initially rendered. Use when you do not need to control the state of the radio items.\n * */\n defaultValue?: string;\n /**\n * When true, prevents the user from interacting with radio card items.\n * */\n disabled?: boolean;\n /**\n * ID of the radio card group container.\n * */\n id: string;\n /**\n * The radio card items.\n * */\n items?: RadioCardGroupItem[];\n /**\n * Renders above the radio card group as a heading\n * */\n heading?: string;\n /**\n * Changes heading level for heading.\n */\n headingTag?: HeadingTagType;\n /**\n * When true, keyboard navigation will loop from last item to first, and vice versa.\n * */\n loop?: boolean;\n /**\n * The name of the group. Submitted with its owning form as part of a name/value pair.\n * */\n name?: string;\n /**\n * Event handler called when the value changes.\n * */\n onValueChange?: (value: string) => void;\n /**\n * Set to stack cards horizontally or vertically. When `horizontal`, the min card width with is 100% when container is sm, and `--purpur-breakpoint-lg` / 4 when the container is md or larger.\n * */\n orientation?: (typeof RADIO_CARD_GROUP_ORIENTATION)[number];\n /**\n * The position if the radio in the card items.\n * */\n radioPosition?: (typeof RADIO_POSITION)[number];\n /**\n * When true, indicates that the user must check a radio card item before the owning form can be submitted.\n * */\n required?: boolean;\n /**\n * The controlled value of the radio card item to check. Should be used in conjunction with onValueChange.\n * */\n value?: string;\n /**\n * Will only render given RadioCardItems.\n * */\n children?: ReactNode;\n};\n\nconst rootClassName = \"purpur-radio-card-group\";\n\nexport const RadioCardGroup = forwardRef<HTMLDivElement, RadioCardGroupProps>(\n (\n {\n \"data-testid\": dataTestId,\n \"aria-labelledby\": ariaLabelledby,\n children,\n className,\n items,\n heading,\n headingTag = \"h2\",\n loop = true,\n orientation = \"vertical\",\n radioPosition = \"right\",\n ...props\n },\n ref\n ) => {\n const radioCardItemChildren = Children.toArray(children).filter(isRadioCardItem);\n\n return (\n <div className={cx(className, `${rootClassName}__container`)} ref={ref}>\n {heading && (\n <Heading\n data-testid={dataTestId ? `${dataTestId}-heading` : undefined}\n id={`${props.id}-heading`}\n tag={headingTag}\n variant=\"subsection-100\"\n >\n {props.required && <span aria-hidden>{\"* \"}</span>}\n {heading}\n </Heading>\n )}\n {(!!items?.length || radioCardItemChildren.length) && (\n <RadixRadioGroup.Root\n {...props}\n aria-labelledby={ariaLabelledby || (heading ? `${props.id}-heading` : undefined)}\n className={cx(\n rootClassName,\n `${rootClassName}--${orientation}`,\n `${rootClassName}--radio-${radioPosition}`\n )}\n data-testid={dataTestId}\n loop={loop}\n >\n {items?.map((item) => (\n <RadioCardItem\n key={item.id}\n {...item}\n disabled={item.disabled || props.disabled}\n data-testid={dataTestId ? `${dataTestId}-item` : undefined}\n />\n ))}\n {Children.map(radioCardItemChildren, (child) =>\n cloneElement(child, { disabled: child.props.disabled || props.disabled })\n )}\n </RadixRadioGroup.Root>\n )}\n </div>\n );\n }\n);\n\nRadioCardGroup.displayName = \"RadioCardGroup\";\n\n// RadioCardItem must be exported after `RadioCardGroup` for the Storybook controls to be generated from RadioCardGroup props\nexport type { RadioCardItemProps } from \"./radio-card-item\";\nexport { RadioCardItem } from \"./radio-card-item\";\n"],"names":["cx","c","styles","rootClassName","isRadioCardItemImageProps","imageProps","RadioCardImage","src","altText","noPlaceholder","loading","dataTestid","isLoaded","setIsLoaded","useState","onLoad","imageClassName","placeholderClassName","jsxs","Fragment","jsx","Skeleton","renderCustomElement","element","disabled","RadioCardItem","forwardRef","title","propsx","ref","body","children","id","image","value","props","RadixRadioGroup.Item","Paragraph","RadixRadioGroup.Indicator","isRadioCardItem","child","isValidElement","RADIO_CARD_GROUP_ORIENTATION","RADIO_POSITION","RadioCardGroup","dataTestId","ariaLabelledby","className","items","heading","headingTag","loop","orientation","radioPosition","radioCardItemChildren","Children","Heading","RadixRadioGroup.Root","item","cloneElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;GAGaA,IAAKC,EAAE,KAAKC,CAAM,GCWzBC,IAAgB,uCAETC,IAA4B,CACvCC,MAEA,CAAC,CAAEA,GAAoC,OAAO,CAAC,CAAEA,EAAmC,SAEzEC,IAAiB,CAAC;AAAA,EAC7B,KAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,CAAC,gBAAgBC;AACnB,MAA2B;AACzB,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxCC,IAAS,MAAMF,EAAY,EAAI,GAE/BG,IAAiBhB,EAAGG,GAAe;AAAA,IACvC,CAAC,GAAGA,CAAa,UAAU,GAAGS;AAAA,EAAA,CAC/B,GAEKK,IAAuBjB,EAAG,GAAGG,CAAa,gBAAgB;AAAA,IAC9D,CAAC,GAAGA,CAAa,sBAAsB,GAAGS;AAAA,EAAA,CAC3C;AAED,SACE,gBAAAM,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAaT;AAAA,QACb,WAAWK;AAAA,QACX,KAAAT;AAAA,QACA,KAAKC;AAAA,QACL,SAAAE;AAAA,QACA,QAAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAED,CAACN,KAAiB,gBAAAW,EAACC,GAAA,EAAS,WAAWJ,EAAA,CAAsB;AAAA,EAAA,GAChE;AAEJ,GCxCMd,IAAgB,iCAoChBmB,IAAsB,CAC1BC,GACA,EAAE,UAAAC,QACE,OAAOD,KAAY,aAAaA,EAAQ,EAAE,UAAAC,EAAA,CAAU,IAAID,GAEjDE,IAAgBC;AAAA,EAC3B,CAAC,EAAE,OAAAC,GAAO,GAAGC,EAAA,GAAUC,MAAQ;AAC7B,UAAM,EAAE,CAAC,aAAa,GAAGlB,GAAY,MAAAmB,GAAM,UAAAC,GAAU,UAAAP,GAAU,IAAAQ,GAAI,OAAAC,GAAO,OAAAC,EAAA,IAAUN,GAE9EO,IAAQ,EAAS,GAAGP,EAAA;AAE1B,WACE,gBAAAV,EAAC,SAAI,WAAWlB,EAAG,GAAGG,CAAa,YAAY,GAAG,KAAA0B,GAChD,UAAA;AAAA,MAAA,gBAAAX;AAAA,QAACkB;AAAAA,QAAA;AAAA,UACC,WAAWpC,EAAGG,CAAa;AAAA,UAC3B,eAAaQ;AAAA,UACb,UAAAa;AAAA,UACA,IAAAQ;AAAA,UACA,OAAAE;AAAA,UAEC,UAAA;AAAA,YAAAD,KACC,gBAAAb,EAAC,QAAA,EAAK,WAAWpB,EAAG,GAAGG,CAAa,kBAAkB,GACnD,UAAAC,EAA0B6B,CAAK,IAC9B,gBAAAb,EAACd,KAAgB,GAAG2B,GAAO,eAAatB,KAAc,GAAGA,CAAU,UAAU,IAE7EW,EAAoBW,GAAOE,CAAK,EAAA,CAEpC;AAAA,8BAED,QAAA,EAAK,WAAWnC,EAAG,GAAGG,CAAa,UAAU,GAC5C,UAAA;AAAA,cAAA,gBAAAe,EAAC,UAAK,WAAWlB,EAAG,GAAGG,CAAa,gBAAgB,GACjD,UAAA;AAAA,gBAAA,OAAOwB,KAAU,WAChB,gBAAAP;AAAA,kBAACiB;AAAA,kBAAA;AAAA,oBACC,WAAWrC,EAAG,GAAGG,CAAa,QAAQ;AAAA,oBACtC,eAAaQ,KAAc,GAAGA,CAAU;AAAA,oBACxC,SAAQ;AAAA,oBACR,UAAAa;AAAA,oBAEC,UAAAG;AAAA,kBAAA;AAAA,gBAAA,IAGHL,EAAoBK,GAAOQ,CAAK;AAAA,kCAEjC,QAAA,EAAK,WAAWnC,EAAG,GAAGG,CAAa,QAAQ,GAC1C,UAAA,gBAAAiB,EAACkB,GAAA,EAA0B,WAAWtC,EAAG,GAAGG,CAAa,YAAY,GAAG,EAAA,CAC1E;AAAA,cAAA,GACF;AAAA,cACC2B,KACC,gBAAAV,EAAC,QAAA,EAAK,WAAWpB,EAAG,GAAGG,CAAa,mBAAmB,GACpD,UAAA,OAAO2B,KAAS,WACf,gBAAAV;AAAA,gBAACiB;AAAA,gBAAA;AAAA,kBACC,eAAa1B,KAAc,GAAGA,CAAU;AAAA,kBACxC,SAAQ;AAAA,kBACR,UAAAa;AAAA,kBAEC,UAAAM;AAAA,gBAAA;AAAA,cAAA,IAGHR,EAAoBQ,GAAMK,CAAK,EAAA,CAEnC;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEDJ;AAAA,IAAA,GACH;AAAA,EAEJ;AACF;AAEAN,EAAc,cAAc;AAErB,MAAMc,IAAkB,CAACC,MAC9BC,EAAmCD,CAAK,KAAKA,GAAO,SAASf,GCjHlDiB,IAA+B,CAAC,cAAc,UAAU,GACxDC,IAAiB,CAAC,SAAS,MAAM,GAwExCxC,IAAgB,2BAETyC,IAAiBlB;AAAA,EAC5B,CACE;AAAA,IACE,eAAemB;AAAA,IACf,mBAAmBC;AAAA,IACnB,UAAAf;AAAA,IACA,WAAAgB;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,MAAAC,IAAO;AAAA,IACP,aAAAC,IAAc;AAAA,IACd,eAAAC,IAAgB;AAAA,IAChB,GAAGlB;AAAA,EAAA,GAELN,MACG;AACH,UAAMyB,IAAwBC,EAAS,QAAQxB,CAAQ,EAAE,OAAOQ,CAAe;AAE/E,WACE,gBAAArB,EAAC,SAAI,WAAWlB,EAAG+C,GAAW,GAAG5C,CAAa,aAAa,GAAG,KAAA0B,GAC3D,UAAA;AAAA,MAAAoB,KACC,gBAAA/B;AAAA,QAACsC;AAAA,QAAA;AAAA,UACC,eAAaX,IAAa,GAAGA,CAAU,aAAa;AAAA,UACpD,IAAI,GAAGV,EAAM,EAAE;AAAA,UACf,KAAKe;AAAA,UACL,SAAQ;AAAA,UAEP,UAAA;AAAA,YAAAf,EAAM,YAAY,gBAAAf,EAAC,QAAA,EAAK,eAAW,IAAE,UAAA,MAAK;AAAA,YAC1C6B;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,OAGH,CAAC,CAACD,GAAO,UAAUM,EAAsB,WACzC,gBAAApC;AAAA,QAACuC;AAAAA,QAAA;AAAA,UACE,GAAGtB;AAAA,UACJ,mBAAiBW,MAAmBG,IAAU,GAAGd,EAAM,EAAE,aAAa;AAAA,UACtE,WAAWnC;AAAA,YACTG;AAAA,YACA,GAAGA,CAAa,KAAKiD,CAAW;AAAA,YAChC,GAAGjD,CAAa,WAAWkD,CAAa;AAAA,UAAA;AAAA,UAE1C,eAAaR;AAAA,UACb,MAAAM;AAAA,UAEC,UAAA;AAAA,YAAAH,GAAO,IAAI,CAACU,MACX,gBAAAtC;AAAA,cAACK;AAAA,cAAA;AAAA,gBAEE,GAAGiC;AAAA,gBACJ,UAAUA,EAAK,YAAYvB,EAAM;AAAA,gBACjC,eAAaU,IAAa,GAAGA,CAAU,UAAU;AAAA,cAAA;AAAA,cAH5Ca,EAAK;AAAA,YAAA,CAKb;AAAA,YACAH,EAAS;AAAA,cAAID;AAAA,cAAuB,CAACd,MACpCmB,EAAanB,GAAO,EAAE,UAAUA,EAAM,MAAM,YAAYL,EAAM,SAAA,CAAU;AAAA,YAAA;AAAA,UAC1E;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AACF;AAEAS,EAAe,cAAc;"}
1
+ {"version":3,"file":"radio-card-group-BlRZBa-9.mjs","sources":["../../../components/radio-card-group/src/classnames.ts","../../../components/radio-card-group/src/radio-card-item-image.tsx","../../../components/radio-card-group/src/radio-card-item.tsx","../../../components/radio-card-group/src/radio-card-group.tsx"],"sourcesContent":["import c from \"classnames/bind\";\n\nimport styles from \"./radio-card-group.module.scss\";\nexport const cx = c.bind(styles);\n","import React from \"react\";\nimport { useState } from \"react\";\nimport { Skeleton } from \"@purpur/skeleton\";\n\nimport { cx } from \"./classnames\";\n\nexport type RadioCardImageProps = {\n [\"data-testid\"]?: string;\n altText: string;\n loading?: \"lazy\" | \"eager\";\n noPlaceholder?: boolean;\n src: string;\n};\n\nconst rootClassName = \"purpur-radio-card-group__item-image\";\n\nexport const isRadioCardItemImageProps = (\n imageProps?: RadioCardImageProps | unknown\n): imageProps is RadioCardImageProps =>\n !!(imageProps as RadioCardImageProps)?.src && !!(imageProps as RadioCardImageProps).altText;\n\nexport const RadioCardImage = ({\n src,\n altText,\n noPlaceholder,\n loading = \"lazy\",\n [\"data-testid\"]: dataTestid,\n}: RadioCardImageProps) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const onLoad = () => setIsLoaded(true);\n\n const imageClassName = cx(rootClassName, {\n [`${rootClassName}--loaded`]: isLoaded,\n });\n\n const placeholderClassName = cx(`${rootClassName}-placeholder`, {\n [`${rootClassName}-placeholder--loaded`]: isLoaded,\n });\n\n return (\n <>\n <img\n data-testid={dataTestid}\n className={imageClassName}\n src={src}\n alt={altText}\n loading={loading}\n onLoad={onLoad}\n />\n {!noPlaceholder && <Skeleton className={placeholderClassName} />}\n </>\n );\n};\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\n\nimport { cx } from \"./classnames\";\nimport {\n isRadioCardItemImageProps,\n RadioCardImage,\n type RadioCardImageProps,\n} from \"./radio-card-item-image\";\n\nconst rootClassName = \"purpur-radio-card-group__item\";\n\ntype CustomElement = ((props: { disabled?: boolean }) => ReactNode) | ReactNode;\ntype NonNullCustomElement =\n | ((props: { disabled?: boolean }) => NonNullable<ReactNode>)\n | NonNullable<ReactNode>;\n\nexport type RadioCardItemProps = Omit<BaseProps, \"id\" | \"title\"> & {\n /**\n * `string | ReactNode | (props: { disabled?: boolean }) => ReactNode`\n */\n body?: string | CustomElement;\n disabled?: boolean;\n id: string;\n /**\n * The radio image.\n *\n union = {\n \"data-testid\"?: string | undefined;\n altText: string;\n loading?: \"lazy\" | \"eager\" | undefined;\n noPlaceholder?: boolean | undefined;\n src: string;\n } |\n ((props: {\n disabled?: boolean;\n }) => ReactNode) | React.ReactNode\n * */\n image?: RadioCardImageProps | CustomElement;\n value: string;\n /**\n * `union = string | Omit<ReactNode, \"undefined\" | \"null\">`\n */\n title: string | NonNullCustomElement;\n};\n\nconst renderCustomElement = (\n element: CustomElement | NonNullCustomElement,\n { disabled }: Pick<RadioCardItemProps, \"disabled\">\n) => (typeof element === \"function\" ? element({ disabled }) : element);\n\nexport const RadioCardItem = forwardRef<HTMLDivElement, RadioCardItemProps>(\n ({ title, ...propsx }, ref) => {\n const { [\"data-testid\"]: dataTestid, body, children, disabled, id, image, value } = propsx;\n\n const props = { title, ...propsx };\n\n return (\n <div className={cx(`${rootClassName}-container`)} ref={ref}>\n <RadixRadioGroup.Item\n className={cx(rootClassName)}\n data-testid={dataTestid}\n disabled={disabled}\n id={id}\n value={value}\n >\n {image && (\n <span className={cx(`${rootClassName}-image-container`)}>\n {isRadioCardItemImageProps(image) ? (\n <RadioCardImage {...image} data-testid={dataTestid && `${dataTestid}-image`} />\n ) : (\n renderCustomElement(image, props)\n )}\n </span>\n )}\n <span className={cx(`${rootClassName}-content`)}>\n <span className={cx(`${rootClassName}-top-container`)}>\n {typeof title === \"string\" ? (\n <Paragraph\n className={cx(`${rootClassName}-title`)}\n data-testid={dataTestid && `${dataTestid}-title`}\n variant=\"paragraph-100\"\n disabled={disabled}\n >\n {title}\n </Paragraph>\n ) : (\n renderCustomElement(title, props)\n )}\n <span className={cx(`${rootClassName}-radio`)}>\n <RadixRadioGroup.Indicator className={cx(`${rootClassName}-indicator`)} />\n </span>\n </span>\n {body && (\n <span className={cx(`${rootClassName}-bottom-container`)}>\n {typeof body === \"string\" ? (\n <Paragraph\n data-testid={dataTestid && `${dataTestid}-body`}\n variant=\"paragraph-100\"\n disabled={disabled}\n >\n {body}\n </Paragraph>\n ) : (\n renderCustomElement(body, props)\n )}\n </span>\n )}\n </span>\n </RadixRadioGroup.Item>\n {children}\n </div>\n );\n }\n);\n\nRadioCardItem.displayName = \"RadioCardItem\";\n\nexport const isRadioCardItem = (child?: ReactNode): child is ReactElement<RadioCardItemProps> =>\n isValidElement<RadioCardItemProps>(child) && child?.type === RadioCardItem;\n","import React, { Children, cloneElement, forwardRef, type ReactNode, type Ref } from \"react\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\n\nimport { cx } from \"./classnames\";\nimport { isRadioCardItem, RadioCardItem, type RadioCardItemProps } from \"./radio-card-item\";\n\nexport type RadioCardGroupItem = RadioCardItemProps & { ref?: Ref<HTMLDivElement> };\nexport const RADIO_CARD_GROUP_ORIENTATION = [\"horizontal\", \"vertical\"] as const;\nexport const RADIO_POSITION = [\"right\", \"left\"] as const;\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"className\" | \"style\">;\n\nexport type RadioCardGroupProps = StylingProps & {\n /**\n * To use when no heading is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * To use with custom label.\n * */\n [\"aria-labelledby\"]?: string;\n [\"data-testid\"]?: string;\n /**\n * The value of the radio card item that should be checked when initially rendered. Use when you do not need to control the state of the radio items.\n * */\n defaultValue?: string;\n /**\n * When true, prevents the user from interacting with radio card items.\n * */\n disabled?: boolean;\n /**\n * ID of the radio card group container.\n * */\n id: string;\n /**\n * The radio card items.\n * */\n items?: RadioCardGroupItem[];\n /**\n * Renders above the radio card group as a heading\n * */\n heading?: string;\n /**\n * Changes heading level for heading.\n */\n headingTag?: HeadingTagType;\n /**\n * When true, keyboard navigation will loop from last item to first, and vice versa.\n * */\n loop?: boolean;\n /**\n * The name of the group. Submitted with its owning form as part of a name/value pair.\n * */\n name?: string;\n /**\n * Event handler called when the value changes.\n * */\n onValueChange?: (value: string) => void;\n /**\n * Set to stack cards horizontally or vertically. When `horizontal`, the min card width with is 100% when container is sm, and `--purpur-breakpoint-lg` / 4 when the container is md or larger.\n * */\n orientation?: (typeof RADIO_CARD_GROUP_ORIENTATION)[number];\n /**\n * The position if the radio in the card items.\n * */\n radioPosition?: (typeof RADIO_POSITION)[number];\n /**\n * When true, indicates that the user must check a radio card item before the owning form can be submitted.\n * */\n required?: boolean;\n /**\n * The controlled value of the radio card item to check. Should be used in conjunction with onValueChange.\n * */\n value?: string;\n /**\n * Will only render given RadioCardItems.\n * */\n children?: ReactNode;\n};\n\nconst rootClassName = \"purpur-radio-card-group\";\n\nexport const RadioCardGroup = forwardRef<HTMLDivElement, RadioCardGroupProps>(\n (\n {\n \"data-testid\": dataTestId,\n \"aria-labelledby\": ariaLabelledby,\n children,\n className,\n items,\n heading,\n headingTag = \"h2\",\n loop = true,\n orientation = \"vertical\",\n radioPosition = \"right\",\n ...props\n },\n ref\n ) => {\n const radioCardItemChildren = Children.toArray(children).filter(isRadioCardItem);\n\n return (\n <div className={cx(className, `${rootClassName}__container`)} ref={ref}>\n {heading && (\n <Heading\n data-testid={dataTestId ? `${dataTestId}-heading` : undefined}\n id={`${props.id}-heading`}\n tag={headingTag}\n variant=\"subsection-100\"\n >\n {props.required && <span aria-hidden>{\"* \"}</span>}\n {heading}\n </Heading>\n )}\n {(!!items?.length || radioCardItemChildren.length) && (\n <RadixRadioGroup.Root\n {...props}\n aria-labelledby={ariaLabelledby || (heading ? `${props.id}-heading` : undefined)}\n className={cx(\n rootClassName,\n `${rootClassName}--${orientation}`,\n `${rootClassName}--radio-${radioPosition}`\n )}\n data-testid={dataTestId}\n loop={loop}\n >\n {items?.map((item) => (\n <RadioCardItem\n key={item.id}\n {...item}\n disabled={item.disabled || props.disabled}\n data-testid={dataTestId ? `${dataTestId}-item` : undefined}\n />\n ))}\n {Children.map(radioCardItemChildren, (child) =>\n cloneElement(child, { disabled: child.props.disabled || props.disabled })\n )}\n </RadixRadioGroup.Root>\n )}\n </div>\n );\n }\n);\n\nRadioCardGroup.displayName = \"RadioCardGroup\";\n\n// RadioCardItem must be exported after `RadioCardGroup` for the Storybook controls to be generated from RadioCardGroup props\nexport type { RadioCardItemProps } from \"./radio-card-item\";\nexport { RadioCardItem } from \"./radio-card-item\";\n"],"names":["cx","c","styles","rootClassName","isRadioCardItemImageProps","imageProps","RadioCardImage","src","altText","noPlaceholder","loading","dataTestid","isLoaded","setIsLoaded","useState","onLoad","imageClassName","placeholderClassName","jsxs","Fragment","jsx","Skeleton","renderCustomElement","element","disabled","RadioCardItem","forwardRef","title","propsx","ref","body","children","id","image","value","props","RadixRadioGroup.Item","Paragraph","RadixRadioGroup.Indicator","isRadioCardItem","child","isValidElement","RADIO_CARD_GROUP_ORIENTATION","RADIO_POSITION","RadioCardGroup","dataTestId","ariaLabelledby","className","items","heading","headingTag","loop","orientation","radioPosition","radioCardItemChildren","Children","Heading","RadixRadioGroup.Root","item","cloneElement"],"mappings":"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"}