@purpur/library 10.1.0 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/CHANGELOG.json +57 -0
  2. package/CHANGELOG.md +26 -1
  3. package/dist/LICENSE.txt +14 -7
  4. package/dist/{RichText-B865Qkzj.js → RichText-CeYecUFV.js} +2 -2
  5. package/dist/{RichText-B865Qkzj.js.map → RichText-CeYecUFV.js.map} +1 -1
  6. package/dist/{RichText-CPkBwXNI.mjs → RichText-CwQfDo_S.mjs} +2 -2
  7. package/dist/{RichText-CPkBwXNI.mjs.map → RichText-CwQfDo_S.mjs.map} +1 -1
  8. package/dist/{ThemeProvider-BJGm3zai.js → ThemeProvider-BGep6X_i.js} +2 -2
  9. package/dist/{ThemeProvider-BJGm3zai.js.map → ThemeProvider-BGep6X_i.js.map} +1 -1
  10. package/dist/{ThemeProvider-BJ25_asg.mjs → ThemeProvider-BrAZhasG.mjs} +13 -13
  11. package/dist/{ThemeProvider-BJ25_asg.mjs.map → ThemeProvider-BrAZhasG.mjs.map} +1 -1
  12. package/dist/components/accordion/src/accordion-item.d.ts +3 -3
  13. package/dist/components/accordion/src/accordion.d.ts +1 -1
  14. package/dist/components/alert-badge/src/alert-badge.d.ts +1 -1
  15. package/dist/components/avatar/src/avatar.d.ts +1 -1
  16. package/dist/components/breadcrumbs/src/breadcrumbs.d.ts +1 -1
  17. package/dist/components/card/src/card-badge.d.ts +1 -1
  18. package/dist/components/card/src/card-content.d.ts +2 -2
  19. package/dist/components/card/src/card-cta.d.ts +2 -2
  20. package/dist/components/card/src/card-media-layout.d.ts +1 -1
  21. package/dist/components/card/src/card-root.d.ts +2 -2
  22. package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts +1 -1
  23. package/dist/components/container/src/container.d.ts +2 -2
  24. package/dist/components/container/src/container.visual.fixtures.d.ts +14 -0
  25. package/dist/components/container/src/container.visual.fixtures.d.ts.map +1 -0
  26. package/dist/components/content-block/src/content-block-group.d.ts +2 -2
  27. package/dist/components/content-block/src/content-block.d.ts +2 -2
  28. package/dist/components/countdown/src/countdown.d.ts +1 -1
  29. package/dist/components/countdown/src/countdown.d.ts.map +1 -1
  30. package/dist/components/countdown/src/countdown.types.d.ts +19 -3
  31. package/dist/components/countdown/src/countdown.types.d.ts.map +1 -1
  32. package/dist/components/counter-badge/src/counter-badge.d.ts +1 -1
  33. package/dist/components/cta-link/src/cta-link.d.ts +10 -10
  34. package/dist/components/date-field/src/date-field.d.ts +14 -6
  35. package/dist/components/date-field/src/date-field.d.ts.map +1 -1
  36. package/dist/components/date-field/src/utils.d.ts +40 -2
  37. package/dist/components/date-field/src/utils.d.ts.map +1 -1
  38. package/dist/components/date-picker/src/date-picker.d.ts +4 -4
  39. package/dist/components/date-range-field/src/date-range-field.d.ts +4 -2
  40. package/dist/components/date-range-field/src/date-range-field.d.ts.map +1 -1
  41. package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +2 -2
  42. package/dist/components/drawer/src/drawer-container.d.ts +2 -2
  43. package/dist/components/drawer/src/drawer-scroll-area.d.ts +1 -1
  44. package/dist/components/drawer/src/drawer-trigger.d.ts +2 -2
  45. package/dist/components/drawer/src/drawer.d.ts +1 -1
  46. package/dist/components/dropdown/src/dropdown-combobox.d.ts.map +1 -1
  47. package/dist/components/dropdown/src/dropdown-shared.d.ts +3 -1
  48. package/dist/components/dropdown/src/dropdown-shared.d.ts.map +1 -1
  49. package/dist/components/dropdown/src/dropdown.types.d.ts +3 -0
  50. package/dist/components/dropdown/src/dropdown.types.d.ts.map +1 -1
  51. package/dist/components/dropdown/src/useDropdown.d.ts +1 -1
  52. package/dist/components/file-upload/src/file-upload-types.d.ts +1 -1
  53. package/dist/components/footer/src/footer-navigation.d.ts +2 -2
  54. package/dist/components/footer/src/footer-social-link.d.ts +3 -3
  55. package/dist/components/footer/src/footer.d.ts +1 -1
  56. package/dist/components/grid/src/grid.d.ts +1 -1
  57. package/dist/components/grid/src/grid.item.d.ts +1 -1
  58. package/dist/components/heading/src/heading.d.ts +1 -1
  59. package/dist/components/label/src/label.d.ts +1 -1
  60. package/dist/components/link/src/link.d.ts +1 -1
  61. package/dist/components/loading/src/loading-illustrative.d.ts +1 -1
  62. package/dist/components/logo/src/logo.types.d.ts +1 -1
  63. package/dist/components/modal/src/modal-content.d.ts +2 -2
  64. package/dist/components/modal/src/modal-trigger.d.ts +2 -2
  65. package/dist/components/notification/src/notification.d.ts +2 -2
  66. package/dist/components/pagination/src/pagination-page-selector.d.ts +1 -1
  67. package/dist/components/pagination/src/pagination-page-size-selector.d.ts +2 -2
  68. package/dist/components/pagination/src/pagination-pages.d.ts +1 -1
  69. package/dist/components/pagination/src/pagination-step-trigger.d.ts +1 -1
  70. package/dist/components/pagination/src/use-page-size-options.hook.d.ts +2 -2
  71. package/dist/components/password-field/src/password-field.d.ts +1 -1
  72. package/dist/components/password-field/src/password-strength-indicator.d.ts +2 -2
  73. package/dist/components/popover/src/popover-button.d.ts +2 -2
  74. package/dist/components/radio-card-group/src/radio-card-group.d.ts +2 -2
  75. package/dist/components/radio-card-group/src/radio-card-item.d.ts +1 -1
  76. package/dist/components/search-field/src/search-field-autocomplete.d.ts +7 -4
  77. package/dist/components/search-field/src/search-field-autocomplete.d.ts.map +1 -1
  78. package/dist/components/search-field/src/search-field-base.d.ts +4 -2
  79. package/dist/components/search-field/src/search-field-base.d.ts.map +1 -1
  80. package/dist/components/search-field/src/search-field.d.ts +6 -0
  81. package/dist/components/search-field/src/search-field.d.ts.map +1 -1
  82. package/dist/components/select/src/select.d.ts +2 -2
  83. package/dist/components/spacer/src/spacer.d.ts +1 -1
  84. package/dist/components/spinner/src/spinner.d.ts +1 -1
  85. package/dist/components/stepper/src/stepper-container.d.ts +1 -1
  86. package/dist/components/stepper/src/stepper-link.d.ts +1 -1
  87. package/dist/components/table/src/story-utils/table-data.d.ts +4 -4
  88. package/dist/components/table/src/test-utils/table-data.d.ts +3 -3
  89. package/dist/components/table/src/types.d.ts +3 -3
  90. package/dist/components/tabs/src/tab-content.d.ts +1 -1
  91. package/dist/components/text-area/src/text-area.d.ts +1 -1
  92. package/dist/components/text-spacing/src/text-spacing.d.ts +1 -1
  93. package/dist/components/toggle/src/toggle.d.ts +1 -1
  94. package/dist/components/tooltip/src/tooltip.d.ts +3 -3
  95. package/dist/components-metadata.js +1 -0
  96. package/dist/countdown-CdGFNLZq.js +2 -0
  97. package/dist/countdown-CdGFNLZq.js.map +1 -0
  98. package/dist/countdown-G7eg3CZj.mjs +188 -0
  99. package/dist/countdown-G7eg3CZj.mjs.map +1 -0
  100. package/dist/countdown.cjs.js +1 -1
  101. package/dist/countdown.es.js +1 -1
  102. package/dist/country-flag-icon/LICENSE.txt +0 -11
  103. package/dist/date-field-D8yGH1mw.js +2 -0
  104. package/dist/{date-field-CtpWDaSh.js.map → date-field-D8yGH1mw.js.map} +1 -1
  105. package/dist/{date-field-_rCuf15v.mjs → date-field-DVMPYoLT.mjs} +361 -311
  106. package/dist/{date-field-_rCuf15v.mjs.map → date-field-DVMPYoLT.mjs.map} +1 -1
  107. package/dist/date-field.cjs.js +1 -1
  108. package/dist/date-field.es.js +1 -1
  109. package/dist/{date-picker-sqcNAplg.mjs → date-picker-Ban9DLsx.mjs} +6 -6
  110. package/dist/{date-picker-sqcNAplg.mjs.map → date-picker-Ban9DLsx.mjs.map} +1 -1
  111. package/dist/{date-picker-BYlszX1W.js → date-picker-re3cPV_Z.js} +2 -2
  112. package/dist/{date-picker-BYlszX1W.js.map → date-picker-re3cPV_Z.js.map} +1 -1
  113. package/dist/date-picker.cjs.js +1 -1
  114. package/dist/date-picker.es.js +1 -1
  115. package/dist/date-range-field-8JmPw-Ei.js +2 -0
  116. package/dist/date-range-field-8JmPw-Ei.js.map +1 -0
  117. package/dist/{date-range-field-BmjQeiOv.mjs → date-range-field-dmJO66U_.mjs} +64 -61
  118. package/dist/date-range-field-dmJO66U_.mjs.map +1 -0
  119. package/dist/date-range-field.cjs.js +1 -1
  120. package/dist/date-range-field.es.js +1 -1
  121. package/dist/dismissable-chip-group-CVo3CS8K.js +2 -0
  122. package/dist/dismissable-chip-group-CVo3CS8K.js.map +1 -0
  123. package/dist/dismissable-chip-group-Dov2-9Fe.mjs +95 -0
  124. package/dist/dismissable-chip-group-Dov2-9Fe.mjs.map +1 -0
  125. package/dist/dismissable-chip-group.cjs.js +1 -1
  126. package/dist/dismissable-chip-group.es.js +1 -1
  127. package/dist/{drawer-oFJcxW58.js → drawer-CSagTJjN.js} +2 -2
  128. package/dist/{drawer-oFJcxW58.js.map → drawer-CSagTJjN.js.map} +1 -1
  129. package/dist/{drawer-Chx3H8EU.mjs → drawer-Cw-Y9XH9.mjs} +3 -3
  130. package/dist/{drawer-Chx3H8EU.mjs.map → drawer-Cw-Y9XH9.mjs.map} +1 -1
  131. package/dist/drawer.cjs.js +1 -1
  132. package/dist/drawer.es.js +1 -1
  133. package/dist/dropdown-BAM4nQhd.mjs +955 -0
  134. package/dist/dropdown-BAM4nQhd.mjs.map +1 -0
  135. package/dist/dropdown-Cr8DVw2T.js +2 -0
  136. package/dist/dropdown-Cr8DVw2T.js.map +1 -0
  137. package/dist/dropdown.cjs.js +1 -1
  138. package/dist/dropdown.es.js +1 -1
  139. package/dist/{file-upload-MvNuX4ks.js → file-upload-CdlYkCg8.js} +2 -2
  140. package/dist/{file-upload-MvNuX4ks.js.map → file-upload-CdlYkCg8.js.map} +1 -1
  141. package/dist/{file-upload-Ctw6LCTU.mjs → file-upload-ih5NqF67.mjs} +2 -2
  142. package/dist/{file-upload-Ctw6LCTU.mjs.map → file-upload-ih5NqF67.mjs.map} +1 -1
  143. package/dist/file-upload.cjs.js +1 -1
  144. package/dist/file-upload.es.js +1 -1
  145. package/dist/{footer-DkVmTd-f.mjs → footer-CVVt8hUE.mjs} +3 -3
  146. package/dist/{footer-DkVmTd-f.mjs.map → footer-CVVt8hUE.mjs.map} +1 -1
  147. package/dist/{footer-Bbemct3Z.js → footer-Cat9-v7l.js} +2 -2
  148. package/dist/{footer-Bbemct3Z.js.map → footer-Cat9-v7l.js.map} +1 -1
  149. package/dist/footer.cjs.js +1 -1
  150. package/dist/footer.es.js +1 -1
  151. package/dist/{hero-banner-Mag1OwL4.js → hero-banner-BNw3eNTs.js} +2 -2
  152. package/dist/{hero-banner-Mag1OwL4.js.map → hero-banner-BNw3eNTs.js.map} +1 -1
  153. package/dist/{hero-banner-ChDoFRhq.mjs → hero-banner-MnKuFSku.mjs} +2 -2
  154. package/dist/{hero-banner-ChDoFRhq.mjs.map → hero-banner-MnKuFSku.mjs.map} +1 -1
  155. package/dist/hero-banner.cjs.js +1 -1
  156. package/dist/hero-banner.es.js +1 -1
  157. package/dist/libraries/library/src/container.d.ts +1 -1
  158. package/dist/libraries/library/src/content-block.d.ts +1 -1
  159. package/dist/libraries/library/src/quantity-selector.d.ts +2 -2
  160. package/dist/libraries/theme/src/ThemeProvider.d.ts +1 -1
  161. package/dist/libraries/theme/src/theme-props.d.ts +1 -0
  162. package/dist/libraries/theme/src/theme-props.d.ts.map +1 -1
  163. package/dist/libraries/tokens/dist/color/variables.d.ts +1 -0
  164. package/dist/libraries/tokens/dist/color/variables.dark.d.ts +1 -0
  165. package/dist/library.cjs.js +1 -1
  166. package/dist/library.es.js +293 -292
  167. package/dist/{modal-CXOYUsJm.js → modal-BSN-wIcN.js} +2 -2
  168. package/dist/{modal-CXOYUsJm.js.map → modal-BSN-wIcN.js.map} +1 -1
  169. package/dist/{modal-Pwvhrzn-.mjs → modal-CnzUgU97.mjs} +3 -3
  170. package/dist/{modal-Pwvhrzn-.mjs.map → modal-CnzUgU97.mjs.map} +1 -1
  171. package/dist/modal.cjs.js +1 -1
  172. package/dist/modal.es.js +1 -1
  173. package/dist/{popover-B6ntmuEK.mjs → popover-B-oWzP-0.mjs} +3 -3
  174. package/dist/{popover-B6ntmuEK.mjs.map → popover-B-oWzP-0.mjs.map} +1 -1
  175. package/dist/{popover-DJHMEFXP.js → popover-BzoAQW0i.js} +2 -2
  176. package/dist/{popover-DJHMEFXP.js.map → popover-BzoAQW0i.js.map} +1 -1
  177. package/dist/popover.cjs.js +1 -1
  178. package/dist/popover.es.js +1 -1
  179. package/dist/{promotion-card-B3mz__m7.js → promotion-card-B8bnNVZ-.js} +2 -2
  180. package/dist/{promotion-card-B3mz__m7.js.map → promotion-card-B8bnNVZ-.js.map} +1 -1
  181. package/dist/{promotion-card-Co6qAkTZ.mjs → promotion-card-DwNbzSK3.mjs} +2 -2
  182. package/dist/{promotion-card-Co6qAkTZ.mjs.map → promotion-card-DwNbzSK3.mjs.map} +1 -1
  183. package/dist/promotion-card.cjs.js +1 -1
  184. package/dist/promotion-card.es.js +1 -1
  185. package/dist/purpur.css +1 -1
  186. package/dist/rich-text.cjs.js +1 -1
  187. package/dist/rich-text.es.js +1 -1
  188. package/dist/search-field-BR4gETPP.js +2 -0
  189. package/dist/search-field-BR4gETPP.js.map +1 -0
  190. package/dist/search-field-DyBcoB9g.mjs +186 -0
  191. package/dist/search-field-DyBcoB9g.mjs.map +1 -0
  192. package/dist/search-field.cjs.js +1 -1
  193. package/dist/search-field.es.js +1 -1
  194. package/dist/{stepper-D59T-Y2_.mjs → stepper-CGBjyjVw.mjs} +2 -2
  195. package/dist/{stepper-D59T-Y2_.mjs.map → stepper-CGBjyjVw.mjs.map} +1 -1
  196. package/dist/{stepper-Dao4XaDV.js → stepper-CbcFVE3v.js} +2 -2
  197. package/dist/{stepper-Dao4XaDV.js.map → stepper-CbcFVE3v.js.map} +1 -1
  198. package/dist/stepper.cjs.js +1 -1
  199. package/dist/stepper.es.js +1 -1
  200. package/dist/{table-BkXNxvjW.js → table-CFBK5Gv4.js} +3 -3
  201. package/dist/{table-BkXNxvjW.js.map → table-CFBK5Gv4.js.map} +1 -1
  202. package/dist/{table-CY8rjMoR.mjs → table-PdfWMFks.mjs} +8 -8
  203. package/dist/{table-CY8rjMoR.mjs.map → table-PdfWMFks.mjs.map} +1 -1
  204. package/dist/table.cjs.js +1 -1
  205. package/dist/table.es.js +1 -1
  206. package/dist/{text-area-9RUldq6W.js → text-area-AHqUSmEE.js} +2 -2
  207. package/dist/{text-area-9RUldq6W.js.map → text-area-AHqUSmEE.js.map} +1 -1
  208. package/dist/{text-area-C58aZEPa.mjs → text-area-DabB5eo_.mjs} +3 -3
  209. package/dist/{text-area-C58aZEPa.mjs.map → text-area-DabB5eo_.mjs.map} +1 -1
  210. package/dist/text-area.cjs.js +1 -1
  211. package/dist/text-area.es.js +1 -1
  212. package/dist/{text-spacing-BU0mkEf9.mjs → text-spacing-Bmkv_rmc.mjs} +3 -3
  213. package/dist/{text-spacing-BU0mkEf9.mjs.map → text-spacing-Bmkv_rmc.mjs.map} +1 -1
  214. package/dist/{text-spacing-CiGPZHuB.js → text-spacing-CdnbUO6z.js} +2 -2
  215. package/dist/{text-spacing-CiGPZHuB.js.map → text-spacing-CdnbUO6z.js.map} +1 -1
  216. package/dist/text-spacing.cjs.js +1 -1
  217. package/dist/text-spacing.es.js +1 -1
  218. package/dist/theme.cjs.js +1 -1
  219. package/dist/theme.es.js +3 -3
  220. package/dist/tokens/color/variables.css +1 -0
  221. package/dist/tokens/color/variables.d.ts +1 -0
  222. package/dist/tokens/color/variables.dark.css +1 -0
  223. package/dist/tokens/color/variables.dark.d.ts +1 -0
  224. package/dist/tokens/color/variables.dark.js +1 -0
  225. package/dist/tokens/color/variables.dark.json +1 -0
  226. package/dist/tokens/color/variables.dark.scss +1 -0
  227. package/dist/tokens/color/variables.js +1 -0
  228. package/dist/tokens/color/variables.json +1 -0
  229. package/dist/tokens/color/variables.scss +1 -0
  230. package/dist/tokens.cjs.js +1 -1
  231. package/dist/tokens.es.js +167 -166
  232. package/dist/{tooltip-DeP1UsPW.js → tooltip-DRW4N9Z-.js} +2 -2
  233. package/dist/{tooltip-DeP1UsPW.js.map → tooltip-DRW4N9Z-.js.map} +1 -1
  234. package/dist/{tooltip-bqdd2lJL.mjs → tooltip-DzY9olpb.mjs} +3 -3
  235. package/dist/{tooltip-bqdd2lJL.mjs.map → tooltip-DzY9olpb.mjs.map} +1 -1
  236. package/dist/tooltip.cjs.js +1 -1
  237. package/dist/tooltip.es.js +1 -1
  238. package/dist/use-autocomplete.es-CoAeiJiu.mjs +155 -0
  239. package/dist/use-autocomplete.es-CoAeiJiu.mjs.map +1 -0
  240. package/dist/use-autocomplete.es-Djt1u2i8.js +2 -0
  241. package/dist/use-autocomplete.es-Djt1u2i8.js.map +1 -0
  242. package/dist/useColorScheme-BtOgJUTy.js +2 -0
  243. package/dist/{useColorScheme-BHhPgv9q.js.map → useColorScheme-BtOgJUTy.js.map} +1 -1
  244. package/dist/{useColorScheme-B7lGBSe4.mjs → useColorScheme-DXAxJPXW.mjs} +2 -2
  245. package/dist/{useColorScheme-B7lGBSe4.mjs.map → useColorScheme-DXAxJPXW.mjs.map} +1 -1
  246. package/dist/useThemePortalContainer-Cs1c-2AI.js +2 -0
  247. package/dist/{useThemePortalContainer-CUcqV327.js.map → useThemePortalContainer-Cs1c-2AI.js.map} +1 -1
  248. package/dist/useThemePortalContainer-DeKoE-E_.mjs +9 -0
  249. package/dist/{useThemePortalContainer-D13Xx24N.mjs.map → useThemePortalContainer-DeKoE-E_.mjs.map} +1 -1
  250. package/dist/variables-CTBx79yI.js +2 -0
  251. package/dist/{variables-D1vNo1lO.js.map → variables-CTBx79yI.js.map} +1 -1
  252. package/dist/variables-Do6SfyT0.mjs +258 -0
  253. package/dist/{variables-BrsAsWIF.mjs.map → variables-Do6SfyT0.mjs.map} +1 -1
  254. package/package.json +18 -18
  255. package/src/library.ts +72 -2
  256. package/tokens/color/variables.css +1 -0
  257. package/tokens/color/variables.d.ts +1 -0
  258. package/tokens/color/variables.dark.css +1 -0
  259. package/tokens/color/variables.dark.d.ts +1 -0
  260. package/tokens/color/variables.dark.js +1 -0
  261. package/tokens/color/variables.dark.json +1 -0
  262. package/tokens/color/variables.dark.scss +1 -0
  263. package/tokens/color/variables.js +1 -0
  264. package/tokens/color/variables.json +1 -0
  265. package/tokens/color/variables.scss +1 -0
  266. package/dist/countdown-5Ni6OlVY.mjs +0 -189
  267. package/dist/countdown-5Ni6OlVY.mjs.map +0 -1
  268. package/dist/countdown-CGXJyzB2.js +0 -2
  269. package/dist/countdown-CGXJyzB2.js.map +0 -1
  270. package/dist/date-field-CtpWDaSh.js +0 -2
  271. package/dist/date-range-field-B33XeBW8.js +0 -2
  272. package/dist/date-range-field-B33XeBW8.js.map +0 -1
  273. package/dist/date-range-field-BmjQeiOv.mjs.map +0 -1
  274. package/dist/dismissable-chip-group-5ALErhD2.js +0 -2
  275. package/dist/dismissable-chip-group-5ALErhD2.js.map +0 -1
  276. package/dist/dismissable-chip-group-DMNU7g5e.mjs +0 -94
  277. package/dist/dismissable-chip-group-DMNU7g5e.mjs.map +0 -1
  278. package/dist/dropdown-DJr5COdU.mjs +0 -945
  279. package/dist/dropdown-DJr5COdU.mjs.map +0 -1
  280. package/dist/dropdown-s8FhNU5N.js +0 -2
  281. package/dist/dropdown-s8FhNU5N.js.map +0 -1
  282. package/dist/search-field-BTJtRyw5.mjs +0 -184
  283. package/dist/search-field-BTJtRyw5.mjs.map +0 -1
  284. package/dist/search-field-nzVXak1a.js +0 -2
  285. package/dist/search-field-nzVXak1a.js.map +0 -1
  286. package/dist/use-autocomplete.es-BwAzMcau.js +0 -2
  287. package/dist/use-autocomplete.es-BwAzMcau.js.map +0 -1
  288. package/dist/use-autocomplete.es-CKb0RHKG.mjs +0 -144
  289. package/dist/use-autocomplete.es-CKb0RHKG.mjs.map +0 -1
  290. package/dist/useColorScheme-BHhPgv9q.js +0 -2
  291. package/dist/useThemePortalContainer-CUcqV327.js +0 -2
  292. package/dist/useThemePortalContainer-D13Xx24N.mjs +0 -9
  293. package/dist/variables-BrsAsWIF.mjs +0 -257
  294. package/dist/variables-D1vNo1lO.js +0 -2
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./RichText-B865Qkzj.js");exports.RichText=e.RichText;exports.richToPlainText=e.richToPlainText;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./RichText-CeYecUFV.js");exports.RichText=e.RichText;exports.richToPlainText=e.richToPlainText;
2
2
  //# sourceMappingURL=rich-text.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { R as e, r as i } from "./RichText-CPkBwXNI.mjs";
1
+ import { R as e, r as i } from "./RichText-CwQfDo_S.mjs";
2
2
  export {
3
3
  e as RichText,
4
4
  i as richToPlainText
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),g=require("react"),C=require("./use-autocomplete.es-Djt1u2i8.js"),R=require("./listbox-lXO21cJV.js"),M=require("./paragraph-B8HFdNne.js"),k=require("./bind-DeUYJ6m9.js"),D=require("./search.es-Cg2amJSR.js"),B=require("./text-field-BSgqJjpv.js"),I=require("./button-C5CYysw5.js"),V={"purpur-search-field":"_purpur-search-field_fgjyk_1","purpur-search-field--has-clear-button":"_purpur-search-field--has-clear-button_fgjyk_4","purpur-search-field--no-gap":"_purpur-search-field--no-gap_fgjyk_13","purpur-search-field__wrapper":"_purpur-search-field__wrapper_fgjyk_17","purpur-search-field__wrapper--gap":"_purpur-search-field__wrapper--gap_fgjyk_20","purpur-search-field__search-icon":"_purpur-search-field__search-icon_fgjyk_24","purpur-search-field__close-icon":"_purpur-search-field__close-icon_fgjyk_24","purpur-search-field__search-icon--negative":"_purpur-search-field__search-icon--negative_fgjyk_27","purpur-search-field__close-icon--negative":"_purpur-search-field__close-icon--negative_fgjyk_27","purpur-search-field__autocomplete-root":"_purpur-search-field__autocomplete-root_fgjyk_30","purpur-search-field__listbox":"_purpur-search-field__listbox_fgjyk_34"},E={"purpur-search-field-button":"_purpur-search-field-button_c16yo_1","purpur-search-field-button--icon-only":"_purpur-search-field-button--icon-only_c16yo_1"},H=k.c.bind(E),L="purpur-search-field-button",G=({["data-testid"]:s,disabled:u,iconOnly:p,negative:l,label:_,type:c="submit",onClick:t})=>{const i={className:H(L,{[`${L}--icon-only`]:p}),disabled:u,"data-testid":s,negative:l,onClick:t};return p?e.jsx(I.Button,{...i,"aria-label":_,iconOnly:!0,size:"sm",type:c,variant:"primary",children:e.jsx(D.s,{size:"xs"})}):e.jsx(I.Button,{...i,size:"sm",type:c,variant:"primary",children:_})},J=["button-attached","no-button"],y=k.c.bind(V),d="purpur-search-field",N=g.forwardRef(({["data-testid"]:s,className:u,clearButtonAriaLabel:p,disabled:l,submitBehavior:_="form",iconOnlySearchButton:c,negative:t=!1,onClear:i,onSearch:f,searchButtonLabel:x,variant:a,formRef:j,wrapperStyle:m,...n},v)=>{const r=o=>s?`${s}-${o}`:void 0,$=(typeof n.value=="number"?n.value!==void 0:n.value?.length)&&!l&&!n.readOnly&&!n.loading,h=_==="manual",K=y(u,d,{[`${d}--no-gap`]:a==="button-attached",[`${d}--has-clear-button`]:$}),q={ref:v,className:K,clearButtonAriaLabel:p,disabled:l,negative:t,onClear:i,startAdornment:c?null:e.jsx(D.s,{size:"xs",className:y(`${d}__search-icon`,{[`${d}__search-icon--negative`]:t})},"1"),"data-testid":r("text-field"),type:"search",...n},F=a!=="no-button"?e.jsx(G,{type:h?"button":"submit",onClick:h?o=>f?.(o):void 0,disabled:l,iconOnly:c,negative:t,label:x,"data-testid":r("button")}):null;if(h){const o=b=>{n.onKeyDown?.(b),b.key==="Enter"&&!b.defaultPrevented&&(b.preventDefault(),f?.(b))};return e.jsx("div",{className:y(`${d}__wrapper`),"data-testid":s,style:m,children:e.jsx(B.TextField,{...q,onKeyDown:o,afterField:F})})}return e.jsx("form",{ref:j,className:y(`${d}__wrapper`),"data-testid":s,style:m,onSubmit:o=>{o.preventDefault(),f?.(o)},children:e.jsx(B.TextField,{...q,afterField:F})})});N.displayName="SearchFieldBase";const O=k.c.bind(V),A="purpur-search-field",w=g.forwardRef(({suggestions:s,suggestionsLabel:u,onSelectSuggestion:p,openSuggestionsOnFocus:l,suggestionsMaxHeight:_,formatOption:c,...t},i)=>{const f=g.useId(),x=t.id??f,a=C.te({id:x,options:s,listboxLabel:u,disabled:t.disabled,negative:t.negative,readOnly:t.readOnly,openOnFocus:l,listboxMaxHeight:_,onSelect:p,"data-testid":t["data-testid"]}),j=r=>{a.inputRef.current=r,typeof i=="function"?i(r):i&&(i.current=r)},m=r=>{t.onChange?.(r),a.isOpen||a.openListbox()},n=t.value!=null?String(t.value):"",v=r=>c?c(r,n):e.jsx(C.x,{text:r.label,query:n});return e.jsxs("div",{ref:a.rootRef,className:O(`${A}__autocomplete-root`),children:[e.jsx(N,{ref:j,...t,onChange:m,id:x,wrapperStyle:a.anchorStyle,...a.inputProps}),a.isOpen&&e.jsx(R.Listbox,{...a.listboxProps,className:O(`${A}__listbox`),children:s.map((r,S)=>{const{key:$,...h}=a.getListboxItemProps(r,S);return e.jsx(R.Listbox.Item,{...h,children:e.jsx(M.Paragraph,{disabled:r.disabled,negative:t.negative,children:v(r)})},$)})})]})});w.displayName="SearchFieldAutocomplete";const z=g.forwardRef((s,u)=>s.suggestions?e.jsx(w,{ref:u,...s}):e.jsx(N,{ref:u,...s}));z.displayName="SearchField";exports.SearchField=z;exports.SearchFieldAutocomplete=w;exports.searchFieldVariants=J;
2
+ //# sourceMappingURL=search-field-BR4gETPP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-field-BR4gETPP.js","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field-base.tsx","../../../components/search-field/src/search-field-autocomplete.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n negative?: boolean;\n label: string;\n type?: \"submit\" | \"button\";\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n negative,\n label,\n type = \"submit\",\n onClick,\n}: Props) => {\n const buttonProps = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n negative,\n onClick,\n };\n\n if (iconOnly) {\n return (\n <Button {...buttonProps} aria-label={label} iconOnly size=\"sm\" type={type} variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} size=\"sm\" type={type} variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, {\n type ChangeEvent,\n type CSSProperties,\n forwardRef,\n type RefObject,\n type SubmitEvent,\n} from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport { type AutocompleteOption } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n clearButtonAriaLabel: string;\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n negative?: boolean;\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search is triggered.\n * */\n onSearch?: (event?: React.SyntheticEvent) => void;\n /**\n * Controls how the search field handles submission.\n * - `\"form\"` (default): Renders a `<form>` element and submits via form submission.\n * - `\"manual\"`: Renders a `<div>` instead of a `<form>` element.\n * Use this when the component is nested inside another form.\n * */\n submitBehavior?: \"form\" | \"manual\";\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldBaseProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\" | \"variant\">;\n\ntype SearchFieldBaseInternalProps = SearchFieldBaseProps & {\n wrapperStyle?: CSSProperties;\n};\n\ntype SearchFieldAutocompleteSharedProps = {\n /**\n * Called when the user selects a suggestion.\n */\n onSelectSuggestion?: (option: AutocompleteOption) => void;\n /**\n * Open the suggestions listbox when the input receives focus.\n */\n openSuggestionsOnFocus?: boolean;\n /**\n * Maximum height of the suggestions listbox. A number is interpreted as px.\n */\n suggestionsMaxHeight?: string | number;\n /** Custom renderer for an option's label in the listbox, given the current input value. Defaults to bolding the matched text. */\n formatOption?: (option: AutocompleteOption, inputValue: string) => React.ReactNode;\n};\n\ntype SearchFieldWithoutAutocomplete = SearchFieldAutocompleteSharedProps & {\n suggestions?: never;\n suggestionsLabel?: never;\n};\n\ntype SearchFieldWithAutocomplete = SearchFieldAutocompleteSharedProps & {\n /**\n * The list of suggestions to display in a listbox below the field.\n * No filtering is applied — pass the already-correct (pre-filtered) list.\n * If autocomplete should stay enabled while there are temporarily no matches,\n * pass an empty array instead of `undefined` or `null`. Changing this prop\n * from an absent value to an array switches between the regular and\n * autocomplete variants, which causes a re-render, drops input focus, and\n * hides the listbox.\n */\n suggestions: AutocompleteOption[];\n /**\n * Accessible label for the suggestions listbox.\n */\n suggestionsLabel: string;\n};\n\nexport type SearchFieldAutocompleteEnhancements =\n | SearchFieldWithoutAutocomplete\n | SearchFieldWithAutocomplete;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchFieldBase = forwardRef<HTMLInputElement, SearchFieldBaseInternalProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n submitBehavior = \"form\",\n iconOnlySearchButton,\n negative = false,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n wrapperStyle,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n const isManualSubmit = submitBehavior === \"manual\";\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n const textFieldProps: TextFieldProps = {\n ref,\n className: classes,\n clearButtonAriaLabel,\n disabled,\n negative,\n onClear,\n startAdornment: !iconOnlySearchButton ? (\n <IconSearch\n size=\"xs\"\n className={cx(`${rootClassName}__search-icon`, {\n [`${rootClassName}__search-icon--negative`]: negative,\n })}\n key=\"1\"\n />\n ) : null,\n \"data-testid\": getTestId(\"text-field\"),\n type: \"search\" as const,\n ...props,\n };\n\n const searchButton =\n variant !== \"no-button\" ? (\n <SearchFieldButton\n type={isManualSubmit ? \"button\" : \"submit\"}\n onClick={isManualSubmit ? (event) => onSearch?.(event) : undefined}\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n negative={negative}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null;\n\n if (isManualSubmit) {\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n props.onKeyDown?.(event);\n\n if (event.key === \"Enter\" && !event.defaultPrevented) {\n event.preventDefault();\n onSearch?.(event);\n }\n };\n\n return (\n <div\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n style={wrapperStyle}\n >\n <TextField {...textFieldProps} onKeyDown={handleKeyDown} afterField={searchButton} />\n </div>\n );\n }\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n style={wrapperStyle}\n onSubmit={(e: SubmitEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField {...textFieldProps} afterField={searchButton} />\n </form>\n );\n }\n);\n\nSearchFieldBase.displayName = \"SearchFieldBase\";\n","import React, { forwardRef, useId } from \"react\";\nimport { HighlightMatch } from \"@purpur/highlight-match\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { type AutocompleteOption, useAutocomplete } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n} from \"./search-field-base\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport type SearchFieldAutocompleteProps = SearchFieldBaseProps &\n Extract<SearchFieldAutocompleteEnhancements, { suggestions: AutocompleteOption[] }>;\n\nexport const SearchFieldAutocomplete = forwardRef<HTMLInputElement, SearchFieldAutocompleteProps>(\n (\n {\n suggestions,\n suggestionsLabel,\n onSelectSuggestion,\n openSuggestionsOnFocus,\n suggestionsMaxHeight,\n formatOption,\n ...searchFieldProps\n },\n ref\n ) => {\n const randomId = useId();\n const inputId = (searchFieldProps.id as string | undefined) ?? randomId;\n const autocomplete = useAutocomplete({\n id: inputId,\n options: suggestions,\n listboxLabel: suggestionsLabel,\n disabled: searchFieldProps.disabled,\n negative: searchFieldProps.negative,\n readOnly: searchFieldProps.readOnly,\n openOnFocus: openSuggestionsOnFocus,\n listboxMaxHeight: suggestionsMaxHeight,\n onSelect: onSelectSuggestion,\n [\"data-testid\"]: searchFieldProps[\"data-testid\"],\n });\n\n const setInputRef = (node: HTMLInputElement | null) => {\n (autocomplete.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n searchFieldProps.onChange?.(event);\n if (!autocomplete.isOpen) {\n autocomplete.openListbox();\n }\n };\n\n const inputValue = searchFieldProps.value != null ? String(searchFieldProps.value) : \"\";\n\n const renderOptionLabel = (option: AutocompleteOption) =>\n formatOption ? (\n formatOption(option, inputValue)\n ) : (\n <HighlightMatch text={option.label} query={inputValue} />\n );\n\n return (\n <div\n ref={autocomplete.rootRef as React.RefObject<HTMLDivElement>}\n className={cx(`${rootClassName}__autocomplete-root`)}\n >\n <SearchFieldBase\n ref={setInputRef}\n {...searchFieldProps}\n onChange={handleInputChange}\n id={inputId}\n wrapperStyle={autocomplete.anchorStyle}\n {...autocomplete.inputProps}\n />\n {autocomplete.isOpen && (\n <Listbox {...autocomplete.listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {suggestions.map((option, index) => {\n const { key, ...listboxItemProps } = autocomplete.getListboxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n <Paragraph disabled={option.disabled} negative={searchFieldProps.negative}>\n {renderOptionLabel(option)}\n </Paragraph>\n </Listbox.Item>\n );\n })}\n </Listbox>\n )}\n </div>\n );\n }\n);\n\nSearchFieldAutocomplete.displayName = \"SearchFieldAutocomplete\";\n","import React, { forwardRef } from \"react\";\n\nimport { SearchFieldAutocomplete } from \"./search-field-autocomplete\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n searchFieldVariants,\n} from \"./search-field-base\";\n\nexport { searchFieldVariants };\n\nexport type SearchFieldProps = SearchFieldBaseProps & SearchFieldAutocompleteEnhancements;\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>((props, ref) => {\n if (props.suggestions) {\n return <SearchFieldAutocomplete ref={ref} {...props} />;\n }\n\n return <SearchFieldBase ref={ref} {...props} />;\n});\n\nSearchField.displayName = \"SearchField\";\n\nexport {\n SearchFieldAutocomplete,\n type SearchFieldAutocompleteProps,\n} from \"./search-field-autocomplete\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","negative","label","type","onClick","buttonProps","Button","IconSearch","jsx","searchFieldVariants","SearchFieldBase","forwardRef","dataTestId","className","clearButtonAriaLabel","submitBehavior","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","wrapperStyle","props","ref","getTestId","name","hasClearButton","isManualSubmit","classes","textFieldProps","searchButton","event","handleKeyDown","TextField","e","SearchFieldAutocomplete","suggestions","suggestionsLabel","onSelectSuggestion","openSuggestionsOnFocus","suggestionsMaxHeight","formatOption","searchFieldProps","randomId","useId","inputId","autocomplete","useAutocomplete","setInputRef","node","handleInputChange","inputValue","renderOptionLabel","option","HighlightMatch","jsxs","Listbox","index","key","listboxItemProps","Paragraph","SearchField"],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ import { jsx as t, jsxs as K } from "react/jsx-runtime";
2
+ import { forwardRef as k, useId as M } from "react";
3
+ import { t as q, x as E } from "./use-autocomplete.es-CoAeiJiu.mjs";
4
+ import { L as I } from "./listbox-CtV-Vcmy.mjs";
5
+ import { P as H } from "./paragraph-CwAdFoIm.mjs";
6
+ import { c as j } from "./bind-CU-R61T-.mjs";
7
+ import { s as F } from "./search.es-DoFKg2Hr.mjs";
8
+ import { T as L } from "./text-field-MQHeITxy.mjs";
9
+ import { b as O } from "./button-mHw_J7JU.mjs";
10
+ const R = {
11
+ "purpur-search-field": "_purpur-search-field_fgjyk_1",
12
+ "purpur-search-field--has-clear-button": "_purpur-search-field--has-clear-button_fgjyk_4",
13
+ "purpur-search-field--no-gap": "_purpur-search-field--no-gap_fgjyk_13",
14
+ "purpur-search-field__wrapper": "_purpur-search-field__wrapper_fgjyk_17",
15
+ "purpur-search-field__wrapper--gap": "_purpur-search-field__wrapper--gap_fgjyk_20",
16
+ "purpur-search-field__search-icon": "_purpur-search-field__search-icon_fgjyk_24",
17
+ "purpur-search-field__close-icon": "_purpur-search-field__close-icon_fgjyk_24",
18
+ "purpur-search-field__search-icon--negative": "_purpur-search-field__search-icon--negative_fgjyk_27",
19
+ "purpur-search-field__close-icon--negative": "_purpur-search-field__close-icon--negative_fgjyk_27",
20
+ "purpur-search-field__autocomplete-root": "_purpur-search-field__autocomplete-root_fgjyk_30",
21
+ "purpur-search-field__listbox": "_purpur-search-field__listbox_fgjyk_34"
22
+ }, G = {
23
+ "purpur-search-field-button": "_purpur-search-field-button_c16yo_1",
24
+ "purpur-search-field-button--icon-only": "_purpur-search-field-button--icon-only_c16yo_1"
25
+ }, J = j.bind(G), B = "purpur-search-field-button", P = ({
26
+ ["data-testid"]: a,
27
+ disabled: i,
28
+ iconOnly: d,
29
+ negative: c,
30
+ label: _,
31
+ type: u = "submit",
32
+ onClick: e
33
+ }) => {
34
+ const o = {
35
+ className: J(B, {
36
+ [`${B}--icon-only`]: d
37
+ }),
38
+ disabled: i,
39
+ "data-testid": a,
40
+ negative: c,
41
+ onClick: e
42
+ };
43
+ return d ? /* @__PURE__ */ t(O, { ...o, "aria-label": _, iconOnly: !0, size: "sm", type: u, variant: "primary", children: /* @__PURE__ */ t(F, { size: "xs" }) }) : /* @__PURE__ */ t(O, { ...o, size: "sm", type: u, variant: "primary", children: _ });
44
+ }, ae = ["button-attached", "no-button"], g = j.bind(R), p = "purpur-search-field", N = k(
45
+ ({
46
+ ["data-testid"]: a,
47
+ className: i,
48
+ clearButtonAriaLabel: d,
49
+ disabled: c,
50
+ submitBehavior: _ = "form",
51
+ iconOnlySearchButton: u,
52
+ negative: e = !1,
53
+ onClear: o,
54
+ onSearch: f,
55
+ searchButtonLabel: b,
56
+ variant: s,
57
+ formRef: x,
58
+ wrapperStyle: y,
59
+ ...n
60
+ }, v) => {
61
+ const r = (l) => a ? `${a}-${l}` : void 0, $ = (typeof n.value == "number" ? n.value !== void 0 : n.value?.length) && !c && !n.readOnly && !n.loading, h = _ === "manual", A = g(i, p, {
62
+ [`${p}--no-gap`]: s === "button-attached",
63
+ [`${p}--has-clear-button`]: $
64
+ }), S = {
65
+ ref: v,
66
+ className: A,
67
+ clearButtonAriaLabel: d,
68
+ disabled: c,
69
+ negative: e,
70
+ onClear: o,
71
+ startAdornment: u ? null : /* @__PURE__ */ t(
72
+ F,
73
+ {
74
+ size: "xs",
75
+ className: g(`${p}__search-icon`, {
76
+ [`${p}__search-icon--negative`]: e
77
+ })
78
+ },
79
+ "1"
80
+ ),
81
+ "data-testid": r("text-field"),
82
+ type: "search",
83
+ ...n
84
+ }, C = s !== "no-button" ? /* @__PURE__ */ t(
85
+ P,
86
+ {
87
+ type: h ? "button" : "submit",
88
+ onClick: h ? (l) => f?.(l) : void 0,
89
+ disabled: c,
90
+ iconOnly: u,
91
+ negative: e,
92
+ label: b,
93
+ "data-testid": r("button")
94
+ }
95
+ ) : null;
96
+ if (h) {
97
+ const l = (m) => {
98
+ n.onKeyDown?.(m), m.key === "Enter" && !m.defaultPrevented && (m.preventDefault(), f?.(m));
99
+ };
100
+ return /* @__PURE__ */ t(
101
+ "div",
102
+ {
103
+ className: g(`${p}__wrapper`),
104
+ "data-testid": a,
105
+ style: y,
106
+ children: /* @__PURE__ */ t(L, { ...S, onKeyDown: l, afterField: C })
107
+ }
108
+ );
109
+ }
110
+ return /* @__PURE__ */ t(
111
+ "form",
112
+ {
113
+ ref: x,
114
+ className: g(`${p}__wrapper`),
115
+ "data-testid": a,
116
+ style: y,
117
+ onSubmit: (l) => {
118
+ l.preventDefault(), f?.(l);
119
+ },
120
+ children: /* @__PURE__ */ t(L, { ...S, afterField: C })
121
+ }
122
+ );
123
+ }
124
+ );
125
+ N.displayName = "SearchFieldBase";
126
+ const D = j.bind(R), z = "purpur-search-field", V = k(
127
+ ({
128
+ suggestions: a,
129
+ suggestionsLabel: i,
130
+ onSelectSuggestion: d,
131
+ openSuggestionsOnFocus: c,
132
+ suggestionsMaxHeight: _,
133
+ formatOption: u,
134
+ ...e
135
+ }, o) => {
136
+ const f = M(), b = e.id ?? f, s = q({
137
+ id: b,
138
+ options: a,
139
+ listboxLabel: i,
140
+ disabled: e.disabled,
141
+ negative: e.negative,
142
+ readOnly: e.readOnly,
143
+ openOnFocus: c,
144
+ listboxMaxHeight: _,
145
+ onSelect: d,
146
+ "data-testid": e["data-testid"]
147
+ }), x = (r) => {
148
+ s.inputRef.current = r, typeof o == "function" ? o(r) : o && (o.current = r);
149
+ }, y = (r) => {
150
+ e.onChange?.(r), s.isOpen || s.openListbox();
151
+ }, n = e.value != null ? String(e.value) : "", v = (r) => u ? u(r, n) : /* @__PURE__ */ t(E, { text: r.label, query: n });
152
+ return /* @__PURE__ */ K(
153
+ "div",
154
+ {
155
+ ref: s.rootRef,
156
+ className: D(`${z}__autocomplete-root`),
157
+ children: [
158
+ /* @__PURE__ */ t(
159
+ N,
160
+ {
161
+ ref: x,
162
+ ...e,
163
+ onChange: y,
164
+ id: b,
165
+ wrapperStyle: s.anchorStyle,
166
+ ...s.inputProps
167
+ }
168
+ ),
169
+ s.isOpen && /* @__PURE__ */ t(I, { ...s.listboxProps, className: D(`${z}__listbox`), children: a.map((r, w) => {
170
+ const { key: $, ...h } = s.getListboxItemProps(r, w);
171
+ return /* @__PURE__ */ t(I.Item, { ...h, children: /* @__PURE__ */ t(H, { disabled: r.disabled, negative: e.negative, children: v(r) }) }, $);
172
+ }) })
173
+ ]
174
+ }
175
+ );
176
+ }
177
+ );
178
+ V.displayName = "SearchFieldAutocomplete";
179
+ const Q = k((a, i) => a.suggestions ? /* @__PURE__ */ t(V, { ref: i, ...a }) : /* @__PURE__ */ t(N, { ref: i, ...a }));
180
+ Q.displayName = "SearchField";
181
+ export {
182
+ Q as S,
183
+ V as a,
184
+ ae as s
185
+ };
186
+ //# sourceMappingURL=search-field-DyBcoB9g.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-field-DyBcoB9g.mjs","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field-base.tsx","../../../components/search-field/src/search-field-autocomplete.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n negative?: boolean;\n label: string;\n type?: \"submit\" | \"button\";\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n negative,\n label,\n type = \"submit\",\n onClick,\n}: Props) => {\n const buttonProps = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n negative,\n onClick,\n };\n\n if (iconOnly) {\n return (\n <Button {...buttonProps} aria-label={label} iconOnly size=\"sm\" type={type} variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} size=\"sm\" type={type} variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, {\n type ChangeEvent,\n type CSSProperties,\n forwardRef,\n type RefObject,\n type SubmitEvent,\n} from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport { type AutocompleteOption } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n clearButtonAriaLabel: string;\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n negative?: boolean;\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search is triggered.\n * */\n onSearch?: (event?: React.SyntheticEvent) => void;\n /**\n * Controls how the search field handles submission.\n * - `\"form\"` (default): Renders a `<form>` element and submits via form submission.\n * - `\"manual\"`: Renders a `<div>` instead of a `<form>` element.\n * Use this when the component is nested inside another form.\n * */\n submitBehavior?: \"form\" | \"manual\";\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldBaseProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\" | \"variant\">;\n\ntype SearchFieldBaseInternalProps = SearchFieldBaseProps & {\n wrapperStyle?: CSSProperties;\n};\n\ntype SearchFieldAutocompleteSharedProps = {\n /**\n * Called when the user selects a suggestion.\n */\n onSelectSuggestion?: (option: AutocompleteOption) => void;\n /**\n * Open the suggestions listbox when the input receives focus.\n */\n openSuggestionsOnFocus?: boolean;\n /**\n * Maximum height of the suggestions listbox. A number is interpreted as px.\n */\n suggestionsMaxHeight?: string | number;\n /** Custom renderer for an option's label in the listbox, given the current input value. Defaults to bolding the matched text. */\n formatOption?: (option: AutocompleteOption, inputValue: string) => React.ReactNode;\n};\n\ntype SearchFieldWithoutAutocomplete = SearchFieldAutocompleteSharedProps & {\n suggestions?: never;\n suggestionsLabel?: never;\n};\n\ntype SearchFieldWithAutocomplete = SearchFieldAutocompleteSharedProps & {\n /**\n * The list of suggestions to display in a listbox below the field.\n * No filtering is applied — pass the already-correct (pre-filtered) list.\n * If autocomplete should stay enabled while there are temporarily no matches,\n * pass an empty array instead of `undefined` or `null`. Changing this prop\n * from an absent value to an array switches between the regular and\n * autocomplete variants, which causes a re-render, drops input focus, and\n * hides the listbox.\n */\n suggestions: AutocompleteOption[];\n /**\n * Accessible label for the suggestions listbox.\n */\n suggestionsLabel: string;\n};\n\nexport type SearchFieldAutocompleteEnhancements =\n | SearchFieldWithoutAutocomplete\n | SearchFieldWithAutocomplete;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchFieldBase = forwardRef<HTMLInputElement, SearchFieldBaseInternalProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n submitBehavior = \"form\",\n iconOnlySearchButton,\n negative = false,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n wrapperStyle,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n const isManualSubmit = submitBehavior === \"manual\";\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n const textFieldProps: TextFieldProps = {\n ref,\n className: classes,\n clearButtonAriaLabel,\n disabled,\n negative,\n onClear,\n startAdornment: !iconOnlySearchButton ? (\n <IconSearch\n size=\"xs\"\n className={cx(`${rootClassName}__search-icon`, {\n [`${rootClassName}__search-icon--negative`]: negative,\n })}\n key=\"1\"\n />\n ) : null,\n \"data-testid\": getTestId(\"text-field\"),\n type: \"search\" as const,\n ...props,\n };\n\n const searchButton =\n variant !== \"no-button\" ? (\n <SearchFieldButton\n type={isManualSubmit ? \"button\" : \"submit\"}\n onClick={isManualSubmit ? (event) => onSearch?.(event) : undefined}\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n negative={negative}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null;\n\n if (isManualSubmit) {\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n props.onKeyDown?.(event);\n\n if (event.key === \"Enter\" && !event.defaultPrevented) {\n event.preventDefault();\n onSearch?.(event);\n }\n };\n\n return (\n <div\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n style={wrapperStyle}\n >\n <TextField {...textFieldProps} onKeyDown={handleKeyDown} afterField={searchButton} />\n </div>\n );\n }\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n style={wrapperStyle}\n onSubmit={(e: SubmitEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField {...textFieldProps} afterField={searchButton} />\n </form>\n );\n }\n);\n\nSearchFieldBase.displayName = \"SearchFieldBase\";\n","import React, { forwardRef, useId } from \"react\";\nimport { HighlightMatch } from \"@purpur/highlight-match\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { type AutocompleteOption, useAutocomplete } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n} from \"./search-field-base\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport type SearchFieldAutocompleteProps = SearchFieldBaseProps &\n Extract<SearchFieldAutocompleteEnhancements, { suggestions: AutocompleteOption[] }>;\n\nexport const SearchFieldAutocomplete = forwardRef<HTMLInputElement, SearchFieldAutocompleteProps>(\n (\n {\n suggestions,\n suggestionsLabel,\n onSelectSuggestion,\n openSuggestionsOnFocus,\n suggestionsMaxHeight,\n formatOption,\n ...searchFieldProps\n },\n ref\n ) => {\n const randomId = useId();\n const inputId = (searchFieldProps.id as string | undefined) ?? randomId;\n const autocomplete = useAutocomplete({\n id: inputId,\n options: suggestions,\n listboxLabel: suggestionsLabel,\n disabled: searchFieldProps.disabled,\n negative: searchFieldProps.negative,\n readOnly: searchFieldProps.readOnly,\n openOnFocus: openSuggestionsOnFocus,\n listboxMaxHeight: suggestionsMaxHeight,\n onSelect: onSelectSuggestion,\n [\"data-testid\"]: searchFieldProps[\"data-testid\"],\n });\n\n const setInputRef = (node: HTMLInputElement | null) => {\n (autocomplete.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n searchFieldProps.onChange?.(event);\n if (!autocomplete.isOpen) {\n autocomplete.openListbox();\n }\n };\n\n const inputValue = searchFieldProps.value != null ? String(searchFieldProps.value) : \"\";\n\n const renderOptionLabel = (option: AutocompleteOption) =>\n formatOption ? (\n formatOption(option, inputValue)\n ) : (\n <HighlightMatch text={option.label} query={inputValue} />\n );\n\n return (\n <div\n ref={autocomplete.rootRef as React.RefObject<HTMLDivElement>}\n className={cx(`${rootClassName}__autocomplete-root`)}\n >\n <SearchFieldBase\n ref={setInputRef}\n {...searchFieldProps}\n onChange={handleInputChange}\n id={inputId}\n wrapperStyle={autocomplete.anchorStyle}\n {...autocomplete.inputProps}\n />\n {autocomplete.isOpen && (\n <Listbox {...autocomplete.listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {suggestions.map((option, index) => {\n const { key, ...listboxItemProps } = autocomplete.getListboxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n <Paragraph disabled={option.disabled} negative={searchFieldProps.negative}>\n {renderOptionLabel(option)}\n </Paragraph>\n </Listbox.Item>\n );\n })}\n </Listbox>\n )}\n </div>\n );\n }\n);\n\nSearchFieldAutocomplete.displayName = \"SearchFieldAutocomplete\";\n","import React, { forwardRef } from \"react\";\n\nimport { SearchFieldAutocomplete } from \"./search-field-autocomplete\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n searchFieldVariants,\n} from \"./search-field-base\";\n\nexport { searchFieldVariants };\n\nexport type SearchFieldProps = SearchFieldBaseProps & SearchFieldAutocompleteEnhancements;\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>((props, ref) => {\n if (props.suggestions) {\n return <SearchFieldAutocomplete ref={ref} {...props} />;\n }\n\n return <SearchFieldBase ref={ref} {...props} />;\n});\n\nSearchField.displayName = \"SearchField\";\n\nexport {\n SearchFieldAutocomplete,\n type SearchFieldAutocompleteProps,\n} from \"./search-field-autocomplete\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","negative","label","type","onClick","buttonProps","Button","IconSearch","jsx","searchFieldVariants","SearchFieldBase","forwardRef","dataTestId","className","clearButtonAriaLabel","submitBehavior","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","wrapperStyle","props","ref","getTestId","name","hasClearButton","isManualSubmit","classes","textFieldProps","searchButton","event","handleKeyDown","TextField","e","SearchFieldAutocomplete","suggestions","suggestionsLabel","onSelectSuggestion","openSuggestionsOnFocus","suggestionsMaxHeight","formatOption","searchFieldProps","randomId","useId","inputId","autocomplete","useAutocomplete","setInputRef","node","handleInputChange","inputValue","renderOptionLabel","option","HighlightMatch","jsxs","Listbox","index","key","listboxItemProps","Paragraph","SearchField"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./search-field-nzVXak1a.js");exports.SearchField=e.SearchField;exports.SearchFieldAutocomplete=e.SearchFieldAutocomplete;exports.searchFieldVariants=e.searchFieldVariants;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./search-field-BR4gETPP.js");exports.SearchField=e.SearchField;exports.SearchFieldAutocomplete=e.SearchFieldAutocomplete;exports.searchFieldVariants=e.searchFieldVariants;
2
2
  //# sourceMappingURL=search-field.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { S as r, a as s, s as c } from "./search-field-BTJtRyw5.mjs";
1
+ import { S as r, a as s, s as c } from "./search-field-DyBcoB9g.mjs";
2
2
  export {
3
3
  r as SearchField,
4
4
  s as SearchFieldAutocomplete,
@@ -5,7 +5,7 @@ import { l as tr } from "./chevron-left.es-UFhf3v35.mjs";
5
5
  import { n as sr } from "./chevron-right.es-D7aVK4ER.mjs";
6
6
  import { R as nr, V as pr, S as lr, T as ir } from "./index-B8Mazo6u.mjs";
7
7
  import { c as E } from "./bind-CU-R61T-.mjs";
8
- import { b as or } from "./tooltip-bqdd2lJL.mjs";
8
+ import { b as or } from "./tooltip-DzY9olpb.mjs";
9
9
  import { a as ar } from "./checkmark.es-DdgIZN2R.mjs";
10
10
  const _r = {
11
11
  PRIMARY: "primary"
@@ -466,4 +466,4 @@ M.displayName = "Stepper";
466
466
  export {
467
467
  M as S
468
468
  };
469
- //# sourceMappingURL=stepper-D59T-Y2_.mjs.map
469
+ //# sourceMappingURL=stepper-CGBjyjVw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stepper-D59T-Y2_.mjs","sources":["../../../components/stepper/src/constants.ts","../../../components/stepper/src/stepper-container.tsx","../../../components/stepper/src/stepper-content.tsx","../../../components/stepper/src/stepper-link.tsx","../../../components/stepper/src/stepper-nav-items.tsx","../../../components/stepper/src/use-content-focus.hook.ts","../../../components/stepper/src/use-scroll-buttons.hook.ts","../../../components/stepper/src/stepper.tsx"],"sourcesContent":["export const STEPPER_VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n} as const;\n\nexport const VISIBILITY_STATES = {\n SMALL_SCREEN: \"small-screen\",\n LARGE_SCREEN: \"large-screen\",\n ALWAYS: \"always\",\n} as const;\n","import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-container.module.scss\";\nimport { type StepperVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type StepperContainerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n alignWithGrid: boolean;\n variant: StepperVariant;\n};\n\nconst rootClassName = \"purpur-stepper-container\";\n\nexport const StepperContainer = ({\n [\"data-testid\"]: dataTestId = \"purpur-stepper-container\",\n children,\n className,\n alignWithGrid,\n variant,\n ...props\n}: StepperContainerProps) => {\n const classes: string = cx(className, rootClassName, {\n [`${rootClassName}--${variant}`]: variant,\n [`${rootClassName}--align-with-grid`]: alignWithGrid,\n });\n\n return (\n <div className={classes} data-testid={dataTestId} {...props}>\n <div\n className={cx(`${rootClassName}__inner`, {\n [`${rootClassName}__inner--align-with-grid`]: alignWithGrid,\n })}\n >\n {children}\n </div>\n </div>\n );\n};\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\n\nimport { type Optional, type Step } from \"./types\";\n\nexport type StepperContentProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n} & Optional<Step, \"disabled\" | \"finished\">;\n\nexport const StepperContent = forwardRef<HTMLDivElement, StepperContentProps>(\n ({ children, ...props }, ref) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { finished, ...rest } = props;\n return (\n <div {...rest} ref={ref}>\n {children}\n </div>\n );\n }\n);\n\nexport const isStepperContent = (child?: ReactNode): child is ReactElement<StepperContentProps> =>\n !!child && isValidElement<StepperContentProps>(child) && !!child.props.label;\n","import React, { forwardRef, type MouseEvent } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-link.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n type VisibilityStates,\n} from \"./types\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-stepper-link\";\n\nexport type StepNumberProps = {\n current: boolean;\n disabled: boolean;\n stepNumber: number;\n [\"data-testid\"]?: string;\n};\n\nconst StepNumber = ({\n [\"data-testid\"]: dataTestId,\n current,\n disabled,\n stepNumber,\n}: StepNumberProps) => {\n return (\n <div\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__step-number`,\n {\n [`${rootClassName}__step-number--current`]: current,\n },\n {\n [`${rootClassName}__step-number--disabled`]: disabled,\n },\n ])}\n >\n {stepNumber}\n </div>\n );\n};\n\nexport type StepperLinkProps = Omit<BaseProps<\"a\">, \"children\"> & {\n variant: StepperVariant;\n step: Step;\n currentStepIndex: number;\n index: number;\n indexOfLastItem: number;\n whenToBeVisible: VisibilityStates;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n idPrefix: string;\n};\n\nexport const StepperLink = forwardRef<HTMLAnchorElement, StepperLinkProps>(\n (\n {\n className,\n [\"data-testid\"]: dataTestId,\n variant,\n step,\n indexOfLastItem,\n index,\n currentStepIndex,\n whenToBeVisible,\n handleStepChange,\n handleStepFocus,\n completedStepLabel,\n idPrefix,\n ...props\n },\n ref\n ) => {\n const placement = index === 0 ? \"first\" : index === indexOfLastItem ? \"last\" : \"middle\";\n const isCurrentStep = index === currentStepIndex;\n\n const handleClick = (e: MouseEvent<HTMLAnchorElement>): void => {\n if (step.disabled) {\n e.preventDefault();\n return;\n }\n handleStepChange(e, index);\n };\n\n return (\n <a\n {...props}\n ref={ref}\n className={cx(\n className,\n rootClassName,\n `${rootClassName}--${placement}`,\n `${rootClassName}--${variant}`,\n `${rootClassName}--visibility-${whenToBeVisible}`,\n {\n [`${rootClassName}--current`]: isCurrentStep,\n },\n {\n [`${rootClassName}--disabled`]: step.disabled,\n },\n {\n [\"arrow-tail\"]: placement !== \"first\",\n },\n {\n [\"arrow-forward\"]: placement !== \"last\",\n }\n )}\n id={`${idPrefix}-trigger-${index}`}\n href={step.disabled ? undefined : `#${idPrefix}-content`}\n tabIndex={step.disabled ? -1 : undefined}\n data-testid={`${dataTestId}-step-trigger-item-${index}`}\n aria-disabled={step.disabled}\n aria-current={isCurrentStep && \"step\"}\n aria-label={\n step.finished && !isCurrentStep\n ? [String(index + 1), step.label, completedStepLabel].filter(Boolean).join(\", \")\n : undefined\n }\n onClick={handleClick}\n onFocus={handleStepFocus}\n >\n <span className={cx(`${rootClassName}__trigger-outline`)}>\n {step.finished && !isCurrentStep ? (\n <IconCheckmark\n className={cx(`${rootClassName}__icon`)}\n data-testid={`${dataTestId}-step-finished-icon`}\n size=\"sm\"\n />\n ) : (\n <StepNumber\n data-testid={`${dataTestId}-step-number`}\n current={isCurrentStep}\n disabled={step.disabled}\n stepNumber={index + 1}\n />\n )}\n <span\n className={cx(`${rootClassName}__step-label`, {\n [`sr-only--lg-down`]: !isCurrentStep,\n })}\n >\n {step.label}\n </span>\n </span>\n </a>\n );\n }\n);\n","import React, { forwardRef, type RefObject } from \"react\";\nimport { Tooltip } from \"@purpur/tooltip\";\nimport c from \"classnames/bind\";\n\nimport { VISIBILITY_STATES } from \"./constants\";\nimport { StepperLink } from \"./stepper-link\";\nimport styles from \"./stepper-nav-items.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n} from \"./types\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper-nav-items\";\n\nexport type StepperNavItemsProps = {\n variant: StepperVariant;\n [\"data-testid\"]?: string;\n firstStepRef: RefObject<HTMLLIElement | null>;\n lastStepRef: RefObject<HTMLLIElement | null>;\n steps: Step[];\n currentStepIndex: number;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n idPrefix: string;\n};\n\nexport const StepperNavItems = forwardRef<HTMLOListElement, StepperNavItemsProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n variant,\n handleStepChange,\n handleStepFocus,\n steps,\n firstStepRef,\n lastStepRef,\n currentStepIndex,\n completedStepLabel,\n idPrefix,\n },\n ref\n ) => {\n const stepListItems = steps.map((step: Step, index: number) => {\n const tooltipTriggerItem = (\n <span className={cx(`${rootClassName}__tooltip-trigger-item-container`)}>\n <StepperLink\n data-testid={`${dataTestId}-disabled-sm`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.SMALL_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n idPrefix={idPrefix}\n />\n </span>\n );\n\n return (\n <li\n className={cx(`${rootClassName}__list-item`, {\n [`${rootClassName}__list-item--current`]: index === currentStepIndex,\n })}\n ref={index === 0 ? firstStepRef : index === steps.length - 1 ? lastStepRef : null}\n key={step.label}\n >\n {step.disabled ? (\n <>\n <Tooltip\n contentClassName={cx(`${rootClassName}__tooltip-content`)}\n triggerElement={tooltipTriggerItem}\n >\n {step.label}\n </Tooltip>\n <StepperLink\n data-testid={`${dataTestId}-disabled-lg`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.LARGE_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n idPrefix={idPrefix}\n />\n </>\n ) : (\n <StepperLink\n data-testid={dataTestId}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.ALWAYS}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n idPrefix={idPrefix}\n />\n )}\n </li>\n );\n });\n return (\n <ol ref={ref} className={cx(`${rootClassName}__list`)}>\n {stepListItems}\n </ol>\n );\n }\n);\n","import { type RefObject, useEffect, useRef } from \"react\";\n\ninterface UseContentFocusHook<T extends HTMLElement> {\n contentRef: RefObject<T | null>;\n}\n\nexport const useContentFocus = <T extends HTMLElement>(\n currentStepIndex: number\n): UseContentFocusHook<T> => {\n const firstLoad = useRef<boolean>(true);\n const contentRef = useRef<T | null>(null);\n\n useEffect(() => {\n if (!firstLoad.current && contentRef.current !== null) {\n contentRef.current.focus();\n }\n firstLoad.current = false;\n\n }, [currentStepIndex]);\n\n return {\n contentRef,\n };\n};\n","import { type RefObject, useEffect, useRef, useState } from \"react\";\n\nexport const SCROLL_DIRECTION = {\n LEFT: \"left\",\n RIGHT: \"right\",\n} as const;\n\nexport type ScrollDirection = (typeof SCROLL_DIRECTION)[keyof typeof SCROLL_DIRECTION];\n\nexport type UseScrollHook<ContainerElement, WatchedElement> = {\n scrollContainer: RefObject<ContainerElement | null>;\n firstStepRef: RefObject<WatchedElement | null>;\n lastStepRef: RefObject<WatchedElement | null>;\n displayLeftScrollButton: boolean;\n displayRightScrollButton: boolean;\n handleHorizontalScroll: (dir: ScrollDirection) => void;\n};\n\nexport const useScrollButtons = <\n ContainerElement extends HTMLElement,\n WatchedElement extends HTMLElement\n>(): UseScrollHook<ContainerElement, WatchedElement> => {\n const scrollContainer = useRef<ContainerElement | null>(null);\n const firstStepRef = useRef<WatchedElement | null>(null);\n const lastStepRef = useRef<WatchedElement | null>(null);\n const [displayLeftScrollButton, setDisplayLeftScrollButton] = useState(false);\n const [displayRightScrollButton, setDisplayRightScrollButton] = useState(false);\n\n const handleHorizontalScroll = (dir: ScrollDirection): void => {\n if (!scrollContainer.current) {\n return;\n }\n const scrollableContainer = scrollContainer.current;\n const scrollableContainerWidth = scrollableContainer.clientWidth;\n const currentScrollLeft = scrollableContainer.scrollLeft;\n if (dir === SCROLL_DIRECTION.LEFT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft - scrollableContainerWidth / 2,\n });\n }\n if (dir === SCROLL_DIRECTION.RIGHT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft + scrollableContainerWidth / 2,\n });\n }\n };\n\n useEffect(() => {\n if (firstStepRef.current && lastStepRef.current && scrollContainer.current) {\n const observer: IntersectionObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n for (const entry of entries) {\n if (entry.target === firstStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayLeftScrollButton(false);\n } else {\n setDisplayLeftScrollButton(true);\n }\n continue;\n }\n if (entry.target === lastStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayRightScrollButton(false);\n } else {\n setDisplayRightScrollButton(true);\n }\n }\n }\n },\n {\n root: scrollContainer.current,\n threshold: 0.95,\n }\n );\n\n observer.observe(firstStepRef.current);\n observer.observe(lastStepRef.current);\n\n return () => observer.disconnect();\n }\n return undefined;\n }, [firstStepRef, lastStepRef, scrollContainer]);\n\n return {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n };\n};\n","import React, { Children, type ReactElement, useId } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconChevronLeft } from \"@purpur/icon/chevron-left\";\nimport { IconChevronRight } from \"@purpur/icon/chevron-right\";\nimport * as ScrollArea from \"@radix-ui/react-scroll-area\";\nimport c from \"classnames/bind\";\n\nimport { STEPPER_VARIANT } from \"./constants\";\nimport styles from \"./stepper.module.scss\";\nimport { StepperContainer } from \"./stepper-container\";\nimport { isStepperContent, StepperContent } from \"./stepper-content\";\nimport { StepperNavItems } from \"./stepper-nav-items\";\nimport { type Step, type StepChangeFunction, type StepperVariant } from \"./types\";\nimport { useContentFocus } from \"./use-content-focus.hook\";\nimport { SCROLL_DIRECTION, useScrollButtons } from \"./use-scroll-buttons.hook\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper\";\n\nexport type StepperProps = Omit<BaseProps, \"children\"> & {\n children: Array<ReactElement<typeof StepperContent>> | ReactElement<typeof StepperContent>;\n completedStepLabel: string;\n currentStepIndex: number;\n onStepChange: StepChangeFunction;\n alignWithGrid?: boolean;\n leftScrollButtonAriaLabel: string;\n rightScrollButtonAriaLabel: string;\n variant: StepperVariant;\n};\n\nexport type StepperComponent<P> = React.FunctionComponent<P> & {\n Content: typeof StepperContent;\n};\n\nexport const Stepper: StepperComponent<StepperProps> = ({\n [\"aria-label\"]: ariaLabel,\n [\"data-testid\"]: dataTestId,\n children,\n className,\n completedStepLabel,\n currentStepIndex = 0,\n onStepChange,\n alignWithGrid = false,\n leftScrollButtonAriaLabel,\n rightScrollButtonAriaLabel,\n variant = STEPPER_VARIANT.PRIMARY,\n ...props\n}: StepperProps) => {\n const stepperContentChildren = Children.toArray(children).filter(isStepperContent);\n const steps: Step[] = Children.map(stepperContentChildren, (child) => {\n const { disabled, finished, label } = child.props;\n return {\n disabled: disabled ?? false,\n finished: finished ?? false,\n label,\n };\n });\n const idPrefix = useId();\n const contentId = `${idPrefix}-content`;\n const {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n } = useScrollButtons<HTMLDivElement, HTMLLIElement>();\n const { contentRef } = useContentFocus<HTMLElement>(currentStepIndex);\n\n const classes: string = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--${variant}`]: variant,\n },\n ]);\n const scrollTriggerIntoView = (e: React.FocusEvent | React.MouseEvent): void => {\n (e.target as HTMLAnchorElement).scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n });\n };\n\n const handleStepChange = (e: React.MouseEvent<HTMLAnchorElement>, idx: number): void => {\n e.preventDefault();\n scrollTriggerIntoView(e);\n onStepChange(idx);\n };\n\n const handleStepFocus = (e: React.FocusEvent<HTMLAnchorElement>): void => {\n scrollTriggerIntoView(e);\n };\n\n return (\n <div className={classes} {...props}>\n <StepperContainer variant={variant} alignWithGrid={alignWithGrid}>\n <div className={cx(`${rootClassName}__nav-container`)}>\n <ScrollArea.Root>\n <ScrollArea.Viewport ref={scrollContainer}>\n <nav\n aria-label={ariaLabel}\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__nav`,\n {\n [`${rootClassName}__nav--${variant}`]: variant,\n },\n ])}\n >\n <StepperNavItems\n data-testid={dataTestId}\n variant={variant}\n firstStepRef={firstStepRef}\n lastStepRef={lastStepRef}\n steps={steps}\n currentStepIndex={currentStepIndex}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n completedStepLabel={completedStepLabel}\n idPrefix={idPrefix}\n />\n </nav>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"horizontal\">\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n {displayLeftScrollButton && (\n <Button\n aria-label={leftScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--left`,\n {\n [`${rootClassName}__scroll-button--align-with-grid`]: alignWithGrid,\n },\n ])}\n variant={BUTTON_VARIANT.TEXT}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.LEFT);\n }}\n >\n <IconChevronLeft className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n {displayRightScrollButton && (\n <Button\n aria-label={rightScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--right`,\n {\n [`${rootClassName}__scroll-button--align-with-grid`]: alignWithGrid,\n },\n ])}\n variant={BUTTON_VARIANT.TEXT}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.RIGHT);\n }}\n >\n <IconChevronRight className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n </div>\n </StepperContainer>\n <section\n tabIndex={-1}\n id={contentId}\n aria-labelledby={`${idPrefix}-trigger-${currentStepIndex}`}\n ref={contentRef}\n style={{ outline: \"none\" }}\n >\n {Children.map(stepperContentChildren, (child, index: number) => (\n <div\n className={cx({\n [`${rootClassName}__hidden`]: index !== currentStepIndex,\n })}\n hidden={index !== currentStepIndex}\n >\n {child}\n </div>\n ))}\n </section>\n </div>\n );\n};\n\nStepper.Content = StepperContent;\n\nStepper.displayName = \"Stepper\";\n"],"names":["STEPPER_VARIANT","VISIBILITY_STATES","cx","c","styles","rootClassName","StepperContainer","dataTestId","children","className","alignWithGrid","variant","props","classes","jsx","StepperContent","forwardRef","ref","finished","rest","isStepperContent","child","isValidElement","StepNumber","current","disabled","stepNumber","StepperLink","step","indexOfLastItem","index","currentStepIndex","whenToBeVisible","handleStepChange","handleStepFocus","completedStepLabel","idPrefix","placement","isCurrentStep","handleClick","e","IconCheckmark","StepperNavItems","steps","firstStepRef","lastStepRef","stepListItems","tooltipTriggerItem","jsxs","Fragment","Tooltip","useContentFocus","firstLoad","useRef","contentRef","useEffect","SCROLL_DIRECTION","useScrollButtons","scrollContainer","displayLeftScrollButton","setDisplayLeftScrollButton","useState","displayRightScrollButton","setDisplayRightScrollButton","handleHorizontalScroll","dir","scrollableContainer","scrollableContainerWidth","currentScrollLeft","observer","entries","entry","Stepper","ariaLabel","onStepChange","leftScrollButtonAriaLabel","rightScrollButtonAriaLabel","stepperContentChildren","Children","label","useId","contentId","scrollTriggerIntoView","idx","ScrollArea.Root","ScrollArea.Viewport","ScrollArea.Scrollbar","ScrollArea.Thumb","Button","BUTTON_VARIANT","IconChevronLeft","IconChevronRight"],"mappings":"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"}
1
+ {"version":3,"file":"stepper-CGBjyjVw.mjs","sources":["../../../components/stepper/src/constants.ts","../../../components/stepper/src/stepper-container.tsx","../../../components/stepper/src/stepper-content.tsx","../../../components/stepper/src/stepper-link.tsx","../../../components/stepper/src/stepper-nav-items.tsx","../../../components/stepper/src/use-content-focus.hook.ts","../../../components/stepper/src/use-scroll-buttons.hook.ts","../../../components/stepper/src/stepper.tsx"],"sourcesContent":["export const STEPPER_VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n} as const;\n\nexport const VISIBILITY_STATES = {\n SMALL_SCREEN: \"small-screen\",\n LARGE_SCREEN: \"large-screen\",\n ALWAYS: \"always\",\n} as const;\n","import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-container.module.scss\";\nimport { type StepperVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type StepperContainerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n alignWithGrid: boolean;\n variant: StepperVariant;\n};\n\nconst rootClassName = \"purpur-stepper-container\";\n\nexport const StepperContainer = ({\n [\"data-testid\"]: dataTestId = \"purpur-stepper-container\",\n children,\n className,\n alignWithGrid,\n variant,\n ...props\n}: StepperContainerProps) => {\n const classes: string = cx(className, rootClassName, {\n [`${rootClassName}--${variant}`]: variant,\n [`${rootClassName}--align-with-grid`]: alignWithGrid,\n });\n\n return (\n <div className={classes} data-testid={dataTestId} {...props}>\n <div\n className={cx(`${rootClassName}__inner`, {\n [`${rootClassName}__inner--align-with-grid`]: alignWithGrid,\n })}\n >\n {children}\n </div>\n </div>\n );\n};\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\n\nimport { type Optional, type Step } from \"./types\";\n\nexport type StepperContentProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n} & Optional<Step, \"disabled\" | \"finished\">;\n\nexport const StepperContent = forwardRef<HTMLDivElement, StepperContentProps>(\n ({ children, ...props }, ref) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { finished, ...rest } = props;\n return (\n <div {...rest} ref={ref}>\n {children}\n </div>\n );\n }\n);\n\nexport const isStepperContent = (child?: ReactNode): child is ReactElement<StepperContentProps> =>\n !!child && isValidElement<StepperContentProps>(child) && !!child.props.label;\n","import React, { forwardRef, type MouseEvent } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-link.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n type VisibilityStates,\n} from \"./types\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-stepper-link\";\n\nexport type StepNumberProps = {\n current: boolean;\n disabled: boolean;\n stepNumber: number;\n [\"data-testid\"]?: string;\n};\n\nconst StepNumber = ({\n [\"data-testid\"]: dataTestId,\n current,\n disabled,\n stepNumber,\n}: StepNumberProps) => {\n return (\n <div\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__step-number`,\n {\n [`${rootClassName}__step-number--current`]: current,\n },\n {\n [`${rootClassName}__step-number--disabled`]: disabled,\n },\n ])}\n >\n {stepNumber}\n </div>\n );\n};\n\nexport type StepperLinkProps = Omit<BaseProps<\"a\">, \"children\"> & {\n variant: StepperVariant;\n step: Step;\n currentStepIndex: number;\n index: number;\n indexOfLastItem: number;\n whenToBeVisible: VisibilityStates;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n idPrefix: string;\n};\n\nexport const StepperLink = forwardRef<HTMLAnchorElement, StepperLinkProps>(\n (\n {\n className,\n [\"data-testid\"]: dataTestId,\n variant,\n step,\n indexOfLastItem,\n index,\n currentStepIndex,\n whenToBeVisible,\n handleStepChange,\n handleStepFocus,\n completedStepLabel,\n idPrefix,\n ...props\n },\n ref\n ) => {\n const placement = index === 0 ? \"first\" : index === indexOfLastItem ? \"last\" : \"middle\";\n const isCurrentStep = index === currentStepIndex;\n\n const handleClick = (e: MouseEvent<HTMLAnchorElement>): void => {\n if (step.disabled) {\n e.preventDefault();\n return;\n }\n handleStepChange(e, index);\n };\n\n return (\n <a\n {...props}\n ref={ref}\n className={cx(\n className,\n rootClassName,\n `${rootClassName}--${placement}`,\n `${rootClassName}--${variant}`,\n `${rootClassName}--visibility-${whenToBeVisible}`,\n {\n [`${rootClassName}--current`]: isCurrentStep,\n },\n {\n [`${rootClassName}--disabled`]: step.disabled,\n },\n {\n [\"arrow-tail\"]: placement !== \"first\",\n },\n {\n [\"arrow-forward\"]: placement !== \"last\",\n }\n )}\n id={`${idPrefix}-trigger-${index}`}\n href={step.disabled ? undefined : `#${idPrefix}-content`}\n tabIndex={step.disabled ? -1 : undefined}\n data-testid={`${dataTestId}-step-trigger-item-${index}`}\n aria-disabled={step.disabled}\n aria-current={isCurrentStep && \"step\"}\n aria-label={\n step.finished && !isCurrentStep\n ? [String(index + 1), step.label, completedStepLabel].filter(Boolean).join(\", \")\n : undefined\n }\n onClick={handleClick}\n onFocus={handleStepFocus}\n >\n <span className={cx(`${rootClassName}__trigger-outline`)}>\n {step.finished && !isCurrentStep ? (\n <IconCheckmark\n className={cx(`${rootClassName}__icon`)}\n data-testid={`${dataTestId}-step-finished-icon`}\n size=\"sm\"\n />\n ) : (\n <StepNumber\n data-testid={`${dataTestId}-step-number`}\n current={isCurrentStep}\n disabled={step.disabled}\n stepNumber={index + 1}\n />\n )}\n <span\n className={cx(`${rootClassName}__step-label`, {\n [`sr-only--lg-down`]: !isCurrentStep,\n })}\n >\n {step.label}\n </span>\n </span>\n </a>\n );\n }\n);\n","import React, { forwardRef, type RefObject } from \"react\";\nimport { Tooltip } from \"@purpur/tooltip\";\nimport c from \"classnames/bind\";\n\nimport { VISIBILITY_STATES } from \"./constants\";\nimport { StepperLink } from \"./stepper-link\";\nimport styles from \"./stepper-nav-items.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n} from \"./types\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper-nav-items\";\n\nexport type StepperNavItemsProps = {\n variant: StepperVariant;\n [\"data-testid\"]?: string;\n firstStepRef: RefObject<HTMLLIElement | null>;\n lastStepRef: RefObject<HTMLLIElement | null>;\n steps: Step[];\n currentStepIndex: number;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n idPrefix: string;\n};\n\nexport const StepperNavItems = forwardRef<HTMLOListElement, StepperNavItemsProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n variant,\n handleStepChange,\n handleStepFocus,\n steps,\n firstStepRef,\n lastStepRef,\n currentStepIndex,\n completedStepLabel,\n idPrefix,\n },\n ref\n ) => {\n const stepListItems = steps.map((step: Step, index: number) => {\n const tooltipTriggerItem = (\n <span className={cx(`${rootClassName}__tooltip-trigger-item-container`)}>\n <StepperLink\n data-testid={`${dataTestId}-disabled-sm`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.SMALL_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n idPrefix={idPrefix}\n />\n </span>\n );\n\n return (\n <li\n className={cx(`${rootClassName}__list-item`, {\n [`${rootClassName}__list-item--current`]: index === currentStepIndex,\n })}\n ref={index === 0 ? firstStepRef : index === steps.length - 1 ? lastStepRef : null}\n key={step.label}\n >\n {step.disabled ? (\n <>\n <Tooltip\n contentClassName={cx(`${rootClassName}__tooltip-content`)}\n triggerElement={tooltipTriggerItem}\n >\n {step.label}\n </Tooltip>\n <StepperLink\n data-testid={`${dataTestId}-disabled-lg`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.LARGE_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n idPrefix={idPrefix}\n />\n </>\n ) : (\n <StepperLink\n data-testid={dataTestId}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.ALWAYS}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n idPrefix={idPrefix}\n />\n )}\n </li>\n );\n });\n return (\n <ol ref={ref} className={cx(`${rootClassName}__list`)}>\n {stepListItems}\n </ol>\n );\n }\n);\n","import { type RefObject, useEffect, useRef } from \"react\";\n\ninterface UseContentFocusHook<T extends HTMLElement> {\n contentRef: RefObject<T | null>;\n}\n\nexport const useContentFocus = <T extends HTMLElement>(\n currentStepIndex: number\n): UseContentFocusHook<T> => {\n const firstLoad = useRef<boolean>(true);\n const contentRef = useRef<T | null>(null);\n\n useEffect(() => {\n if (!firstLoad.current && contentRef.current !== null) {\n contentRef.current.focus();\n }\n firstLoad.current = false;\n\n }, [currentStepIndex]);\n\n return {\n contentRef,\n };\n};\n","import { type RefObject, useEffect, useRef, useState } from \"react\";\n\nexport const SCROLL_DIRECTION = {\n LEFT: \"left\",\n RIGHT: \"right\",\n} as const;\n\nexport type ScrollDirection = (typeof SCROLL_DIRECTION)[keyof typeof SCROLL_DIRECTION];\n\nexport type UseScrollHook<ContainerElement, WatchedElement> = {\n scrollContainer: RefObject<ContainerElement | null>;\n firstStepRef: RefObject<WatchedElement | null>;\n lastStepRef: RefObject<WatchedElement | null>;\n displayLeftScrollButton: boolean;\n displayRightScrollButton: boolean;\n handleHorizontalScroll: (dir: ScrollDirection) => void;\n};\n\nexport const useScrollButtons = <\n ContainerElement extends HTMLElement,\n WatchedElement extends HTMLElement\n>(): UseScrollHook<ContainerElement, WatchedElement> => {\n const scrollContainer = useRef<ContainerElement | null>(null);\n const firstStepRef = useRef<WatchedElement | null>(null);\n const lastStepRef = useRef<WatchedElement | null>(null);\n const [displayLeftScrollButton, setDisplayLeftScrollButton] = useState(false);\n const [displayRightScrollButton, setDisplayRightScrollButton] = useState(false);\n\n const handleHorizontalScroll = (dir: ScrollDirection): void => {\n if (!scrollContainer.current) {\n return;\n }\n const scrollableContainer = scrollContainer.current;\n const scrollableContainerWidth = scrollableContainer.clientWidth;\n const currentScrollLeft = scrollableContainer.scrollLeft;\n if (dir === SCROLL_DIRECTION.LEFT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft - scrollableContainerWidth / 2,\n });\n }\n if (dir === SCROLL_DIRECTION.RIGHT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft + scrollableContainerWidth / 2,\n });\n }\n };\n\n useEffect(() => {\n if (firstStepRef.current && lastStepRef.current && scrollContainer.current) {\n const observer: IntersectionObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n for (const entry of entries) {\n if (entry.target === firstStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayLeftScrollButton(false);\n } else {\n setDisplayLeftScrollButton(true);\n }\n continue;\n }\n if (entry.target === lastStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayRightScrollButton(false);\n } else {\n setDisplayRightScrollButton(true);\n }\n }\n }\n },\n {\n root: scrollContainer.current,\n threshold: 0.95,\n }\n );\n\n observer.observe(firstStepRef.current);\n observer.observe(lastStepRef.current);\n\n return () => observer.disconnect();\n }\n return undefined;\n }, [firstStepRef, lastStepRef, scrollContainer]);\n\n return {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n };\n};\n","import React, { Children, type ReactElement, useId } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconChevronLeft } from \"@purpur/icon/chevron-left\";\nimport { IconChevronRight } from \"@purpur/icon/chevron-right\";\nimport * as ScrollArea from \"@radix-ui/react-scroll-area\";\nimport c from \"classnames/bind\";\n\nimport { STEPPER_VARIANT } from \"./constants\";\nimport styles from \"./stepper.module.scss\";\nimport { StepperContainer } from \"./stepper-container\";\nimport { isStepperContent, StepperContent } from \"./stepper-content\";\nimport { StepperNavItems } from \"./stepper-nav-items\";\nimport { type Step, type StepChangeFunction, type StepperVariant } from \"./types\";\nimport { useContentFocus } from \"./use-content-focus.hook\";\nimport { SCROLL_DIRECTION, useScrollButtons } from \"./use-scroll-buttons.hook\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper\";\n\nexport type StepperProps = Omit<BaseProps, \"children\"> & {\n children: Array<ReactElement<typeof StepperContent>> | ReactElement<typeof StepperContent>;\n completedStepLabel: string;\n currentStepIndex: number;\n onStepChange: StepChangeFunction;\n alignWithGrid?: boolean;\n leftScrollButtonAriaLabel: string;\n rightScrollButtonAriaLabel: string;\n variant: StepperVariant;\n};\n\nexport type StepperComponent<P> = React.FunctionComponent<P> & {\n Content: typeof StepperContent;\n};\n\nexport const Stepper: StepperComponent<StepperProps> = ({\n [\"aria-label\"]: ariaLabel,\n [\"data-testid\"]: dataTestId,\n children,\n className,\n completedStepLabel,\n currentStepIndex = 0,\n onStepChange,\n alignWithGrid = false,\n leftScrollButtonAriaLabel,\n rightScrollButtonAriaLabel,\n variant = STEPPER_VARIANT.PRIMARY,\n ...props\n}: StepperProps) => {\n const stepperContentChildren = Children.toArray(children).filter(isStepperContent);\n const steps: Step[] = Children.map(stepperContentChildren, (child) => {\n const { disabled, finished, label } = child.props;\n return {\n disabled: disabled ?? false,\n finished: finished ?? false,\n label,\n };\n });\n const idPrefix = useId();\n const contentId = `${idPrefix}-content`;\n const {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n } = useScrollButtons<HTMLDivElement, HTMLLIElement>();\n const { contentRef } = useContentFocus<HTMLElement>(currentStepIndex);\n\n const classes: string = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--${variant}`]: variant,\n },\n ]);\n const scrollTriggerIntoView = (e: React.FocusEvent | React.MouseEvent): void => {\n (e.target as HTMLAnchorElement).scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n });\n };\n\n const handleStepChange = (e: React.MouseEvent<HTMLAnchorElement>, idx: number): void => {\n e.preventDefault();\n scrollTriggerIntoView(e);\n onStepChange(idx);\n };\n\n const handleStepFocus = (e: React.FocusEvent<HTMLAnchorElement>): void => {\n scrollTriggerIntoView(e);\n };\n\n return (\n <div className={classes} {...props}>\n <StepperContainer variant={variant} alignWithGrid={alignWithGrid}>\n <div className={cx(`${rootClassName}__nav-container`)}>\n <ScrollArea.Root>\n <ScrollArea.Viewport ref={scrollContainer}>\n <nav\n aria-label={ariaLabel}\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__nav`,\n {\n [`${rootClassName}__nav--${variant}`]: variant,\n },\n ])}\n >\n <StepperNavItems\n data-testid={dataTestId}\n variant={variant}\n firstStepRef={firstStepRef}\n lastStepRef={lastStepRef}\n steps={steps}\n currentStepIndex={currentStepIndex}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n completedStepLabel={completedStepLabel}\n idPrefix={idPrefix}\n />\n </nav>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"horizontal\">\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n {displayLeftScrollButton && (\n <Button\n aria-label={leftScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--left`,\n {\n [`${rootClassName}__scroll-button--align-with-grid`]: alignWithGrid,\n },\n ])}\n variant={BUTTON_VARIANT.TEXT}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.LEFT);\n }}\n >\n <IconChevronLeft className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n {displayRightScrollButton && (\n <Button\n aria-label={rightScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--right`,\n {\n [`${rootClassName}__scroll-button--align-with-grid`]: alignWithGrid,\n },\n ])}\n variant={BUTTON_VARIANT.TEXT}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.RIGHT);\n }}\n >\n <IconChevronRight className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n </div>\n </StepperContainer>\n <section\n tabIndex={-1}\n id={contentId}\n aria-labelledby={`${idPrefix}-trigger-${currentStepIndex}`}\n ref={contentRef}\n style={{ outline: \"none\" }}\n >\n {Children.map(stepperContentChildren, (child, index: number) => (\n <div\n className={cx({\n [`${rootClassName}__hidden`]: index !== currentStepIndex,\n })}\n hidden={index !== currentStepIndex}\n >\n {child}\n </div>\n ))}\n </section>\n </div>\n );\n};\n\nStepper.Content = StepperContent;\n\nStepper.displayName = \"Stepper\";\n"],"names":["STEPPER_VARIANT","VISIBILITY_STATES","cx","c","styles","rootClassName","StepperContainer","dataTestId","children","className","alignWithGrid","variant","props","classes","jsx","StepperContent","forwardRef","ref","finished","rest","isStepperContent","child","isValidElement","StepNumber","current","disabled","stepNumber","StepperLink","step","indexOfLastItem","index","currentStepIndex","whenToBeVisible","handleStepChange","handleStepFocus","completedStepLabel","idPrefix","placement","isCurrentStep","handleClick","e","IconCheckmark","StepperNavItems","steps","firstStepRef","lastStepRef","stepListItems","tooltipTriggerItem","jsxs","Fragment","Tooltip","useContentFocus","firstLoad","useRef","contentRef","useEffect","SCROLL_DIRECTION","useScrollButtons","scrollContainer","displayLeftScrollButton","setDisplayLeftScrollButton","useState","displayRightScrollButton","setDisplayRightScrollButton","handleHorizontalScroll","dir","scrollableContainer","scrollableContainerWidth","currentScrollLeft","observer","entries","entry","Stepper","ariaLabel","onStepChange","leftScrollButtonAriaLabel","rightScrollButtonAriaLabel","stepperContentChildren","Children","label","useId","contentId","scrollTriggerIntoView","idx","ScrollArea.Root","ScrollArea.Viewport","ScrollArea.Scrollbar","ScrollArea.Thumb","Button","BUTTON_VARIANT","IconChevronLeft","IconChevronRight"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),o=require("react"),S=require("./button-C5CYysw5.js"),X=require("./chevron-left.es-B0vPg5XM.js"),W=require("./chevron-right.es-Bv376M3o.js"),C=require("./index-CoR7YA3H.js"),L=require("./bind-DeUYJ6m9.js"),J=require("./tooltip-DeP1UsPW.js"),K=require("./checkmark.es-lYntWFA3.js"),Q={PRIMARY:"primary"},x={SMALL_SCREEN:"small-screen",LARGE_SCREEN:"large-screen",ALWAYS:"always"},Z={"purpur-stepper__nav-container":"_purpur-stepper__nav-container_17tj8_1","purpur-stepper__nav":"_purpur-stepper__nav_17tj8_1","purpur-stepper":"_purpur-stepper_17tj8_1","purpur-stepper__scroll-button":"_purpur-stepper__scroll-button_17tj8_7","purpur-stepper__scroll-button--left":"_purpur-stepper__scroll-button--left_17tj8_18","purpur-stepper__scroll-button--right":"_purpur-stepper__scroll-button--right_17tj8_21","purpur-stepper__scroll-button--align-with-grid":"_purpur-stepper__scroll-button--align-with-grid_17tj8_24","purpur-stepper__scroll-button-icon":"_purpur-stepper__scroll-button-icon_17tj8_48","purpur-stepper__hidden":"_purpur-stepper__hidden_17tj8_51"},ee={"purpur-stepper-container":"_purpur-stepper-container_lnheo_1","purpur-stepper-container__inner--align-with-grid":"_purpur-stepper-container__inner--align-with-grid_lnheo_5","purpur-stepper-container--primary":"_purpur-stepper-container--primary_lnheo_28","purpur-stepper-container--secondary":"_purpur-stepper-container--secondary_lnheo_31"},V=L.c.bind(ee),R="purpur-stepper-container",re=({["data-testid"]:r="purpur-stepper-container",children:t,className:n,alignWithGrid:s,variant:p,...l})=>{const m=V(n,R,{[`${R}--${p}`]:p,[`${R}--align-with-grid`]:s});return e.jsx("div",{className:m,"data-testid":r,...l,children:e.jsx("div",{className:V(`${R}__inner`,{[`${R}__inner--align-with-grid`]:s}),children:t})})},te=o.forwardRef(({children:r,...t},n)=>{const{finished:s,...p}=t;return e.jsx("div",{...p,ref:n,children:r})}),se=r=>!!r&&o.isValidElement(r)&&!!r.props.label,ne={"purpur-stepper-link":"_purpur-stepper-link_1sqvz_1","purpur-stepper-link--disabled":"_purpur-stepper-link--disabled_1sqvz_27","purpur-stepper-link__trigger-outline":"_purpur-stepper-link__trigger-outline_1sqvz_53","purpur-stepper-link--first":"_purpur-stepper-link--first_1sqvz_65","purpur-stepper-link--current":"_purpur-stepper-link--current_1sqvz_65","purpur-stepper-link--middle":"_purpur-stepper-link--middle_1sqvz_70","purpur-stepper-link--last":"_purpur-stepper-link--last_1sqvz_80","purpur-stepper-link--visibility-small-screen":"_purpur-stepper-link--visibility-small-screen_1sqvz_90","purpur-stepper-link--visibility-large-screen":"_purpur-stepper-link--visibility-large-screen_1sqvz_98","purpur-stepper-link__icon":"_purpur-stepper-link__icon_1sqvz_122","purpur-stepper-link__step-number":"_purpur-stepper-link__step-number_1sqvz_132","purpur-stepper-link__step-number--current":"_purpur-stepper-link__step-number--current_1sqvz_143","purpur-stepper-link__step-number--disabled":"_purpur-stepper-link__step-number--disabled_1sqvz_147","purpur-stepper-link__step-label":"_purpur-stepper-link__step-label_1sqvz_152","arrow-forward":"_arrow-forward_1sqvz_156","purpur-stepper-link--primary":"_purpur-stepper-link--primary_1sqvz_168","purpur-stepper-link--secondary":"_purpur-stepper-link--secondary_1sqvz_177","arrow-tail":"_arrow-tail_1sqvz_187","sr-only--lg-down":"_sr-only--lg-down_1sqvz_206"},y=L.c.bind(ne),d="purpur-stepper-link",le=({["data-testid"]:r,current:t,disabled:n,stepNumber:s})=>e.jsx("div",{"data-testid":r,className:y([`${d}__step-number`,{[`${d}__step-number--current`]:t},{[`${d}__step-number--disabled`]:n}]),children:s}),E=o.forwardRef(({className:r,["data-testid"]:t,variant:n,step:s,indexOfLastItem:p,index:l,currentStepIndex:m,whenToBeVisible:c,handleStepChange:u,handleStepFocus:_,completedStepLabel:i,idPrefix:g,...b},f)=>{const v=l===0?"first":l===p?"last":"middle",$=l===m,T=w=>{if(s.disabled){w.preventDefault();return}u(w,l)};return e.jsx("a",{...b,ref:f,className:y(r,d,`${d}--${v}`,`${d}--${n}`,`${d}--visibility-${c}`,{[`${d}--current`]:$},{[`${d}--disabled`]:s.disabled},{"arrow-tail":v!=="first"},{"arrow-forward":v!=="last"}),id:`${g}-trigger-${l}`,href:s.disabled?void 0:`#${g}-content`,tabIndex:s.disabled?-1:void 0,"data-testid":`${t}-step-trigger-item-${l}`,"aria-disabled":s.disabled,"aria-current":$&&"step","aria-label":s.finished&&!$?[String(l+1),s.label,i].filter(Boolean).join(", "):void 0,onClick:T,onFocus:_,children:e.jsxs("span",{className:y(`${d}__trigger-outline`),children:[s.finished&&!$?e.jsx(K.a,{className:y(`${d}__icon`),"data-testid":`${t}-step-finished-icon`,size:"sm"}):e.jsx(le,{"data-testid":`${t}-step-number`,current:$,disabled:s.disabled,stepNumber:l+1}),e.jsx("span",{className:y(`${d}__step-label`,{"sr-only--lg-down":!$}),children:s.label})]})})}),ie={"purpur-stepper-nav-items__list":"_purpur-stepper-nav-items__list_lgkh0_1","purpur-stepper-nav-items__list-item":"_purpur-stepper-nav-items__list-item_lgkh0_7","purpur-stepper-nav-items__list-item--current":"_purpur-stepper-nav-items__list-item--current_lgkh0_25","purpur-stepper-nav-items__tooltip-content":"_purpur-stepper-nav-items__tooltip-content_lgkh0_31","purpur-stepper-nav-items__tooltip-trigger-item-container":"_purpur-stepper-nav-items__tooltip-trigger-item-container_lgkh0_34"},q=L.c.bind(ie),N="purpur-stepper-nav-items",pe=o.forwardRef(({["data-testid"]:r,variant:t,handleStepChange:n,handleStepFocus:s,steps:p,firstStepRef:l,lastStepRef:m,currentStepIndex:c,completedStepLabel:u,idPrefix:_},i)=>{const g=p.map((b,f)=>{const v=e.jsx("span",{className:q(`${N}__tooltip-trigger-item-container`),children:e.jsx(E,{"data-testid":`${r}-disabled-sm`,variant:t,step:b,indexOfLastItem:p.length-1,index:f,currentStepIndex:c,whenToBeVisible:x.SMALL_SCREEN,completedStepLabel:u,handleStepChange:n,handleStepFocus:s,idPrefix:_})});return e.jsx("li",{className:q(`${N}__list-item`,{[`${N}__list-item--current`]:f===c}),ref:f===0?l:f===p.length-1?m:null,children:b.disabled?e.jsxs(e.Fragment,{children:[e.jsx(J.Tooltip,{contentClassName:q(`${N}__tooltip-content`),triggerElement:v,children:b.label}),e.jsx(E,{"data-testid":`${r}-disabled-lg`,variant:t,step:b,indexOfLastItem:p.length-1,index:f,currentStepIndex:c,whenToBeVisible:x.LARGE_SCREEN,completedStepLabel:u,handleStepChange:n,handleStepFocus:s,idPrefix:_})]}):e.jsx(E,{"data-testid":r,variant:t,step:b,indexOfLastItem:p.length-1,index:f,currentStepIndex:c,whenToBeVisible:x.ALWAYS,completedStepLabel:u,handleStepChange:n,handleStepFocus:s,idPrefix:_})},b.label)});return e.jsx("ol",{ref:i,className:q(`${N}__list`),children:g})}),oe=r=>{const t=o.useRef(!0),n=o.useRef(null);return o.useEffect(()=>{!t.current&&n.current!==null&&n.current.focus(),t.current=!1},[r]),{contentRef:n}},z={LEFT:"left",RIGHT:"right"},ue=()=>{const r=o.useRef(null),t=o.useRef(null),n=o.useRef(null),[s,p]=o.useState(!1),[l,m]=o.useState(!1),c=u=>{if(!r.current)return;const _=r.current,i=_.clientWidth,g=_.scrollLeft;u===z.LEFT&&_.scroll({behavior:"smooth",left:g-i/2}),u===z.RIGHT&&_.scroll({behavior:"smooth",left:g+i/2})};return o.useEffect(()=>{if(t.current&&n.current&&r.current){const u=new IntersectionObserver(_=>{for(const i of _){if(i.target===t.current){i.isIntersecting?p(!1):p(!0);continue}i.target===n.current&&(i.isIntersecting?m(!1):m(!0))}},{root:r.current,threshold:.95});return u.observe(t.current),u.observe(n.current),()=>u.disconnect()}},[t,n,r]),{scrollContainer:r,firstStepRef:t,lastStepRef:n,displayLeftScrollButton:s,displayRightScrollButton:l,handleHorizontalScroll:c}},k=L.c.bind(Z),a="purpur-stepper",I=({["aria-label"]:r,["data-testid"]:t,children:n,className:s,completedStepLabel:p,currentStepIndex:l=0,onStepChange:m,alignWithGrid:c=!1,leftScrollButtonAriaLabel:u,rightScrollButtonAriaLabel:_,variant:i=Q.PRIMARY,...g})=>{const b=o.Children.toArray(n).filter(se),f=o.Children.map(b,h=>{const{disabled:j,finished:P,label:U}=h.props;return{disabled:j??!1,finished:P??!1,label:U}}),v=o.useId(),$=`${v}-content`,{scrollContainer:T,firstStepRef:w,lastStepRef:O,displayLeftScrollButton:D,displayRightScrollButton:F,handleHorizontalScroll:A}=ue(),{contentRef:H}=oe(l),Y=k([s,a,{[`${a}--${i}`]:i}]),B=h=>{h.target.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},M=(h,j)=>{h.preventDefault(),B(h),m(j)},G=h=>{B(h)};return e.jsxs("div",{className:Y,...g,children:[e.jsx(re,{variant:i,alignWithGrid:c,children:e.jsxs("div",{className:k(`${a}__nav-container`),children:[e.jsxs(C.Root,{children:[e.jsx(C.Viewport,{ref:T,children:e.jsx("nav",{"aria-label":r,"data-testid":t,className:k([`${a}__nav`,{[`${a}__nav--${i}`]:i}]),children:e.jsx(pe,{"data-testid":t,variant:i,firstStepRef:w,lastStepRef:O,steps:f,currentStepIndex:l,handleStepChange:M,handleStepFocus:G,completedStepLabel:p,idPrefix:v})})}),e.jsx(C.Scrollbar,{orientation:"horizontal",children:e.jsx(C.Thumb,{})})]}),D&&e.jsx(S.Button,{"aria-label":u,className:k([`${a}__scroll-button`,`${a}__scroll-button--left`,{[`${a}__scroll-button--align-with-grid`]:c}]),variant:S.BUTTON_VARIANT.TEXT,tabIndex:-1,iconOnly:!0,onClick:()=>{A(z.LEFT)},children:e.jsx(X.l,{className:k(`${a}__scroll-button-icon`),size:"md"})}),F&&e.jsx(S.Button,{"aria-label":_,className:k([`${a}__scroll-button`,`${a}__scroll-button--right`,{[`${a}__scroll-button--align-with-grid`]:c}]),variant:S.BUTTON_VARIANT.TEXT,tabIndex:-1,iconOnly:!0,onClick:()=>{A(z.RIGHT)},children:e.jsx(W.n,{className:k(`${a}__scroll-button-icon`),size:"md"})})]})}),e.jsx("section",{tabIndex:-1,id:$,"aria-labelledby":`${v}-trigger-${l}`,ref:H,style:{outline:"none"},children:o.Children.map(b,(h,j)=>e.jsx("div",{className:k({[`${a}__hidden`]:j!==l}),hidden:j!==l,children:h}))})]})};I.Content=te;I.displayName="Stepper";exports.Stepper=I;
2
- //# sourceMappingURL=stepper-Dao4XaDV.js.map
1
+ "use strict";const e=require("react/jsx-runtime"),o=require("react"),S=require("./button-C5CYysw5.js"),X=require("./chevron-left.es-B0vPg5XM.js"),W=require("./chevron-right.es-Bv376M3o.js"),C=require("./index-CoR7YA3H.js"),L=require("./bind-DeUYJ6m9.js"),J=require("./tooltip-DRW4N9Z-.js"),K=require("./checkmark.es-lYntWFA3.js"),Q={PRIMARY:"primary"},x={SMALL_SCREEN:"small-screen",LARGE_SCREEN:"large-screen",ALWAYS:"always"},Z={"purpur-stepper__nav-container":"_purpur-stepper__nav-container_17tj8_1","purpur-stepper__nav":"_purpur-stepper__nav_17tj8_1","purpur-stepper":"_purpur-stepper_17tj8_1","purpur-stepper__scroll-button":"_purpur-stepper__scroll-button_17tj8_7","purpur-stepper__scroll-button--left":"_purpur-stepper__scroll-button--left_17tj8_18","purpur-stepper__scroll-button--right":"_purpur-stepper__scroll-button--right_17tj8_21","purpur-stepper__scroll-button--align-with-grid":"_purpur-stepper__scroll-button--align-with-grid_17tj8_24","purpur-stepper__scroll-button-icon":"_purpur-stepper__scroll-button-icon_17tj8_48","purpur-stepper__hidden":"_purpur-stepper__hidden_17tj8_51"},ee={"purpur-stepper-container":"_purpur-stepper-container_lnheo_1","purpur-stepper-container__inner--align-with-grid":"_purpur-stepper-container__inner--align-with-grid_lnheo_5","purpur-stepper-container--primary":"_purpur-stepper-container--primary_lnheo_28","purpur-stepper-container--secondary":"_purpur-stepper-container--secondary_lnheo_31"},V=L.c.bind(ee),R="purpur-stepper-container",re=({["data-testid"]:r="purpur-stepper-container",children:t,className:n,alignWithGrid:s,variant:p,...l})=>{const m=V(n,R,{[`${R}--${p}`]:p,[`${R}--align-with-grid`]:s});return e.jsx("div",{className:m,"data-testid":r,...l,children:e.jsx("div",{className:V(`${R}__inner`,{[`${R}__inner--align-with-grid`]:s}),children:t})})},te=o.forwardRef(({children:r,...t},n)=>{const{finished:s,...p}=t;return e.jsx("div",{...p,ref:n,children:r})}),se=r=>!!r&&o.isValidElement(r)&&!!r.props.label,ne={"purpur-stepper-link":"_purpur-stepper-link_1sqvz_1","purpur-stepper-link--disabled":"_purpur-stepper-link--disabled_1sqvz_27","purpur-stepper-link__trigger-outline":"_purpur-stepper-link__trigger-outline_1sqvz_53","purpur-stepper-link--first":"_purpur-stepper-link--first_1sqvz_65","purpur-stepper-link--current":"_purpur-stepper-link--current_1sqvz_65","purpur-stepper-link--middle":"_purpur-stepper-link--middle_1sqvz_70","purpur-stepper-link--last":"_purpur-stepper-link--last_1sqvz_80","purpur-stepper-link--visibility-small-screen":"_purpur-stepper-link--visibility-small-screen_1sqvz_90","purpur-stepper-link--visibility-large-screen":"_purpur-stepper-link--visibility-large-screen_1sqvz_98","purpur-stepper-link__icon":"_purpur-stepper-link__icon_1sqvz_122","purpur-stepper-link__step-number":"_purpur-stepper-link__step-number_1sqvz_132","purpur-stepper-link__step-number--current":"_purpur-stepper-link__step-number--current_1sqvz_143","purpur-stepper-link__step-number--disabled":"_purpur-stepper-link__step-number--disabled_1sqvz_147","purpur-stepper-link__step-label":"_purpur-stepper-link__step-label_1sqvz_152","arrow-forward":"_arrow-forward_1sqvz_156","purpur-stepper-link--primary":"_purpur-stepper-link--primary_1sqvz_168","purpur-stepper-link--secondary":"_purpur-stepper-link--secondary_1sqvz_177","arrow-tail":"_arrow-tail_1sqvz_187","sr-only--lg-down":"_sr-only--lg-down_1sqvz_206"},y=L.c.bind(ne),d="purpur-stepper-link",le=({["data-testid"]:r,current:t,disabled:n,stepNumber:s})=>e.jsx("div",{"data-testid":r,className:y([`${d}__step-number`,{[`${d}__step-number--current`]:t},{[`${d}__step-number--disabled`]:n}]),children:s}),E=o.forwardRef(({className:r,["data-testid"]:t,variant:n,step:s,indexOfLastItem:p,index:l,currentStepIndex:m,whenToBeVisible:c,handleStepChange:u,handleStepFocus:_,completedStepLabel:i,idPrefix:g,...b},f)=>{const v=l===0?"first":l===p?"last":"middle",$=l===m,T=w=>{if(s.disabled){w.preventDefault();return}u(w,l)};return e.jsx("a",{...b,ref:f,className:y(r,d,`${d}--${v}`,`${d}--${n}`,`${d}--visibility-${c}`,{[`${d}--current`]:$},{[`${d}--disabled`]:s.disabled},{"arrow-tail":v!=="first"},{"arrow-forward":v!=="last"}),id:`${g}-trigger-${l}`,href:s.disabled?void 0:`#${g}-content`,tabIndex:s.disabled?-1:void 0,"data-testid":`${t}-step-trigger-item-${l}`,"aria-disabled":s.disabled,"aria-current":$&&"step","aria-label":s.finished&&!$?[String(l+1),s.label,i].filter(Boolean).join(", "):void 0,onClick:T,onFocus:_,children:e.jsxs("span",{className:y(`${d}__trigger-outline`),children:[s.finished&&!$?e.jsx(K.a,{className:y(`${d}__icon`),"data-testid":`${t}-step-finished-icon`,size:"sm"}):e.jsx(le,{"data-testid":`${t}-step-number`,current:$,disabled:s.disabled,stepNumber:l+1}),e.jsx("span",{className:y(`${d}__step-label`,{"sr-only--lg-down":!$}),children:s.label})]})})}),ie={"purpur-stepper-nav-items__list":"_purpur-stepper-nav-items__list_lgkh0_1","purpur-stepper-nav-items__list-item":"_purpur-stepper-nav-items__list-item_lgkh0_7","purpur-stepper-nav-items__list-item--current":"_purpur-stepper-nav-items__list-item--current_lgkh0_25","purpur-stepper-nav-items__tooltip-content":"_purpur-stepper-nav-items__tooltip-content_lgkh0_31","purpur-stepper-nav-items__tooltip-trigger-item-container":"_purpur-stepper-nav-items__tooltip-trigger-item-container_lgkh0_34"},q=L.c.bind(ie),N="purpur-stepper-nav-items",pe=o.forwardRef(({["data-testid"]:r,variant:t,handleStepChange:n,handleStepFocus:s,steps:p,firstStepRef:l,lastStepRef:m,currentStepIndex:c,completedStepLabel:u,idPrefix:_},i)=>{const g=p.map((b,f)=>{const v=e.jsx("span",{className:q(`${N}__tooltip-trigger-item-container`),children:e.jsx(E,{"data-testid":`${r}-disabled-sm`,variant:t,step:b,indexOfLastItem:p.length-1,index:f,currentStepIndex:c,whenToBeVisible:x.SMALL_SCREEN,completedStepLabel:u,handleStepChange:n,handleStepFocus:s,idPrefix:_})});return e.jsx("li",{className:q(`${N}__list-item`,{[`${N}__list-item--current`]:f===c}),ref:f===0?l:f===p.length-1?m:null,children:b.disabled?e.jsxs(e.Fragment,{children:[e.jsx(J.Tooltip,{contentClassName:q(`${N}__tooltip-content`),triggerElement:v,children:b.label}),e.jsx(E,{"data-testid":`${r}-disabled-lg`,variant:t,step:b,indexOfLastItem:p.length-1,index:f,currentStepIndex:c,whenToBeVisible:x.LARGE_SCREEN,completedStepLabel:u,handleStepChange:n,handleStepFocus:s,idPrefix:_})]}):e.jsx(E,{"data-testid":r,variant:t,step:b,indexOfLastItem:p.length-1,index:f,currentStepIndex:c,whenToBeVisible:x.ALWAYS,completedStepLabel:u,handleStepChange:n,handleStepFocus:s,idPrefix:_})},b.label)});return e.jsx("ol",{ref:i,className:q(`${N}__list`),children:g})}),oe=r=>{const t=o.useRef(!0),n=o.useRef(null);return o.useEffect(()=>{!t.current&&n.current!==null&&n.current.focus(),t.current=!1},[r]),{contentRef:n}},z={LEFT:"left",RIGHT:"right"},ue=()=>{const r=o.useRef(null),t=o.useRef(null),n=o.useRef(null),[s,p]=o.useState(!1),[l,m]=o.useState(!1),c=u=>{if(!r.current)return;const _=r.current,i=_.clientWidth,g=_.scrollLeft;u===z.LEFT&&_.scroll({behavior:"smooth",left:g-i/2}),u===z.RIGHT&&_.scroll({behavior:"smooth",left:g+i/2})};return o.useEffect(()=>{if(t.current&&n.current&&r.current){const u=new IntersectionObserver(_=>{for(const i of _){if(i.target===t.current){i.isIntersecting?p(!1):p(!0);continue}i.target===n.current&&(i.isIntersecting?m(!1):m(!0))}},{root:r.current,threshold:.95});return u.observe(t.current),u.observe(n.current),()=>u.disconnect()}},[t,n,r]),{scrollContainer:r,firstStepRef:t,lastStepRef:n,displayLeftScrollButton:s,displayRightScrollButton:l,handleHorizontalScroll:c}},k=L.c.bind(Z),a="purpur-stepper",I=({["aria-label"]:r,["data-testid"]:t,children:n,className:s,completedStepLabel:p,currentStepIndex:l=0,onStepChange:m,alignWithGrid:c=!1,leftScrollButtonAriaLabel:u,rightScrollButtonAriaLabel:_,variant:i=Q.PRIMARY,...g})=>{const b=o.Children.toArray(n).filter(se),f=o.Children.map(b,h=>{const{disabled:j,finished:P,label:U}=h.props;return{disabled:j??!1,finished:P??!1,label:U}}),v=o.useId(),$=`${v}-content`,{scrollContainer:T,firstStepRef:w,lastStepRef:O,displayLeftScrollButton:D,displayRightScrollButton:F,handleHorizontalScroll:A}=ue(),{contentRef:H}=oe(l),Y=k([s,a,{[`${a}--${i}`]:i}]),B=h=>{h.target.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},M=(h,j)=>{h.preventDefault(),B(h),m(j)},G=h=>{B(h)};return e.jsxs("div",{className:Y,...g,children:[e.jsx(re,{variant:i,alignWithGrid:c,children:e.jsxs("div",{className:k(`${a}__nav-container`),children:[e.jsxs(C.Root,{children:[e.jsx(C.Viewport,{ref:T,children:e.jsx("nav",{"aria-label":r,"data-testid":t,className:k([`${a}__nav`,{[`${a}__nav--${i}`]:i}]),children:e.jsx(pe,{"data-testid":t,variant:i,firstStepRef:w,lastStepRef:O,steps:f,currentStepIndex:l,handleStepChange:M,handleStepFocus:G,completedStepLabel:p,idPrefix:v})})}),e.jsx(C.Scrollbar,{orientation:"horizontal",children:e.jsx(C.Thumb,{})})]}),D&&e.jsx(S.Button,{"aria-label":u,className:k([`${a}__scroll-button`,`${a}__scroll-button--left`,{[`${a}__scroll-button--align-with-grid`]:c}]),variant:S.BUTTON_VARIANT.TEXT,tabIndex:-1,iconOnly:!0,onClick:()=>{A(z.LEFT)},children:e.jsx(X.l,{className:k(`${a}__scroll-button-icon`),size:"md"})}),F&&e.jsx(S.Button,{"aria-label":_,className:k([`${a}__scroll-button`,`${a}__scroll-button--right`,{[`${a}__scroll-button--align-with-grid`]:c}]),variant:S.BUTTON_VARIANT.TEXT,tabIndex:-1,iconOnly:!0,onClick:()=>{A(z.RIGHT)},children:e.jsx(W.n,{className:k(`${a}__scroll-button-icon`),size:"md"})})]})}),e.jsx("section",{tabIndex:-1,id:$,"aria-labelledby":`${v}-trigger-${l}`,ref:H,style:{outline:"none"},children:o.Children.map(b,(h,j)=>e.jsx("div",{className:k({[`${a}__hidden`]:j!==l}),hidden:j!==l,children:h}))})]})};I.Content=te;I.displayName="Stepper";exports.Stepper=I;
2
+ //# sourceMappingURL=stepper-CbcFVE3v.js.map