@purpur/library 9.10.0 → 9.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/CHANGELOG.json +18 -0
  2. package/CHANGELOG.md +10 -1
  3. package/dist/LICENSE.txt +40 -0
  4. package/dist/{RichText-D4vznH1B.mjs → RichText-2_z57EYi.mjs} +2 -2
  5. package/dist/{RichText-D4vznH1B.mjs.map → RichText-2_z57EYi.mjs.map} +1 -1
  6. package/dist/{RichText-BAVZadzi.js → RichText-IejAKqm2.js} +2 -2
  7. package/dist/{RichText-BAVZadzi.js.map → RichText-IejAKqm2.js.map} +1 -1
  8. package/dist/{autocomplete-CmLzmWp4.mjs → autocomplete-C6AqdYaZ.mjs} +2 -2
  9. package/dist/{autocomplete-CmLzmWp4.mjs.map → autocomplete-C6AqdYaZ.mjs.map} +1 -1
  10. package/dist/{autocomplete-BX1KDZqL.js → autocomplete-yrPbF5gq.js} +2 -2
  11. package/dist/{autocomplete-BX1KDZqL.js.map → autocomplete-yrPbF5gq.js.map} +1 -1
  12. package/dist/autocomplete.cjs.js +1 -1
  13. package/dist/autocomplete.es.js +1 -1
  14. package/dist/button-DZgtrGqN.js +2 -0
  15. package/dist/{button-DmybVApa.js.map → button-DZgtrGqN.js.map} +1 -1
  16. package/dist/button-EVRfctR8.mjs +109 -0
  17. package/dist/{button-4-yWOgtD.mjs.map → button-EVRfctR8.mjs.map} +1 -1
  18. package/dist/button.cjs.js +1 -1
  19. package/dist/button.es.js +1 -1
  20. package/dist/{calendar-Cru-p6gC.mjs → calendar-CTWhxuS4.mjs} +2 -2
  21. package/dist/{calendar-Cru-p6gC.mjs.map → calendar-CTWhxuS4.mjs.map} +1 -1
  22. package/dist/{calendar-DDR8CQYo.js → calendar-Cwzqytai.js} +2 -2
  23. package/dist/{calendar-DDR8CQYo.js.map → calendar-Cwzqytai.js.map} +1 -1
  24. package/dist/calendar.cjs.js +1 -1
  25. package/dist/calendar.es.js +1 -1
  26. package/dist/{carousel-BIKcwvYz.mjs → carousel-DiKGSL-7.mjs} +2 -2
  27. package/dist/{carousel-BIKcwvYz.mjs.map → carousel-DiKGSL-7.mjs.map} +1 -1
  28. package/dist/{carousel-DnSaLDZf.js → carousel-Dz_bUGo4.js} +2 -2
  29. package/dist/{carousel-DnSaLDZf.js.map → carousel-Dz_bUGo4.js.map} +1 -1
  30. package/dist/carousel.cjs.js +1 -1
  31. package/dist/carousel.es.js +1 -1
  32. package/dist/{chat-field-CVF4DooY.mjs → chat-field-8cKqYcKi.mjs} +2 -2
  33. package/dist/{chat-field-CVF4DooY.mjs.map → chat-field-8cKqYcKi.mjs.map} +1 -1
  34. package/dist/{chat-field-Wjvh2J6C.js → chat-field-B2jmpVNr.js} +2 -2
  35. package/dist/{chat-field-Wjvh2J6C.js.map → chat-field-B2jmpVNr.js.map} +1 -1
  36. package/dist/chat-field.cjs.js +1 -1
  37. package/dist/chat-field.es.js +1 -1
  38. package/dist/{comparison-table-D1evE0ri.mjs → comparison-table-CmtSOUfK.mjs} +2 -2
  39. package/dist/{comparison-table-D1evE0ri.mjs.map → comparison-table-CmtSOUfK.mjs.map} +1 -1
  40. package/dist/{comparison-table-Dtqxz8vL.js → comparison-table-N5G3k2kr.js} +2 -2
  41. package/dist/{comparison-table-Dtqxz8vL.js.map → comparison-table-N5G3k2kr.js.map} +1 -1
  42. package/dist/comparison-table.cjs.js +1 -1
  43. package/dist/comparison-table.es.js +1 -1
  44. package/dist/components/accordion/src/accordion-item.d.ts +2 -2
  45. package/dist/components/accordion/src/accordion.d.ts +2 -2
  46. package/dist/components/avatar/src/avatar.d.ts +1 -1
  47. package/dist/components/button/src/button.d.ts +5 -5
  48. package/dist/components/card/src/card-badge.d.ts +1 -1
  49. package/dist/components/card/src/card-cta.d.ts +1 -1
  50. package/dist/components/card/src/card-heading.d.ts +1 -1
  51. package/dist/components/card/src/card-media-layout.d.ts +1 -1
  52. package/dist/components/card/src/card-media.d.ts +1 -1
  53. package/dist/components/checkbox/src/checkbox.d.ts +1 -1
  54. package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts +1 -1
  55. package/dist/components/content-block/src/content-block.d.ts +2 -2
  56. package/dist/components/counter-badge/src/counter-badge.d.ts +1 -1
  57. package/dist/components/country-flag-icon/src/country-flag-icon.d.ts +1 -1
  58. package/dist/components/date-field/src/date-field.d.ts +1 -1
  59. package/dist/components/date-picker/src/date-picker.d.ts +4 -4
  60. package/dist/components/dismissable-chip-group/src/dismissable-chip-group-item.d.ts +1 -1
  61. package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +2 -2
  62. package/dist/components/drawer/src/drawer-content.d.ts +2 -2
  63. package/dist/components/drawer/src/drawer-frame.d.ts +1 -1
  64. package/dist/components/drawer/src/drawer-trigger.d.ts +1 -1
  65. package/dist/components/field-error-text/src/field-error-text.d.ts +2 -2
  66. package/dist/components/field-helper-text/src/field-helper-text.d.ts +1 -1
  67. package/dist/components/footer/src/footer-navigation.d.ts +1 -1
  68. package/dist/components/footer/src/footer-social-link.d.ts +3 -3
  69. package/dist/components/footer/src/footer.d.ts +3 -3
  70. package/dist/components/grid/src/grid.item.d.ts +1 -1
  71. package/dist/components/heading/src/heading.d.ts +2 -2
  72. package/dist/components/hero-banner/src/hero-banner-actions.d.ts +1 -1
  73. package/dist/components/hero-banner/src/hero-banner-media.d.ts +1 -1
  74. package/dist/components/hero-banner/src/hero-banner-types.d.ts +2 -2
  75. package/dist/components/illustrative-icon/src/static-illustrative-icon.d.ts +2 -2
  76. package/dist/components/listbox/src/listbox-item.d.ts +1 -1
  77. package/dist/components/listbox/src/listbox.d.ts +1 -1
  78. package/dist/components/logo/src/logo.types.d.ts +1 -1
  79. package/dist/components/notification-banner/src/notification-banner.d.ts +2 -2
  80. package/dist/components/pagination/src/pagination-page-selector.d.ts +2 -2
  81. package/dist/components/pagination/src/pagination-page-size-selector.d.ts +2 -2
  82. package/dist/components/pagination/src/pagination-pages.d.ts +2 -2
  83. package/dist/components/pagination/src/use-page-options.hook.d.ts +2 -2
  84. package/dist/components/pagination/src/use-page-size-options.hook.d.ts +2 -2
  85. package/dist/components/paragraph/src/paragraph.d.ts +1 -1
  86. package/dist/components/password-field/src/password-strength-indicator.d.ts +2 -2
  87. package/dist/components/password-field/src/password-strength.d.ts +2 -2
  88. package/dist/components/popover/src/popover-button.d.ts +2 -2
  89. package/dist/components/product-card/src/product-card.d.ts +1 -1
  90. package/dist/components/promotion-card/src/promotion-card.d.ts +1 -1
  91. package/dist/components/quantity-selector/src/quantity-selector.d.ts +1 -1
  92. package/dist/components/radio-button-group/src/radio-button-group-root.d.ts +1 -1
  93. package/dist/components/radio-card-group/src/radio-card-group.d.ts +2 -2
  94. package/dist/components/search-field/src/search-field-autocomplete.d.ts +1 -1
  95. package/dist/components/search-field/src/search-field-base.d.ts +1 -1
  96. package/dist/components/search-field/src/search-field.d.ts +6 -6
  97. package/dist/components/select/src/select.d.ts +1 -1
  98. package/dist/components/spacer/src/spacer.d.ts +2 -2
  99. package/dist/components/spinner/src/spinner.d.ts +1 -1
  100. package/dist/components/stepper/src/stepper-content.d.ts +1 -1
  101. package/dist/components/stepper/src/stepper.d.ts +2 -2
  102. package/dist/components/table/src/cell-types/button-group-cell.d.ts +1 -1
  103. package/dist/components/table/src/empty-table.d.ts +2 -2
  104. package/dist/components/table/src/table-content.d.ts +2 -2
  105. package/dist/components/table/src/table.d.ts +1 -1
  106. package/dist/components/table/src/test-utils/table-data.d.ts +3 -3
  107. package/dist/components/tabs/src/tab-content.d.ts +1 -1
  108. package/dist/components/text-area/src/text-area.d.ts +1 -1
  109. package/dist/components/text-spacing/src/text-spacing.d.ts +1 -1
  110. package/dist/components/toggle/src/toggle.d.ts +1 -1
  111. package/dist/{date-field-DVp_RMNm.mjs → date-field-ChYx0N2j.mjs} +2 -2
  112. package/dist/{date-field-DVp_RMNm.mjs.map → date-field-ChYx0N2j.mjs.map} +1 -1
  113. package/dist/{date-field-hA79n6mP.js → date-field-CwZ64buh.js} +2 -2
  114. package/dist/{date-field-hA79n6mP.js.map → date-field-CwZ64buh.js.map} +1 -1
  115. package/dist/date-field.cjs.js +1 -1
  116. package/dist/date-field.es.js +1 -1
  117. package/dist/{date-picker-Dzoo_hhQ.js → date-picker-BWMKTOq6.js} +2 -2
  118. package/dist/{date-picker-Dzoo_hhQ.js.map → date-picker-BWMKTOq6.js.map} +1 -1
  119. package/dist/{date-picker-B8ta-Q8V.mjs → date-picker-CTyqgBRB.mjs} +5 -5
  120. package/dist/{date-picker-B8ta-Q8V.mjs.map → date-picker-CTyqgBRB.mjs.map} +1 -1
  121. package/dist/date-picker.cjs.js +1 -1
  122. package/dist/date-picker.es.js +1 -1
  123. package/dist/{date-range-field-Dqqgj41u.js → date-range-field-CvzOl-eC.js} +2 -2
  124. package/dist/{date-range-field-Dqqgj41u.js.map → date-range-field-CvzOl-eC.js.map} +1 -1
  125. package/dist/{date-range-field-BZUjfftV.mjs → date-range-field-DDr-qEGX.mjs} +2 -2
  126. package/dist/{date-range-field-BZUjfftV.mjs.map → date-range-field-DDr-qEGX.mjs.map} +1 -1
  127. package/dist/date-range-field.cjs.js +1 -1
  128. package/dist/date-range-field.es.js +1 -1
  129. package/dist/{drawer-DyLQfvEh.js → drawer-BnqxUIPM.js} +2 -2
  130. package/dist/{drawer-DyLQfvEh.js.map → drawer-BnqxUIPM.js.map} +1 -1
  131. package/dist/{drawer-cIUx6WSZ.mjs → drawer-Cnk2OKgi.mjs} +2 -2
  132. package/dist/{drawer-cIUx6WSZ.mjs.map → drawer-Cnk2OKgi.mjs.map} +1 -1
  133. package/dist/drawer.cjs.js +1 -1
  134. package/dist/drawer.es.js +1 -1
  135. package/dist/{footer-Cn1-zG1v.js → footer-B8rzVSrZ.js} +2 -2
  136. package/dist/{footer-Cn1-zG1v.js.map → footer-B8rzVSrZ.js.map} +1 -1
  137. package/dist/{footer-D-2b7UIB.mjs → footer-D5YkHmCo.mjs} +2 -2
  138. package/dist/{footer-D-2b7UIB.mjs.map → footer-D5YkHmCo.mjs.map} +1 -1
  139. package/dist/footer.cjs.js +1 -1
  140. package/dist/footer.es.js +1 -1
  141. package/dist/{hero-banner-n9K-Jsdz.mjs → hero-banner-BXRArPWP.mjs} +2 -2
  142. package/dist/{hero-banner-n9K-Jsdz.mjs.map → hero-banner-BXRArPWP.mjs.map} +1 -1
  143. package/dist/{hero-banner--v-ezYMr.js → hero-banner-CW7DIEZe.js} +2 -2
  144. package/dist/{hero-banner--v-ezYMr.js.map → hero-banner-CW7DIEZe.js.map} +1 -1
  145. package/dist/hero-banner.cjs.js +1 -1
  146. package/dist/hero-banner.es.js +1 -1
  147. package/dist/libraries/library/src/library.d.ts +1 -0
  148. package/dist/libraries/library/src/library.d.ts.map +1 -1
  149. package/dist/libraries/library/src/password-field.d.ts +6 -2
  150. package/dist/libraries/library/src/password-field.d.ts.map +1 -1
  151. package/dist/libraries/library/src/radio-button-group.d.ts +1 -1
  152. package/dist/libraries/library/src/radio-card-group.d.ts +1 -1
  153. package/dist/libraries/library/src/spinner.d.ts +1 -1
  154. package/dist/libraries/library/src/stepper.d.ts +1 -1
  155. package/dist/libraries/library/src/tooltip.d.ts +1 -1
  156. package/dist/libraries/library/src/visually-hidden.d.ts +1 -1
  157. package/dist/libraries/theme/src/ThemeProvider.d.ts +2 -2
  158. package/dist/library.cjs.js +1 -1
  159. package/dist/library.es.js +546 -543
  160. package/dist/library.es.js.map +1 -1
  161. package/dist/link-Dzqd0QuD.js +2 -0
  162. package/dist/{link-DhWVrkTz.js.map → link-Dzqd0QuD.js.map} +1 -1
  163. package/dist/link-ccCdDvBc.mjs +72 -0
  164. package/dist/{link-DY5WLpyc.mjs.map → link-ccCdDvBc.mjs.map} +1 -1
  165. package/dist/link.cjs.js +1 -1
  166. package/dist/link.es.js +1 -1
  167. package/dist/main-B501z9Ql.js +2 -0
  168. package/dist/main-B501z9Ql.js.map +1 -0
  169. package/dist/main-L71Sqg3s.mjs +1016 -0
  170. package/dist/main-L71Sqg3s.mjs.map +1 -0
  171. package/dist/{modal-Bu1Zv5Ic.mjs → modal-BuUQrUYJ.mjs} +2 -2
  172. package/dist/{modal-Bu1Zv5Ic.mjs.map → modal-BuUQrUYJ.mjs.map} +1 -1
  173. package/dist/{modal-D0Qxrvx5.js → modal-CnC4Zyjk.js} +2 -2
  174. package/dist/{modal-D0Qxrvx5.js.map → modal-CnC4Zyjk.js.map} +1 -1
  175. package/dist/modal.cjs.js +1 -1
  176. package/dist/modal.es.js +1 -1
  177. package/dist/{notification-DiVdy6E_.mjs → notification-C3f3N1K1.mjs} +2 -2
  178. package/dist/{notification-DiVdy6E_.mjs.map → notification-C3f3N1K1.mjs.map} +1 -1
  179. package/dist/{notification-D2oClkX2.js → notification-CeoAXDXq.js} +2 -2
  180. package/dist/{notification-D2oClkX2.js.map → notification-CeoAXDXq.js.map} +1 -1
  181. package/dist/{notification-banner-CZTQZ5Le.mjs → notification-banner-BvAy8dlg.mjs} +2 -2
  182. package/dist/{notification-banner-CZTQZ5Le.mjs.map → notification-banner-BvAy8dlg.mjs.map} +1 -1
  183. package/dist/{notification-banner-BxHwTFnH.js → notification-banner-DUe4fT1r.js} +2 -2
  184. package/dist/{notification-banner-BxHwTFnH.js.map → notification-banner-DUe4fT1r.js.map} +1 -1
  185. package/dist/notification-banner.cjs.js +1 -1
  186. package/dist/notification-banner.es.js +1 -1
  187. package/dist/notification.cjs.js +1 -1
  188. package/dist/notification.es.js +1 -1
  189. package/dist/password-field-BjKdBoIK.js +2 -0
  190. package/dist/password-field-BjKdBoIK.js.map +1 -0
  191. package/dist/password-field-C_E4563x.mjs +200 -0
  192. package/dist/password-field-C_E4563x.mjs.map +1 -0
  193. package/dist/password-field.cjs.js +2 -0
  194. package/dist/password-field.cjs.js.map +1 -0
  195. package/dist/password-field.es.js +6 -0
  196. package/dist/password-field.es.js.map +1 -0
  197. package/dist/{popover-CY75TnbA.js → popover-4phnhJLj.js} +2 -2
  198. package/dist/{popover-CY75TnbA.js.map → popover-4phnhJLj.js.map} +1 -1
  199. package/dist/{popover-wiiwtqWE.mjs → popover-DhObSx97.mjs} +2 -2
  200. package/dist/{popover-wiiwtqWE.mjs.map → popover-DhObSx97.mjs.map} +1 -1
  201. package/dist/popover.cjs.js +1 -1
  202. package/dist/popover.es.js +1 -1
  203. package/dist/purpur.css +1 -1
  204. package/dist/{quantity-selector-BEYMDsBM.js → quantity-selector-Ds7d4MnV.js} +2 -2
  205. package/dist/{quantity-selector-BEYMDsBM.js.map → quantity-selector-Ds7d4MnV.js.map} +1 -1
  206. package/dist/{quantity-selector-Cp-e5xKJ.mjs → quantity-selector-DwkKKmFy.mjs} +3 -3
  207. package/dist/{quantity-selector-Cp-e5xKJ.mjs.map → quantity-selector-DwkKKmFy.mjs.map} +1 -1
  208. package/dist/quantity-selector.cjs.js +1 -1
  209. package/dist/quantity-selector.es.js +1 -1
  210. package/dist/rich-text.cjs.js +1 -1
  211. package/dist/rich-text.es.js +1 -1
  212. package/dist/{search-field-afhtC6q5.mjs → search-field-BTqVE1-l.mjs} +3 -3
  213. package/dist/{search-field-afhtC6q5.mjs.map → search-field-BTqVE1-l.mjs.map} +1 -1
  214. package/dist/{search-field-WJBtiK0K.js → search-field-DkJrwzJB.js} +2 -2
  215. package/dist/{search-field-WJBtiK0K.js.map → search-field-DkJrwzJB.js.map} +1 -1
  216. package/dist/search-field.cjs.js +1 -1
  217. package/dist/search-field.es.js +1 -1
  218. package/dist/{stepper-VDiR2I8F.js → stepper-5rQ3cK18.js} +2 -2
  219. package/dist/{stepper-VDiR2I8F.js.map → stepper-5rQ3cK18.js.map} +1 -1
  220. package/dist/{stepper-20s8dnPA.mjs → stepper-B3p9r3gv.mjs} +3 -3
  221. package/dist/{stepper-20s8dnPA.mjs.map → stepper-B3p9r3gv.mjs.map} +1 -1
  222. package/dist/stepper.cjs.js +1 -1
  223. package/dist/stepper.es.js +1 -1
  224. package/dist/{table-B5ZitZoL.js → table-BIyaTsOh.js} +2 -2
  225. package/dist/{table-B5ZitZoL.js.map → table-BIyaTsOh.js.map} +1 -1
  226. package/dist/{table-CNIL-60s.mjs → table-BtymEUG4.mjs} +6 -6
  227. package/dist/{table-CNIL-60s.mjs.map → table-BtymEUG4.mjs.map} +1 -1
  228. package/dist/table.cjs.js +1 -1
  229. package/dist/table.es.js +1 -1
  230. package/dist/{text-field-D0e-cRbG.mjs → text-field-C9LX7LBf.mjs} +2 -2
  231. package/dist/{text-field-D0e-cRbG.mjs.map → text-field-C9LX7LBf.mjs.map} +1 -1
  232. package/dist/{text-field-VW8ObP83.js → text-field-CS0PT5T6.js} +2 -2
  233. package/dist/{text-field-VW8ObP83.js.map → text-field-CS0PT5T6.js.map} +1 -1
  234. package/dist/text-field.cjs.js +1 -1
  235. package/dist/text-field.es.js +1 -1
  236. package/dist/{tooltip-B-11qk-0.js → tooltip-COFCRUKv.js} +2 -2
  237. package/dist/{tooltip-B-11qk-0.js.map → tooltip-COFCRUKv.js.map} +1 -1
  238. package/dist/{tooltip-DngYHn5W.mjs → tooltip-FH9R2MAA.mjs} +2 -2
  239. package/dist/{tooltip-DngYHn5W.mjs.map → tooltip-FH9R2MAA.mjs.map} +1 -1
  240. package/dist/tooltip.cjs.js +1 -1
  241. package/dist/tooltip.es.js +1 -1
  242. package/package.json +24 -29
  243. package/scripts/generate.mts +1 -4
  244. package/src/aliases.ts +4 -0
  245. package/src/entries.js +1 -0
  246. package/src/library.ts +1 -1
  247. package/src/password-field.ts +0 -1
  248. package/dist/button-4-yWOgtD.mjs +0 -109
  249. package/dist/button-DmybVApa.js +0 -2
  250. package/dist/link-DY5WLpyc.mjs +0 -72
  251. package/dist/link-DhWVrkTz.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"comparison-table-Dtqxz8vL.js","sources":["../../../components/comparison-table/src/components/Cell/cell.tsx","../../../components/comparison-table/src/components/LeadCell/lead-cell.tsx","../../../components/comparison-table/src/components/OptionCard/option-card.tsx","../../../components/comparison-table/src/components/ScrollProgress/scroll-progress.tsx","../../../components/comparison-table/src/comparison-table.tsx"],"sourcesContent":["import React, { isValidElement, type ReactNode } from \"react\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./cell.module.scss\";\n\ntype CellProps = {\n value: boolean | ReactNode;\n};\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table-cell\";\n\nexport const Cell = ({ value }: CellProps) => {\n const isReactNode = isValidElement(value) || [\"string\", \"number\"].includes(typeof value);\n\n const getClassName = () => {\n if (isReactNode) return \"\";\n return `${rootClassName}--${value ? \"check\" : \"minus\"}`;\n };\n\n const classes = cx(rootClassName, [getClassName()]);\n\n const Icon = value ? IconCheckmark : IconMinus;\n\n return (\n <span className={cx(classes)}>\n {isReactNode ? value : <Icon size=\"xs\" className={cx(`${rootClassName}__icon`)} />}\n </span>\n );\n};\n","import React, { type ReactNode } from \"react\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./lead-cell.module.scss\";\n\ntype LeadCellProps = {\n title: string;\n description?: ReactNode;\n};\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table-lead-cell\";\n\nexport const LeadCell = ({ title, description }: LeadCellProps) => {\n const isExpandable = typeof description === \"string\";\n const classes = cx(rootClassName);\n\n return (\n <details className={classes} data-is-expandable={isExpandable}>\n <summary className={cx(`${rootClassName}__summary`)} tabIndex={isExpandable ? 0 : -1}>\n <Paragraph className={cx(`${rootClassName}__summary-title`)} variant=\"paragraph-100-bold\">\n {title}\n </Paragraph>\n <IconChevronDown className={cx(`${rootClassName}__summary-icon`)} size=\"sm\" />\n </summary>\n {description && (\n <Paragraph variant=\"paragraph-100\" className={cx(`${rootClassName}__description`)}>\n {description}\n </Paragraph>\n )}\n </details>\n );\n};\n","import React, { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Badge, type BadgeProps } from \"@purpur/badge\";\nimport { Button } from \"@purpur/button\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport { type ComparisonTableProps } from \"../../comparison-table\";\nimport styles from \"./option-card.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table-option-card\";\n\nexport type OptionCardProps = {\n image: {\n src: string;\n alt: string;\n };\n\n title: string;\n description: ReactNode;\n variablePriceText: string;\n price: string;\n\n actions: ReactNode;\n\n badge?: BadgeProps;\n isHighlighted?: boolean;\n};\n\ntype OptionCardPropsAdditions = {\n id: string;\n cardIndex: number;\n isFirstCard: boolean;\n ariaLabels: ComparisonTableProps[\"ariaLabels\"];\n\n showFullDescriptions: boolean;\n toggleShowFullDescriptions: () => void;\n};\n\nexport const OptionCard = ({\n id,\n cardIndex,\n description,\n variablePriceText,\n price,\n isHighlighted,\n ariaLabels,\n badge,\n actions,\n isFirstCard,\n image,\n title,\n showFullDescriptions,\n toggleShowFullDescriptions,\n}: OptionCardProps & OptionCardPropsAdditions) => {\n const descriptionRef = useRef<HTMLDivElement | HTMLParagraphElement>(null);\n const descriptionContentRef = useRef<HTMLDivElement | null>(null);\n const showFullDescriptionsRef = useRef(showFullDescriptions);\n const [descriptionOverflows, setDescriptionOverflows] = useState(false);\n\n const classes = cx(rootClassName, {\n [`${rootClassName}--highlighted`]: isHighlighted,\n [`${rootClassName}--first-card`]: isFirstCard,\n [`${rootClassName}--show-full-descriptions`]: showFullDescriptions,\n });\n\n useEffect(() => {\n showFullDescriptionsRef.current = showFullDescriptions;\n }, [showFullDescriptions]);\n\n const checkDescriptionOverflow = useCallback(() => {\n if (showFullDescriptionsRef.current) {\n return;\n }\n\n const description = descriptionRef.current;\n const descriptionContent = descriptionContentRef.current;\n\n if (!description || !descriptionContent) {\n setDescriptionOverflows(false);\n return;\n }\n\n const descriptionHeight = description.clientHeight;\n const contentHeight = descriptionContent.offsetHeight;\n\n setDescriptionOverflows(contentHeight > descriptionHeight + 1);\n }, []);\n\n useEffect(() => {\n const descriptionElement = descriptionRef.current;\n\n checkDescriptionOverflow();\n\n if (!descriptionElement || typeof ResizeObserver === \"undefined\") {\n return undefined;\n }\n\n const resizeObserver = new ResizeObserver(checkDescriptionOverflow);\n resizeObserver.observe(descriptionElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [checkDescriptionOverflow, description]);\n\n const renderDescription = () => {\n if (!description) return null;\n\n return (\n <div className={cx(`${rootClassName}__description`)}>\n {typeof description === \"string\" ? (\n <Paragraph ref={descriptionRef} className={cx(`${rootClassName}__description-text`)}>\n <span ref={descriptionContentRef}>{description}</span>\n </Paragraph>\n ) : (\n <div ref={descriptionRef} className={cx(`${rootClassName}__description-text`)}>\n <div ref={descriptionContentRef} className={cx(`${rootClassName}__description-inner`)}>\n {description}\n </div>\n </div>\n )}\n <Button\n variant=\"text\"\n size=\"xs\"\n className={cx(`${rootClassName}__read-more`, {\n [`${rootClassName}__read-more--hidden`]: !descriptionOverflows,\n })}\n onClick={toggleShowFullDescriptions}\n aria-hidden={!descriptionOverflows}\n tabIndex={descriptionOverflows ? undefined : -1}\n >\n <span className={cx(`${rootClassName}__read-more-text`)}>\n {showFullDescriptions ? ariaLabels.readLess : ariaLabels.readMore}\n </span>\n <IconChevronDown className={cx(`${rootClassName}__read-more-icon`)} size=\"xs\" />\n </Button>\n </div>\n );\n };\n\n return (\n <article className={classes} data-card-id={id} data-card-index={cardIndex}>\n {badge && <Badge {...badge} className={cx(`${rootClassName}__badge`)} />}\n\n <section className={cx(`${rootClassName}__main-content`)}>\n <img src={image.src} alt={image.alt} className={cx(`${rootClassName}__image`)} />\n\n <div className={cx(`${rootClassName}__body`)}>\n <Heading tag=\"h3\" variant=\"title-200\" className={cx(`${rootClassName}__title`)}>\n {title}\n </Heading>\n {renderDescription()}\n </div>\n </section>\n\n <footer className={cx(`${rootClassName}__footer`)}>\n <span className={cx(`${rootClassName}__price`)} id={id}>\n <Paragraph variant=\"paragraph-100\">{variablePriceText}</Paragraph>\n <Paragraph variant=\"paragraph-100-bold\">{price}</Paragraph>\n </span>\n\n {actions}\n </footer>\n </article>\n );\n};\n","import React, { type RefObject, useCallback, useEffect, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconArrowLeft } from \"@purpur/icon/arrow-left\";\nimport { IconArrowRight } from \"@purpur/icon/arrow-right\";\nimport c from \"classnames/bind\";\n\nimport { type ComparisonTableProps, type Features, type Item } from \"../../comparison-table\";\nimport styles from \"./scroll-progress.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-comparison-table-scroll-progress\";\n\ntype ScrollProgressProps = {\n items: Array<Item<Features>>;\n container: RefObject<HTMLUListElement | null>;\n ariaLabels: ComparisonTableProps[\"ariaLabels\"];\n};\n\nexport const ScrollProgress = ({ items, container, ariaLabels }: ScrollProgressProps) => {\n const [inViewSet, setInViewSet] = useState<Set<number>>(new Set());\n\n const scrollToCard = useCallback(\n (index: number) => {\n const reduceMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n const card = container.current?.querySelector(\n `[data-card-index=\"${index}\"]`\n ) as HTMLElement | null;\n card?.scrollIntoView({ behavior: reduceMotion ? \"instant\" : \"smooth\", block: \"nearest\" });\n },\n [container]\n );\n\n const previousCard = useCallback(() => {\n if (inViewSet.size === 0) return;\n\n const leftmostactiveIndex = Math.min(...Array.from(inViewSet));\n const targetIndex = leftmostactiveIndex - 1;\n\n if (targetIndex < 0) return;\n\n scrollToCard(targetIndex);\n }, [inViewSet, scrollToCard]);\n\n const nextCard = useCallback(() => {\n if (inViewSet.size === 0) return;\n\n const rightmostactiveIndex = Math.max(...Array.from(inViewSet));\n const targetIndex = rightmostactiveIndex + 1;\n\n if (targetIndex >= items.length) return;\n\n scrollToCard(targetIndex);\n }, [inViewSet, items.length, scrollToCard]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n\n if (e.key === \"ArrowRight\") nextCard();\n else if (e.key === \"ArrowLeft\") previousCard();\n }\n },\n [nextCard, previousCard]\n );\n\n useEffect(() => {\n const root = container.current;\n\n if (!root) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n setInViewSet((prev) => {\n const next = new Set(prev);\n\n entries.forEach((entry) => {\n const index = Number(entry.target.getAttribute(\"data-card-index\"));\n\n if (Number.isNaN(index)) return;\n\n if (entry.isIntersecting) {\n next.add(index);\n } else {\n next.delete(index);\n }\n });\n return next;\n });\n },\n { root, threshold: 0.5 }\n );\n\n items.forEach((_, index) => {\n const card = root.querySelector(`[data-card-index=\"${index}\"]`) as HTMLElement | null;\n\n if (card) observer.observe(card);\n });\n\n return () => observer.disconnect();\n }, [container, items]);\n\n useEffect(() => {\n const root = container.current;\n\n if (!root) return;\n\n root.addEventListener(\"keydown\", handleKeyDown);\n\n return () => root.removeEventListener(\"keydown\", handleKeyDown);\n }, [container, handleKeyDown]);\n\n const renderIndicators = () => {\n if (inViewSet.size === 0) return;\n\n const indicators = [];\n const viewCapacity = inViewSet.size;\n const leftmostActiveIndex = Math.min(...Array.from(inViewSet));\n const head = items.slice(0, leftmostActiveIndex).length;\n const trail = items.slice(leftmostActiveIndex + viewCapacity).length;\n\n let key = 0;\n\n for (let i = 0; i < items.length; i++) {\n if (head + 1 !== i && head <= i && i < items.length - trail) continue;\n\n let status = \"active\";\n\n if (i < head || i > items.length - 1 - trail) status = \"\";\n\n indicators.push(\n <li key={`indicator-${key++}`} className={cx(`${rootClassName}__indicator`, status)} />\n );\n }\n\n if (indicators.length < 2) return null;\n\n return indicators;\n };\n\n return (\n <li className={cx(rootClassName)}>\n <ul className={cx(`${rootClassName}__indicators`)}>{renderIndicators()}</ul>\n\n <div className={cx(`${rootClassName}__buttons`)}>\n <Button\n aria-label={ariaLabels.previous}\n variant=\"secondary\"\n iconOnly\n className={cx(`${rootClassName}__button`)}\n disabled={inViewSet.has(0)}\n onClick={previousCard}\n >\n <IconArrowLeft className={cx(`${rootClassName}__button-icon`)} size=\"xs\" />\n </Button>\n <Button\n aria-label={ariaLabels.next}\n variant=\"secondary\"\n iconOnly\n className={cx(`${rootClassName}__button`)}\n disabled={inViewSet.has(items.length - 1)}\n onClick={nextCard}\n >\n <IconArrowRight className={cx(`${rootClassName}__button-icon`)} size=\"xs\" />\n </Button>\n </div>\n </li>\n );\n};\n","import React, { type ReactNode, type UIEvent, useCallback, useId, useRef, useState } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./comparison-table.module.scss\";\nimport { Cell } from \"./components/Cell/cell\";\nimport { LeadCell } from \"./components/LeadCell/lead-cell\";\nimport { OptionCard, type OptionCardProps } from \"./components/OptionCard/option-card\";\nimport { ScrollProgress } from \"./components/ScrollProgress/scroll-progress\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table\";\n\nexport type Features = Record<string, ReactNode | null>;\n\nexport type Item<TFeatures extends Features = Features> = OptionCardProps & {\n features: Partial<Record<keyof TFeatures, ReactNode | string | boolean>>;\n};\n\nexport type ComparisonTableProps<TFeatures extends Features = Features> = {\n /** List of features that can be supported by the comparison table\n *\n * string = description of the feature that can be viewed by expanding cell.\n *\n * null = no description\n *\n {\n [featureName]: ReactNode | null\n }\n */\n features: TFeatures;\n\n /** List of items to be displayed in the comparison table\n *\n *\n Item = {\n image: {\n src: string;\n alt: string;\n };\n\n title: string;\n description: string;\n variablePriceText: string;\n price: string;\n actions: ReactNode;\n badge?: BadgeProps;\n isHighlighted?: boolean;\n\n features: {\n [featureName in keyof Features]?: string | boolean;\n };\n }\n */\n items: Array<Item<TFeatures>>;\n\n /** Aria labels for the comparison table and various components\n *\n {\n previous: string;\n next: string;\n readMore: string;\n readLess: string;\n }\n */\n ariaLabels: {\n previous: string;\n next: string;\n readMore: string;\n readLess: string;\n };\n variant?: \"primary\" | \"secondary\";\n classname?: string;\n};\n\nexport const ComparisonTable = <TFeatures extends Features>({\n classname,\n features,\n items,\n ariaLabels,\n variant = \"primary\",\n}: ComparisonTableProps<TFeatures>) => {\n const id = useId();\n const classes = cx(classname, rootClassName, `${rootClassName}--${variant}`);\n const containerRef = useRef<HTMLUListElement>(null);\n const [showFullDescriptions, setShowFullDescriptions] = useState(false);\n\n const handleToggleShowFullDescriptions = useCallback(() => {\n setShowFullDescriptions((prev) => !prev);\n }, []);\n\n const renderCards = () => {\n return (\n <li className={cx(`${rootClassName}__cards`)}>\n <div className={cx(`${rootClassName}__separator`)} />\n {items.map((item, index) => (\n <OptionCard\n {...item}\n showFullDescriptions={showFullDescriptions}\n toggleShowFullDescriptions={handleToggleShowFullDescriptions}\n key={index}\n isFirstCard={index === 0}\n ariaLabels={ariaLabels}\n cardIndex={index}\n id={`${index}-${id}`}\n />\n ))}\n </li>\n );\n };\n\n const renderFeatures = () => {\n return Object.entries(features).map(([title, description], i) => (\n <li key={i} className={cx(`${rootClassName}__feature-row`)}>\n <LeadCell title={title} description={description} />\n {items.map((item, index) => (\n <Cell key={index} value={item.features[title as keyof TFeatures] ?? false} />\n ))}\n </li>\n ));\n };\n\n const deltaTime = useRef(0);\n\n const handleScrollEnd = (e: UIEvent<HTMLUListElement>) => {\n /**\n * This function makes sure that the scroll position is never stuck between two cards, since scroll snap is not fully reliable.\n */\n\n const target = e.currentTarget;\n const cardwidth = target.querySelector(\"[data-card-id]\")?.clientWidth ?? 0;\n const cardPos = Math.round(target.scrollLeft / cardwidth);\n const scrollTarget = cardPos * cardwidth + cardPos;\n const timeDiff = e.timeStamp - deltaTime.current;\n const scrollDiff = Math.abs(target.scrollLeft - scrollTarget);\n\n if (deltaTime.current && timeDiff < 200) return;\n if (scrollDiff < 10) return;\n\n deltaTime.current = e.timeStamp;\n\n target.scrollTo({ left: scrollTarget, behavior: \"smooth\" });\n };\n\n return (\n <div className={cx(rootClassName + \"__wrapper\")}>\n <ul\n id={rootClassName + `-${id}`}\n ref={containerRef}\n className={classes}\n // eslint-disable-next-line react/no-unknown-property\n onScrollEnd={handleScrollEnd}\n style={{\n // @ts-expect-error | Typescript doesn't recognize the CSS variable, but it works as intended\n [\"--initial-columns\"]: items.length + 1,\n }}\n >\n <ScrollProgress items={items} container={containerRef} ariaLabels={ariaLabels} />\n {renderCards()}\n {renderFeatures()}\n </ul>\n </div>\n );\n};\n\nComparisonTable.displayName = \"ComparisonTable\";\n"],"names":["cx","c","styles","rootClassName","Cell","value","isReactNode","isValidElement","classes","Icon","IconCheckmark","IconMinus","jsx","LeadCell","title","description","isExpandable","jsxs","Paragraph","IconChevronDown","OptionCard","id","cardIndex","variablePriceText","price","isHighlighted","ariaLabels","badge","actions","isFirstCard","image","showFullDescriptions","toggleShowFullDescriptions","descriptionRef","useRef","descriptionContentRef","showFullDescriptionsRef","descriptionOverflows","setDescriptionOverflows","useState","useEffect","checkDescriptionOverflow","useCallback","descriptionContent","descriptionHeight","contentHeight","descriptionElement","resizeObserver","renderDescription","Button","Badge","Heading","ScrollProgress","items","container","inViewSet","setInViewSet","scrollToCard","index","reduceMotion","previousCard","targetIndex","nextCard","handleKeyDown","root","observer","entries","prev","next","entry","_","card","renderIndicators","indicators","viewCapacity","leftmostActiveIndex","head","trail","key","i","status","IconArrowLeft","IconArrowRight","ComparisonTable","classname","features","variant","useId","containerRef","setShowFullDescriptions","handleToggleShowFullDescriptions","renderCards","item","createElement","renderFeatures","deltaTime","handleScrollEnd","e","target","cardwidth","cardPos","scrollTarget","timeDiff","scrollDiff"],"mappings":"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"}
1
+ {"version":3,"file":"comparison-table-N5G3k2kr.js","sources":["../../../components/comparison-table/src/components/Cell/cell.tsx","../../../components/comparison-table/src/components/LeadCell/lead-cell.tsx","../../../components/comparison-table/src/components/OptionCard/option-card.tsx","../../../components/comparison-table/src/components/ScrollProgress/scroll-progress.tsx","../../../components/comparison-table/src/comparison-table.tsx"],"sourcesContent":["import React, { isValidElement, type ReactNode } from \"react\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./cell.module.scss\";\n\ntype CellProps = {\n value: boolean | ReactNode;\n};\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table-cell\";\n\nexport const Cell = ({ value }: CellProps) => {\n const isReactNode = isValidElement(value) || [\"string\", \"number\"].includes(typeof value);\n\n const getClassName = () => {\n if (isReactNode) return \"\";\n return `${rootClassName}--${value ? \"check\" : \"minus\"}`;\n };\n\n const classes = cx(rootClassName, [getClassName()]);\n\n const Icon = value ? IconCheckmark : IconMinus;\n\n return (\n <span className={cx(classes)}>\n {isReactNode ? value : <Icon size=\"xs\" className={cx(`${rootClassName}__icon`)} />}\n </span>\n );\n};\n","import React, { type ReactNode } from \"react\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./lead-cell.module.scss\";\n\ntype LeadCellProps = {\n title: string;\n description?: ReactNode;\n};\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table-lead-cell\";\n\nexport const LeadCell = ({ title, description }: LeadCellProps) => {\n const isExpandable = typeof description === \"string\";\n const classes = cx(rootClassName);\n\n return (\n <details className={classes} data-is-expandable={isExpandable}>\n <summary className={cx(`${rootClassName}__summary`)} tabIndex={isExpandable ? 0 : -1}>\n <Paragraph className={cx(`${rootClassName}__summary-title`)} variant=\"paragraph-100-bold\">\n {title}\n </Paragraph>\n <IconChevronDown className={cx(`${rootClassName}__summary-icon`)} size=\"sm\" />\n </summary>\n {description && (\n <Paragraph variant=\"paragraph-100\" className={cx(`${rootClassName}__description`)}>\n {description}\n </Paragraph>\n )}\n </details>\n );\n};\n","import React, { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Badge, type BadgeProps } from \"@purpur/badge\";\nimport { Button } from \"@purpur/button\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport { type ComparisonTableProps } from \"../../comparison-table\";\nimport styles from \"./option-card.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table-option-card\";\n\nexport type OptionCardProps = {\n image: {\n src: string;\n alt: string;\n };\n\n title: string;\n description: ReactNode;\n variablePriceText: string;\n price: string;\n\n actions: ReactNode;\n\n badge?: BadgeProps;\n isHighlighted?: boolean;\n};\n\ntype OptionCardPropsAdditions = {\n id: string;\n cardIndex: number;\n isFirstCard: boolean;\n ariaLabels: ComparisonTableProps[\"ariaLabels\"];\n\n showFullDescriptions: boolean;\n toggleShowFullDescriptions: () => void;\n};\n\nexport const OptionCard = ({\n id,\n cardIndex,\n description,\n variablePriceText,\n price,\n isHighlighted,\n ariaLabels,\n badge,\n actions,\n isFirstCard,\n image,\n title,\n showFullDescriptions,\n toggleShowFullDescriptions,\n}: OptionCardProps & OptionCardPropsAdditions) => {\n const descriptionRef = useRef<HTMLDivElement | HTMLParagraphElement>(null);\n const descriptionContentRef = useRef<HTMLDivElement | null>(null);\n const showFullDescriptionsRef = useRef(showFullDescriptions);\n const [descriptionOverflows, setDescriptionOverflows] = useState(false);\n\n const classes = cx(rootClassName, {\n [`${rootClassName}--highlighted`]: isHighlighted,\n [`${rootClassName}--first-card`]: isFirstCard,\n [`${rootClassName}--show-full-descriptions`]: showFullDescriptions,\n });\n\n useEffect(() => {\n showFullDescriptionsRef.current = showFullDescriptions;\n }, [showFullDescriptions]);\n\n const checkDescriptionOverflow = useCallback(() => {\n if (showFullDescriptionsRef.current) {\n return;\n }\n\n const description = descriptionRef.current;\n const descriptionContent = descriptionContentRef.current;\n\n if (!description || !descriptionContent) {\n setDescriptionOverflows(false);\n return;\n }\n\n const descriptionHeight = description.clientHeight;\n const contentHeight = descriptionContent.offsetHeight;\n\n setDescriptionOverflows(contentHeight > descriptionHeight + 1);\n }, []);\n\n useEffect(() => {\n const descriptionElement = descriptionRef.current;\n\n checkDescriptionOverflow();\n\n if (!descriptionElement || typeof ResizeObserver === \"undefined\") {\n return undefined;\n }\n\n const resizeObserver = new ResizeObserver(checkDescriptionOverflow);\n resizeObserver.observe(descriptionElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [checkDescriptionOverflow, description]);\n\n const renderDescription = () => {\n if (!description) return null;\n\n return (\n <div className={cx(`${rootClassName}__description`)}>\n {typeof description === \"string\" ? (\n <Paragraph ref={descriptionRef} className={cx(`${rootClassName}__description-text`)}>\n <span ref={descriptionContentRef}>{description}</span>\n </Paragraph>\n ) : (\n <div ref={descriptionRef} className={cx(`${rootClassName}__description-text`)}>\n <div ref={descriptionContentRef} className={cx(`${rootClassName}__description-inner`)}>\n {description}\n </div>\n </div>\n )}\n <Button\n variant=\"text\"\n size=\"xs\"\n className={cx(`${rootClassName}__read-more`, {\n [`${rootClassName}__read-more--hidden`]: !descriptionOverflows,\n })}\n onClick={toggleShowFullDescriptions}\n aria-hidden={!descriptionOverflows}\n tabIndex={descriptionOverflows ? undefined : -1}\n >\n <span className={cx(`${rootClassName}__read-more-text`)}>\n {showFullDescriptions ? ariaLabels.readLess : ariaLabels.readMore}\n </span>\n <IconChevronDown className={cx(`${rootClassName}__read-more-icon`)} size=\"xs\" />\n </Button>\n </div>\n );\n };\n\n return (\n <article className={classes} data-card-id={id} data-card-index={cardIndex}>\n {badge && <Badge {...badge} className={cx(`${rootClassName}__badge`)} />}\n\n <section className={cx(`${rootClassName}__main-content`)}>\n <img src={image.src} alt={image.alt} className={cx(`${rootClassName}__image`)} />\n\n <div className={cx(`${rootClassName}__body`)}>\n <Heading tag=\"h3\" variant=\"title-200\" className={cx(`${rootClassName}__title`)}>\n {title}\n </Heading>\n {renderDescription()}\n </div>\n </section>\n\n <footer className={cx(`${rootClassName}__footer`)}>\n <span className={cx(`${rootClassName}__price`)} id={id}>\n <Paragraph variant=\"paragraph-100\">{variablePriceText}</Paragraph>\n <Paragraph variant=\"paragraph-100-bold\">{price}</Paragraph>\n </span>\n\n {actions}\n </footer>\n </article>\n );\n};\n","import React, { type RefObject, useCallback, useEffect, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconArrowLeft } from \"@purpur/icon/arrow-left\";\nimport { IconArrowRight } from \"@purpur/icon/arrow-right\";\nimport c from \"classnames/bind\";\n\nimport { type ComparisonTableProps, type Features, type Item } from \"../../comparison-table\";\nimport styles from \"./scroll-progress.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-comparison-table-scroll-progress\";\n\ntype ScrollProgressProps = {\n items: Array<Item<Features>>;\n container: RefObject<HTMLUListElement | null>;\n ariaLabels: ComparisonTableProps[\"ariaLabels\"];\n};\n\nexport const ScrollProgress = ({ items, container, ariaLabels }: ScrollProgressProps) => {\n const [inViewSet, setInViewSet] = useState<Set<number>>(new Set());\n\n const scrollToCard = useCallback(\n (index: number) => {\n const reduceMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n const card = container.current?.querySelector(\n `[data-card-index=\"${index}\"]`\n ) as HTMLElement | null;\n card?.scrollIntoView({ behavior: reduceMotion ? \"instant\" : \"smooth\", block: \"nearest\" });\n },\n [container]\n );\n\n const previousCard = useCallback(() => {\n if (inViewSet.size === 0) return;\n\n const leftmostactiveIndex = Math.min(...Array.from(inViewSet));\n const targetIndex = leftmostactiveIndex - 1;\n\n if (targetIndex < 0) return;\n\n scrollToCard(targetIndex);\n }, [inViewSet, scrollToCard]);\n\n const nextCard = useCallback(() => {\n if (inViewSet.size === 0) return;\n\n const rightmostactiveIndex = Math.max(...Array.from(inViewSet));\n const targetIndex = rightmostactiveIndex + 1;\n\n if (targetIndex >= items.length) return;\n\n scrollToCard(targetIndex);\n }, [inViewSet, items.length, scrollToCard]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n\n if (e.key === \"ArrowRight\") nextCard();\n else if (e.key === \"ArrowLeft\") previousCard();\n }\n },\n [nextCard, previousCard]\n );\n\n useEffect(() => {\n const root = container.current;\n\n if (!root) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n setInViewSet((prev) => {\n const next = new Set(prev);\n\n entries.forEach((entry) => {\n const index = Number(entry.target.getAttribute(\"data-card-index\"));\n\n if (Number.isNaN(index)) return;\n\n if (entry.isIntersecting) {\n next.add(index);\n } else {\n next.delete(index);\n }\n });\n return next;\n });\n },\n { root, threshold: 0.5 }\n );\n\n items.forEach((_, index) => {\n const card = root.querySelector(`[data-card-index=\"${index}\"]`) as HTMLElement | null;\n\n if (card) observer.observe(card);\n });\n\n return () => observer.disconnect();\n }, [container, items]);\n\n useEffect(() => {\n const root = container.current;\n\n if (!root) return;\n\n root.addEventListener(\"keydown\", handleKeyDown);\n\n return () => root.removeEventListener(\"keydown\", handleKeyDown);\n }, [container, handleKeyDown]);\n\n const renderIndicators = () => {\n if (inViewSet.size === 0) return;\n\n const indicators = [];\n const viewCapacity = inViewSet.size;\n const leftmostActiveIndex = Math.min(...Array.from(inViewSet));\n const head = items.slice(0, leftmostActiveIndex).length;\n const trail = items.slice(leftmostActiveIndex + viewCapacity).length;\n\n let key = 0;\n\n for (let i = 0; i < items.length; i++) {\n if (head + 1 !== i && head <= i && i < items.length - trail) continue;\n\n let status = \"active\";\n\n if (i < head || i > items.length - 1 - trail) status = \"\";\n\n indicators.push(\n <li key={`indicator-${key++}`} className={cx(`${rootClassName}__indicator`, status)} />\n );\n }\n\n if (indicators.length < 2) return null;\n\n return indicators;\n };\n\n return (\n <li className={cx(rootClassName)}>\n <ul className={cx(`${rootClassName}__indicators`)}>{renderIndicators()}</ul>\n\n <div className={cx(`${rootClassName}__buttons`)}>\n <Button\n aria-label={ariaLabels.previous}\n variant=\"secondary\"\n iconOnly\n className={cx(`${rootClassName}__button`)}\n disabled={inViewSet.has(0)}\n onClick={previousCard}\n >\n <IconArrowLeft className={cx(`${rootClassName}__button-icon`)} size=\"xs\" />\n </Button>\n <Button\n aria-label={ariaLabels.next}\n variant=\"secondary\"\n iconOnly\n className={cx(`${rootClassName}__button`)}\n disabled={inViewSet.has(items.length - 1)}\n onClick={nextCard}\n >\n <IconArrowRight className={cx(`${rootClassName}__button-icon`)} size=\"xs\" />\n </Button>\n </div>\n </li>\n );\n};\n","import React, { type ReactNode, type UIEvent, useCallback, useId, useRef, useState } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./comparison-table.module.scss\";\nimport { Cell } from \"./components/Cell/cell\";\nimport { LeadCell } from \"./components/LeadCell/lead-cell\";\nimport { OptionCard, type OptionCardProps } from \"./components/OptionCard/option-card\";\nimport { ScrollProgress } from \"./components/ScrollProgress/scroll-progress\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-comparison-table\";\n\nexport type Features = Record<string, ReactNode | null>;\n\nexport type Item<TFeatures extends Features = Features> = OptionCardProps & {\n features: Partial<Record<keyof TFeatures, ReactNode | string | boolean>>;\n};\n\nexport type ComparisonTableProps<TFeatures extends Features = Features> = {\n /** List of features that can be supported by the comparison table\n *\n * string = description of the feature that can be viewed by expanding cell.\n *\n * null = no description\n *\n {\n [featureName]: ReactNode | null\n }\n */\n features: TFeatures;\n\n /** List of items to be displayed in the comparison table\n *\n *\n Item = {\n image: {\n src: string;\n alt: string;\n };\n\n title: string;\n description: string;\n variablePriceText: string;\n price: string;\n actions: ReactNode;\n badge?: BadgeProps;\n isHighlighted?: boolean;\n\n features: {\n [featureName in keyof Features]?: string | boolean;\n };\n }\n */\n items: Array<Item<TFeatures>>;\n\n /** Aria labels for the comparison table and various components\n *\n {\n previous: string;\n next: string;\n readMore: string;\n readLess: string;\n }\n */\n ariaLabels: {\n previous: string;\n next: string;\n readMore: string;\n readLess: string;\n };\n variant?: \"primary\" | \"secondary\";\n classname?: string;\n};\n\nexport const ComparisonTable = <TFeatures extends Features>({\n classname,\n features,\n items,\n ariaLabels,\n variant = \"primary\",\n}: ComparisonTableProps<TFeatures>) => {\n const id = useId();\n const classes = cx(classname, rootClassName, `${rootClassName}--${variant}`);\n const containerRef = useRef<HTMLUListElement>(null);\n const [showFullDescriptions, setShowFullDescriptions] = useState(false);\n\n const handleToggleShowFullDescriptions = useCallback(() => {\n setShowFullDescriptions((prev) => !prev);\n }, []);\n\n const renderCards = () => {\n return (\n <li className={cx(`${rootClassName}__cards`)}>\n <div className={cx(`${rootClassName}__separator`)} />\n {items.map((item, index) => (\n <OptionCard\n {...item}\n showFullDescriptions={showFullDescriptions}\n toggleShowFullDescriptions={handleToggleShowFullDescriptions}\n key={index}\n isFirstCard={index === 0}\n ariaLabels={ariaLabels}\n cardIndex={index}\n id={`${index}-${id}`}\n />\n ))}\n </li>\n );\n };\n\n const renderFeatures = () => {\n return Object.entries(features).map(([title, description], i) => (\n <li key={i} className={cx(`${rootClassName}__feature-row`)}>\n <LeadCell title={title} description={description} />\n {items.map((item, index) => (\n <Cell key={index} value={item.features[title as keyof TFeatures] ?? false} />\n ))}\n </li>\n ));\n };\n\n const deltaTime = useRef(0);\n\n const handleScrollEnd = (e: UIEvent<HTMLUListElement>) => {\n /**\n * This function makes sure that the scroll position is never stuck between two cards, since scroll snap is not fully reliable.\n */\n\n const target = e.currentTarget;\n const cardwidth = target.querySelector(\"[data-card-id]\")?.clientWidth ?? 0;\n const cardPos = Math.round(target.scrollLeft / cardwidth);\n const scrollTarget = cardPos * cardwidth + cardPos;\n const timeDiff = e.timeStamp - deltaTime.current;\n const scrollDiff = Math.abs(target.scrollLeft - scrollTarget);\n\n if (deltaTime.current && timeDiff < 200) return;\n if (scrollDiff < 10) return;\n\n deltaTime.current = e.timeStamp;\n\n target.scrollTo({ left: scrollTarget, behavior: \"smooth\" });\n };\n\n return (\n <div className={cx(rootClassName + \"__wrapper\")}>\n <ul\n id={rootClassName + `-${id}`}\n ref={containerRef}\n className={classes}\n // eslint-disable-next-line react/no-unknown-property\n onScrollEnd={handleScrollEnd}\n style={{\n // @ts-expect-error | Typescript doesn't recognize the CSS variable, but it works as intended\n [\"--initial-columns\"]: items.length + 1,\n }}\n >\n <ScrollProgress items={items} container={containerRef} ariaLabels={ariaLabels} />\n {renderCards()}\n {renderFeatures()}\n </ul>\n </div>\n );\n};\n\nComparisonTable.displayName = \"ComparisonTable\";\n"],"names":["cx","c","styles","rootClassName","Cell","value","isReactNode","isValidElement","classes","Icon","IconCheckmark","IconMinus","jsx","LeadCell","title","description","isExpandable","jsxs","Paragraph","IconChevronDown","OptionCard","id","cardIndex","variablePriceText","price","isHighlighted","ariaLabels","badge","actions","isFirstCard","image","showFullDescriptions","toggleShowFullDescriptions","descriptionRef","useRef","descriptionContentRef","showFullDescriptionsRef","descriptionOverflows","setDescriptionOverflows","useState","useEffect","checkDescriptionOverflow","useCallback","descriptionContent","descriptionHeight","contentHeight","descriptionElement","resizeObserver","renderDescription","Button","Badge","Heading","ScrollProgress","items","container","inViewSet","setInViewSet","scrollToCard","index","reduceMotion","previousCard","targetIndex","nextCard","handleKeyDown","root","observer","entries","prev","next","entry","_","card","renderIndicators","indicators","viewCapacity","leftmostActiveIndex","head","trail","key","i","status","IconArrowLeft","IconArrowRight","ComparisonTable","classname","features","variant","useId","containerRef","setShowFullDescriptions","handleToggleShowFullDescriptions","renderCards","item","createElement","renderFeatures","deltaTime","handleScrollEnd","e","target","cardwidth","cardPos","scrollTarget","timeDiff","scrollDiff"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./comparison-table-Dtqxz8vL.js");exports.ComparisonTable=e.ComparisonTable;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./comparison-table-N5G3k2kr.js");exports.ComparisonTable=e.ComparisonTable;
2
2
  //# sourceMappingURL=comparison-table.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { C as r } from "./comparison-table-D1evE0ri.mjs";
1
+ import { C as r } from "./comparison-table-CmtSOUfK.mjs";
2
2
  export {
3
3
  r as ComparisonTable
4
4
  };
@@ -1,6 +1,6 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
- import { HeadingTagType } from '../../heading/src/heading';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
+ import { HeadingTagType } from '../../heading/src/heading.tsx';
4
4
  export type AccordionItemOnClickEvent = React.MouseEvent<HTMLButtonElement, MouseEvent> & {
5
5
  currentTarget: {
6
6
  dataset: {
@@ -1,6 +1,6 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
- import { HeadingTagType, HeadingVariant } from '../../heading/src/heading';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
+ import { HeadingTagType, HeadingVariant } from '../../heading/src/heading.tsx';
4
4
  export type AccordionProps = Omit<BaseProps, "title" | "children"> & {
5
5
  children: ReactNode;
6
6
  negative?: boolean;
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
3
  import { AVATAR_SIZE } from './avatar-constants';
4
4
  export type AvatarSize = (typeof AVATAR_SIZE)[number];
5
5
  type AvatarBaseProps = BaseProps & {
@@ -1,6 +1,6 @@
1
1
  import { default as React, ButtonHTMLAttributes } from 'react';
2
- import { ActionProps } from '../../../libraries/action/src/action';
3
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { ActionProps } from '../../../libraries/action/src/action.tsx';
3
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
4
4
  export declare const BUTTON_VARIANT: {
5
5
  readonly DESTRUCTIVE: "destructive";
6
6
  readonly TERTIARY_PURPLE: "tertiary-purple";
@@ -28,7 +28,7 @@ export declare const Button: React.ForwardRefExoticComponent<(Omit<Omit<{
28
28
  className?: string;
29
29
  fullWidth?: boolean;
30
30
  negative?: boolean;
31
- size?: import('../../../libraries/action/src/action').Size;
31
+ size?: import('../../../libraries/action/src/action.tsx').Size;
32
32
  variant: "text" | "primary" | "secondary" | "expressive" | "destructive" | "tertiary-purple";
33
33
  } & {
34
34
  iconOnly?: false;
@@ -48,8 +48,8 @@ export declare const Button: React.ForwardRefExoticComponent<(Omit<Omit<{
48
48
  className?: string;
49
49
  fullWidth?: boolean;
50
50
  negative?: boolean;
51
- size?: import('../../../libraries/action/src/action').Size;
52
- variant: "text" | import('../../../libraries/action/src/action').Variant | "tertiary-purple";
51
+ size?: import('../../../libraries/action/src/action.tsx').Size;
52
+ variant: "text" | import('../../../libraries/action/src/action.tsx').Variant | "tertiary-purple";
53
53
  } & {
54
54
  iconOnly: true;
55
55
  "aria-label": string;
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { BadgeVariant } from '../../badge/src/badge';
2
+ import { BadgeVariant } from '../../badge/src/badge.tsx';
3
3
  export type CardBadgeProps = {
4
4
  /**
5
5
  * Use this to set a testid on the badge
@@ -15,4 +15,4 @@ export type CardCtaProps = BaseProps & {
15
15
  text?: string;
16
16
  };
17
17
  export declare const CardCta: ({ ["data-testid"]: dataTestId, className, children, disabled, iconPosition, loading, text, linkStyling, ...props }: CardCtaProps) => React.JSX.Element;
18
- //# sourceMappingURL=card-cta.d.ts.mapmap
18
+ //# sourceMappingURL=card-cta.d.ts.map
@@ -60,4 +60,4 @@ export type CardHeadingButtonProps = {
60
60
  };
61
61
  export type CardHeadingProps<T extends HeadingTagType = "h2"> = BaseProps<T> & CardHeadingDefaultProps;
62
62
  export declare const CardHeading: <T extends HeadingTagType = "h2">({ ["data-testid"]: dataTestId, ["aria-label"]: ariaLabel, title, icon, children, titleTag, enableHyphenation, onClick, href, disabled, linkElement, variant, ...props }: CardHeadingProps & (CardHeadingLinkProps | CardHeadingButtonProps | CardHeadingNonInteractiveProps)) => React.JSX.Element;
63
- //# sourceMappingURL=card-heading.d.ts.map.ts.map
63
+ //# sourceMappingURL=card-heading.d.ts.map
@@ -4,4 +4,4 @@ export type CardMediaLayoutProps = BaseProps & {
4
4
  imageTop?: boolean;
5
5
  };
6
6
  export declare const CardMediaLayout: ({ ["data-testid"]: dataTestId, className, children, imageTop, ...props }: CardMediaLayoutProps) => React.JSX.Element;
7
- //# sourceMappingURL=card-media-layout.d.ts.map
7
+ //# sourceMappingURL=card-media-layout.d.ts.mapmap
@@ -2,4 +2,4 @@ import { default as React } from 'react';
2
2
  import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  export type CardMediaProps = BaseProps;
4
4
  export declare const CardMedia: ({ ["data-testid"]: dataTestId, className, children, ...props }: CardMediaProps) => React.JSX.Element;
5
- //# sourceMappingURL=card-media.d.ts.map
5
+ //# sourceMappingURL=card-media.d.ts.mapmap
@@ -63,4 +63,4 @@ export type CheckboxProps = Omit<BaseProps<"button">, "onChange" | "children"> &
63
63
  value?: string;
64
64
  };
65
65
  export declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
66
- //# sourceMappingURL=checkbox.d.ts.mapmap
66
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BadgeProps } from '../../../../badge/src/badge';
2
+ import { BadgeProps } from '../../../../badge/src/badge.tsx';
3
3
  import { ComparisonTableProps } from '../../comparison-table';
4
4
  export type OptionCardProps = {
5
5
  image: {
@@ -1,6 +1,6 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
- import { HeadingTagType, HeadingVariant } from '../../heading/src/heading.tsx';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
+ import { HeadingTagType, HeadingVariant } from '../../heading/src/heading';
4
4
  export type ContentBlockProps = BaseProps & {
5
5
  /**
6
6
  * @deprecated Set negative on ContentBlockGroup instead
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  export type CounterBadgeProps = Omit<BaseProps<"span">, "children"> & {
4
4
  value: number;
5
5
  };
@@ -20,4 +20,4 @@ export declare const CountryFlagIcon: {
20
20
  displayName: string;
21
21
  };
22
22
  export {};
23
- //# sourceMappingURL=country-flag-icon.d.ts.mapmap
23
+ //# sourceMappingURL=country-flag-icon.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { TextFieldProps } from '../../text-field/src/text-field.tsx';
2
+ import { TextFieldProps } from '../../text-field/src/text-field';
3
3
  type DateFieldPropsTemp = Omit<TextFieldProps, "type" | "value" | "onChange" | "clearButtonAriaLabel" | "clearButtonLabel" | "onClear">;
4
4
  export type DateChars = {
5
5
  yearChar: string;
@@ -1,8 +1,8 @@
1
1
  import { default as React, ComponentProps } from 'react';
2
- import { CalendarProps } from '../../calendar/src/calendar.tsx';
3
- import { DateFieldProps } from '../../date-field/src/date-field.tsx';
4
- import { DateRangeFieldProps } from '../../date-range-field/src/date-range-field.tsx';
5
- import { Drawer } from '../../drawer/src/drawer.tsx';
2
+ import { CalendarProps } from '../../calendar/src/calendar';
3
+ import { DateFieldProps } from '../../date-field/src/date-field';
4
+ import { DateRangeFieldProps } from '../../date-range-field/src/date-range-field';
5
+ import { Drawer } from '../../drawer/src/drawer';
6
6
  type CommonDatePickerProps = {
7
7
  calendarProps?: CalendarProps;
8
8
  /**
@@ -9,4 +9,4 @@ export declare const DismissableChipGroupItem: {
9
9
  ({ children, id, onDismiss, disabled, ...props }: DismissableChipGroupItemProps): React.JSX.Element;
10
10
  displayName: string;
11
11
  };
12
- //# sourceMappingURL=dismissable-chip-group-item.d.ts.mapmap
12
+ //# sourceMappingURL=dismissable-chip-group-item.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
- import { HeadingTagType } from '../../heading/src/heading';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
+ import { HeadingTagType } from '../../heading/src/heading.tsx';
4
4
  export declare const sizes: readonly ["sm", "md"];
5
5
  export declare const DEFAULT_SIZE: "md";
6
6
  export type Size = (typeof sizes)[number];
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  import { Position } from './types';
4
4
  export type WithBackButton = {
5
5
  backButton: boolean;
@@ -88,4 +88,4 @@ export declare const DrawerContent: React.ForwardRefExoticComponent<(Omit<Omit<R
88
88
  zIndex?: number;
89
89
  position?: Position;
90
90
  } & WithoutBackButton, "ref">) & React.RefAttributes<HTMLDivElement>>;
91
- //# sourceMappingURL=drawer-content.d.ts.map
91
+ //# sourceMappingURL=drawer-content.d.ts.mapmap
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
3
  import { DrawerVariant, Position, SwipeEvent } from './types';
4
4
  export type DrawerFrameProps = Omit<BaseProps, "children"> & {
5
5
  backButton: boolean;
@@ -4,4 +4,4 @@ export type DrawerTriggerProps = Omit<BaseProps<"button">, "children"> & {
4
4
  children: ReactNode;
5
5
  };
6
6
  export declare const DrawerTrigger: React.ForwardRefExoticComponent<Omit<DrawerTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
- //# sourceMappingURL=drawer-trigger.d.ts.mapmap
7
+ //# sourceMappingURL=drawer-trigger.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  export declare const ariaRelevantValues: readonly ["additions text", "additions", "removals", "text", "all"];
4
4
  export type FieldErrorTextProps = Omit<BaseProps, "aria-relevant" | "children"> & {
5
5
  children: ReactNode;
@@ -7,4 +7,4 @@ export type FieldErrorTextProps = Omit<BaseProps, "aria-relevant" | "children">
7
7
  ["aria-relevant"]?: (typeof ariaRelevantValues)[number];
8
8
  };
9
9
  export declare const FieldErrorText: ({ children, className, negative, ["aria-relevant"]: ariaRelevant, ...props }: FieldErrorTextProps) => React.JSX.Element;
10
- //# sourceMappingURL=field-error-text.d.ts.map
10
+ //# sourceMappingURL=field-error-text.d.ts.mapmap
@@ -7,4 +7,4 @@ export type FieldHelperTextProps = Omit<BaseProps, "children" | "id"> & {
7
7
  negative?: boolean;
8
8
  };
9
9
  export declare const FieldHelperText: ({ children, className, disabled, id, negative, ...props }: FieldHelperTextProps) => React.JSX.Element;
10
- //# sourceMappingURL=field-helper-text.d.ts.map
10
+ //# sourceMappingURL=field-helper-text.d.ts.mapmap
@@ -16,4 +16,4 @@ type FooterNavigationProps = {
16
16
  };
17
17
  export declare const FooterNavigation: ({ navigationLinks, sectionProps, customLink, }: FooterNavigationProps) => React.JSX.Element;
18
18
  export {};
19
- //# sourceMappingURL=footer-navigation.d.ts.map
19
+ //# sourceMappingURL=footer-navigation.d.ts.mapmap
@@ -1,10 +1,10 @@
1
1
  import { default as React } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
- import { IconProps } from '../../../icon/icon';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
+ import { IconProps } from '@purpur/icon';
4
4
  export type FooterSocialLinkProps = Omit<BaseProps<"a">, "aria-label" | "href" | "children"> & {
5
5
  "aria-label": string;
6
6
  icon: IconProps["svg"];
7
7
  href: string;
8
8
  };
9
9
  export declare const FooterSocialLink: ({ icon, href, ...props }: FooterSocialLinkProps) => React.JSX.Element;
10
- //# sourceMappingURL=footer-social-link.d.ts.map
10
+ //# sourceMappingURL=footer-social-link.d.ts.mapmap
@@ -1,7 +1,7 @@
1
1
  import { default as React, ReactElement, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
- import { LinkProps } from '../../link/src/link.tsx';
4
- import { ColorOptions, ColorScheme } from '../../../libraries/theme/src/theme.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
+ import { LinkProps } from '../../link/src/link';
4
+ import { ColorOptions, ColorScheme } from '../../../libraries/theme/src/theme';
5
5
  import { CustomLinkType, FooterNavigationItem, FooterNavigationItemLink } from './footer-navigation';
6
6
  import { FooterSocialLinkProps } from './footer-social-link';
7
7
  type AdditionalLink = FooterNavigationItemLink & Omit<LinkProps, "href" | "variant" | "negative" | "children" | "disableVisited">;
@@ -16,4 +16,4 @@ export declare const Item: {
16
16
  displayName: string;
17
17
  };
18
18
  export declare const isItem: (child?: ReactNode) => child is ReactElement<ItemProps>;
19
- //# sourceMappingURL=grid.item.d.ts.map
19
+ //# sourceMappingURL=grid.item.d.ts.mapmap
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  export declare const HeadingTag: {
4
4
  readonly H1: "h1";
5
5
  readonly H2: "h2";
@@ -43,4 +43,4 @@ export declare const Heading: {
43
43
  <T extends HeadingTagType>({ children, className, enableHyphenation, negative, tag, variant, ...props }: HeadingProps<T>): React.JSX.Element;
44
44
  displayName: string;
45
45
  };
46
- //# sourceMappingURL=heading.d.ts.map
46
+ //# sourceMappingURL=heading.d.ts.mapmap
@@ -6,4 +6,4 @@ type HeroBannerActionProps = Omit<BaseProps, "children"> & {
6
6
  };
7
7
  export declare const HeroBannerActions: ({ children, className, ...props }: HeroBannerActionProps) => React.JSX.Element;
8
8
  export {};
9
- //# sourceMappingURL=hero-banner-actions.d.ts.map
9
+ //# sourceMappingURL=hero-banner-actions.d.ts.mapmap
@@ -19,4 +19,4 @@ type WithoutVideo = {
19
19
  export type HeroBannerMediaProps = BaseProps & (WithVideo | WithoutVideo);
20
20
  export declare const HeroBannerMedia: ({ children, isPlaying, togglePausePlay, videoPauseAriaLabel, videoPlayAriaLabel, className, ...props }: HeroBannerMediaProps) => false | "" | 0 | 0n | React.JSX.Element | null | undefined;
21
21
  export {};
22
- //# sourceMappingURL=hero-banner-media.d.ts.map
22
+ //# sourceMappingURL=hero-banner-media.d.ts.mapmap
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
- import { ColorScheme } from '../../../libraries/theme/src/theme';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
+ import { ColorScheme } from '../../../libraries/theme/src/theme.ts';
4
4
  export declare const TitleHyphenVariant: {
5
5
  readonly default: "default";
6
6
  readonly enabled: "enabled";
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  export type StaticIllustrativeBaseIconProps = Omit<BaseProps<"span">, "children"> & {
4
4
  allyTitle?: string;
5
5
  };
@@ -7,4 +7,4 @@ export type StaticIllustrativeIconProps = {
7
7
  svg: string;
8
8
  } & StaticIllustrativeBaseIconProps;
9
9
  export declare const StaticIllustrativeIcon: React.ForwardRefExoticComponent<Omit<StaticIllustrativeIconProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
10
- //# sourceMappingURL=static-illustrative-icon.d.ts.map
10
+ //# sourceMappingURL=static-illustrative-icon.d.ts.mapmap
@@ -12,4 +12,4 @@ export type ListboxItemProps = Omit<BaseProps<"li">, "role"> & {
12
12
  hideSelectedIcon?: boolean;
13
13
  };
14
14
  export declare const ListboxItem: React.ForwardRefExoticComponent<Omit<ListboxItemProps, "ref"> & React.RefAttributes<HTMLLIElement>>;
15
- //# sourceMappingURL=listbox-item.d.ts.map
15
+ //# sourceMappingURL=listbox-item.d.ts.mapmap
@@ -1,5 +1,5 @@
1
1
  import { default as React, ForwardRefExoticComponent, PropsWithoutRef } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
3
  import { ListboxItem } from './listbox-item';
4
4
  export declare const ListboxNegativeContext: React.Context<boolean | undefined>;
5
5
  export type ListboxProps = Omit<BaseProps<"ul">, "role"> & {
@@ -1,4 +1,4 @@
1
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
1
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
2
  export type LogoBaseProps = Omit<BaseProps<"span">, "children" | "color"> & {
3
3
  /**
4
4
  * Color variant of the logo.
@@ -1,6 +1,6 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
- import { HeadingTagType } from '../../heading/src/heading.tsx';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
+ import { HeadingTagType } from '../../heading/src/heading';
4
4
  export type DefaultProps = BaseProps & {
5
5
  closeButtonAriaLabel?: string;
6
6
  description?: string;
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
3
  import { InternalLinkProps, InternalNoLinkProps } from './types';
4
4
  export type PaginationPageSelectorProps = Omit<BaseProps, "children"> & {
5
5
  currentPage: number;
@@ -31,4 +31,4 @@ export declare const PaginationPageSelector: React.ForwardRefExoticComponent<(Om
31
31
  pageSelectorId?: string;
32
32
  pageSelectorLabel: string;
33
33
  } & InternalNoLinkProps, "ref">) & React.RefAttributes<HTMLDivElement>>;
34
- //# sourceMappingURL=pagination-page-selector.d.ts.mapmap
34
+ //# sourceMappingURL=pagination-page-selector.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
3
  import { LinkProps, NoLinkProps } from './types';
4
4
  export type PaginationPageSizeSelectorProps = Omit<BaseProps, "children"> & {
5
5
  availablePageSizes: number[];
@@ -22,4 +22,4 @@ export declare const PaginationPageSizeSelector: React.ForwardRefExoticComponent
22
22
  pageSize: number;
23
23
  pageSizeLabel: string;
24
24
  } & Omit<NoLinkProps, "onPageChange">, "ref">) & React.RefAttributes<HTMLDivElement>>;
25
- //# sourceMappingURL=pagination-page-size-selector.d.ts.mapmap
25
+ //# sourceMappingURL=pagination-page-size-selector.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
3
3
  import { InternalLinkProps, InternalNoLinkProps, Link } from './types';
4
4
  export type PaginationPagesProps = Omit<BaseProps<"ol">, "children"> & {
5
5
  linkElement: Link;
@@ -28,4 +28,4 @@ export declare const PaginationPages: React.ForwardRefExoticComponent<(Omit<Omit
28
28
  stepNumberPrefix: string;
29
29
  truncationSeparatorAriaLabel?: string;
30
30
  } & InternalNoLinkProps, "ref">) & React.RefAttributes<HTMLOListElement>>;
31
- //# sourceMappingURL=pagination-pages.d.ts.mapmap
31
+ //# sourceMappingURL=pagination-pages.d.ts.map
@@ -1,7 +1,7 @@
1
- import { SelectOption } from '../../select/src/select';
1
+ import { SelectOption } from '../../select/src/select.tsx';
2
2
  type UsePageOptionsHook = {
3
3
  options: SelectOption[];
4
4
  };
5
5
  export declare const usePageOptions: (numberOfPages: number) => UsePageOptionsHook;
6
6
  export {};
7
- //# sourceMappingURL=use-page-options.hook.d.ts.map.map
7
+ //# sourceMappingURL=use-page-options.hook.d.ts.map
@@ -1,7 +1,7 @@
1
- import { SelectOption } from '../../select/src/select';
1
+ import { SelectOption } from '../../select/src/select.tsx';
2
2
  type UsePageSizeOptionsHook = {
3
3
  options: SelectOption[];
4
4
  };
5
5
  export declare const usePageSizeOptions: (availablePageSizes: number[]) => UsePageSizeOptionsHook;
6
6
  export {};
7
- //# sourceMappingURL=use-page-size-options.hook.d.ts.map.map
7
+ //# sourceMappingURL=use-page-size-options.hook.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { BaseProps } from '../../../libraries/common-types/src/common-types.ts';
2
+ import { BaseProps } from '../../../libraries/common-types/src/common-types';
3
3
  export declare const ParagraphVariant: {
4
4
  readonly PARAGRAPH100: "paragraph-100";
5
5
  readonly PARAGRAPH100MEDIUM: "paragraph-100-medium";