@purpur/library 9.1.3 → 9.2.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.
- package/.lintstagedrc.mts +10 -0
- package/CHANGELOG.json +59 -0
- package/CHANGELOG.md +29 -1
- package/dist/LICENSE.txt +66 -8
- package/dist/{ThemeProvider-ipAIFRUi.js → ThemeProvider-5r7lDX-h.js} +2 -2
- package/dist/{ThemeProvider-ipAIFRUi.js.map → ThemeProvider-5r7lDX-h.js.map} +1 -1
- package/dist/{ThemeProvider-BR1hJQOD.mjs → ThemeProvider-bkyFCeo6.mjs} +3 -3
- package/dist/{ThemeProvider-BR1hJQOD.mjs.map → ThemeProvider-bkyFCeo6.mjs.map} +1 -1
- package/dist/accordion-OsA0HvdA.js +2 -0
- package/dist/{accordion-DX8efWOt.js.map → accordion-OsA0HvdA.js.map} +1 -1
- package/dist/{accordion-BKTz9DM6.mjs → accordion-OtFSShSB.mjs} +37 -37
- package/dist/{accordion-BKTz9DM6.mjs.map → accordion-OtFSShSB.mjs.map} +1 -1
- package/dist/accordion.cjs.js +1 -1
- package/dist/accordion.es.js +1 -1
- package/dist/arrow-left.es-CCWJyrcQ.js +2 -0
- package/dist/arrow-left.es-CCWJyrcQ.js.map +1 -0
- package/dist/arrow-left.es-DU-PX-Il.mjs +13 -0
- package/dist/arrow-left.es-DU-PX-Il.mjs.map +1 -0
- package/dist/{autocomplete-B8L-dTmF.mjs → autocomplete-BipmyKf0.mjs} +2 -2
- package/dist/{autocomplete-B8L-dTmF.mjs.map → autocomplete-BipmyKf0.mjs.map} +1 -1
- package/dist/{autocomplete-B421J7CS.js → autocomplete-D9uCJzjY.js} +2 -2
- package/dist/{autocomplete-B421J7CS.js.map → autocomplete-D9uCJzjY.js.map} +1 -1
- package/dist/autocomplete.cjs.js +1 -1
- package/dist/autocomplete.es.js +1 -1
- package/dist/button-4-yWOgtD.mjs +109 -0
- package/dist/{button-Cv7NlYbv.mjs.map → button-4-yWOgtD.mjs.map} +1 -1
- package/dist/button-DmybVApa.js +2 -0
- package/dist/{button-Dqxdc3nC.js.map → button-DmybVApa.js.map} +1 -1
- package/dist/button.cjs.js +1 -1
- package/dist/button.es.js +1 -1
- package/dist/{calendar-CoP1dGpQ.js → calendar-CBBV8n3x.js} +2 -2
- package/dist/{calendar-CoP1dGpQ.js.map → calendar-CBBV8n3x.js.map} +1 -1
- package/dist/{calendar-D_sZrR92.mjs → calendar-DEXw83mu.mjs} +2 -2
- package/dist/{calendar-D_sZrR92.mjs.map → calendar-DEXw83mu.mjs.map} +1 -1
- package/dist/calendar.cjs.js +1 -1
- package/dist/calendar.es.js +1 -1
- package/dist/card-CRHXm5NR.js +2 -0
- package/dist/{card-VMa3cGCP.js.map → card-CRHXm5NR.js.map} +1 -1
- package/dist/{card-CkZQZOz1.mjs → card-DR2hvxjZ.mjs} +75 -75
- package/dist/{card-CkZQZOz1.mjs.map → card-DR2hvxjZ.mjs.map} +1 -1
- package/dist/card.cjs.js +1 -1
- package/dist/card.es.js +1 -1
- package/dist/carousel-BCw-5u92.js +2 -0
- package/dist/carousel-BCw-5u92.js.map +1 -0
- package/dist/carousel-BkxojLwn.mjs +1633 -0
- package/dist/carousel-BkxojLwn.mjs.map +1 -0
- package/dist/carousel.cjs.js +2 -0
- package/dist/carousel.cjs.js.map +1 -0
- package/dist/carousel.es.js +5 -0
- package/dist/carousel.es.js.map +1 -0
- package/dist/{chat-field-yK-TwW0D.mjs → chat-field-CVF4DooY.mjs} +2 -2
- package/dist/{chat-field-yK-TwW0D.mjs.map → chat-field-CVF4DooY.mjs.map} +1 -1
- package/dist/{chat-field-CxOqk0-9.js → chat-field-Wjvh2J6C.js} +2 -2
- package/dist/{chat-field-CxOqk0-9.js.map → chat-field-Wjvh2J6C.js.map} +1 -1
- package/dist/chat-field.cjs.js +1 -1
- package/dist/chat-field.es.js +1 -1
- package/dist/comparison-table-B8w65g43.js +2 -0
- package/dist/comparison-table-B8w65g43.js.map +1 -0
- package/dist/comparison-table-D1zJpdLL.mjs +275 -0
- package/dist/comparison-table-D1zJpdLL.mjs.map +1 -0
- package/dist/comparison-table.cjs.js +2 -0
- package/dist/comparison-table.cjs.js.map +1 -0
- package/dist/comparison-table.es.js +5 -0
- package/dist/comparison-table.es.js.map +1 -0
- package/dist/components/carousel/src/carousel.d.ts +43 -0
- package/dist/components/carousel/src/carousel.d.ts.map +1 -0
- package/dist/components/carousel/src/components/PageIndicator.d.ts +12 -0
- package/dist/components/carousel/src/components/PageIndicator.d.ts.map +1 -0
- package/dist/components/carousel/src/hooks/useAutoplay.d.ts +8 -0
- package/dist/components/carousel/src/hooks/useAutoplay.d.ts.map +1 -0
- package/dist/components/carousel/src/hooks/usePageIndicators.d.ts +9 -0
- package/dist/components/carousel/src/hooks/usePageIndicators.d.ts.map +1 -0
- package/dist/components/carousel/src/hooks/usePrefersReducedMotion.d.ts +2 -0
- package/dist/components/carousel/src/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/components/carousel/src/hooks/usePrevNextButtons.d.ts +11 -0
- package/dist/components/carousel/src/hooks/usePrevNextButtons.d.ts.map +1 -0
- package/dist/components/comparison-table/src/comparison-table.d.ts +64 -0
- package/dist/components/comparison-table/src/comparison-table.d.ts.map +1 -0
- package/dist/components/comparison-table/src/components/Cell/cell.d.ts +7 -0
- package/dist/components/comparison-table/src/components/Cell/cell.d.ts.map +1 -0
- package/dist/components/comparison-table/src/components/LeadCell/lead-cell.d.ts +8 -0
- package/dist/components/comparison-table/src/components/LeadCell/lead-cell.d.ts.map +1 -0
- package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts +26 -0
- package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts.map +1 -0
- package/dist/components/comparison-table/src/components/ScrollProgress/scroll-progress.d.ts +11 -0
- package/dist/components/comparison-table/src/components/ScrollProgress/scroll-progress.d.ts.map +1 -0
- package/dist/components/content-block/src/content-block.d.ts +2 -2
- package/dist/components/content-block/src/content-block.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-combobox.d.ts +2 -1
- package/dist/components/dropdown/src/dropdown-combobox.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-select.d.ts +2 -1
- package/dist/components/dropdown/src/dropdown-select.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-shared.d.ts +12 -1
- package/dist/components/dropdown/src/dropdown-shared.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown.d.ts +1 -1
- package/dist/components/dropdown/src/dropdown.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown.types.d.ts +10 -5
- package/dist/components/dropdown/src/dropdown.types.d.ts.map +1 -1
- package/dist/components/dropdown/src/useDropdown.d.ts +1 -1
- package/dist/components/dropdown/src/useDropdown.d.ts.map +1 -1
- package/dist/components-metadata.js +18 -2
- package/dist/{content-block-Cd7xSE8t.js → content-block-CDRUH0pg.js} +2 -2
- package/dist/content-block-CDRUH0pg.js.map +1 -0
- package/dist/{content-block-BMOvlH7a.mjs → content-block-Dm3L4g8w.mjs} +2 -2
- package/dist/content-block-Dm3L4g8w.mjs.map +1 -0
- package/dist/content-block.cjs.js +1 -1
- package/dist/content-block.es.js +1 -1
- package/dist/{cta-link-BHU6irMG.js → cta-link-B1qMjH76.js} +2 -2
- package/dist/{cta-link-BHU6irMG.js.map → cta-link-B1qMjH76.js.map} +1 -1
- package/dist/{cta-link-B_FfwflB.mjs → cta-link-pwva2f2r.mjs} +43 -43
- package/dist/{cta-link-B_FfwflB.mjs.map → cta-link-pwva2f2r.mjs.map} +1 -1
- package/dist/cta-link.cjs.js +1 -1
- package/dist/cta-link.es.js +1 -1
- package/dist/{date-field-B7ipm5sH.js → date-field-BJaomFjs.js} +2 -2
- package/dist/{date-field-B7ipm5sH.js.map → date-field-BJaomFjs.js.map} +1 -1
- package/dist/{date-field-4tYMPw89.mjs → date-field-D3rTtf9Y.mjs} +2 -2
- package/dist/{date-field-4tYMPw89.mjs.map → date-field-D3rTtf9Y.mjs.map} +1 -1
- package/dist/date-field.cjs.js +1 -1
- package/dist/date-field.es.js +1 -1
- package/dist/{date-picker-D7EisjDG.mjs → date-picker-CpDZ0gK9.mjs} +4 -4
- package/dist/{date-picker-D7EisjDG.mjs.map → date-picker-CpDZ0gK9.mjs.map} +1 -1
- package/dist/{date-picker-BWW4xzyc.js → date-picker-D3uJGCjl.js} +2 -2
- package/dist/{date-picker-BWW4xzyc.js.map → date-picker-D3uJGCjl.js.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/{drawer-Vi9H2O3N.mjs → drawer-BJ8xwriz.mjs} +2 -2
- package/dist/{drawer-Vi9H2O3N.mjs.map → drawer-BJ8xwriz.mjs.map} +1 -1
- package/dist/{drawer-UdK-u7IX.js → drawer-CNs9K8Ca.js} +2 -2
- package/dist/{drawer-UdK-u7IX.js.map → drawer-CNs9K8Ca.js.map} +1 -1
- package/dist/drawer.cjs.js +1 -1
- package/dist/drawer.es.js +1 -1
- package/dist/dropdown-BsqVnd7z.js +2 -0
- package/dist/dropdown-BsqVnd7z.js.map +1 -0
- package/dist/dropdown-TO3Mh0bk.mjs +910 -0
- package/dist/dropdown-TO3Mh0bk.mjs.map +1 -0
- package/dist/dropdown.cjs.js +1 -1
- package/dist/dropdown.es.js +1 -1
- package/dist/{footer-cH07Xqil.mjs → footer-BXs8uzTA.mjs} +4 -4
- package/dist/{footer-cH07Xqil.mjs.map → footer-BXs8uzTA.mjs.map} +1 -1
- package/dist/{footer-BL0ewBZT.js → footer-DF9adlni.js} +2 -2
- package/dist/{footer-BL0ewBZT.js.map → footer-DF9adlni.js.map} +1 -1
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/{hero-banner-yGRM4OlS.js → hero-banner-BfxclVFT.js} +2 -2
- package/dist/{hero-banner-yGRM4OlS.js.map → hero-banner-BfxclVFT.js.map} +1 -1
- package/dist/{hero-banner-BjwICxaJ.mjs → hero-banner-CxPvhXD2.mjs} +3 -3
- package/dist/{hero-banner-BjwICxaJ.mjs.map → hero-banner-CxPvhXD2.mjs.map} +1 -1
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/libraries/library/src/carousel.d.ts +6 -0
- package/dist/libraries/library/src/carousel.d.ts.map +1 -0
- package/dist/libraries/library/src/comparison-table.d.ts +6 -0
- package/dist/libraries/library/src/comparison-table.d.ts.map +1 -0
- package/dist/libraries/library/src/library.d.ts +2 -0
- package/dist/libraries/library/src/library.d.ts.map +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +609 -605
- package/dist/library.es.js.map +1 -1
- package/dist/minus.es-BK9qA9iJ.mjs +13 -0
- package/dist/minus.es-BK9qA9iJ.mjs.map +1 -0
- package/dist/minus.es-DtXArdKK.js +2 -0
- package/dist/minus.es-DtXArdKK.js.map +1 -0
- package/dist/{modal-fTWvPEPW.mjs → modal-DCfN6q8I.mjs} +28 -28
- package/dist/modal-DCfN6q8I.mjs.map +1 -0
- package/dist/{modal-DMeRO1wE.js → modal-DZIdw9xy.js} +2 -2
- package/dist/modal-DZIdw9xy.js.map +1 -0
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{notification-DE1pvk9W.js → notification-BqjaT4E7.js} +2 -2
- package/dist/{notification-DE1pvk9W.js.map → notification-BqjaT4E7.js.map} +1 -1
- package/dist/{notification-BvoL7BIW.mjs → notification-DdRS5BF2.mjs} +2 -2
- package/dist/{notification-BvoL7BIW.mjs.map → notification-DdRS5BF2.mjs.map} +1 -1
- package/dist/{notification-banner-C4gkkSlf.mjs → notification-banner-BOclxqFu.mjs} +2 -2
- package/dist/{notification-banner-C4gkkSlf.mjs.map → notification-banner-BOclxqFu.mjs.map} +1 -1
- package/dist/{notification-banner-COH7wJu2.js → notification-banner-jY8rQH2M.js} +2 -2
- package/dist/{notification-banner-COH7wJu2.js.map → notification-banner-jY8rQH2M.js.map} +1 -1
- package/dist/notification-banner.cjs.js +1 -1
- package/dist/notification-banner.es.js +1 -1
- package/dist/notification.cjs.js +1 -1
- package/dist/notification.es.js +1 -1
- package/dist/pagination-Bwlkvqye.js +2 -0
- package/dist/pagination-Bwlkvqye.js.map +1 -0
- package/dist/{pagination-BdCjh1Pi.mjs → pagination-CVYUacXN.mjs} +235 -242
- package/dist/pagination-CVYUacXN.mjs.map +1 -0
- package/dist/pagination.cjs.js +1 -1
- package/dist/pagination.es.js +1 -1
- package/dist/{popover-lxTyKALA.mjs → popover-Dwqs1wGH.mjs} +2 -2
- package/dist/{popover-lxTyKALA.mjs.map → popover-Dwqs1wGH.mjs.map} +1 -1
- package/dist/{popover-BnUVNqSi.js → popover-XCUa2GfC.js} +2 -2
- package/dist/{popover-BnUVNqSi.js.map → popover-XCUa2GfC.js.map} +1 -1
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{product-card-BU1ThhCx.mjs → product-card-BfB82XpS.mjs} +2 -2
- package/dist/{product-card-BU1ThhCx.mjs.map → product-card-BfB82XpS.mjs.map} +1 -1
- package/dist/{product-card-CNBegEBW.js → product-card-bVQ7JhHj.js} +2 -2
- package/dist/{product-card-CNBegEBW.js.map → product-card-bVQ7JhHj.js.map} +1 -1
- package/dist/product-card.cjs.js +1 -1
- package/dist/product-card.es.js +1 -1
- package/dist/{promotion-card-_bPyVr9t.mjs → promotion-card-BhNw94sC.mjs} +4 -4
- package/dist/{promotion-card-_bPyVr9t.mjs.map → promotion-card-BhNw94sC.mjs.map} +1 -1
- package/dist/{promotion-card-CXNhskRl.js → promotion-card-DqBBt2sz.js} +2 -2
- package/dist/{promotion-card-CXNhskRl.js.map → promotion-card-DqBBt2sz.js.map} +1 -1
- package/dist/promotion-card.cjs.js +1 -1
- package/dist/promotion-card.es.js +1 -1
- package/dist/purpur.css +1 -1
- package/dist/quantity-selector-8AkKNDik.js +2 -0
- package/dist/quantity-selector-8AkKNDik.js.map +1 -0
- package/dist/{quantity-selector-CGhJ2DjO.mjs → quantity-selector-C23kU1hF.mjs} +73 -79
- package/dist/quantity-selector-C23kU1hF.mjs.map +1 -0
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +1 -1
- package/dist/scss/action.scss +1 -0
- package/dist/{search-field-DTuEiK-M.mjs → search-field-CMBDkydb.mjs} +3 -3
- package/dist/{search-field-DTuEiK-M.mjs.map → search-field-CMBDkydb.mjs.map} +1 -1
- package/dist/{search-field-Bst9d-wX.js → search-field-CU_tsmHb.js} +2 -2
- package/dist/{search-field-Bst9d-wX.js.map → search-field-CU_tsmHb.js.map} +1 -1
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/{stepper-k0bX9m4t.mjs → stepper-uBfDdIju.mjs} +3 -3
- package/dist/{stepper-k0bX9m4t.mjs.map → stepper-uBfDdIju.mjs.map} +1 -1
- package/dist/{stepper-ClLQuoXr.js → stepper-w-raIwqJ.js} +2 -2
- package/dist/{stepper-ClLQuoXr.js.map → stepper-w-raIwqJ.js.map} +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-Ddv6BKo9.js → table-BVSBvTYG.js} +2 -2
- package/dist/{table-Ddv6BKo9.js.map → table-BVSBvTYG.js.map} +1 -1
- package/dist/{table-D_XW4smf.mjs → table-CuV3Gda_.mjs} +6 -6
- package/dist/{table-D_XW4smf.mjs.map → table-CuV3Gda_.mjs.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/{text-area-9ggiIWtJ.js → text-area-C6W0fDiQ.js} +2 -2
- package/dist/{text-area-9ggiIWtJ.js.map → text-area-C6W0fDiQ.js.map} +1 -1
- package/dist/{text-area-CpYWt99s.mjs → text-area-DDZ_GQPW.mjs} +3 -3
- package/dist/{text-area-CpYWt99s.mjs.map → text-area-DDZ_GQPW.mjs.map} +1 -1
- package/dist/text-area.cjs.js +1 -1
- package/dist/text-area.es.js +1 -1
- package/dist/{text-field-BQYzwIrG.mjs → text-field-BQfxJobW.mjs} +2 -2
- package/dist/{text-field-BQYzwIrG.mjs.map → text-field-BQfxJobW.mjs.map} +1 -1
- package/dist/{text-field-BwxGMWds.js → text-field-CYJzQG3h.js} +2 -2
- package/dist/{text-field-BwxGMWds.js.map → text-field-CYJzQG3h.js.map} +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.es.js +1 -1
- package/dist/theme.cjs.js +1 -1
- package/dist/theme.es.js +2 -2
- package/dist/tokens/color/variables.css +12 -12
- package/dist/tokens/color/variables.dark.css +13 -13
- package/dist/tokens/color/variables.dark.js +13 -13
- package/dist/tokens/color/variables.dark.json +13 -13
- package/dist/tokens/color/variables.dark.scss +13 -13
- package/dist/tokens/color/variables.js +12 -12
- package/dist/tokens/color/variables.json +12 -12
- package/dist/tokens/color/variables.scss +12 -12
- package/dist/tokens/gradient/variables.dark.js +4 -4
- package/dist/tokens/gradient/variables.dark.json +4 -4
- package/dist/tokens/gradient/variables.dark.scss +4 -4
- package/dist/tokens/gradient/variables.js +4 -4
- package/dist/tokens/gradient/variables.json +4 -4
- package/dist/tokens/gradient/variables.scss +4 -4
- package/dist/tokens.cjs.js +1 -1
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js +41 -41
- package/dist/tokens.es.js.map +1 -1
- package/dist/{tooltip-BatXMflw.js → tooltip-0pLBlDG3.js} +2 -2
- package/dist/{tooltip-BatXMflw.js.map → tooltip-0pLBlDG3.js.map} +1 -1
- package/dist/{tooltip-CZzwHkea.mjs → tooltip-Kom0VfOC.mjs} +2 -2
- package/dist/{tooltip-CZzwHkea.mjs.map → tooltip-Kom0VfOC.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/useColorScheme-0GMDl2GF.js +2 -0
- package/dist/{useColorScheme-DNNu9bz0.js.map → useColorScheme-0GMDl2GF.js.map} +1 -1
- package/dist/{useColorScheme-9rgSgG0N.mjs → useColorScheme-Di_Q0JR4.mjs} +2 -2
- package/dist/{useColorScheme-9rgSgG0N.mjs.map → useColorScheme-Di_Q0JR4.mjs.map} +1 -1
- package/dist/{variables-BVgnpUH9.mjs → variables-CKp4o9Tn.mjs} +2 -2
- package/dist/{variables-BVgnpUH9.mjs.map → variables-CKp4o9Tn.mjs.map} +1 -1
- package/dist/{variables-CMzMXeor.js → variables-DH61hVNE.js} +2 -2
- package/dist/{variables-CMzMXeor.js.map → variables-DH61hVNE.js.map} +1 -1
- package/package.json +42 -40
- package/src/aliases.ts +11 -0
- package/src/carousel.ts +6 -0
- package/src/comparison-table.ts +6 -0
- package/src/entries.js +2 -0
- package/src/library.ts +4 -0
- package/tokens/color/variables.css +12 -12
- package/tokens/color/variables.dark.css +13 -13
- package/tokens/color/variables.dark.js +13 -13
- package/tokens/color/variables.dark.json +13 -13
- package/tokens/color/variables.dark.scss +13 -13
- package/tokens/color/variables.js +12 -12
- package/tokens/color/variables.json +12 -12
- package/tokens/color/variables.scss +12 -12
- package/tokens/gradient/variables.dark.js +4 -4
- package/tokens/gradient/variables.dark.json +4 -4
- package/tokens/gradient/variables.dark.scss +4 -4
- package/tokens/gradient/variables.js +4 -4
- package/tokens/gradient/variables.json +4 -4
- package/tokens/gradient/variables.scss +4 -4
- package/dist/accordion-DX8efWOt.js +0 -2
- package/dist/button-Cv7NlYbv.mjs +0 -109
- package/dist/button-Dqxdc3nC.js +0 -2
- package/dist/card-VMa3cGCP.js +0 -2
- package/dist/content-block-BMOvlH7a.mjs.map +0 -1
- package/dist/content-block-Cd7xSE8t.js.map +0 -1
- package/dist/dropdown-BQOY21kI.js +0 -2
- package/dist/dropdown-BQOY21kI.js.map +0 -1
- package/dist/dropdown-CBYTBaMW.mjs +0 -779
- package/dist/dropdown-CBYTBaMW.mjs.map +0 -1
- package/dist/modal-DMeRO1wE.js.map +0 -1
- package/dist/modal-fTWvPEPW.mjs.map +0 -1
- package/dist/pagination-BdCjh1Pi.mjs.map +0 -1
- package/dist/pagination-C2A8NPol.js +0 -2
- package/dist/pagination-C2A8NPol.js.map +0 -1
- package/dist/quantity-selector-BV7QwVlT.js +0 -2
- package/dist/quantity-selector-BV7QwVlT.js.map +0 -1
- package/dist/quantity-selector-CGhJ2DjO.mjs.map +0 -1
- package/dist/useColorScheme-DNNu9bz0.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-CBYTBaMW.mjs","sources":["../../../components/dropdown/src/dropdown-shared.tsx","../../../components/dropdown/src/useDropdownFilter.ts","../../../components/dropdown/src/useDropdownInput.ts","../../../components/dropdown/src/dropdown-combobox.tsx","../../../components/dropdown/src/useDropdownHighlight.ts","../../../components/dropdown/src/useOnClickOutside.ts","../../../components/dropdown/src/useDropdown.ts","../../../components/dropdown/src/dropdown-select.tsx","../../../components/dropdown/src/dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Checkbox } from \"@purpur/checkbox\";\nimport { DismissableChipGroup } from \"@purpur/dismissable-chip-group\";\nimport { FieldErrorText } from \"@purpur/field-error-text\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { IconCheckCircleFilled } from \"@purpur/icon/check-circle-filled\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Label } from \"@purpur/label\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./dropdown.module.scss\";\nimport type { DropdownOption } from \"./dropdown.types\";\n\nconst cx = c.bind(styles);\nexport const rootClassName = \"purpur-dropdown\";\n\ntype GetTestId = (name: string) => string | undefined;\n\ntype DropdownLabelProps = {\n fieldId: string;\n htmlForSuffix?: string;\n label?: string;\n getTestId: GetTestId;\n disabled: boolean;\n negative: boolean;\n required: boolean;\n};\n\nexport const DropdownLabel = ({\n fieldId,\n htmlForSuffix,\n label,\n getTestId,\n disabled,\n negative,\n required,\n}: DropdownLabelProps) => {\n if (!label) return null;\n\n return (\n <Label\n htmlFor={htmlForSuffix ? `${fieldId}-${htmlForSuffix}` : fieldId}\n className={cx(`${rootClassName}__label`)}\n data-testid={getTestId(\"label\")}\n disabled={disabled}\n negative={negative}\n >\n {required && <span aria-hidden>*</span>}\n {label}\n </Label>\n );\n};\n\ntype DropdownEndAdornmentsProps = {\n getTestId: GetTestId;\n loading?: boolean;\n disabled: boolean;\n negative: boolean;\n isValid: boolean;\n isOpen?: boolean;\n readOnly?: boolean;\n showChevronOpen: boolean;\n};\n\nexport const DropdownEndAdornments = ({\n getTestId,\n loading,\n disabled,\n negative,\n isValid,\n isOpen,\n readOnly,\n showChevronOpen,\n}: DropdownEndAdornmentsProps) => (\n <span className={cx(`${rootClassName}__end-adornments`)}>\n {loading ? (\n <Spinner\n disabled={disabled}\n size=\"xxs\"\n negative={negative}\n data-testid={getTestId(\"spinner\")}\n />\n ) : (\n <>\n {isValid && (\n <IconCheckCircleFilled\n data-testid={getTestId(\"valid-icon\")}\n className={cx(`${rootClassName}__valid-icon`)}\n />\n )}\n <IconChevronDown\n className={cx(`${rootClassName}__chevron-icon`, {\n [`${rootClassName}__chevron-icon--open`]: showChevronOpen && isOpen,\n [`${rootClassName}__chevron-icon--disabled`]: disabled,\n [`${rootClassName}__chevron-icon--readonly`]: readOnly && !disabled,\n [`${rootClassName}__chevron-icon--is-valid`]: isValid,\n [`${rootClassName}__chevron-icon--negative`]: negative,\n })}\n data-testid={getTestId(\"dropdown-icon\")}\n size=\"sm\"\n />\n </>\n )}\n </span>\n);\n\ntype DropdownTagsProps = {\n selectedItems: DropdownOption[];\n getTestId: GetTestId;\n disabled: boolean;\n onRemove: (option: DropdownOption) => void;\n isSelect?: boolean;\n};\n\nexport const DropdownTags = ({\n selectedItems,\n getTestId,\n disabled,\n onRemove,\n isSelect,\n}: DropdownTagsProps) => {\n if (!selectedItems.length) return null;\n\n return (\n <DismissableChipGroup\n className={cx(`${rootClassName}__chip-group`, {\n [`${rootClassName}__chip-group--select`]: isSelect,\n })}\n data-testid={getTestId(\"tags\")}\n size=\"sm\"\n >\n {selectedItems.map((item) => (\n <DismissableChipGroup.Item\n key={item.id}\n id={item.id}\n data-testid={getTestId(`tag-${item.id}`)}\n aria-label={`Remove ${item.label}`}\n onDismiss={() => {\n onRemove(item);\n }}\n disabled={disabled}\n >\n {item.label}\n </DismissableChipGroup.Item>\n ))}\n </DismissableChipGroup>\n );\n};\n\ntype DropdownFooterProps = {\n errorText?: string;\n helperText?: string;\n helperTextId: string;\n negative: boolean;\n};\n\nexport const DropdownFooter = ({\n errorText,\n helperText,\n helperTextId,\n negative,\n}: DropdownFooterProps) => (\n <>\n {errorText && <FieldErrorText negative={negative}>{errorText}</FieldErrorText>}\n {helperText && !errorText && (\n <FieldHelperText id={helperTextId} negative={negative}>\n {helperText}\n </FieldHelperText>\n )}\n </>\n);\n\ntype DropdownListboxItemsProps = {\n optionsToShow: DropdownOption[];\n getListboxItemProps: (option: DropdownOption, index: number) => Record<string, unknown>;\n multiple?: boolean;\n fieldId: string;\n noOptionsText?: React.ReactNode;\n};\n\nexport const DropdownListboxItems = ({\n optionsToShow,\n getListboxItemProps,\n multiple,\n fieldId,\n noOptionsText,\n}: DropdownListboxItemsProps) => {\n if (noOptionsText !== undefined && !optionsToShow.length) {\n return <Listbox.Item noninteractive>{noOptionsText}</Listbox.Item>;\n }\n\n return optionsToShow.map((option, index) => {\n const { key, selected, ...itemProps } = getListboxItemProps(option, index);\n\n if (multiple) {\n return (\n <Listbox.Item\n key={key as string}\n {...itemProps}\n className={cx(`${rootClassName}__checkbox-item-multiple`)}\n selected={!!selected}\n hideSelectedIcon\n >\n <span className={cx(`${rootClassName}__checkbox-container`)}>\n <Checkbox id={`${fieldId}-checkbox-${option.id}`} checked={!!selected} aria-hidden />\n {option.label}\n </span>\n </Listbox.Item>\n );\n }\n\n return (\n <Listbox.Item key={key as string} {...itemProps} selected={!!selected}>\n {option.label}\n </Listbox.Item>\n );\n });\n};\n\nexport { cx };\n","import type { DropdownOption } from \"./dropdown.types\";\n\nconst filterOptions = (\n options: DropdownOption[],\n searchTerm: string | undefined,\n filterOption?: (inputValue: string | undefined, option: DropdownOption) => boolean\n): DropdownOption[] => {\n if (filterOption) {\n return options.filter((option) => filterOption(searchTerm, option));\n }\n if (!searchTerm) return options;\n const chunks = searchTerm.toUpperCase().split(\" \");\n return options.filter((option) =>\n chunks.every((chunk) => (option.value || option.label).toUpperCase().includes(chunk))\n );\n};\n\nexport const getFilteredOptions = ({\n options,\n searchTerm,\n filterOption,\n selectedOption,\n multiple,\n}: {\n options: DropdownOption[];\n searchTerm: string | undefined;\n filterOption?: (inputValue: string | undefined, option: DropdownOption) => boolean;\n selectedOption?: DropdownOption;\n multiple: boolean;\n}): DropdownOption[] => {\n if (!multiple && selectedOption && selectedOption.label === searchTerm) {\n return options;\n }\n return filterOptions(options, searchTerm, filterOption);\n};\n","import { useState } from \"react\";\n\nimport type { DropdownOption } from \"./dropdown.types\";\n\nexport type UseDropdownInputParams = {\n controlledInputValue?: string;\n defaultInputValue?: string;\n selectedOption?: DropdownOption;\n onInputChange?: (value: string) => void;\n};\n\nexport const useDropdownInput = ({\n controlledInputValue,\n defaultInputValue,\n selectedOption,\n onInputChange,\n}: UseDropdownInputParams) => {\n const [internalInputValue, setInternalInputValue] = useState(\n (typeof controlledInputValue === \"string\"\n ? controlledInputValue\n : defaultInputValue ?? selectedOption?.label) ?? \"\"\n );\n\n const displayInputValue =\n typeof controlledInputValue === \"string\" ? controlledInputValue : internalInputValue;\n\n const populateInputField = (value: string) => {\n onInputChange?.(value);\n setInternalInputValue(value);\n };\n\n return {\n displayInputValue,\n populateInputField,\n };\n};\n","import React, { forwardRef, useId } from \"react\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { useAutocomplete } from \"@purpur/use-autocomplete\";\n\nimport type { ComboboxProps, DropdownOption } from \"./dropdown.types\";\nimport {\n cx,\n DropdownEndAdornments,\n DropdownFooter,\n DropdownLabel,\n DropdownListboxItems,\n DropdownTags,\n rootClassName,\n} from \"./dropdown-shared\";\nimport { getFilteredOptions } from \"./useDropdownFilter\";\nimport { useDropdownInput } from \"./useDropdownInput\";\n\nexport const DropdownCombobox = forwardRef<HTMLDivElement, ComboboxProps>((props, ref) => {\n const {\n id: propId,\n label,\n options,\n className,\n errorText,\n helperText,\n placeholder,\n negative = false,\n readOnly = false,\n disabled = false,\n required = false,\n valid,\n loading,\n multiple = false,\n selectedOption,\n selectedOptions = [],\n onSelect,\n openOnFocus = false,\n listboxMaxHeight,\n listboxLabel,\n filterOption,\n inputValue,\n defaultInputValue,\n onInputChange,\n noOptionsText,\n highlightFirstOption = false,\n [\"data-testid\"]: dataTestId,\n } = props;\n\n const randomId = useId();\n const fieldId = propId ?? randomId;\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isValid = !!valid && !errorText;\n const helperTextId = `${fieldId}-helper-text`;\n\n const selectedItems = multiple ? selectedOptions : selectedOption ? [selectedOption] : [];\n\n const { displayInputValue, populateInputField } = useDropdownInput({\n controlledInputValue: inputValue,\n defaultInputValue,\n selectedOption,\n onInputChange,\n });\n\n const optionsToShow = getFilteredOptions({\n options,\n searchTerm: displayInputValue,\n filterOption,\n selectedOption,\n multiple,\n });\n\n const handleAutocompleteSelect = (option: DropdownOption) => {\n if (multiple) {\n const isAlreadySelected = selectedItems.some((o) => o.id === option.id);\n const next = isAlreadySelected\n ? selectedItems.filter((o) => o.id !== option.id)\n : [...selectedItems, option];\n onSelect?.(option, next);\n populateInputField(\"\");\n } else {\n onSelect?.(option, [option]);\n populateInputField(option.label);\n }\n };\n\n const {\n rootRef,\n inputRef,\n inputProps,\n listboxProps,\n getListboxItemProps,\n isOpen,\n openListbox,\n anchorStyle,\n } = useAutocomplete({\n id: fieldId,\n options: optionsToShow,\n listboxLabel: listboxLabel || label || \"Options\",\n selectedOption: multiple ? undefined : selectedOption,\n disabled,\n readOnly,\n openOnFocus,\n listboxMaxHeight,\n highlightFirstOption,\n closeOnSelect: !multiple,\n noOptionsText,\n onSelect: handleAutocompleteSelect,\n [\"data-testid\"]: dataTestId,\n });\n\n const setRootRef = (node: HTMLDivElement | null) => {\n (rootRef as React.RefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.RefObject<HTMLDivElement | null>).current = node;\n };\n\n // For multi-select the hook doesn't know about selectedOptions, so inject\n // the correct `selected` state here based on selectedItems.\n const getListboxItemPropsWithSelection = (option: DropdownOption, index: number) => {\n const props = getListboxItemProps(option, index);\n if (multiple) {\n const isSelected = selectedItems.some((o) => o.id === option.id);\n return { ...props, selected: isSelected, \"aria-selected\": isSelected };\n }\n return props;\n };\n\n const handleRemoveTag = (option: DropdownOption) => {\n const next = selectedItems.filter((o) => o.id !== option.id);\n onSelect?.(option, next);\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (\n multiple &&\n event.key === \"Backspace\" &&\n event.currentTarget.value === \"\" &&\n selectedItems.length > 0\n ) {\n handleRemoveTag(selectedItems[selectedItems.length - 1]);\n }\n (inputProps as React.InputHTMLAttributes<HTMLInputElement>)?.onKeyDown?.(event);\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n populateInputField(e.target.value);\n if (!isOpen) {\n openListbox();\n }\n };\n\n const wrapperClassName = cx(rootClassName, className, {\n [`${rootClassName}--negative`]: negative,\n });\n\n return (\n <div ref={setRootRef} className={wrapperClassName}>\n <DropdownLabel\n fieldId={fieldId}\n htmlForSuffix=\"input\"\n label={label}\n getTestId={getTestId}\n disabled={disabled}\n negative={negative}\n required={required}\n />\n <div className={cx(`${rootClassName}__field-row`)}>\n <div\n className={cx(`${rootClassName}__combobox-container`, {\n [`${rootClassName}__combobox-container--error`]: !!errorText,\n [`${rootClassName}__combobox-container--is-valid`]: isValid,\n [`${rootClassName}__combobox-container--negative`]: negative,\n [`${rootClassName}__combobox-container--disabled`]: disabled,\n [`${rootClassName}__combobox-container--readonly`]: readOnly && !disabled,\n })}\n style={anchorStyle}\n >\n {multiple && (\n <DropdownTags\n selectedItems={selectedItems}\n getTestId={getTestId}\n disabled={disabled}\n onRemove={handleRemoveTag}\n />\n )}\n <input\n {...(inputProps as React.InputHTMLAttributes<HTMLInputElement>)}\n ref={inputRef as React.RefObject<HTMLInputElement>}\n id={`${fieldId}-input`}\n data-testid={getTestId(\"input\")}\n onKeyDown={handleInputKeyDown}\n onChange={handleInputChange}\n value={displayInputValue}\n placeholder={placeholder}\n className={cx(`${rootClassName}__input`, {\n [`${rootClassName}__input--negative`]: negative,\n })}\n aria-describedby={helperTextId}\n aria-invalid={!!errorText}\n disabled={disabled}\n readOnly={readOnly}\n />\n <DropdownEndAdornments\n getTestId={getTestId}\n loading={loading}\n disabled={disabled}\n negative={negative}\n isValid={isValid}\n isOpen={isOpen}\n showChevronOpen\n />\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n />\n </div>\n </div>\n {isOpen && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {DropdownListboxItems({\n optionsToShow,\n getListboxItemProps: getListboxItemPropsWithSelection,\n multiple,\n fieldId,\n noOptionsText,\n })}\n </Listbox>\n )}\n <DropdownFooter\n errorText={errorText}\n helperText={helperText}\n helperTextId={helperTextId}\n negative={negative}\n />\n </div>\n );\n});\n\nDropdownCombobox.displayName = \"DropdownCombobox\";\n","import { useRef, useState } from \"react\";\n\nimport type { DropdownOption } from \"./dropdown.types\";\n\nexport type HighlightedOption = DropdownOption & { isSetByClickEvent?: boolean };\n\nexport type UseDropdownHighlightParams = {\n options: DropdownOption[];\n highlightFirstOption: boolean;\n};\n\nexport const useDropdownHighlight = ({\n options,\n highlightFirstOption,\n}: UseDropdownHighlightParams) => {\n const listboxRef = useRef<HTMLUListElement>(null);\n const optionRefs = useRef<Record<string, HTMLLIElement>>({});\n\n const [highlightedOption, setHighlightedOption] = useState<HighlightedOption | undefined>(\n highlightFirstOption ? options[0] : undefined\n );\n\n const scrollOptionIntoView = (optionEl: HTMLLIElement | undefined) => {\n if (optionEl) {\n const optionRect = optionEl.getBoundingClientRect();\n const listboxRect = listboxRef.current?.getBoundingClientRect() || { top: 0, bottom: 0 };\n const isOutside = optionRect.top < listboxRect.top || optionRect.bottom > listboxRect.bottom;\n if (isOutside) {\n optionEl.scrollIntoView({ block: \"nearest\" });\n }\n }\n };\n\n const findNextOption = (\n direction: \"ArrowUp\" | \"ArrowDown\",\n optionsToShow: DropdownOption[]\n ): DropdownOption | undefined => {\n const enabledList = optionsToShow.filter((o) => !o.disabled);\n if (!enabledList.length) return undefined;\n\n const currentIndex = highlightedOption\n ? enabledList.findIndex((o) => o.id === highlightedOption.id)\n : -1;\n\n if (direction === \"ArrowDown\") {\n return enabledList[(currentIndex + 1) % enabledList.length];\n }\n return enabledList[(currentIndex - 1 + enabledList.length) % enabledList.length];\n };\n\n const highlightOption = (option: DropdownOption | undefined) => {\n setHighlightedOption(option ? { ...option } : undefined);\n if (option) scrollOptionIntoView(optionRefs.current[option.id]);\n };\n\n const highlightByClick = (option: DropdownOption) => {\n if (option.id !== highlightedOption?.id) {\n setHighlightedOption({ ...option, isSetByClickEvent: true });\n }\n };\n\n const highlightSelected = (option: DropdownOption, eventType: \"CLICK\" | \"KEYBOARD\") => {\n requestAnimationFrame(() => {\n const isSetByClickEvent = eventType === \"CLICK\";\n setHighlightedOption({ ...option, isSetByClickEvent });\n scrollOptionIntoView(optionRefs.current[option.id]);\n });\n };\n\n const resetHighlight = () => {\n setHighlightedOption(undefined);\n };\n\n return {\n highlightedOption,\n listboxRef,\n optionRefs,\n findNextOption,\n highlightOption,\n highlightByClick,\n highlightSelected,\n resetHighlight,\n };\n};\n","import { useCallback, useEffect } from \"react\";\n\nexport const useOnClickOutside = (element: HTMLElement | null, callback: () => void) => {\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (element && !element.contains(event.target as Node)) {\n callback();\n }\n },\n [callback, element]\n );\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [handleClickOutside]);\n};\n","import type { CSSProperties } from \"react\";\nimport { useCallback, useId, useRef, useState } from \"react\";\nimport type { ListboxItemProps, ListboxProps } from \"@purpur/listbox\";\n\nimport type { DropdownOption } from \"./dropdown.types\";\nimport { getFilteredOptions } from \"./useDropdownFilter\";\nimport { useDropdownHighlight } from \"./useDropdownHighlight\";\nimport { useDropdownInput } from \"./useDropdownInput\";\nimport { useOnClickOutside } from \"./useOnClickOutside\";\n\n// ── Hook params ────────────────────────────────────────────────────────\n\nexport type UseDropdownParams = {\n id: string;\n variant: \"select\" | \"combobox\";\n options: DropdownOption[];\n listboxLabel: string;\n multiple?: boolean;\n\n // Selection\n selectedOption?: DropdownOption;\n selectedOptions?: DropdownOption[];\n onSelect?: (option: DropdownOption | undefined, selectedOptions: DropdownOption[]) => void;\n\n // Combobox-specific\n filterOption?: (inputValue: string | undefined, option: DropdownOption) => boolean;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n noOptionsText?: React.ReactNode;\n highlightFirstOption?: boolean;\n\n // Shared behaviour\n openOnFocus?: boolean;\n listboxMaxHeight?: string | number;\n disabled?: boolean;\n readOnly?: boolean;\n\n [\"data-testid\"]?: string;\n};\n\n// ── Return type ────────────────────────────────────────────────────────\n\nexport type UseDropdownReturn = {\n rootRef: React.RefObject<HTMLDivElement | null>;\n triggerContainerProps: Record<string, unknown> | null;\n triggerProps: Record<string, unknown>;\n inputProps: Record<string, unknown> | null;\n listboxProps: ListboxProps;\n getListboxItemProps: (option: DropdownOption, index: number) => ListboxItemProps;\n optionsToShow: DropdownOption[];\n isOpen: boolean;\n highlightedOption: DropdownOption | undefined;\n selectedItems: DropdownOption[];\n anchorStyle: CSSProperties;\n};\n\n// ── Hook ───────────────────────────────────────────────────────────────\n\nexport const useDropdown = ({\n id,\n variant,\n options,\n listboxLabel,\n multiple = false,\n selectedOption,\n selectedOptions = [],\n onSelect,\n filterOption,\n inputValue: controlledInputValue,\n defaultInputValue,\n onInputChange,\n noOptionsText,\n highlightFirstOption = false,\n openOnFocus = false,\n listboxMaxHeight,\n disabled = false,\n readOnly = false,\n [\"data-testid\"]: dataTestId,\n}: UseDropdownParams): UseDropdownReturn => {\n const isCombobox = variant === \"combobox\";\n const uniqueId = useId();\n\n // ── Refs ─────────────────────────────────────────────────────────────\n const rootRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // ── Sub-hooks ────────────────────────────────────────────────────────\n const highlight = useDropdownHighlight({ options, highlightFirstOption });\n const { displayInputValue, populateInputField } = useDropdownInput({\n controlledInputValue,\n defaultInputValue,\n selectedOption,\n onInputChange,\n });\n\n // ── Open / close ────────────────────────────────────────────────────\n const [isOpen, setIsOpen] = useState(false);\n\n const closeListbox = () => {\n setIsOpen(false);\n highlight.resetHighlight();\n };\n\n useOnClickOutside(rootRef.current, closeListbox);\n\n const openListbox = ({ eventType }: { eventType: \"CLICK\" | \"KEYBOARD\" }) => {\n setIsOpen(true);\n const current = multiple ? undefined : selectedOption;\n if (current) {\n highlight.highlightSelected(current, eventType);\n }\n };\n\n // ── Derived state ───────────────────────────────────────────────────\n const resolvedSelected = multiple ? selectedOptions : selectedOption ? [selectedOption] : [];\n\n const optionsToShow = isCombobox\n ? getFilteredOptions({\n options,\n searchTerm: displayInputValue,\n filterOption,\n selectedOption,\n multiple,\n })\n : options;\n\n const showListbox = isOpen && (!!optionsToShow.length || !!noOptionsText);\n\n // ── Helpers ──────────────────────────────────────────────────────────\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n\n // ── Selection ────────────────────────────────────────────────────────\n const selectOption = (option: DropdownOption | undefined) => {\n if (!option || option.disabled) return;\n\n if (multiple) {\n const isAlreadySelected = resolvedSelected.some((o) => o.id === option.id);\n const next = isAlreadySelected\n ? resolvedSelected.filter((o) => o.id !== option.id)\n : [...resolvedSelected, option];\n onSelect?.(option, next);\n if (isCombobox) {\n populateInputField(\"\");\n inputRef.current?.focus();\n }\n } else {\n onSelect?.(option, [option]);\n if (isCombobox) {\n populateInputField(option.label);\n }\n closeListbox();\n (isCombobox ? inputRef : triggerRef).current?.focus();\n }\n };\n\n // ── Navigation ───────────────────────────────────────────────────────\n const highlightNextOption = (direction: \"ArrowUp\" | \"ArrowDown\") => {\n if (!showListbox) openListbox({ eventType: \"KEYBOARD\" });\n const next = highlight.findNextOption(direction, optionsToShow);\n highlight.highlightOption(next);\n };\n\n // ── Keyboard ─────────────────────────────────────────────────────────\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled || readOnly) return;\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault();\n highlightNextOption(event.key);\n break;\n case \"Enter\": {\n event.preventDefault();\n if (showListbox && highlight.highlightedOption) {\n selectOption(highlight.highlightedOption);\n } else if (!showListbox) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n break;\n }\n case \" \": {\n if (!isCombobox) {\n event.preventDefault();\n if (showListbox && highlight.highlightedOption) {\n selectOption(highlight.highlightedOption);\n } else if (!showListbox) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n }\n break;\n }\n case \"Escape\":\n event.preventDefault();\n closeListbox();\n break;\n case \"Tab\":\n closeListbox();\n break;\n case \"Home\":\n case \"End\":\n if (isCombobox) closeListbox();\n break;\n }\n };\n\n // ── Combobox input handlers ─────────────────────────────────────────\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n populateInputField(e.target.value);\n highlight.resetHighlight();\n if (!isOpen) openListbox({ eventType: \"KEYBOARD\" });\n };\n\n const handleInputMouseDown = () => {\n if (disabled || readOnly) return;\n isOpen ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleInputFocus = () => {\n if (!isOpen && openOnFocus && !disabled && !readOnly) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n inputRef.current?.select();\n };\n\n const handleInputBlur = () => {\n setTimeout(() => {\n const activeEl = document.activeElement;\n // Only close when focus has moved to a real element outside the dropdown.\n // Guarding against document.body prevents a false-positive close when a\n // screen reader navigates with its virtual cursor: the input blurs but no\n // DOM element receives physical focus (activeElement falls back to body).\n if (\n activeEl !== document.body &&\n !inputRef.current?.contains(activeEl) &&\n !highlight.listboxRef.current?.contains(activeEl) &&\n !rootRef.current?.contains(activeEl)\n ) {\n closeListbox();\n if (isCombobox && !multiple) {\n populateInputField(selectedOption ? selectedOption.label : \"\");\n }\n }\n });\n };\n\n // ── Select trigger handlers ─────────────────────────────────────────\n const handleTriggerClick = () => {\n if (disabled || readOnly) return;\n isOpen ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleTriggerContainerClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n if (disabled || readOnly) return;\n\n const clickedButton = (event.target as HTMLElement).closest(\"button\");\n if (clickedButton && clickedButton !== triggerRef.current) {\n return;\n }\n\n handleTriggerClick();\n };\n\n const handleTriggerFocus = () => {\n if (!isOpen && openOnFocus && !disabled && !readOnly) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n };\n\n // ── Build props ──────────────────────────────────────────────────────\n const listboxId = `${id}-listbox`;\n const createListboxItemId = (option: DropdownOption) => `${id}-listbox-item-${option.id}`;\n const anchorName = `--purpur-dropdown-${uniqueId.replace(/:/g, \"\")}`;\n const anchorStyle = { anchorName } as CSSProperties;\n const triggerContainerProps: Record<string, unknown> | null = isCombobox\n ? null\n : {\n onClick: handleTriggerContainerClick,\n };\n\n // ── Popover sync ────────────────────────────────────────────────────\n const listboxCallbackRef = useCallback(\n (node: HTMLUListElement | null) => {\n (highlight.listboxRef as React.MutableRefObject<HTMLUListElement | null>).current = node;\n if (node && typeof node.showPopover === \"function\") {\n try {\n node.showPopover();\n } catch {\n // Popover not supported or already open\n }\n }\n },\n [highlight.listboxRef]\n );\n\n const listboxProps = {\n \"aria-label\": listboxLabel,\n \"aria-expanded\": showListbox,\n \"data-testid\": getTestId(\"listbox\"),\n id: listboxId,\n ref: listboxCallbackRef,\n onMouseLeave: () => highlight.resetHighlight(),\n popover: \"manual\",\n style: {\n ...(listboxMaxHeight\n ? {\n maxHeight:\n typeof listboxMaxHeight === \"number\" ? `${listboxMaxHeight}px` : listboxMaxHeight,\n }\n : {}),\n positionAnchor: anchorName,\n } as CSSProperties,\n } as ListboxProps;\n\n const getListboxItemProps = (option: DropdownOption, index: number): ListboxItemProps => {\n const isSelected = resolvedSelected.some((o) => o.id === option.id);\n const { highlightedOption } = highlight;\n\n const highlighted =\n (option.id === highlightedOption?.id ||\n (highlightFirstOption && !highlightedOption && index === 0)) &&\n !highlightedOption?.isSetByClickEvent;\n\n return {\n \"data-testid\": getTestId(`listbox-item-${option.id}`),\n id: createListboxItemId(option),\n key: option.id,\n onMouseMove: () => highlight.highlightByClick(option),\n onMouseUp: () => selectOption(option),\n ref: (el) => {\n if (el) highlight.optionRefs.current[option.id] = el;\n },\n tabIndex: -1,\n selected: isSelected,\n disabled: option.disabled,\n highlighted,\n hovered: option.id === highlightedOption?.id && !!highlightedOption?.isSetByClickEvent,\n \"aria-selected\": isSelected,\n };\n };\n\n const triggerProps: Record<string, unknown> = isCombobox\n ? {}\n : {\n ref: triggerRef,\n type: \"button\" as const,\n role: \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": showListbox,\n \"aria-controls\": listboxId,\n \"aria-disabled\": disabled,\n \"data-testid\": getTestId(\"trigger\"),\n id: `${id}-trigger`,\n onKeyDown: handleKeyDown,\n onFocus: handleTriggerFocus,\n disabled,\n tabIndex: disabled ? -1 : 0,\n style: anchorStyle,\n };\n\n const inputProps: Record<string, unknown> | null = isCombobox\n ? {\n ref: inputRef,\n role: \"combobox\",\n \"aria-autocomplete\": \"list\" as const,\n \"aria-expanded\": showListbox,\n \"aria-controls\": listboxId,\n \"aria-activedescendant\": highlight.highlightedOption\n ? createListboxItemId(highlight.highlightedOption)\n : undefined,\n \"data-testid\": getTestId(\"input\"),\n autoComplete: \"off\",\n id: `${id}-input`,\n type: \"text\",\n value: displayInputValue,\n onChange: handleInputChange,\n onMouseDown: handleInputMouseDown,\n onFocus: handleInputFocus,\n onBlur: handleInputBlur,\n onKeyDown: handleKeyDown,\n disabled,\n readOnly,\n }\n : null;\n\n return {\n rootRef,\n triggerContainerProps,\n triggerProps,\n inputProps,\n listboxProps,\n getListboxItemProps,\n optionsToShow,\n isOpen: showListbox,\n highlightedOption: highlight.highlightedOption,\n selectedItems: resolvedSelected,\n anchorStyle,\n };\n};\n","import React, { forwardRef, useId } from \"react\";\nimport { Listbox } from \"@purpur/listbox\";\n\nimport type { DropdownOption, SelectProps } from \"./dropdown.types\";\nimport {\n cx,\n DropdownEndAdornments,\n DropdownFooter,\n DropdownLabel,\n DropdownListboxItems,\n DropdownTags,\n rootClassName,\n} from \"./dropdown-shared\";\nimport { useDropdown } from \"./useDropdown\";\n\nexport const DropdownSelect = forwardRef<HTMLDivElement, SelectProps>((props, ref) => {\n const {\n id: propId,\n label,\n options,\n className,\n errorText,\n helperText,\n placeholder,\n negative = false,\n readOnly = false,\n disabled = false,\n required = false,\n valid = false,\n loading = false,\n multiple = false,\n selectedOption,\n selectedOptions = [],\n onSelect,\n openOnFocus = false,\n listboxMaxHeight,\n listboxLabel,\n [\"data-testid\"]: dataTestId,\n } = props;\n\n const randomId = useId();\n const fieldId = propId ?? randomId;\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isValid = !!valid && !errorText;\n const helperTextId = `${fieldId}-helper-text`;\n\n const dropdown = useDropdown({\n id: fieldId,\n variant: \"select\",\n options,\n listboxLabel: listboxLabel || label || \"Options\",\n multiple,\n selectedOption,\n selectedOptions,\n onSelect,\n openOnFocus,\n listboxMaxHeight,\n disabled,\n readOnly,\n [\"data-testid\"]: dataTestId,\n });\n\n const setRootRef = (node: HTMLDivElement | null) => {\n (dropdown.rootRef as React.RefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.RefObject<HTMLDivElement | null>).current = node;\n };\n\n const {\n triggerContainerProps,\n triggerProps,\n listboxProps,\n getListboxItemProps,\n optionsToShow,\n isOpen,\n selectedItems,\n anchorStyle,\n } = dropdown;\n\n const triggerButtonProps = {\n ...(triggerProps as React.ButtonHTMLAttributes<HTMLButtonElement>),\n };\n delete triggerButtonProps.style;\n\n const handleRemoveTag = (option: DropdownOption) => {\n const next = selectedItems.filter((o) => o.id !== option.id);\n onSelect?.(option, next);\n };\n\n const displayLabel = multiple\n ? selectedItems.length === 0\n ? placeholder || \"\"\n : \"\"\n : selectedOption?.label || placeholder || \"\";\n\n const wrapperClassName = cx(rootClassName, className, {\n [`${rootClassName}--negative`]: negative,\n });\n\n return (\n <div ref={setRootRef} className={wrapperClassName}>\n <DropdownLabel\n fieldId={fieldId}\n htmlForSuffix=\"trigger\"\n label={label}\n getTestId={getTestId}\n disabled={disabled}\n negative={negative}\n required={required}\n />\n <div className={cx(`${rootClassName}__field-row`)}>\n <div\n {...(triggerContainerProps as React.HTMLAttributes<HTMLDivElement>)}\n className={cx(`${rootClassName}__trigger-container`, {\n [`${rootClassName}__trigger-container--error`]: !!errorText,\n [`${rootClassName}__trigger-container--is-valid`]: isValid,\n [`${rootClassName}__trigger-container--negative`]: negative,\n [`${rootClassName}__trigger-container--disabled`]: disabled,\n [`${rootClassName}__trigger-container--readonly`]: readOnly && !disabled,\n [`${rootClassName}__trigger-container--has-tags`]: multiple && selectedItems.length > 0,\n })}\n style={anchorStyle}\n >\n {multiple && (\n <DropdownTags\n selectedItems={selectedItems}\n getTestId={getTestId}\n disabled={disabled}\n onRemove={handleRemoveTag}\n isSelect\n />\n )}\n <button\n {...triggerButtonProps}\n className={cx(`${rootClassName}__trigger`, {\n [`${rootClassName}__trigger--is-valid`]: isValid,\n [`${rootClassName}__trigger--negative`]: negative,\n [`${rootClassName}__trigger--disabled`]: disabled,\n [`${rootClassName}__trigger--readonly`]: readOnly && !disabled,\n [`${rootClassName}__trigger--placeholder`]: !selectedItems.length,\n })}\n aria-describedby={helperTextId}\n >\n <span className={cx(`${rootClassName}__trigger-text`)}>{displayLabel}</span>\n </button>\n <DropdownEndAdornments\n getTestId={getTestId}\n loading={loading}\n disabled={disabled}\n negative={negative}\n isValid={isValid}\n isOpen={isOpen}\n readOnly={readOnly}\n showChevronOpen\n />\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n />\n </div>\n </div>\n {isOpen && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {DropdownListboxItems({\n optionsToShow,\n getListboxItemProps,\n multiple,\n fieldId,\n })}\n </Listbox>\n )}\n <DropdownFooter\n errorText={errorText}\n helperText={helperText}\n helperTextId={helperTextId}\n negative={negative}\n />\n </div>\n );\n});\n\nDropdownSelect.displayName = \"DropdownSelect\";\n","import React, { forwardRef } from \"react\";\n\nimport type { ComboboxProps, DropdownProps, SelectProps } from \"./dropdown.types\";\nimport { DropdownCombobox } from \"./dropdown-combobox\";\nimport { DropdownSelect } from \"./dropdown-select\";\n\nexport const Dropdown = forwardRef<HTMLDivElement, DropdownProps>((props, ref) => {\n if (props.combobox) {\n return <DropdownCombobox ref={ref} {...(props as ComboboxProps)} />;\n }\n\n return <DropdownSelect ref={ref} {...(props as SelectProps)} />;\n});\n\nDropdown.displayName = \"Dropdown\";\n\nexport type { ComboboxProps, DropdownOption, DropdownProps, SelectProps } from \"./dropdown.types\";\nexport { useDropdown } from \"./useDropdown\";\n"],"names":["cx","c","styles","rootClassName","DropdownLabel","fieldId","htmlForSuffix","label","getTestId","disabled","negative","required","jsxs","Label","jsx","DropdownEndAdornments","loading","isValid","isOpen","readOnly","showChevronOpen","Spinner","Fragment","IconCheckCircleFilled","IconChevronDown","DropdownTags","selectedItems","onRemove","isSelect","DismissableChipGroup","item","DropdownFooter","errorText","helperText","helperTextId","FieldErrorText","FieldHelperText","DropdownListboxItems","optionsToShow","getListboxItemProps","multiple","noOptionsText","Listbox","option","index","key","selected","itemProps","Checkbox","filterOptions","options","searchTerm","filterOption","chunks","chunk","getFilteredOptions","selectedOption","useDropdownInput","controlledInputValue","defaultInputValue","onInputChange","internalInputValue","setInternalInputValue","useState","value","DropdownCombobox","forwardRef","props","ref","propId","className","placeholder","valid","selectedOptions","onSelect","openOnFocus","listboxMaxHeight","listboxLabel","inputValue","highlightFirstOption","dataTestId","randomId","useId","name","displayInputValue","populateInputField","handleAutocompleteSelect","next","o","rootRef","inputRef","inputProps","listboxProps","openListbox","anchorStyle","useAutocomplete","setRootRef","node","getListboxItemPropsWithSelection","isSelected","handleRemoveTag","handleInputKeyDown","event","handleInputChange","e","wrapperClassName","useDropdownHighlight","listboxRef","useRef","optionRefs","highlightedOption","setHighlightedOption","scrollOptionIntoView","optionEl","optionRect","listboxRect","direction","enabledList","currentIndex","eventType","useOnClickOutside","element","callback","handleClickOutside","useCallback","useEffect","useDropdown","id","variant","isCombobox","uniqueId","triggerRef","highlight","setIsOpen","closeListbox","current","resolvedSelected","showListbox","selectOption","highlightNextOption","handleKeyDown","handleInputMouseDown","handleInputFocus","handleInputBlur","activeEl","handleTriggerClick","handleTriggerContainerClick","clickedButton","handleTriggerFocus","listboxId","createListboxItemId","anchorName","triggerContainerProps","listboxCallbackRef","highlighted","el","triggerProps","DropdownSelect","dropdown","triggerButtonProps","displayLabel","Dropdown"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modal-DMeRO1wE.js","sources":["../../../components/modal/src/modal-content.tsx","../../../components/modal/src/modal-trigger.tsx","../../../components/modal/src/modal.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport {\n Close as RadixClose,\n Content as RadixContent,\n Description as RadixDescription,\n Overlay as RadixOverlay,\n Portal as RadixPortal,\n Title as RadixTitle,\n} from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport \"@purpur/notification/styles\";\nimport styles from \"./modal-content.module.scss\";\n\nexport type DefaultProps = Omit<BaseProps, \"children\"> & {\n /**\n * One or several CTA links or buttons\n * */\n actions?: ReactNode;\n children: ReactNode;\n /**\n * An optional accessible description to be announced when the dialog is opened.\n * */\n description?: string;\n /**\n * Prevents the modal from closing on click outside if set to `true`.\n * */\n disableCloseOnClickOutside?: boolean;\n /**\n * Visually hides the description if set to `true`.\n * */\n hideDescription?: boolean;\n /**\n * An optional image to be displayed at the top of the modal.\n * */\n image?: ReactNode;\n /**\n * Provide a Purpur Notification which will render beneath the modal buttons, otherwise leave it undefined.\n * */\n notification?: ReactNode;\n /**\n * Determines whether the button group should be fixed at the bottom or scroll with the content.\n * */\n stickyButtons?: boolean;\n /**\n * An accessible title to be announced when the dialog is opened.\n * */\n title: string;\n /**\n * z-index of the modal\n * */\n zIndex?: number;\n /**\n * Event handler called when focus moves to the trigger after closing.\n * */\n onCloseAutoFocus?: (e: Event) => void;\n};\n\ntype NoCloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel?: never;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton?: false;\n};\n\ntype CloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel: string;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton: true;\n};\n\nexport type ModalContentProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst hasCloseButtonProps = (\n props: CloseButtonProps | NoCloseButtonProps\n): props is CloseButtonProps => (props as CloseButtonProps).showCloseButton === true;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-modal-content\";\n\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n actions,\n children,\n className,\n description,\n disableCloseOnClickOutside,\n hideDescription,\n image,\n stickyButtons = true,\n title,\n notification = undefined,\n zIndex,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const { closeButtonAriaLabel, showCloseButton, ...rest } = props;\n const [contentOverflow, setContentOverflow] = useState(false);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperInnerRef = useRef<HTMLDivElement>(null);\n\n const classes = cx(\n rootClassName,\n { [`${rootClassName}--with-image`]: !!image },\n { [`${rootClassName}--overflow`]: contentOverflow },\n { [`${rootClassName}--sticky-footer`]: stickyButtons },\n className\n );\n\n const getTestId = (id: string) => (dataTestId ? `${dataTestId} ${id}` : undefined);\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n }\n };\n\n const handleContentOverflow = useCallback(() => {\n if (!wrapperRef.current || !wrapperInnerRef.current) {\n return;\n }\n\n const computedStyle = window.getComputedStyle(wrapperRef.current, null);\n const wrapperHeight = parseFloat(computedStyle.getPropertyValue(\"height\"));\n const innerHeight = wrapperInnerRef.current.offsetHeight;\n\n setContentOverflow(wrapperHeight < innerHeight);\n\n setScrollbarWidth(\n (wrapperRef.current.offsetWidth ?? 0) - (wrapperRef.current.clientWidth ?? 0)\n );\n }, []);\n\n const handleInitialFocus = () => {\n const frame = wrapperInnerRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (disableCloseOnClickOutside && !showCloseButton) {\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleContentOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", handleContentOverflow);\n };\n }, [handleContentOverflow]);\n\n useEffect(() => {\n handleContentOverflow();\n }, [notification, children, handleContentOverflow]);\n\n return (\n <RadixPortal>\n <RadixOverlay className={cx(`${rootClassName}__overlay`)} style={{ zIndex }} />\n <RadixContent\n {...rest}\n className={classes}\n data-testid={dataTestId}\n ref={ref}\n {...(!description && { [\"aria-describedby\"]: undefined })}\n onPointerDownOutside={handlePointerDownOutside}\n onOpenAutoFocus={() => {\n handleContentOverflow();\n handleInitialFocus();\n }}\n onEscapeKeyDown={handleEscapeKeyDown}\n onCloseAutoFocus={onCloseAutoFocus}\n style={{ zIndex: `calc(${zIndex} + 1)` }}\n >\n <div ref={wrapperRef} className={cx(`${rootClassName}__wrapper`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n hasImage\n scrollbarWidth={scrollbarWidth}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <div ref={wrapperInnerRef} className={cx(`${rootClassName}__wrapper-inner`)}>\n <div className={cx(`${rootClassName}__header`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && !image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <RadixTitle\n asChild\n className={cx(`${rootClassName}__title`)}\n data-testid={getTestId(\"title\")}\n >\n <Heading tag=\"h2\" variant=\"title-200\" tabIndex={-1}>\n {title}\n </Heading>\n </RadixTitle>\n </div>\n {image && (\n <div\n className={cx(`${rootClassName}__image-wrapper`)}\n data-testid={getTestId(\"image\")}\n >\n {image}\n </div>\n )}\n <div className={cx(`${rootClassName}__body`)}>\n <div className={cx(`${rootClassName}__body-inner`)}>\n {description && hideDescription && (\n <VisuallyHidden asChild>\n <RadixDescription data-testid={getTestId(\"description\")}>\n {description}\n </RadixDescription>\n </VisuallyHidden>\n )}\n {description && !hideDescription && (\n <RadixDescription\n asChild\n className={cx(`${rootClassName}__description`)}\n data-testid={getTestId(\"description\")}\n >\n <Paragraph variant=\"paragraph-100\">{description}</Paragraph>\n </RadixDescription>\n )}\n <div>{children}</div>\n {!stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </div>\n </div>\n </div>\n </div>\n\n {stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </RadixContent>\n </RadixPortal>\n );\n }\n);\n\nconst CloseButton = ({\n [\"aria-label\"]: ariaLabel,\n hasImage,\n scrollbarWidth,\n [\"data-testid\"]: dataTestId,\n}: {\n [\"aria-label\"]: string;\n hasImage?: boolean;\n scrollbarWidth?: number;\n [\"data-testid\"]?: string;\n}) => (\n <RadixClose asChild>\n <Button\n variant={hasImage ? \"primary\" : \"tertiary-purple\"}\n negative={hasImage}\n size=\"sm\"\n iconOnly\n aria-label={ariaLabel}\n className={cx(`${rootClassName}__close-button`)}\n style={{ right: `calc(var(--purpur-spacing-100) + ${scrollbarWidth || 0}px)` }}\n data-testid={dataTestId}\n >\n <IconClose />\n </Button>\n </RadixClose>\n);\n\nexport const MAX_NUMBER_OF_ACTIONS = 3;\n\nexport const ModalActions = ({\n actions,\n notification,\n}: Pick<ModalContentProps, \"actions\" | \"notification\">) => {\n const notificationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (notification) {\n notificationRef?.current?.scrollIntoView?.(false);\n }\n }, [notification]);\n\n return actions ? (\n <div className={cx(`${rootClassName}__actions`)}>\n <div className={cx(`${rootClassName}__actions-buttons`)} data-testid=\"modal actions\">\n {actions}\n </div>\n {notification && (\n <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>\n {notification}\n </div>\n )}\n <span className={cx(`${rootClassName}__actions-separator`)} />\n </div>\n ) : null;\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Trigger as RadixTrigger } from \"@radix-ui/react-dialog\";\n\nexport type ModalTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(\n ({ children, ...props }, ref) => {\n return (\n <RadixTrigger asChild ref={ref} {...props}>\n {children}\n </RadixTrigger>\n );\n }\n);\n","import React, { type ReactNode } from \"react\";\nimport { Root as RadixRoot } from \"@radix-ui/react-dialog\";\n\nimport { ModalContent } from \"./modal-content\";\nimport { ModalTrigger } from \"./modal-trigger\";\n\nexport type ModalProps = {\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * Event handler called when the open state of the dialog changes.\n * */\n onOpenChange?: (value: boolean) => void;\n /**\n * The controlled open state of the dialog. Must be used in conjunction with `onOpenChange`.\n * */\n open?: boolean;\n};\n\nexport const Modal = ({\n [\"data-testid\"]: dataTestId,\n children,\n open,\n onOpenChange,\n}: ModalProps) => (\n <RadixRoot open={open} onOpenChange={onOpenChange} data-testid={dataTestId}>\n {children}\n </RadixRoot>\n);\n\nModal.Trigger = ModalTrigger;\nModal.Content = ModalContent;\n\nModal.displayName = \"Modal\";\n"],"names":["hasCloseButtonProps","props","cx","c","styles","rootClassName","ModalContent","forwardRef","dataTestId","actions","children","className","description","disableCloseOnClickOutside","hideDescription","image","stickyButtons","title","notification","zIndex","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","RadixPortal","jsx","RadixOverlay","jsxs","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modal-fTWvPEPW.mjs","sources":["../../../components/modal/src/modal-content.tsx","../../../components/modal/src/modal-trigger.tsx","../../../components/modal/src/modal.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport {\n Close as RadixClose,\n Content as RadixContent,\n Description as RadixDescription,\n Overlay as RadixOverlay,\n Portal as RadixPortal,\n Title as RadixTitle,\n} from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport \"@purpur/notification/styles\";\nimport styles from \"./modal-content.module.scss\";\n\nexport type DefaultProps = Omit<BaseProps, \"children\"> & {\n /**\n * One or several CTA links or buttons\n * */\n actions?: ReactNode;\n children: ReactNode;\n /**\n * An optional accessible description to be announced when the dialog is opened.\n * */\n description?: string;\n /**\n * Prevents the modal from closing on click outside if set to `true`.\n * */\n disableCloseOnClickOutside?: boolean;\n /**\n * Visually hides the description if set to `true`.\n * */\n hideDescription?: boolean;\n /**\n * An optional image to be displayed at the top of the modal.\n * */\n image?: ReactNode;\n /**\n * Provide a Purpur Notification which will render beneath the modal buttons, otherwise leave it undefined.\n * */\n notification?: ReactNode;\n /**\n * Determines whether the button group should be fixed at the bottom or scroll with the content.\n * */\n stickyButtons?: boolean;\n /**\n * An accessible title to be announced when the dialog is opened.\n * */\n title: string;\n /**\n * z-index of the modal\n * */\n zIndex?: number;\n /**\n * Event handler called when focus moves to the trigger after closing.\n * */\n onCloseAutoFocus?: (e: Event) => void;\n};\n\ntype NoCloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel?: never;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton?: false;\n};\n\ntype CloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel: string;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton: true;\n};\n\nexport type ModalContentProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst hasCloseButtonProps = (\n props: CloseButtonProps | NoCloseButtonProps\n): props is CloseButtonProps => (props as CloseButtonProps).showCloseButton === true;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-modal-content\";\n\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n actions,\n children,\n className,\n description,\n disableCloseOnClickOutside,\n hideDescription,\n image,\n stickyButtons = true,\n title,\n notification = undefined,\n zIndex,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const { closeButtonAriaLabel, showCloseButton, ...rest } = props;\n const [contentOverflow, setContentOverflow] = useState(false);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperInnerRef = useRef<HTMLDivElement>(null);\n\n const classes = cx(\n rootClassName,\n { [`${rootClassName}--with-image`]: !!image },\n { [`${rootClassName}--overflow`]: contentOverflow },\n { [`${rootClassName}--sticky-footer`]: stickyButtons },\n className\n );\n\n const getTestId = (id: string) => (dataTestId ? `${dataTestId} ${id}` : undefined);\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n }\n };\n\n const handleContentOverflow = useCallback(() => {\n if (!wrapperRef.current || !wrapperInnerRef.current) {\n return;\n }\n\n const computedStyle = window.getComputedStyle(wrapperRef.current, null);\n const wrapperHeight = parseFloat(computedStyle.getPropertyValue(\"height\"));\n const innerHeight = wrapperInnerRef.current.offsetHeight;\n\n setContentOverflow(wrapperHeight < innerHeight);\n\n setScrollbarWidth(\n (wrapperRef.current.offsetWidth ?? 0) - (wrapperRef.current.clientWidth ?? 0)\n );\n }, []);\n\n const handleInitialFocus = () => {\n const frame = wrapperInnerRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (disableCloseOnClickOutside && !showCloseButton) {\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleContentOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", handleContentOverflow);\n };\n }, [handleContentOverflow]);\n\n useEffect(() => {\n handleContentOverflow();\n }, [notification, children, handleContentOverflow]);\n\n return (\n <RadixPortal>\n <RadixOverlay className={cx(`${rootClassName}__overlay`)} style={{ zIndex }} />\n <RadixContent\n {...rest}\n className={classes}\n data-testid={dataTestId}\n ref={ref}\n {...(!description && { [\"aria-describedby\"]: undefined })}\n onPointerDownOutside={handlePointerDownOutside}\n onOpenAutoFocus={() => {\n handleContentOverflow();\n handleInitialFocus();\n }}\n onEscapeKeyDown={handleEscapeKeyDown}\n onCloseAutoFocus={onCloseAutoFocus}\n style={{ zIndex: `calc(${zIndex} + 1)` }}\n >\n <div ref={wrapperRef} className={cx(`${rootClassName}__wrapper`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n hasImage\n scrollbarWidth={scrollbarWidth}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <div ref={wrapperInnerRef} className={cx(`${rootClassName}__wrapper-inner`)}>\n <div className={cx(`${rootClassName}__header`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && !image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <RadixTitle\n asChild\n className={cx(`${rootClassName}__title`)}\n data-testid={getTestId(\"title\")}\n >\n <Heading tag=\"h2\" variant=\"title-200\" tabIndex={-1}>\n {title}\n </Heading>\n </RadixTitle>\n </div>\n {image && (\n <div\n className={cx(`${rootClassName}__image-wrapper`)}\n data-testid={getTestId(\"image\")}\n >\n {image}\n </div>\n )}\n <div className={cx(`${rootClassName}__body`)}>\n <div className={cx(`${rootClassName}__body-inner`)}>\n {description && hideDescription && (\n <VisuallyHidden asChild>\n <RadixDescription data-testid={getTestId(\"description\")}>\n {description}\n </RadixDescription>\n </VisuallyHidden>\n )}\n {description && !hideDescription && (\n <RadixDescription\n asChild\n className={cx(`${rootClassName}__description`)}\n data-testid={getTestId(\"description\")}\n >\n <Paragraph variant=\"paragraph-100\">{description}</Paragraph>\n </RadixDescription>\n )}\n <div>{children}</div>\n {!stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </div>\n </div>\n </div>\n </div>\n\n {stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </RadixContent>\n </RadixPortal>\n );\n }\n);\n\nconst CloseButton = ({\n [\"aria-label\"]: ariaLabel,\n hasImage,\n scrollbarWidth,\n [\"data-testid\"]: dataTestId,\n}: {\n [\"aria-label\"]: string;\n hasImage?: boolean;\n scrollbarWidth?: number;\n [\"data-testid\"]?: string;\n}) => (\n <RadixClose asChild>\n <Button\n variant={hasImage ? \"primary\" : \"tertiary-purple\"}\n negative={hasImage}\n size=\"sm\"\n iconOnly\n aria-label={ariaLabel}\n className={cx(`${rootClassName}__close-button`)}\n style={{ right: `calc(var(--purpur-spacing-100) + ${scrollbarWidth || 0}px)` }}\n data-testid={dataTestId}\n >\n <IconClose />\n </Button>\n </RadixClose>\n);\n\nexport const MAX_NUMBER_OF_ACTIONS = 3;\n\nexport const ModalActions = ({\n actions,\n notification,\n}: Pick<ModalContentProps, \"actions\" | \"notification\">) => {\n const notificationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (notification) {\n notificationRef?.current?.scrollIntoView?.(false);\n }\n }, [notification]);\n\n return actions ? (\n <div className={cx(`${rootClassName}__actions`)}>\n <div className={cx(`${rootClassName}__actions-buttons`)} data-testid=\"modal actions\">\n {actions}\n </div>\n {notification && (\n <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>\n {notification}\n </div>\n )}\n <span className={cx(`${rootClassName}__actions-separator`)} />\n </div>\n ) : null;\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Trigger as RadixTrigger } from \"@radix-ui/react-dialog\";\n\nexport type ModalTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(\n ({ children, ...props }, ref) => {\n return (\n <RadixTrigger asChild ref={ref} {...props}>\n {children}\n </RadixTrigger>\n );\n }\n);\n","import React, { type ReactNode } from \"react\";\nimport { Root as RadixRoot } from \"@radix-ui/react-dialog\";\n\nimport { ModalContent } from \"./modal-content\";\nimport { ModalTrigger } from \"./modal-trigger\";\n\nexport type ModalProps = {\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * Event handler called when the open state of the dialog changes.\n * */\n onOpenChange?: (value: boolean) => void;\n /**\n * The controlled open state of the dialog. Must be used in conjunction with `onOpenChange`.\n * */\n open?: boolean;\n};\n\nexport const Modal = ({\n [\"data-testid\"]: dataTestId,\n children,\n open,\n onOpenChange,\n}: ModalProps) => (\n <RadixRoot open={open} onOpenChange={onOpenChange} data-testid={dataTestId}>\n {children}\n </RadixRoot>\n);\n\nModal.Trigger = ModalTrigger;\nModal.Content = ModalContent;\n\nModal.displayName = \"Modal\";\n"],"names":["hasCloseButtonProps","props","cx","c","styles","rootClassName","ModalContent","forwardRef","dataTestId","actions","children","className","description","disableCloseOnClickOutside","hideDescription","image","stickyButtons","title","notification","zIndex","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","RadixPortal","jsx","RadixOverlay","jsxs","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination-BdCjh1Pi.mjs","sources":["../../../components/icon/dist/components/arrow-left.es.js","../../../components/pagination/src/navigation.ts","../../../components/pagination/src/use-page-options.hook.ts","../../../components/pagination/src/pagination-page-selector.tsx","../../../components/pagination/src/use-page-size-options.hook.ts","../../../components/pagination/src/pagination-page-size-selector.tsx","../../../components/pagination/src/pagination-page-trigger.tsx","../../../components/pagination/src/pagination-truncation-separator.tsx","../../../components/pagination/src/pagination-pages.tsx","../../../components/pagination/src/pagination-step-trigger.tsx","../../../components/pagination/src/use-pagination-pages.hook.ts","../../../components/pagination/src/pagination.tsx"],"sourcesContent":["import { jsx as r } from \"react/jsx-runtime\";\nimport { I as e } from \"../icon-DNHpBTHs.mjs\";\nconst t = {\n name: \"arrow-left\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M3.1 12a.9.9 0 0 1 .264-.636l5.5-5.5a.9.9 0 0 1 1.272 1.272L6.173 11.1H20a.9.9 0 0 1 0 1.8H6.173l3.963 3.964a.9.9 0 1 1-1.272 1.272l-5.5-5.5A.9.9 0 0 1 3.1 12Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"arrow-left\"],\n category: \"utility\"\n}, l = (o) => /* @__PURE__ */ r(e, { ...o, svg: t });\nl.displayName = \"IconArrowLeft\";\nexport {\n l as IconArrowLeft\n};\n//# sourceMappingURL=arrow-left.es.js.map\n","export const navigateToPage = (url: string): void => {\n window.location.href = url;\n};\n","import { useMemo } from \"react\";\nimport type { SelectOption } from \"@purpur/select\";\n\ntype UsePageOptionsHook = {\n options: SelectOption[];\n};\n\nexport const usePageOptions = (numberOfPages: number): UsePageOptionsHook => {\n const options = useMemo(\n () =>\n Array.from({ length: numberOfPages }, (_, i) => ({ label: `${i + 1}`, value: `${i + 1}` })),\n [numberOfPages]\n );\n\n return {\n options,\n };\n};\n","import React, { type ChangeEvent, forwardRef, useId } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Label } from \"@purpur/label\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { Select } from \"@purpur/select\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-page-selector.module.scss\";\nimport { type InternalLinkProps, type InternalNoLinkProps } from \"./types\";\nimport { usePageOptions } from \"./use-page-options.hook\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPageSelectorProps = Omit<BaseProps, \"children\"> & {\n currentPage: number;\n navigationFunction: (page: number, url: string) => void;\n numberOfPages: number;\n onPageChange: (page: number) => void;\n outOfLabel: string;\n pageSelectorId?: string;\n pageSelectorLabel: string;\n} & (InternalLinkProps | InternalNoLinkProps);\n\nconst rootClassName = \"purpur-pagination-page-selector\";\n\nexport const PaginationPageSelector = forwardRef<HTMLDivElement, PaginationPageSelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-page-selector\",\n asLink,\n className,\n currentPage,\n hrefGetter,\n navigationFunction,\n numberOfPages,\n onPageChange,\n outOfLabel,\n pageSelectorId,\n pageSelectorLabel,\n ...props\n },\n ref\n ) => {\n const id = useId();\n const classes = cx(className, rootClassName);\n const { options } = usePageOptions(numberOfPages);\n\n const onSelectionChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const page = event.target.value ? Number(event.target.value) : 1;\n onPageChange(page);\n if (asLink) {\n const url = hrefGetter?.(page) ?? \"\";\n navigationFunction(page, url);\n }\n };\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <div className={cx(`${rootClassName}__select-container`)}>\n <VisuallyHidden>\n <Label data-testid={`${dataTestId}-label`} htmlFor={id}>\n {pageSelectorLabel}\n </Label>\n </VisuallyHidden>\n <Select\n className={cx(`${rootClassName}__select`)}\n data-testid={`${dataTestId}-select`}\n id={pageSelectorId ?? id}\n onChange={onSelectionChange}\n options={options}\n value={String(currentPage)}\n />\n </div>\n <Paragraph\n className={cx(`${rootClassName}__of-total-pages-label`)}\n data-testid={`${dataTestId}-of-total-pages`}\n >\n {`${outOfLabel} ${numberOfPages}`}\n </Paragraph>\n </div>\n );\n }\n);\n\nPaginationPageSelector.displayName = \"PaginationPageSelector\";\n","import { useMemo } from \"react\";\nimport { type SelectOption } from \"@purpur/select\";\n\ntype UsePageSizeOptionsHook = {\n options: SelectOption[];\n};\n\nexport const usePageSizeOptions = (availablePageSizes: number[]): UsePageSizeOptionsHook => {\n const options = useMemo(\n () =>\n availablePageSizes.map((pageSize: number) => ({\n label: `${pageSize}`,\n value: `${pageSize}`,\n })),\n [availablePageSizes]\n );\n\n return {\n options,\n };\n};\n","import React, { type ChangeEvent, forwardRef, useId } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Label } from \"@purpur/label\";\nimport { Select } from \"@purpur/select\";\nimport c from \"classnames/bind\";\n\nimport { navigateToPage } from \"./navigation\";\nimport styles from \"./pagination-page-size-selector.module.scss\";\nimport { type LinkProps, type NoLinkProps } from \"./types\";\nimport { usePageSizeOptions } from \"./use-page-size-options.hook\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPageSizeSelectorProps = Omit<BaseProps, \"children\"> & {\n availablePageSizes: number[];\n onPageSizeChange: (itemsPerPage: number) => void;\n pageSize: number;\n pageSizeLabel: string;\n} & (Omit<LinkProps, \"onPageChange\"> | Omit<NoLinkProps, \"onPageChange\">);\n\nconst rootClassName = \"purpur-pagination-page-size-selector\";\n\nexport const PaginationPageSizeSelector = forwardRef<\n HTMLDivElement,\n PaginationPageSizeSelectorProps\n>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-page-size-selector\",\n asLink,\n availablePageSizes,\n className,\n hrefGetter,\n navigationFunction,\n onPageSizeChange,\n pageSize,\n pageSizeLabel,\n ...props\n },\n ref\n ) => {\n const selectId = useId();\n const classes = cx(className, rootClassName);\n const { options } = usePageSizeOptions(availablePageSizes);\n\n const onSelectionChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const selectedPageSize = Number(event.target.value);\n onPageSizeChange(selectedPageSize);\n if (asLink) {\n const url = hrefGetter({ page: 1, pageSize: selectedPageSize });\n if (navigationFunction) {\n navigationFunction({ currentPage: 1, pageSize: selectedPageSize, url });\n } else {\n navigateToPage(url);\n }\n }\n };\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <Label\n className={cx(`${rootClassName}__items-per-page-label`)}\n data-testid={`${dataTestId}-item-per-page-label`}\n htmlFor={selectId}\n >\n <span className={cx(`${rootClassName}__items-per-page-label-text`)}>{pageSizeLabel}</span>\n </Label>\n <Select\n className={cx(`${rootClassName}__select`)}\n data-testid={`${dataTestId}-select`}\n id={selectId}\n onChange={onSelectionChange}\n options={options}\n value={pageSize}\n />\n </div>\n );\n }\n);\n\nPaginationPageSizeSelector.displayName = \"PaginationPageSizeSelector\";\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-page-trigger.module.scss\";\nimport { type InternalLinkProps, type InternalNoLinkProps, type Link } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPageTriggerProps = Omit<BaseProps<\"li\">, \"children\"> & {\n linkElement: Link;\n disabled?: boolean;\n onPageChange: (page: number) => void;\n pageNumber: number;\n selected: boolean;\n stepNumberPrefix: string;\n} & (InternalLinkProps | InternalNoLinkProps);\n\nconst rootClassName = \"purpur-pagination-page-trigger\";\n\nexport const PaginationPageTrigger = forwardRef<HTMLLIElement, PaginationPageTriggerProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-page-trigger\",\n linkElement: LinkElement,\n asLink,\n className,\n disabled,\n hrefGetter,\n onPageChange,\n pageNumber,\n selected,\n stepNumberPrefix,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n\n return (\n <li className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {asLink ? (\n disabled ? (\n <span\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--page-trigger`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--icon-only`,\n `${rootClassName}__trigger-item--disabled`\n )}\n aria-current={selected ? \"page\" : undefined}\n data-testid={`${dataTestId}-disabled-link`}\n >\n <VisuallyHidden>{`${stepNumberPrefix} `}</VisuallyHidden>\n {pageNumber}\n </span>\n ) : (\n <LinkElement\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--page-trigger`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--icon-only`,\n { [`${rootClassName}__trigger-item--selected`]: selected }\n )}\n aria-current={selected ? \"page\" : undefined}\n data-testid={`${dataTestId}-link`}\n href={hrefGetter(pageNumber)}\n onClick={() => onPageChange(pageNumber)}\n >\n <VisuallyHidden>{`${stepNumberPrefix} `}</VisuallyHidden>\n {pageNumber}\n </LinkElement>\n )\n ) : (\n <button\n aria-disabled={disabled}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--page-trigger`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--icon-only`,\n { [`${rootClassName}__trigger-item--selected`]: selected }\n )}\n data-testid={`${dataTestId}-button`}\n aria-current={selected ? \"page\" : undefined}\n disabled={disabled}\n onClick={() => onPageChange(pageNumber)}\n type=\"button\"\n >\n <VisuallyHidden>{`${stepNumberPrefix} `}</VisuallyHidden>\n {pageNumber}\n </button>\n )}\n </li>\n );\n }\n);\n\nPaginationPageTrigger.displayName = \"PaginationPageTrigger\";\n","import React from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-truncation-separator.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationTruncationSeparatorProps = Omit<BaseProps<\"li\">, \"children\">;\n\nconst rootClassName = \"purpur-pagination-truncation-separator\";\n\nexport const PaginationTruncationSeparator = ({\n [\"data-testid\"]: dataTestId = \"purpur-pagination-truncation-separator\",\n className,\n [\"aria-label\"]: ariaLabel,\n ...props\n}: PaginationTruncationSeparatorProps) => {\n const classes = cx(className, rootClassName);\n\n return (\n <li className={classes} data-testid={dataTestId} {...props}>\n <Paragraph aria-label={ariaLabel}>...</Paragraph>\n </li>\n );\n};\n\nPaginationTruncationSeparator.displayName = \"PaginationTruncationSeparator\";\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport { PaginationPageTrigger } from \"./pagination-page-trigger\";\nimport styles from \"./pagination-pages.module.scss\";\nimport { PaginationTruncationSeparator } from \"./pagination-truncation-separator\";\nimport { type InternalLinkProps, type InternalNoLinkProps, type Link } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPagesProps = Omit<BaseProps<\"ol\">, \"children\"> & {\n linkElement: Link;\n currentPage: number;\n onPageChange: (page: number) => void;\n pages: number[];\n stepNumberPrefix: string;\n truncationSeparatorAriaLabel?: string;\n} & (InternalNoLinkProps | InternalLinkProps);\n\nconst rootClassName = \"purpur-pagination-pages\";\n\nexport const PaginationPages = forwardRef<HTMLOListElement, PaginationPagesProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-pages\",\n linkElement: LinkElement,\n asLink,\n className,\n currentPage,\n hrefGetter,\n onPageChange,\n pages,\n stepNumberPrefix,\n truncationSeparatorAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n\n return (\n <ol className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {pages.flatMap((pageNumber: number, idx: number, pages: number[]) => {\n const TriggerComponent = (\n <PaginationPageTrigger\n {...(asLink\n ? { asLink: true, hrefGetter }\n : {\n asLink: undefined as never,\n hrefGetter: undefined as never,\n })}\n linkElement={LinkElement}\n data-testid={`${dataTestId}-page-${pageNumber}`}\n key={pageNumber}\n onPageChange={onPageChange}\n selected={pageNumber === currentPage}\n stepNumberPrefix={stepNumberPrefix}\n pageNumber={pageNumber}\n />\n );\n return idx === 0 || pages[idx - 1] + 1 === pageNumber\n ? [TriggerComponent]\n : [\n <PaginationTruncationSeparator\n data-testid={`${dataTestId}-truncation-separator-${pageNumber}`}\n key={`${pageNumber}-separator`}\n aria-label={truncationSeparatorAriaLabel}\n />,\n TriggerComponent,\n ];\n })}\n </ol>\n );\n }\n);\n\nPaginationPages.displayName = \"PaginationPages\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-step-trigger.module.scss\";\nimport { type InternalLinkProps, type InternalNoLinkProps, type Link } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationStepTriggerProps = Omit<BaseProps, \"children\"> & {\n linkElement: Link;\n children: ReactNode;\n disabled: boolean;\n onPageChange: (page: number) => void;\n pageToNavigateTo: number;\n isIconOnly: boolean;\n} & (InternalLinkProps | InternalNoLinkProps);\n\nconst rootClassName = \"purpur-pagination-step-trigger\";\n\nexport const PaginationStepTrigger = forwardRef<HTMLDivElement, PaginationStepTriggerProps>(\n (\n {\n [\"aria-label\"]: ariaLabel,\n [\"data-testid\"]: dataTestId = \"purpur-pagination-step-trigger\",\n linkElement: LinkElement,\n asLink,\n children,\n className,\n disabled,\n hrefGetter,\n onPageChange,\n pageToNavigateTo,\n isIconOnly,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {asLink ? (\n disabled ? (\n <span\n aria-label={ariaLabel}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--step-trigger`,\n `${rootClassName}__trigger-item--secondary`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--disabled`,\n { [`${rootClassName}__trigger-item--step-trigger--not-icon-only`]: !isIconOnly }\n )}\n data-testid={`${dataTestId}-disabled-link`}\n >\n {children}\n </span>\n ) : (\n <LinkElement\n aria-label={ariaLabel}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--step-trigger`,\n `${rootClassName}__trigger-item--secondary`,\n `${rootClassName}__trigger-item--sm`,\n { [`${rootClassName}__trigger-item--step-trigger--not-icon-only`]: !isIconOnly }\n )}\n data-testid={`${dataTestId}-link`}\n href={hrefGetter(pageToNavigateTo)}\n onClick={() => onPageChange(pageToNavigateTo)}\n >\n {children}\n </LinkElement>\n )\n ) : (\n <button\n aria-disabled={disabled}\n aria-label={ariaLabel}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--step-trigger`,\n `${rootClassName}__trigger-item--secondary`,\n `${rootClassName}__trigger-item--sm`,\n {\n [`${rootClassName}__trigger-item--disabled`]: disabled,\n [`${rootClassName}__trigger-item--step-trigger--not-icon-only`]: !isIconOnly,\n }\n )}\n data-testid={`${dataTestId}-button`}\n disabled={disabled}\n onClick={() => onPageChange(pageToNavigateTo)}\n type=\"button\"\n >\n {children}\n </button>\n )}\n </div>\n );\n }\n);\n\nPaginationStepTrigger.displayName = \"PaginationStepTrigger\";\n","import { useEffect, useState } from \"react\";\n\ntype UsePaginationPagesHook = {\n pages: number[];\n numberOfPages: number;\n};\n\nexport const usePaginationPages = (\n totalItems: number,\n pageSize: number,\n currentPage: number\n): UsePaginationPagesHook => {\n const [pages, setPages] = useState<number[]>([]);\n const [numberOfPages, setNumberOfPages] = useState<number>(0);\n\n useEffect(() => {\n const totalNumberOfPages = Math.ceil(totalItems / pageSize);\n setNumberOfPages(totalNumberOfPages);\n setPages(getPagesToDisplay(totalNumberOfPages, currentPage));\n }, [totalItems, pageSize, currentPage]);\n\n return {\n pages,\n numberOfPages,\n };\n};\n\nfunction getPagesToDisplay(totalNumberOfPages: number, currentPage: number): number[] {\n if (totalNumberOfPages <= 5) {\n return Array.from({ length: totalNumberOfPages }, (_, i) => i + 1);\n }\n const firstThreePages = [1, 2, 3];\n if (firstThreePages.includes(currentPage)) {\n return [...firstThreePages, 4, totalNumberOfPages];\n }\n const lastThreePages = [totalNumberOfPages - 2, totalNumberOfPages - 1, totalNumberOfPages];\n if (lastThreePages.includes(currentPage)) {\n return [1, totalNumberOfPages - 3, ...lastThreePages];\n }\n return [1, currentPage - 1, currentPage, currentPage + 1, totalNumberOfPages];\n}\n","import React, { forwardRef, useState } from \"react\";\nimport { IconArrowLeft } from \"@purpur/icon/arrow-left\";\nimport { IconArrowRight } from \"@purpur/icon/arrow-right\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport { navigateToPage } from \"./navigation\";\nimport styles from \"./pagination.module.scss\";\nimport { PaginationPageSelector } from \"./pagination-page-selector\";\nimport { PaginationPageSizeSelector } from \"./pagination-page-size-selector\";\nimport { PaginationPages } from \"./pagination-pages\";\nimport { PaginationStepTrigger } from \"./pagination-step-trigger\";\nimport { type LinkProps, type NoLinkProps } from \"./types\";\nimport { usePaginationPages } from \"./use-pagination-pages.hook\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationTexts = {\n nextButtonAriaLabel: string;\n /**\n * Omiting this and previousButtonText will result in an icon-only button.\n */\n nextButtonText?: string;\n /**\n * This is the divider word between the current page and the total number of pages.\n * For example, if the current page is 1 and the total number of pages is 10, the text will be \"1 of 10\".\n */\n outOfLabel: string;\n /**\n * This is a hidden label for the page selector\n */\n pageSelectorLabel: string;\n /**\n * This is the \"...\" text that is displayed when there are more pages than can be shown at once.\n */\n truncationSeparatorAriaLabel?: string;\n previousButtonAriaLabel: string;\n /**\n * Omiting this and nextButtonText will result in an icon-only button.\n */\n previousButtonText?: string;\n /**\n * This is a screen reader text that will be inserted before the current page number. For example, for step 1 it will say \"Go to step 1\".\n */\n stepNumberPrefix: string;\n};\n\nexport type PageSizeProps = {\n availablePageSizes: number[];\n pageSize?: number;\n /**\n * The label describing the page size select.\n */\n pageSizeLabel: string;\n};\n\nexport type NoPageSizeProps = {\n availablePageSizes?: never;\n pageSize?: number;\n pageSizeLabel?: never;\n};\n\nexport type PaginationProps = {\n currentPage: number;\n pageSelectorId?: string;\n totalItems: number;\n} & PaginationTexts &\n (PageSizeProps | NoPageSizeProps) &\n (LinkProps | NoLinkProps);\n\nconst rootClassName = \"purpur-pagination\";\n\nexport const Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination\",\n linkElement = \"a\",\n asLink,\n availablePageSizes,\n className,\n currentPage = 1,\n hrefGetter,\n navigationFunction,\n nextButtonAriaLabel,\n nextButtonText,\n onPageChange,\n outOfLabel,\n pageSelectorId,\n pageSelectorLabel,\n pageSize = 10,\n pageSizeLabel,\n previousButtonAriaLabel,\n previousButtonText,\n stepNumberPrefix,\n totalItems,\n truncationSeparatorAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const [_pageSize, _setPageSize] = useState(pageSize);\n const { pages, numberOfPages } = usePaginationPages(totalItems, _pageSize, currentPage);\n const isIconOnly = !previousButtonText && !nextButtonText;\n\n const _onPageChange = (page: number): void => {\n onPageChange?.({ currentPage: page, pageSize });\n };\n\n const _hrefGetter = (page: number): string => {\n return hrefGetter?.({ page, pageSize }) ?? \"\";\n };\n\n const _onPageSizeChange = (newPageSize: number): void => {\n _setPageSize(newPageSize);\n onPageChange?.({ currentPage: 1, pageSize: newPageSize });\n };\n\n const _navigationFunction = (page: number, url: string): void => {\n if (navigationFunction) {\n navigationFunction({ currentPage: page, pageSize: _pageSize, url });\n } else {\n navigateToPage(url);\n }\n };\n\n const linkProps = asLink\n ? { asLink: true as const, hrefGetter: _hrefGetter }\n : {\n asLink: undefined as never,\n hrefGetter: undefined as never,\n };\n\n const ContainerTag = asLink ? \"nav\" : \"div\";\n\n if (!numberOfPages) {\n return null;\n }\n\n return (\n <ContainerTag className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <div\n className={cx(`${rootClassName}__pagination-container`, {\n [`${rootClassName}__pagination-container--with-page-size-select`]: !!availablePageSizes,\n })}\n >\n <div className={cx(`${rootClassName}__page-navigation-container`)}>\n <PaginationStepTrigger\n {...linkProps}\n linkElement={linkElement}\n aria-label={previousButtonAriaLabel}\n className={cx(`${rootClassName}__step-trigger`)}\n data-testid={`${dataTestId}-previous-step-trigger`}\n disabled={currentPage === 1}\n onPageChange={_onPageChange}\n pageToNavigateTo={currentPage - 1}\n isIconOnly={isIconOnly}\n >\n <IconArrowLeft size=\"sm\" />\n <span\n className={cx(`${rootClassName}__step-trigger-label`, {\n [`${rootClassName}__step-trigger-label--not-icon-only`]: !isIconOnly,\n })}\n >\n {previousButtonText}\n </span>\n {currentPage !== 1 && (\n <VisuallyHidden data-testid={`${dataTestId}-previous-step-trigger-hidden-text`}>\n {`${stepNumberPrefix} ${currentPage - 1}`}\n </VisuallyHidden>\n )}\n </PaginationStepTrigger>\n <div className={cx(`${rootClassName}__page-trigger-container`)}>\n <PaginationPageSelector\n {...linkProps}\n className={cx(`${rootClassName}__page-selector`, {\n [`${rootClassName}__page-selector--visible`]: pages.length > 3,\n })}\n currentPage={currentPage}\n data-testid={`${dataTestId}-page-selector`}\n navigationFunction={_navigationFunction}\n numberOfPages={numberOfPages}\n onPageChange={_onPageChange}\n outOfLabel={outOfLabel}\n pageSelectorId={pageSelectorId}\n pageSelectorLabel={pageSelectorLabel}\n />\n <PaginationPages\n {...linkProps}\n linkElement={linkElement}\n className={cx(`${rootClassName}__pages`, {\n [`${rootClassName}__pages--visible`]: pages.length <= 3,\n })}\n currentPage={currentPage}\n data-testid={`${dataTestId}-pages`}\n stepNumberPrefix={stepNumberPrefix}\n onPageChange={_onPageChange}\n truncationSeparatorAriaLabel={truncationSeparatorAriaLabel}\n pages={pages}\n />\n </div>\n <PaginationStepTrigger\n {...linkProps}\n linkElement={linkElement}\n aria-label={nextButtonAriaLabel}\n className={cx(`${rootClassName}__step-trigger`)}\n data-testid={`${dataTestId}-next-step-trigger`}\n disabled={currentPage === numberOfPages}\n onPageChange={_onPageChange}\n pageToNavigateTo={currentPage + 1}\n isIconOnly={isIconOnly}\n >\n <span\n className={cx(`${rootClassName}__step-trigger-label`, {\n [`${rootClassName}__step-trigger-label--not-icon-only`]: !isIconOnly,\n })}\n >\n {nextButtonText}\n </span>\n {currentPage !== numberOfPages && (\n <VisuallyHidden data-testid={`${dataTestId}-next-step-trigger-hidden-text`}>\n {`${stepNumberPrefix} ${currentPage + 1}`}\n </VisuallyHidden>\n )}\n <IconArrowRight size=\"sm\" />\n </PaginationStepTrigger>\n </div>\n {availablePageSizes && (\n <div className={cx(`${rootClassName}__page-size-select-container`)}>\n <PaginationPageSizeSelector\n {...(asLink\n ? { asLink: true, hrefGetter, navigationFunction }\n : { asLink: undefined as never, hrefGetter: undefined as never })}\n availablePageSizes={availablePageSizes}\n className={cx(`${rootClassName}__page-size-selector`)}\n data-testid={`${dataTestId}-page-size-selector`}\n onPageSizeChange={_onPageSizeChange}\n pageSize={_pageSize}\n pageSizeLabel={pageSizeLabel}\n />\n </div>\n )}\n </div>\n </ContainerTag>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n"],"names":["t","l","o","r","e","navigateToPage","url","usePageOptions","numberOfPages","useMemo","_","i","cx","c","styles","rootClassName","PaginationPageSelector","forwardRef","dataTestId","asLink","className","currentPage","hrefGetter","navigationFunction","onPageChange","outOfLabel","pageSelectorId","pageSelectorLabel","props","ref","id","useId","classes","options","onSelectionChange","event","page","jsxs","jsx","VisuallyHidden","Label","Select","Paragraph","usePageSizeOptions","availablePageSizes","pageSize","PaginationPageSizeSelector","onPageSizeChange","pageSizeLabel","selectId","selectedPageSize","PaginationPageTrigger","LinkElement","disabled","pageNumber","selected","stepNumberPrefix","PaginationTruncationSeparator","ariaLabel","PaginationPages","pages","truncationSeparatorAriaLabel","idx","TriggerComponent","createElement","PaginationStepTrigger","children","pageToNavigateTo","isIconOnly","usePaginationPages","totalItems","setPages","useState","setNumberOfPages","useEffect","totalNumberOfPages","getPagesToDisplay","firstThreePages","lastThreePages","Pagination","linkElement","nextButtonAriaLabel","nextButtonText","previousButtonAriaLabel","previousButtonText","_pageSize","_setPageSize","_onPageChange","_hrefGetter","_onPageSizeChange","newPageSize","_navigationFunction","linkProps","ContainerTag","IconArrowLeft","IconArrowRight"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const i=require("react/jsx-runtime"),m=require("react"),_e=require("./icon-DNHpBTHs-faYHqTXU.js"),oe=require("./arrow-right.es-eH-IgGi9.js"),C=require("./visually-hidden-C2CKovZx.js"),z=require("./bind-DeUYJ6m9.js"),B=require("./label-yHK80hhV.js"),J=require("./paragraph-BsI53OR0.js"),K=require("./select-DOqTJgTj.js"),le={name:"arrow-left",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M3.1 12a.9.9 0 0 1 .264-.636l5.5-5.5a.9.9 0 0 1 1.272 1.272L6.173 11.1H20a.9.9 0 0 1 0 1.8H6.173l3.963 3.964a.9.9 0 1 1-1.272 1.272l-5.5-5.5A.9.9 0 0 1 3.1 12Z" clip-rule="evenodd"/></svg>',keywords:["arrow-left"],category:"utility"},Q=e=>i.jsx(_e.b,{...e,svg:le});Q.displayName="IconArrowLeft";const U=e=>{window.location.href=e},ue={"purpur-pagination":"_purpur-pagination_1g3as_1","purpur-pagination__pagination-container":"_purpur-pagination__pagination-container_1g3as_5","purpur-pagination__pagination-container--with-page-size-select":"_purpur-pagination__pagination-container--with-page-size-select_1g3as_12","purpur-pagination__page-size-select-container":"_purpur-pagination__page-size-select-container_1g3as_20","purpur-pagination__page-navigation-container":"_purpur-pagination__page-navigation-container_1g3as_30","purpur-pagination__step-trigger-label":"_purpur-pagination__step-trigger-label_1g3as_51","purpur-pagination__step-trigger-label--not-icon-only":"_purpur-pagination__step-trigger-label--not-icon-only_1g3as_64","purpur-pagination__step-trigger":"_purpur-pagination__step-trigger_1g3as_51","purpur-pagination__page-trigger-container":"_purpur-pagination__page-trigger-container_1g3as_78","purpur-pagination__pages":"_purpur-pagination__pages_1g3as_83","purpur-pagination__pages--visible":"_purpur-pagination__pages--visible_1g3as_86","purpur-pagination__page-selector":"_purpur-pagination__page-selector_1g3as_94","purpur-pagination__page-selector--visible":"_purpur-pagination__page-selector--visible_1g3as_97"},ce={"purpur-pagination-page-selector":"_purpur-pagination-page-selector_7pxsw_1","purpur-pagination-page-selector__select-container":"_purpur-pagination-page-selector__select-container_7pxsw_6","purpur-pagination-page-selector__of-total-pages-label":"_purpur-pagination-page-selector__of-total-pages-label_7pxsw_10"},de=e=>({options:m.useMemo(()=>Array.from({length:e},(a,g)=>({label:`${g+1}`,value:`${g+1}`})),[e])}),q=z.c.bind(ce),R="purpur-pagination-page-selector",W=m.forwardRef(({["data-testid"]:e="purpur-pagination-page-selector",asLink:r,className:a,currentPage:g,hrefGetter:p,navigationFunction:t,numberOfPages:s,onPageChange:n,outOfLabel:l,pageSelectorId:u,pageSelectorLabel:$,...y},h)=>{const c=m.useId(),v=q(a,R),{options:N}=de(s),j=b=>{const w=b.target.value?Number(b.target.value):1;if(n(w),r){const E=p?.(w)??"";t(w,E)}};return i.jsxs("div",{className:v,"data-testid":e,ref:h,...y,children:[i.jsxs("div",{className:q(`${R}__select-container`),children:[i.jsx(C.VisuallyHidden,{children:i.jsx(B.Label,{"data-testid":`${e}-label`,htmlFor:c,children:$})}),i.jsx(K.Select,{className:q(`${R}__select`),"data-testid":`${e}-select`,id:u??c,onChange:j,options:N,value:String(g)})]}),i.jsx(J.Paragraph,{className:q(`${R}__of-total-pages-label`),"data-testid":`${e}-of-total-pages`,children:`${l} ${s}`})]})});W.displayName="PaginationPageSelector";const me={"purpur-pagination-page-size-selector":"_purpur-pagination-page-size-selector_11x2p_1","purpur-pagination-page-size-selector__select":"_purpur-pagination-page-size-selector__select_11x2p_12","purpur-pagination-page-size-selector__items-per-page-label":"_purpur-pagination-page-size-selector__items-per-page-label_11x2p_17","purpur-pagination-page-size-selector__items-per-page-label-text":"_purpur-pagination-page-size-selector__items-per-page-label-text_11x2p_27"},$e=e=>({options:m.useMemo(()=>e.map(a=>({label:`${a}`,value:`${a}`})),[e])}),L=z.c.bind(me),V="purpur-pagination-page-size-selector",X=m.forwardRef(({["data-testid"]:e="purpur-pagination-page-size-selector",asLink:r,availablePageSizes:a,className:g,hrefGetter:p,navigationFunction:t,onPageSizeChange:s,pageSize:n,pageSizeLabel:l,...u},$)=>{const y=m.useId(),h=L(g,V),{options:c}=$e(a),v=N=>{const j=Number(N.target.value);if(s(j),r){const b=p({page:1,pageSize:j});t?t({currentPage:1,pageSize:j,url:b}):U(b)}};return i.jsxs("div",{className:h,"data-testid":e,ref:$,...u,children:[i.jsx(B.Label,{className:L(`${V}__items-per-page-label`),"data-testid":`${e}-item-per-page-label`,htmlFor:y,children:i.jsx("span",{className:L(`${V}__items-per-page-label-text`),children:l})}),i.jsx(K.Select,{className:L(`${V}__select`),"data-testid":`${e}-select`,id:y,onChange:v,options:c,value:n})]})});X.displayName="PaginationPageSizeSelector";const ye={"purpur-pagination-page-trigger":"_purpur-pagination-page-trigger_1pnyd_1","purpur-pagination-page-trigger__trigger-item":"_purpur-pagination-page-trigger__trigger-item_1pnyd_4","purpur-pagination-page-trigger__trigger-item--xs":"_purpur-pagination-page-trigger__trigger-item--xs_1pnyd_25","purpur-pagination-page-trigger__trigger-item--icon-only":"_purpur-pagination-page-trigger__trigger-item--icon-only_1pnyd_28","purpur-pagination-page-trigger__trigger-item--sm":"_purpur-pagination-page-trigger__trigger-item--sm_1pnyd_31","purpur-pagination-page-trigger__trigger-item--md":"_purpur-pagination-page-trigger__trigger-item--md_1pnyd_37","purpur-pagination-page-trigger__trigger-item--lg":"_purpur-pagination-page-trigger__trigger-item--lg_1pnyd_43","purpur-pagination-page-trigger__trigger-item--full-width":"_purpur-pagination-page-trigger__trigger-item--full-width_1pnyd_49","purpur-pagination-page-trigger__trigger-item--primary":"_purpur-pagination-page-trigger__trigger-item--primary_1pnyd_67","purpur-pagination-page-trigger__trigger-item--disabled":"_purpur-pagination-page-trigger__trigger-item--disabled_1pnyd_71","purpur-pagination-page-trigger__trigger-item--primary-negative":"_purpur-pagination-page-trigger__trigger-item--primary-negative_1pnyd_77","purpur-pagination-page-trigger__trigger-item--secondary":"_purpur-pagination-page-trigger__trigger-item--secondary_1pnyd_89","purpur-pagination-page-trigger__trigger-item--secondary-negative":"_purpur-pagination-page-trigger__trigger-item--secondary-negative_1pnyd_100","purpur-pagination-page-trigger__trigger-item--expressive":"_purpur-pagination-page-trigger__trigger-item--expressive_1pnyd_111","purpur-pagination-page-trigger__trigger-item--expressive-negative":"_purpur-pagination-page-trigger__trigger-item--expressive-negative_1pnyd_121","purpur-pagination-page-trigger__trigger-item--page-trigger":"_purpur-pagination-page-trigger__trigger-item--page-trigger_1pnyd_133","purpur-pagination-page-trigger__trigger-item--selected":"_purpur-pagination-page-trigger__trigger-item--selected_1pnyd_142"},M=z.c.bind(ye),d="purpur-pagination-page-trigger",Y=m.forwardRef(({["data-testid"]:e="purpur-pagination-page-trigger",linkElement:r,asLink:a,className:g,disabled:p,hrefGetter:t,onPageChange:s,pageNumber:n,selected:l,stepNumberPrefix:u,...$},y)=>{const h=M(g,d);return i.jsx("li",{className:h,"data-testid":e,ref:y,...$,children:a?p?i.jsxs("span",{className:M(`${d}__trigger-item`,`${d}__trigger-item--page-trigger`,`${d}__trigger-item--sm`,`${d}__trigger-item--icon-only`,`${d}__trigger-item--disabled`),"aria-current":l?"page":void 0,"data-testid":`${e}-disabled-link`,children:[i.jsx(C.VisuallyHidden,{children:`${u} `}),n]}):i.jsxs(r,{className:M(`${d}__trigger-item`,`${d}__trigger-item--page-trigger`,`${d}__trigger-item--sm`,`${d}__trigger-item--icon-only`,{[`${d}__trigger-item--selected`]:l}),"aria-current":l?"page":void 0,"data-testid":`${e}-link`,href:t(n),onClick:()=>s(n),children:[i.jsx(C.VisuallyHidden,{children:`${u} `}),n]}):i.jsxs("button",{"aria-disabled":p,className:M(`${d}__trigger-item`,`${d}__trigger-item--page-trigger`,`${d}__trigger-item--sm`,`${d}__trigger-item--icon-only`,{[`${d}__trigger-item--selected`]:l}),"data-testid":`${e}-button`,"aria-current":l?"page":void 0,disabled:p,onClick:()=>s(n),type:"button",children:[i.jsx(C.VisuallyHidden,{children:`${u} `}),n]})})});Y.displayName="PaginationPageTrigger";const xe={"purpur-pagination-pages":"_purpur-pagination-pages_2g8is_1"},he={"purpur-pagination-truncation-separator":"_purpur-pagination-truncation-separator_b9cij_1"},ve=z.c.bind(he),je="purpur-pagination-truncation-separator",O=({["data-testid"]:e="purpur-pagination-truncation-separator",className:r,["aria-label"]:a,...g})=>{const p=ve(r,je);return i.jsx("li",{className:p,"data-testid":e,...g,children:i.jsx(J.Paragraph,{"aria-label":a,children:"..."})})};O.displayName="PaginationTruncationSeparator";const be=z.c.bind(xe),fe="purpur-pagination-pages",T=m.forwardRef(({["data-testid"]:e="purpur-pagination-pages",linkElement:r,asLink:a,className:g,currentPage:p,hrefGetter:t,onPageChange:s,pages:n,stepNumberPrefix:l,truncationSeparatorAriaLabel:u,...$},y)=>{const h=be(g,fe);return i.jsx("ol",{className:h,"data-testid":e,ref:y,...$,children:n.flatMap((c,v,N)=>{const j=m.createElement(Y,{...a?{asLink:!0,hrefGetter:t}:{asLink:void 0,hrefGetter:void 0},linkElement:r,"data-testid":`${e}-page-${c}`,key:c,onPageChange:s,selected:c===p,stepNumberPrefix:l,pageNumber:c});return v===0||N[v-1]+1===c?[j]:[i.jsx(O,{"data-testid":`${e}-truncation-separator-${c}`,"aria-label":u},`${c}-separator`),j]})})});T.displayName="PaginationPages";const Ne={"purpur-pagination-step-trigger__trigger-item":"_purpur-pagination-step-trigger__trigger-item_1t19c_1","purpur-pagination-step-trigger__trigger-item--xs":"_purpur-pagination-step-trigger__trigger-item--xs_1t19c_22","purpur-pagination-step-trigger__trigger-item--icon-only":"_purpur-pagination-step-trigger__trigger-item--icon-only_1t19c_25","purpur-pagination-step-trigger__trigger-item--sm":"_purpur-pagination-step-trigger__trigger-item--sm_1t19c_28","purpur-pagination-step-trigger__trigger-item--md":"_purpur-pagination-step-trigger__trigger-item--md_1t19c_34","purpur-pagination-step-trigger__trigger-item--lg":"_purpur-pagination-step-trigger__trigger-item--lg_1t19c_40","purpur-pagination-step-trigger__trigger-item--full-width":"_purpur-pagination-step-trigger__trigger-item--full-width_1t19c_46","purpur-pagination-step-trigger__trigger-item--primary":"_purpur-pagination-step-trigger__trigger-item--primary_1t19c_64","purpur-pagination-step-trigger__trigger-item--disabled":"_purpur-pagination-step-trigger__trigger-item--disabled_1t19c_68","purpur-pagination-step-trigger__trigger-item--primary-negative":"_purpur-pagination-step-trigger__trigger-item--primary-negative_1t19c_74","purpur-pagination-step-trigger__trigger-item--secondary":"_purpur-pagination-step-trigger__trigger-item--secondary_1t19c_86","purpur-pagination-step-trigger__trigger-item--secondary-negative":"_purpur-pagination-step-trigger__trigger-item--secondary-negative_1t19c_97","purpur-pagination-step-trigger__trigger-item--expressive":"_purpur-pagination-step-trigger__trigger-item--expressive_1t19c_108","purpur-pagination-step-trigger__trigger-item--expressive-negative":"_purpur-pagination-step-trigger__trigger-item--expressive-negative_1t19c_118","purpur-pagination-step-trigger__trigger-item--step-trigger":"_purpur-pagination-step-trigger__trigger-item--step-trigger_1t19c_130","purpur-pagination-step-trigger__trigger-item--step-trigger--not-icon-only":"_purpur-pagination-step-trigger__trigger-item--step-trigger--not-icon-only_1t19c_137"},A=z.c.bind(Ne),_="purpur-pagination-step-trigger",F=m.forwardRef(({["aria-label"]:e,["data-testid"]:r="purpur-pagination-step-trigger",linkElement:a,asLink:g,children:p,className:t,disabled:s,hrefGetter:n,onPageChange:l,pageToNavigateTo:u,isIconOnly:$,...y},h)=>{const c=A(t,_);return i.jsx("div",{className:c,"data-testid":r,ref:h,...y,children:g?s?i.jsx("span",{"aria-label":e,className:A(`${_}__trigger-item`,`${_}__trigger-item--step-trigger`,`${_}__trigger-item--secondary`,`${_}__trigger-item--sm`,`${_}__trigger-item--disabled`,{[`${_}__trigger-item--step-trigger--not-icon-only`]:!$}),"data-testid":`${r}-disabled-link`,children:p}):i.jsx(a,{"aria-label":e,className:A(`${_}__trigger-item`,`${_}__trigger-item--step-trigger`,`${_}__trigger-item--secondary`,`${_}__trigger-item--sm`,{[`${_}__trigger-item--step-trigger--not-icon-only`]:!$}),"data-testid":`${r}-link`,href:n(u),onClick:()=>l(u),children:p}):i.jsx("button",{"aria-disabled":s,"aria-label":e,className:A(`${_}__trigger-item`,`${_}__trigger-item--step-trigger`,`${_}__trigger-item--secondary`,`${_}__trigger-item--sm`,{[`${_}__trigger-item--disabled`]:s,[`${_}__trigger-item--step-trigger--not-icon-only`]:!$}),"data-testid":`${r}-button`,disabled:s,onClick:()=>l(u),type:"button",children:p})})});F.displayName="PaginationStepTrigger";const we=(e,r,a)=>{const[g,p]=m.useState([]),[t,s]=m.useState(0);return m.useEffect(()=>{const n=Math.ceil(e/r);s(n),p(ze(n,a))},[e,r,a]),{pages:g,numberOfPages:t}};function ze(e,r){if(e<=5)return Array.from({length:e},(p,t)=>t+1);const a=[1,2,3];if(a.includes(r))return[...a,4,e];const g=[e-2,e-1,e];return g.includes(r)?[1,e-3,...g]:[1,r-1,r,r+1,e]}const x=z.c.bind(ue),o="purpur-pagination",I=m.forwardRef(({["data-testid"]:e="purpur-pagination",linkElement:r="a",asLink:a,availablePageSizes:g,className:p,currentPage:t=1,hrefGetter:s,navigationFunction:n,nextButtonAriaLabel:l,nextButtonText:u,onPageChange:$,outOfLabel:y,pageSelectorId:h,pageSelectorLabel:c,pageSize:v=10,pageSizeLabel:N,previousButtonAriaLabel:j,previousButtonText:b,stepNumberPrefix:w,totalItems:E,truncationSeparatorAriaLabel:ee,...ie},re)=>{const te=x(p,o),[G,ae]=m.useState(v),{pages:D,numberOfPages:S}=we(E,G,t),k=!b&&!u,P=f=>{$?.({currentPage:f,pageSize:v})},ge=f=>s?.({page:f,pageSize:v})??"",ne=f=>{ae(f),$?.({currentPage:1,pageSize:f})},pe=(f,Z)=>{n?n({currentPage:f,pageSize:G,url:Z}):U(Z)},H=a?{asLink:!0,hrefGetter:ge}:{asLink:void 0,hrefGetter:void 0},se=a?"nav":"div";return S?i.jsx(se,{className:te,"data-testid":e,ref:re,...ie,children:i.jsxs("div",{className:x(`${o}__pagination-container`,{[`${o}__pagination-container--with-page-size-select`]:!!g}),children:[i.jsxs("div",{className:x(`${o}__page-navigation-container`),children:[i.jsxs(F,{...H,linkElement:r,"aria-label":j,className:x(`${o}__step-trigger`),"data-testid":`${e}-previous-step-trigger`,disabled:t===1,onPageChange:P,pageToNavigateTo:t-1,isIconOnly:k,children:[i.jsx(Q,{size:"sm"}),i.jsx("span",{className:x(`${o}__step-trigger-label`,{[`${o}__step-trigger-label--not-icon-only`]:!k}),children:b}),t!==1&&i.jsx(C.VisuallyHidden,{"data-testid":`${e}-previous-step-trigger-hidden-text`,children:`${w} ${t-1}`})]}),i.jsxs("div",{className:x(`${o}__page-trigger-container`),children:[i.jsx(W,{...H,className:x(`${o}__page-selector`,{[`${o}__page-selector--visible`]:D.length>3}),currentPage:t,"data-testid":`${e}-page-selector`,navigationFunction:pe,numberOfPages:S,onPageChange:P,outOfLabel:y,pageSelectorId:h,pageSelectorLabel:c}),i.jsx(T,{...H,linkElement:r,className:x(`${o}__pages`,{[`${o}__pages--visible`]:D.length<=3}),currentPage:t,"data-testid":`${e}-pages`,stepNumberPrefix:w,onPageChange:P,truncationSeparatorAriaLabel:ee,pages:D})]}),i.jsxs(F,{...H,linkElement:r,"aria-label":l,className:x(`${o}__step-trigger`),"data-testid":`${e}-next-step-trigger`,disabled:t===S,onPageChange:P,pageToNavigateTo:t+1,isIconOnly:k,children:[i.jsx("span",{className:x(`${o}__step-trigger-label`,{[`${o}__step-trigger-label--not-icon-only`]:!k}),children:u}),t!==S&&i.jsx(C.VisuallyHidden,{"data-testid":`${e}-next-step-trigger-hidden-text`,children:`${w} ${t+1}`}),i.jsx(oe.i,{size:"sm"})]})]}),g&&i.jsx("div",{className:x(`${o}__page-size-select-container`),children:i.jsx(X,{...a?{asLink:!0,hrefGetter:s,navigationFunction:n}:{asLink:void 0,hrefGetter:void 0},availablePageSizes:g,className:x(`${o}__page-size-selector`),"data-testid":`${e}-page-size-selector`,onPageSizeChange:ne,pageSize:G,pageSizeLabel:N})})]})}):null});I.displayName="Pagination";exports.Pagination=I;
|
|
2
|
-
//# sourceMappingURL=pagination-C2A8NPol.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination-C2A8NPol.js","sources":["../../../components/icon/dist/components/arrow-left.es.js","../../../components/pagination/src/navigation.ts","../../../components/pagination/src/use-page-options.hook.ts","../../../components/pagination/src/pagination-page-selector.tsx","../../../components/pagination/src/use-page-size-options.hook.ts","../../../components/pagination/src/pagination-page-size-selector.tsx","../../../components/pagination/src/pagination-page-trigger.tsx","../../../components/pagination/src/pagination-truncation-separator.tsx","../../../components/pagination/src/pagination-pages.tsx","../../../components/pagination/src/pagination-step-trigger.tsx","../../../components/pagination/src/use-pagination-pages.hook.ts","../../../components/pagination/src/pagination.tsx"],"sourcesContent":["import { jsx as r } from \"react/jsx-runtime\";\nimport { I as e } from \"../icon-DNHpBTHs.mjs\";\nconst t = {\n name: \"arrow-left\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M3.1 12a.9.9 0 0 1 .264-.636l5.5-5.5a.9.9 0 0 1 1.272 1.272L6.173 11.1H20a.9.9 0 0 1 0 1.8H6.173l3.963 3.964a.9.9 0 1 1-1.272 1.272l-5.5-5.5A.9.9 0 0 1 3.1 12Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"arrow-left\"],\n category: \"utility\"\n}, l = (o) => /* @__PURE__ */ r(e, { ...o, svg: t });\nl.displayName = \"IconArrowLeft\";\nexport {\n l as IconArrowLeft\n};\n//# sourceMappingURL=arrow-left.es.js.map\n","export const navigateToPage = (url: string): void => {\n window.location.href = url;\n};\n","import { useMemo } from \"react\";\nimport type { SelectOption } from \"@purpur/select\";\n\ntype UsePageOptionsHook = {\n options: SelectOption[];\n};\n\nexport const usePageOptions = (numberOfPages: number): UsePageOptionsHook => {\n const options = useMemo(\n () =>\n Array.from({ length: numberOfPages }, (_, i) => ({ label: `${i + 1}`, value: `${i + 1}` })),\n [numberOfPages]\n );\n\n return {\n options,\n };\n};\n","import React, { type ChangeEvent, forwardRef, useId } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Label } from \"@purpur/label\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { Select } from \"@purpur/select\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-page-selector.module.scss\";\nimport { type InternalLinkProps, type InternalNoLinkProps } from \"./types\";\nimport { usePageOptions } from \"./use-page-options.hook\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPageSelectorProps = Omit<BaseProps, \"children\"> & {\n currentPage: number;\n navigationFunction: (page: number, url: string) => void;\n numberOfPages: number;\n onPageChange: (page: number) => void;\n outOfLabel: string;\n pageSelectorId?: string;\n pageSelectorLabel: string;\n} & (InternalLinkProps | InternalNoLinkProps);\n\nconst rootClassName = \"purpur-pagination-page-selector\";\n\nexport const PaginationPageSelector = forwardRef<HTMLDivElement, PaginationPageSelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-page-selector\",\n asLink,\n className,\n currentPage,\n hrefGetter,\n navigationFunction,\n numberOfPages,\n onPageChange,\n outOfLabel,\n pageSelectorId,\n pageSelectorLabel,\n ...props\n },\n ref\n ) => {\n const id = useId();\n const classes = cx(className, rootClassName);\n const { options } = usePageOptions(numberOfPages);\n\n const onSelectionChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const page = event.target.value ? Number(event.target.value) : 1;\n onPageChange(page);\n if (asLink) {\n const url = hrefGetter?.(page) ?? \"\";\n navigationFunction(page, url);\n }\n };\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <div className={cx(`${rootClassName}__select-container`)}>\n <VisuallyHidden>\n <Label data-testid={`${dataTestId}-label`} htmlFor={id}>\n {pageSelectorLabel}\n </Label>\n </VisuallyHidden>\n <Select\n className={cx(`${rootClassName}__select`)}\n data-testid={`${dataTestId}-select`}\n id={pageSelectorId ?? id}\n onChange={onSelectionChange}\n options={options}\n value={String(currentPage)}\n />\n </div>\n <Paragraph\n className={cx(`${rootClassName}__of-total-pages-label`)}\n data-testid={`${dataTestId}-of-total-pages`}\n >\n {`${outOfLabel} ${numberOfPages}`}\n </Paragraph>\n </div>\n );\n }\n);\n\nPaginationPageSelector.displayName = \"PaginationPageSelector\";\n","import { useMemo } from \"react\";\nimport { type SelectOption } from \"@purpur/select\";\n\ntype UsePageSizeOptionsHook = {\n options: SelectOption[];\n};\n\nexport const usePageSizeOptions = (availablePageSizes: number[]): UsePageSizeOptionsHook => {\n const options = useMemo(\n () =>\n availablePageSizes.map((pageSize: number) => ({\n label: `${pageSize}`,\n value: `${pageSize}`,\n })),\n [availablePageSizes]\n );\n\n return {\n options,\n };\n};\n","import React, { type ChangeEvent, forwardRef, useId } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Label } from \"@purpur/label\";\nimport { Select } from \"@purpur/select\";\nimport c from \"classnames/bind\";\n\nimport { navigateToPage } from \"./navigation\";\nimport styles from \"./pagination-page-size-selector.module.scss\";\nimport { type LinkProps, type NoLinkProps } from \"./types\";\nimport { usePageSizeOptions } from \"./use-page-size-options.hook\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPageSizeSelectorProps = Omit<BaseProps, \"children\"> & {\n availablePageSizes: number[];\n onPageSizeChange: (itemsPerPage: number) => void;\n pageSize: number;\n pageSizeLabel: string;\n} & (Omit<LinkProps, \"onPageChange\"> | Omit<NoLinkProps, \"onPageChange\">);\n\nconst rootClassName = \"purpur-pagination-page-size-selector\";\n\nexport const PaginationPageSizeSelector = forwardRef<\n HTMLDivElement,\n PaginationPageSizeSelectorProps\n>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-page-size-selector\",\n asLink,\n availablePageSizes,\n className,\n hrefGetter,\n navigationFunction,\n onPageSizeChange,\n pageSize,\n pageSizeLabel,\n ...props\n },\n ref\n ) => {\n const selectId = useId();\n const classes = cx(className, rootClassName);\n const { options } = usePageSizeOptions(availablePageSizes);\n\n const onSelectionChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const selectedPageSize = Number(event.target.value);\n onPageSizeChange(selectedPageSize);\n if (asLink) {\n const url = hrefGetter({ page: 1, pageSize: selectedPageSize });\n if (navigationFunction) {\n navigationFunction({ currentPage: 1, pageSize: selectedPageSize, url });\n } else {\n navigateToPage(url);\n }\n }\n };\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <Label\n className={cx(`${rootClassName}__items-per-page-label`)}\n data-testid={`${dataTestId}-item-per-page-label`}\n htmlFor={selectId}\n >\n <span className={cx(`${rootClassName}__items-per-page-label-text`)}>{pageSizeLabel}</span>\n </Label>\n <Select\n className={cx(`${rootClassName}__select`)}\n data-testid={`${dataTestId}-select`}\n id={selectId}\n onChange={onSelectionChange}\n options={options}\n value={pageSize}\n />\n </div>\n );\n }\n);\n\nPaginationPageSizeSelector.displayName = \"PaginationPageSizeSelector\";\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-page-trigger.module.scss\";\nimport { type InternalLinkProps, type InternalNoLinkProps, type Link } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPageTriggerProps = Omit<BaseProps<\"li\">, \"children\"> & {\n linkElement: Link;\n disabled?: boolean;\n onPageChange: (page: number) => void;\n pageNumber: number;\n selected: boolean;\n stepNumberPrefix: string;\n} & (InternalLinkProps | InternalNoLinkProps);\n\nconst rootClassName = \"purpur-pagination-page-trigger\";\n\nexport const PaginationPageTrigger = forwardRef<HTMLLIElement, PaginationPageTriggerProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-page-trigger\",\n linkElement: LinkElement,\n asLink,\n className,\n disabled,\n hrefGetter,\n onPageChange,\n pageNumber,\n selected,\n stepNumberPrefix,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n\n return (\n <li className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {asLink ? (\n disabled ? (\n <span\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--page-trigger`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--icon-only`,\n `${rootClassName}__trigger-item--disabled`\n )}\n aria-current={selected ? \"page\" : undefined}\n data-testid={`${dataTestId}-disabled-link`}\n >\n <VisuallyHidden>{`${stepNumberPrefix} `}</VisuallyHidden>\n {pageNumber}\n </span>\n ) : (\n <LinkElement\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--page-trigger`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--icon-only`,\n { [`${rootClassName}__trigger-item--selected`]: selected }\n )}\n aria-current={selected ? \"page\" : undefined}\n data-testid={`${dataTestId}-link`}\n href={hrefGetter(pageNumber)}\n onClick={() => onPageChange(pageNumber)}\n >\n <VisuallyHidden>{`${stepNumberPrefix} `}</VisuallyHidden>\n {pageNumber}\n </LinkElement>\n )\n ) : (\n <button\n aria-disabled={disabled}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--page-trigger`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--icon-only`,\n { [`${rootClassName}__trigger-item--selected`]: selected }\n )}\n data-testid={`${dataTestId}-button`}\n aria-current={selected ? \"page\" : undefined}\n disabled={disabled}\n onClick={() => onPageChange(pageNumber)}\n type=\"button\"\n >\n <VisuallyHidden>{`${stepNumberPrefix} `}</VisuallyHidden>\n {pageNumber}\n </button>\n )}\n </li>\n );\n }\n);\n\nPaginationPageTrigger.displayName = \"PaginationPageTrigger\";\n","import React from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-truncation-separator.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationTruncationSeparatorProps = Omit<BaseProps<\"li\">, \"children\">;\n\nconst rootClassName = \"purpur-pagination-truncation-separator\";\n\nexport const PaginationTruncationSeparator = ({\n [\"data-testid\"]: dataTestId = \"purpur-pagination-truncation-separator\",\n className,\n [\"aria-label\"]: ariaLabel,\n ...props\n}: PaginationTruncationSeparatorProps) => {\n const classes = cx(className, rootClassName);\n\n return (\n <li className={classes} data-testid={dataTestId} {...props}>\n <Paragraph aria-label={ariaLabel}>...</Paragraph>\n </li>\n );\n};\n\nPaginationTruncationSeparator.displayName = \"PaginationTruncationSeparator\";\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport { PaginationPageTrigger } from \"./pagination-page-trigger\";\nimport styles from \"./pagination-pages.module.scss\";\nimport { PaginationTruncationSeparator } from \"./pagination-truncation-separator\";\nimport { type InternalLinkProps, type InternalNoLinkProps, type Link } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationPagesProps = Omit<BaseProps<\"ol\">, \"children\"> & {\n linkElement: Link;\n currentPage: number;\n onPageChange: (page: number) => void;\n pages: number[];\n stepNumberPrefix: string;\n truncationSeparatorAriaLabel?: string;\n} & (InternalNoLinkProps | InternalLinkProps);\n\nconst rootClassName = \"purpur-pagination-pages\";\n\nexport const PaginationPages = forwardRef<HTMLOListElement, PaginationPagesProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination-pages\",\n linkElement: LinkElement,\n asLink,\n className,\n currentPage,\n hrefGetter,\n onPageChange,\n pages,\n stepNumberPrefix,\n truncationSeparatorAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n\n return (\n <ol className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {pages.flatMap((pageNumber: number, idx: number, pages: number[]) => {\n const TriggerComponent = (\n <PaginationPageTrigger\n {...(asLink\n ? { asLink: true, hrefGetter }\n : {\n asLink: undefined as never,\n hrefGetter: undefined as never,\n })}\n linkElement={LinkElement}\n data-testid={`${dataTestId}-page-${pageNumber}`}\n key={pageNumber}\n onPageChange={onPageChange}\n selected={pageNumber === currentPage}\n stepNumberPrefix={stepNumberPrefix}\n pageNumber={pageNumber}\n />\n );\n return idx === 0 || pages[idx - 1] + 1 === pageNumber\n ? [TriggerComponent]\n : [\n <PaginationTruncationSeparator\n data-testid={`${dataTestId}-truncation-separator-${pageNumber}`}\n key={`${pageNumber}-separator`}\n aria-label={truncationSeparatorAriaLabel}\n />,\n TriggerComponent,\n ];\n })}\n </ol>\n );\n }\n);\n\nPaginationPages.displayName = \"PaginationPages\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./pagination-step-trigger.module.scss\";\nimport { type InternalLinkProps, type InternalNoLinkProps, type Link } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationStepTriggerProps = Omit<BaseProps, \"children\"> & {\n linkElement: Link;\n children: ReactNode;\n disabled: boolean;\n onPageChange: (page: number) => void;\n pageToNavigateTo: number;\n isIconOnly: boolean;\n} & (InternalLinkProps | InternalNoLinkProps);\n\nconst rootClassName = \"purpur-pagination-step-trigger\";\n\nexport const PaginationStepTrigger = forwardRef<HTMLDivElement, PaginationStepTriggerProps>(\n (\n {\n [\"aria-label\"]: ariaLabel,\n [\"data-testid\"]: dataTestId = \"purpur-pagination-step-trigger\",\n linkElement: LinkElement,\n asLink,\n children,\n className,\n disabled,\n hrefGetter,\n onPageChange,\n pageToNavigateTo,\n isIconOnly,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {asLink ? (\n disabled ? (\n <span\n aria-label={ariaLabel}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--step-trigger`,\n `${rootClassName}__trigger-item--secondary`,\n `${rootClassName}__trigger-item--sm`,\n `${rootClassName}__trigger-item--disabled`,\n { [`${rootClassName}__trigger-item--step-trigger--not-icon-only`]: !isIconOnly }\n )}\n data-testid={`${dataTestId}-disabled-link`}\n >\n {children}\n </span>\n ) : (\n <LinkElement\n aria-label={ariaLabel}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--step-trigger`,\n `${rootClassName}__trigger-item--secondary`,\n `${rootClassName}__trigger-item--sm`,\n { [`${rootClassName}__trigger-item--step-trigger--not-icon-only`]: !isIconOnly }\n )}\n data-testid={`${dataTestId}-link`}\n href={hrefGetter(pageToNavigateTo)}\n onClick={() => onPageChange(pageToNavigateTo)}\n >\n {children}\n </LinkElement>\n )\n ) : (\n <button\n aria-disabled={disabled}\n aria-label={ariaLabel}\n className={cx(\n `${rootClassName}__trigger-item`,\n `${rootClassName}__trigger-item--step-trigger`,\n `${rootClassName}__trigger-item--secondary`,\n `${rootClassName}__trigger-item--sm`,\n {\n [`${rootClassName}__trigger-item--disabled`]: disabled,\n [`${rootClassName}__trigger-item--step-trigger--not-icon-only`]: !isIconOnly,\n }\n )}\n data-testid={`${dataTestId}-button`}\n disabled={disabled}\n onClick={() => onPageChange(pageToNavigateTo)}\n type=\"button\"\n >\n {children}\n </button>\n )}\n </div>\n );\n }\n);\n\nPaginationStepTrigger.displayName = \"PaginationStepTrigger\";\n","import { useEffect, useState } from \"react\";\n\ntype UsePaginationPagesHook = {\n pages: number[];\n numberOfPages: number;\n};\n\nexport const usePaginationPages = (\n totalItems: number,\n pageSize: number,\n currentPage: number\n): UsePaginationPagesHook => {\n const [pages, setPages] = useState<number[]>([]);\n const [numberOfPages, setNumberOfPages] = useState<number>(0);\n\n useEffect(() => {\n const totalNumberOfPages = Math.ceil(totalItems / pageSize);\n setNumberOfPages(totalNumberOfPages);\n setPages(getPagesToDisplay(totalNumberOfPages, currentPage));\n }, [totalItems, pageSize, currentPage]);\n\n return {\n pages,\n numberOfPages,\n };\n};\n\nfunction getPagesToDisplay(totalNumberOfPages: number, currentPage: number): number[] {\n if (totalNumberOfPages <= 5) {\n return Array.from({ length: totalNumberOfPages }, (_, i) => i + 1);\n }\n const firstThreePages = [1, 2, 3];\n if (firstThreePages.includes(currentPage)) {\n return [...firstThreePages, 4, totalNumberOfPages];\n }\n const lastThreePages = [totalNumberOfPages - 2, totalNumberOfPages - 1, totalNumberOfPages];\n if (lastThreePages.includes(currentPage)) {\n return [1, totalNumberOfPages - 3, ...lastThreePages];\n }\n return [1, currentPage - 1, currentPage, currentPage + 1, totalNumberOfPages];\n}\n","import React, { forwardRef, useState } from \"react\";\nimport { IconArrowLeft } from \"@purpur/icon/arrow-left\";\nimport { IconArrowRight } from \"@purpur/icon/arrow-right\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport { navigateToPage } from \"./navigation\";\nimport styles from \"./pagination.module.scss\";\nimport { PaginationPageSelector } from \"./pagination-page-selector\";\nimport { PaginationPageSizeSelector } from \"./pagination-page-size-selector\";\nimport { PaginationPages } from \"./pagination-pages\";\nimport { PaginationStepTrigger } from \"./pagination-step-trigger\";\nimport { type LinkProps, type NoLinkProps } from \"./types\";\nimport { usePaginationPages } from \"./use-pagination-pages.hook\";\n\nconst cx = c.bind(styles);\n\nexport type PaginationTexts = {\n nextButtonAriaLabel: string;\n /**\n * Omiting this and previousButtonText will result in an icon-only button.\n */\n nextButtonText?: string;\n /**\n * This is the divider word between the current page and the total number of pages.\n * For example, if the current page is 1 and the total number of pages is 10, the text will be \"1 of 10\".\n */\n outOfLabel: string;\n /**\n * This is a hidden label for the page selector\n */\n pageSelectorLabel: string;\n /**\n * This is the \"...\" text that is displayed when there are more pages than can be shown at once.\n */\n truncationSeparatorAriaLabel?: string;\n previousButtonAriaLabel: string;\n /**\n * Omiting this and nextButtonText will result in an icon-only button.\n */\n previousButtonText?: string;\n /**\n * This is a screen reader text that will be inserted before the current page number. For example, for step 1 it will say \"Go to step 1\".\n */\n stepNumberPrefix: string;\n};\n\nexport type PageSizeProps = {\n availablePageSizes: number[];\n pageSize?: number;\n /**\n * The label describing the page size select.\n */\n pageSizeLabel: string;\n};\n\nexport type NoPageSizeProps = {\n availablePageSizes?: never;\n pageSize?: number;\n pageSizeLabel?: never;\n};\n\nexport type PaginationProps = {\n currentPage: number;\n pageSelectorId?: string;\n totalItems: number;\n} & PaginationTexts &\n (PageSizeProps | NoPageSizeProps) &\n (LinkProps | NoLinkProps);\n\nconst rootClassName = \"purpur-pagination\";\n\nexport const Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-pagination\",\n linkElement = \"a\",\n asLink,\n availablePageSizes,\n className,\n currentPage = 1,\n hrefGetter,\n navigationFunction,\n nextButtonAriaLabel,\n nextButtonText,\n onPageChange,\n outOfLabel,\n pageSelectorId,\n pageSelectorLabel,\n pageSize = 10,\n pageSizeLabel,\n previousButtonAriaLabel,\n previousButtonText,\n stepNumberPrefix,\n totalItems,\n truncationSeparatorAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const [_pageSize, _setPageSize] = useState(pageSize);\n const { pages, numberOfPages } = usePaginationPages(totalItems, _pageSize, currentPage);\n const isIconOnly = !previousButtonText && !nextButtonText;\n\n const _onPageChange = (page: number): void => {\n onPageChange?.({ currentPage: page, pageSize });\n };\n\n const _hrefGetter = (page: number): string => {\n return hrefGetter?.({ page, pageSize }) ?? \"\";\n };\n\n const _onPageSizeChange = (newPageSize: number): void => {\n _setPageSize(newPageSize);\n onPageChange?.({ currentPage: 1, pageSize: newPageSize });\n };\n\n const _navigationFunction = (page: number, url: string): void => {\n if (navigationFunction) {\n navigationFunction({ currentPage: page, pageSize: _pageSize, url });\n } else {\n navigateToPage(url);\n }\n };\n\n const linkProps = asLink\n ? { asLink: true as const, hrefGetter: _hrefGetter }\n : {\n asLink: undefined as never,\n hrefGetter: undefined as never,\n };\n\n const ContainerTag = asLink ? \"nav\" : \"div\";\n\n if (!numberOfPages) {\n return null;\n }\n\n return (\n <ContainerTag className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <div\n className={cx(`${rootClassName}__pagination-container`, {\n [`${rootClassName}__pagination-container--with-page-size-select`]: !!availablePageSizes,\n })}\n >\n <div className={cx(`${rootClassName}__page-navigation-container`)}>\n <PaginationStepTrigger\n {...linkProps}\n linkElement={linkElement}\n aria-label={previousButtonAriaLabel}\n className={cx(`${rootClassName}__step-trigger`)}\n data-testid={`${dataTestId}-previous-step-trigger`}\n disabled={currentPage === 1}\n onPageChange={_onPageChange}\n pageToNavigateTo={currentPage - 1}\n isIconOnly={isIconOnly}\n >\n <IconArrowLeft size=\"sm\" />\n <span\n className={cx(`${rootClassName}__step-trigger-label`, {\n [`${rootClassName}__step-trigger-label--not-icon-only`]: !isIconOnly,\n })}\n >\n {previousButtonText}\n </span>\n {currentPage !== 1 && (\n <VisuallyHidden data-testid={`${dataTestId}-previous-step-trigger-hidden-text`}>\n {`${stepNumberPrefix} ${currentPage - 1}`}\n </VisuallyHidden>\n )}\n </PaginationStepTrigger>\n <div className={cx(`${rootClassName}__page-trigger-container`)}>\n <PaginationPageSelector\n {...linkProps}\n className={cx(`${rootClassName}__page-selector`, {\n [`${rootClassName}__page-selector--visible`]: pages.length > 3,\n })}\n currentPage={currentPage}\n data-testid={`${dataTestId}-page-selector`}\n navigationFunction={_navigationFunction}\n numberOfPages={numberOfPages}\n onPageChange={_onPageChange}\n outOfLabel={outOfLabel}\n pageSelectorId={pageSelectorId}\n pageSelectorLabel={pageSelectorLabel}\n />\n <PaginationPages\n {...linkProps}\n linkElement={linkElement}\n className={cx(`${rootClassName}__pages`, {\n [`${rootClassName}__pages--visible`]: pages.length <= 3,\n })}\n currentPage={currentPage}\n data-testid={`${dataTestId}-pages`}\n stepNumberPrefix={stepNumberPrefix}\n onPageChange={_onPageChange}\n truncationSeparatorAriaLabel={truncationSeparatorAriaLabel}\n pages={pages}\n />\n </div>\n <PaginationStepTrigger\n {...linkProps}\n linkElement={linkElement}\n aria-label={nextButtonAriaLabel}\n className={cx(`${rootClassName}__step-trigger`)}\n data-testid={`${dataTestId}-next-step-trigger`}\n disabled={currentPage === numberOfPages}\n onPageChange={_onPageChange}\n pageToNavigateTo={currentPage + 1}\n isIconOnly={isIconOnly}\n >\n <span\n className={cx(`${rootClassName}__step-trigger-label`, {\n [`${rootClassName}__step-trigger-label--not-icon-only`]: !isIconOnly,\n })}\n >\n {nextButtonText}\n </span>\n {currentPage !== numberOfPages && (\n <VisuallyHidden data-testid={`${dataTestId}-next-step-trigger-hidden-text`}>\n {`${stepNumberPrefix} ${currentPage + 1}`}\n </VisuallyHidden>\n )}\n <IconArrowRight size=\"sm\" />\n </PaginationStepTrigger>\n </div>\n {availablePageSizes && (\n <div className={cx(`${rootClassName}__page-size-select-container`)}>\n <PaginationPageSizeSelector\n {...(asLink\n ? { asLink: true, hrefGetter, navigationFunction }\n : { asLink: undefined as never, hrefGetter: undefined as never })}\n availablePageSizes={availablePageSizes}\n className={cx(`${rootClassName}__page-size-selector`)}\n data-testid={`${dataTestId}-page-size-selector`}\n onPageSizeChange={_onPageSizeChange}\n pageSize={_pageSize}\n pageSizeLabel={pageSizeLabel}\n />\n </div>\n )}\n </div>\n </ContainerTag>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n"],"names":["t","l","o","r","e","navigateToPage","url","usePageOptions","numberOfPages","useMemo","_","i","cx","c","styles","rootClassName","PaginationPageSelector","forwardRef","dataTestId","asLink","className","currentPage","hrefGetter","navigationFunction","onPageChange","outOfLabel","pageSelectorId","pageSelectorLabel","props","ref","id","useId","classes","options","onSelectionChange","event","page","jsxs","jsx","VisuallyHidden","Label","Select","Paragraph","usePageSizeOptions","availablePageSizes","pageSize","PaginationPageSizeSelector","onPageSizeChange","pageSizeLabel","selectId","selectedPageSize","PaginationPageTrigger","LinkElement","disabled","pageNumber","selected","stepNumberPrefix","PaginationTruncationSeparator","ariaLabel","PaginationPages","pages","truncationSeparatorAriaLabel","idx","TriggerComponent","createElement","PaginationStepTrigger","children","pageToNavigateTo","isIconOnly","usePaginationPages","totalItems","setPages","useState","setNumberOfPages","useEffect","totalNumberOfPages","getPagesToDisplay","firstThreePages","lastThreePages","Pagination","linkElement","nextButtonAriaLabel","nextButtonText","previousButtonAriaLabel","previousButtonText","_pageSize","_setPageSize","_onPageChange","_hrefGetter","_onPageSizeChange","newPageSize","_navigationFunction","linkProps","ContainerTag","IconArrowLeft","IconArrowRight"],"mappings":"6UAEMA,GAAI,CACR,KAAM,aACN,IAAK,4SACL,SAAU,CAAC,YAAY,EACvB,SAAU,SACZ,EAAGC,EAAKC,GAAsBC,MAAEC,GAAAA,EAAG,CAAE,GAAGF,EAAG,IAAKF,GAAG,EACnDC,EAAE,YAAc,gBCRT,MAAMI,EAAkBC,GAAsB,CACnD,OAAO,SAAS,KAAOA,CACzB,s/CCKaC,GAAkBC,IAOtB,CACL,QAPcC,EAAAA,QACd,IACE,MAAM,KAAK,CAAE,OAAQD,CAAA,EAAiB,CAACE,EAAGC,KAAO,CAAE,MAAO,GAAGA,EAAI,CAAC,GAAI,MAAO,GAAGA,EAAI,CAAC,EAAA,EAAK,EAC5F,CAACH,CAAa,CAAA,CAId,GCHEI,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EAYlBC,EAAgB,kCAETC,EAAyBC,EAAAA,WACpC,CACE,CACE,CAAC,eAAgBC,EAAa,kCAC9B,OAAAC,EACA,UAAAC,EACA,YAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,cAAAf,EACA,aAAAgB,EACA,WAAAC,EACA,eAAAC,EACA,kBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAKC,EAAAA,MAAA,EACLC,EAAUpB,EAAGQ,EAAWL,CAAa,EACrC,CAAE,QAAAkB,CAAA,EAAY1B,GAAeC,CAAa,EAE1C0B,EAAqBC,GAA0C,CACnE,MAAMC,EAAOD,EAAM,OAAO,MAAQ,OAAOA,EAAM,OAAO,KAAK,EAAI,EAE/D,GADAX,EAAaY,CAAI,EACbjB,EAAQ,CACV,MAAMb,EAAMgB,IAAac,CAAI,GAAK,GAClCb,EAAmBa,EAAM9B,CAAG,CAC9B,CACF,EAEA,OACE+B,OAAC,OAAI,UAAWL,EAAS,cAAad,EAAY,IAAAW,EAAW,GAAGD,EAC9D,SAAA,CAAAS,OAAC,OAAI,UAAWzB,EAAG,GAAGG,CAAa,oBAAoB,EACrD,SAAA,CAAAuB,EAAAA,IAACC,EAAAA,eAAA,CACC,SAAAD,EAAAA,IAACE,EAAAA,MAAA,CAAM,cAAa,GAAGtB,CAAU,SAAU,QAASY,EACjD,SAAAH,CAAA,CACH,EACF,EACAW,EAAAA,IAACG,EAAAA,OAAA,CACC,UAAW7B,EAAG,GAAGG,CAAa,UAAU,EACxC,cAAa,GAAGG,CAAU,UAC1B,GAAIQ,GAAkBI,EACtB,SAAUI,EACV,QAAAD,EACA,MAAO,OAAOZ,CAAW,CAAA,CAAA,CAC3B,EACF,EACAiB,EAAAA,IAACI,EAAAA,UAAA,CACC,UAAW9B,EAAG,GAAGG,CAAa,wBAAwB,EACtD,cAAa,GAAGG,CAAU,kBAEzB,SAAA,GAAGO,CAAU,IAAIjB,CAAa,EAAA,CAAA,CACjC,EACF,CAEJ,CACF,EAEAQ,EAAuB,YAAc,qfC9ExB2B,GAAsBC,IAU1B,CACL,QAVcnC,EAAAA,QACd,IACEmC,EAAmB,IAAKC,IAAsB,CAC5C,MAAO,GAAGA,CAAQ,GAClB,MAAO,GAAGA,CAAQ,EAAA,EAClB,EACJ,CAACD,CAAkB,CAAA,CAInB,GCPEhC,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EASlBC,EAAgB,uCAET+B,EAA6B7B,EAAAA,WAIxC,CACE,CACE,CAAC,eAAgBC,EAAa,uCAC9B,OAAAC,EACA,mBAAAyB,EACA,UAAAxB,EACA,WAAAE,EACA,mBAAAC,EACA,iBAAAwB,EACA,SAAAF,EACA,cAAAG,EACA,GAAGpB,CAAA,EAELC,IACG,CACH,MAAMoB,EAAWlB,EAAAA,MAAA,EACXC,EAAUpB,EAAGQ,EAAWL,CAAa,EACrC,CAAE,QAAAkB,CAAA,EAAYU,GAAmBC,CAAkB,EAEnDV,EAAqBC,GAA0C,CACnE,MAAMe,EAAmB,OAAOf,EAAM,OAAO,KAAK,EAElD,GADAY,EAAiBG,CAAgB,EAC7B/B,EAAQ,CACV,MAAMb,EAAMgB,EAAW,CAAE,KAAM,EAAG,SAAU4B,EAAkB,EAC1D3B,EACFA,EAAmB,CAAE,YAAa,EAAG,SAAU2B,EAAkB,IAAA5C,EAAK,EAEtED,EAAeC,CAAG,CAEtB,CACF,EAEA,OACE+B,OAAC,OAAI,UAAWL,EAAS,cAAad,EAAY,IAAAW,EAAW,GAAGD,EAC9D,SAAA,CAAAU,EAAAA,IAACE,EAAAA,MAAA,CACC,UAAW5B,EAAG,GAAGG,CAAa,wBAAwB,EACtD,cAAa,GAAGG,CAAU,uBAC1B,QAAS+B,EAET,SAAAX,EAAAA,IAAC,QAAK,UAAW1B,EAAG,GAAGG,CAAa,6BAA6B,EAAI,SAAAiC,CAAA,CAAc,CAAA,CAAA,EAErFV,EAAAA,IAACG,EAAAA,OAAA,CACC,UAAW7B,EAAG,GAAGG,CAAa,UAAU,EACxC,cAAa,GAAGG,CAAU,UAC1B,GAAI+B,EACJ,SAAUf,EACV,QAAAD,EACA,MAAOY,CAAA,CAAA,CACT,EACF,CAEJ,CACF,EAEAC,EAA2B,YAAc,+jECxEnClC,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EAWlBC,EAAgB,iCAEToC,EAAwBlC,EAAAA,WACnC,CACE,CACE,CAAC,eAAgBC,EAAa,iCAC9B,YAAakC,EACb,OAAAjC,EACA,UAAAC,EACA,SAAAiC,EACA,WAAA/B,EACA,aAAAE,EACA,WAAA8B,EACA,SAAAC,EACA,iBAAAC,EACA,GAAG5B,CAAA,EAELC,IACG,CACH,MAAMG,EAAUpB,EAAGQ,EAAWL,CAAa,EAE3C,OACEuB,EAAAA,IAAC,KAAA,CAAG,UAAWN,EAAS,cAAad,EAAY,IAAAW,EAAW,GAAGD,EAC5D,SAAAT,EACCkC,EACEhB,EAAAA,KAAC,OAAA,CACC,UAAWzB,EACT,GAAGG,CAAa,iBAChB,GAAGA,CAAa,+BAChB,GAAGA,CAAa,qBAChB,GAAGA,CAAa,4BAChB,GAAGA,CAAa,0BAAA,EAElB,eAAcwC,EAAW,OAAS,OAClC,cAAa,GAAGrC,CAAU,iBAE1B,SAAA,CAAAoB,EAAAA,IAACC,EAAAA,eAAA,CAAgB,SAAA,GAAGiB,CAAgB,IAAI,EACvCF,CAAA,CAAA,CAAA,EAGHjB,EAAAA,KAACe,EAAA,CACC,UAAWxC,EACT,GAAGG,CAAa,iBAChB,GAAGA,CAAa,+BAChB,GAAGA,CAAa,qBAChB,GAAGA,CAAa,4BAChB,CAAE,CAAC,GAAGA,CAAa,0BAA0B,EAAGwC,CAAA,CAAS,EAE3D,eAAcA,EAAW,OAAS,OAClC,cAAa,GAAGrC,CAAU,QAC1B,KAAMI,EAAWgC,CAAU,EAC3B,QAAS,IAAM9B,EAAa8B,CAAU,EAEtC,SAAA,CAAAhB,EAAAA,IAACC,EAAAA,eAAA,CAAgB,SAAA,GAAGiB,CAAgB,IAAI,EACvCF,CAAA,CAAA,CAAA,EAILjB,EAAAA,KAAC,SAAA,CACC,gBAAegB,EACf,UAAWzC,EACT,GAAGG,CAAa,iBAChB,GAAGA,CAAa,+BAChB,GAAGA,CAAa,qBAChB,GAAGA,CAAa,4BAChB,CAAE,CAAC,GAAGA,CAAa,0BAA0B,EAAGwC,CAAA,CAAS,EAE3D,cAAa,GAAGrC,CAAU,UAC1B,eAAcqC,EAAW,OAAS,OAClC,SAAAF,EACA,QAAS,IAAM7B,EAAa8B,CAAU,EACtC,KAAK,SAEL,SAAA,CAAAhB,EAAAA,IAACC,EAAAA,eAAA,CAAgB,SAAA,GAAGiB,CAAgB,IAAI,EACvCF,CAAA,CAAA,CAAA,EAGP,CAEJ,CACF,EAEAH,EAAsB,YAAc,gMC9F9BvC,GAAKC,EAAAA,EAAE,KAAKC,EAAM,EAIlBC,GAAgB,yCAET0C,EAAgC,CAAC,CAC5C,CAAC,eAAgBvC,EAAa,yCAC9B,UAAAE,EACA,CAAC,cAAesC,EAChB,GAAG9B,CACL,IAA0C,CACxC,MAAMI,EAAUpB,GAAGQ,EAAWL,EAAa,EAE3C,OACEuB,EAAAA,IAAC,KAAA,CAAG,UAAWN,EAAS,cAAad,EAAa,GAAGU,EACnD,SAAAU,EAAAA,IAACI,EAAAA,UAAA,CAAU,aAAYgB,EAAW,eAAG,EACvC,CAEJ,EAEAD,EAA8B,YAAc,gCCnB5C,MAAM7C,GAAKC,EAAAA,EAAE,KAAKC,EAAM,EAWlBC,GAAgB,0BAET4C,EAAkB1C,EAAAA,WAC7B,CACE,CACE,CAAC,eAAgBC,EAAa,0BAC9B,YAAakC,EACb,OAAAjC,EACA,UAAAC,EACA,YAAAC,EACA,WAAAC,EACA,aAAAE,EACA,MAAAoC,EACA,iBAAAJ,EACA,6BAAAK,EACA,GAAGjC,CAAA,EAELC,IACG,CACH,MAAMG,EAAUpB,GAAGQ,EAAWL,EAAa,EAE3C,OACEuB,EAAAA,IAAC,KAAA,CAAG,UAAWN,EAAS,cAAad,EAAY,IAAAW,EAAW,GAAGD,EAC5D,SAAAgC,EAAM,QAAQ,CAACN,EAAoBQ,EAAaF,IAAoB,CACnE,MAAMG,EACJC,EAAAA,cAACb,EAAA,CACE,GAAIhC,EACD,CAAE,OAAQ,GAAM,WAAAG,GAChB,CACE,OAAQ,OACR,WAAY,MAAA,EAElB,YAAa8B,EACb,cAAa,GAAGlC,CAAU,SAASoC,CAAU,GAC7C,IAAKA,EACL,aAAA9B,EACA,SAAU8B,IAAejC,EACzB,iBAAAmC,EACA,WAAAF,CAAA,CAAA,EAGJ,OAAOQ,IAAQ,GAAKF,EAAME,EAAM,CAAC,EAAI,IAAMR,EACvC,CAACS,CAAgB,EACjB,CACEzB,EAAAA,IAACmB,EAAA,CACC,cAAa,GAAGvC,CAAU,yBAAyBoC,CAAU,GAE7D,aAAYO,CAAA,EADP,GAAGP,CAAU,YAAA,EAGpBS,CAAA,CAER,CAAC,CAAA,CACH,CAEJ,CACF,EAEAJ,EAAgB,YAAc,8gECtExB/C,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EAWlBC,EAAgB,iCAETkD,EAAwBhD,EAAAA,WACnC,CACE,CACE,CAAC,cAAeyC,EAChB,CAAC,eAAgBxC,EAAa,iCAC9B,YAAakC,EACb,OAAAjC,EACA,SAAA+C,EACA,UAAA9C,EACA,SAAAiC,EACA,WAAA/B,EACA,aAAAE,EACA,iBAAA2C,EACA,WAAAC,EACA,GAAGxC,CAAA,EAELC,IACG,CACH,MAAMG,EAAUpB,EAAGQ,EAAWL,CAAa,EAC3C,OACEuB,EAAAA,IAAC,MAAA,CAAI,UAAWN,EAAS,cAAad,EAAY,IAAAW,EAAW,GAAGD,EAC7D,SAAAT,EACCkC,EACEf,EAAAA,IAAC,OAAA,CACC,aAAYoB,EACZ,UAAW9C,EACT,GAAGG,CAAa,iBAChB,GAAGA,CAAa,+BAChB,GAAGA,CAAa,4BAChB,GAAGA,CAAa,qBAChB,GAAGA,CAAa,2BAChB,CAAE,CAAC,GAAGA,CAAa,6CAA6C,EAAG,CAACqD,CAAA,CAAW,EAEjF,cAAa,GAAGlD,CAAU,iBAEzB,SAAAgD,CAAA,CAAA,EAGH5B,EAAAA,IAACc,EAAA,CACC,aAAYM,EACZ,UAAW9C,EACT,GAAGG,CAAa,iBAChB,GAAGA,CAAa,+BAChB,GAAGA,CAAa,4BAChB,GAAGA,CAAa,qBAChB,CAAE,CAAC,GAAGA,CAAa,6CAA6C,EAAG,CAACqD,CAAA,CAAW,EAEjF,cAAa,GAAGlD,CAAU,QAC1B,KAAMI,EAAW6C,CAAgB,EACjC,QAAS,IAAM3C,EAAa2C,CAAgB,EAE3C,SAAAD,CAAA,CAAA,EAIL5B,EAAAA,IAAC,SAAA,CACC,gBAAee,EACf,aAAYK,EACZ,UAAW9C,EACT,GAAGG,CAAa,iBAChB,GAAGA,CAAa,+BAChB,GAAGA,CAAa,4BAChB,GAAGA,CAAa,qBAChB,CACE,CAAC,GAAGA,CAAa,0BAA0B,EAAGsC,EAC9C,CAAC,GAAGtC,CAAa,6CAA6C,EAAG,CAACqD,CAAA,CACpE,EAEF,cAAa,GAAGlD,CAAU,UAC1B,SAAAmC,EACA,QAAS,IAAM7B,EAAa2C,CAAgB,EAC5C,KAAK,SAEJ,SAAAD,CAAA,CAAA,EAGP,CAEJ,CACF,EAEAD,EAAsB,YAAc,wBC9F7B,MAAMI,GAAqB,CAChCC,EACAzB,EACAxB,IAC2B,CAC3B,KAAM,CAACuC,EAAOW,CAAQ,EAAIC,EAAAA,SAAmB,CAAA,CAAE,EACzC,CAAChE,EAAeiE,CAAgB,EAAID,EAAAA,SAAiB,CAAC,EAE5DE,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAqB,KAAK,KAAKL,EAAazB,CAAQ,EAC1D4B,EAAiBE,CAAkB,EACnCJ,EAASK,GAAkBD,EAAoBtD,CAAW,CAAC,CAC7D,EAAG,CAACiD,EAAYzB,EAAUxB,CAAW,CAAC,EAE/B,CACL,MAAAuC,EACA,cAAApD,CAAA,CAEJ,EAEA,SAASoE,GAAkBD,EAA4BtD,EAA+B,CACpF,GAAIsD,GAAsB,EACxB,OAAO,MAAM,KAAK,CAAE,OAAQA,GAAsB,CAACjE,EAAGC,IAAMA,EAAI,CAAC,EAEnE,MAAMkE,EAAkB,CAAC,EAAG,EAAG,CAAC,EAChC,GAAIA,EAAgB,SAASxD,CAAW,EACtC,MAAO,CAAC,GAAGwD,EAAiB,EAAGF,CAAkB,EAEnD,MAAMG,EAAiB,CAACH,EAAqB,EAAGA,EAAqB,EAAGA,CAAkB,EAC1F,OAAIG,EAAe,SAASzD,CAAW,EAC9B,CAAC,EAAGsD,EAAqB,EAAG,GAAGG,CAAc,EAE/C,CAAC,EAAGzD,EAAc,EAAGA,EAAaA,EAAc,EAAGsD,CAAkB,CAC9E,CCzBA,MAAM/D,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EAuDlBC,EAAgB,oBAETgE,EAAa9D,EAAAA,WACxB,CACE,CACE,CAAC,eAAgBC,EAAa,oBAC9B,YAAA8D,EAAc,IACd,OAAA7D,EACA,mBAAAyB,EACA,UAAAxB,EACA,YAAAC,EAAc,EACd,WAAAC,EACA,mBAAAC,EACA,oBAAA0D,EACA,eAAAC,EACA,aAAA1D,EACA,WAAAC,EACA,eAAAC,EACA,kBAAAC,EACA,SAAAkB,EAAW,GACX,cAAAG,EACA,wBAAAmC,EACA,mBAAAC,EACA,iBAAA5B,EACA,WAAAc,EACA,6BAAAT,GACA,GAAGjC,EAAA,EAELC,KACG,CACH,MAAMG,GAAUpB,EAAGQ,EAAWL,CAAa,EACrC,CAACsE,EAAWC,EAAY,EAAId,EAAAA,SAAS3B,CAAQ,EAC7C,CAAE,MAAAe,EAAO,cAAApD,CAAA,EAAkB6D,GAAmBC,EAAYe,EAAWhE,CAAW,EAChF+C,EAAa,CAACgB,GAAsB,CAACF,EAErCK,EAAiBnD,GAAuB,CAC5CZ,IAAe,CAAE,YAAaY,EAAM,SAAAS,CAAA,CAAU,CAChD,EAEM2C,GAAepD,GACZd,IAAa,CAAE,KAAAc,EAAM,SAAAS,CAAA,CAAU,GAAK,GAGvC4C,GAAqBC,GAA8B,CACvDJ,GAAaI,CAAW,EACxBlE,IAAe,CAAE,YAAa,EAAG,SAAUkE,EAAa,CAC1D,EAEMC,GAAsB,CAACvD,EAAc9B,IAAsB,CAC3DiB,EACFA,EAAmB,CAAE,YAAaa,EAAM,SAAUiD,EAAW,IAAA/E,EAAK,EAElED,EAAeC,CAAG,CAEtB,EAEMsF,EAAYzE,EACd,CAAE,OAAQ,GAAe,WAAYqE,IACrC,CACE,OAAQ,OACR,WAAY,MAAA,EAGZK,GAAe1E,EAAS,MAAQ,MAEtC,OAAKX,EAKH8B,MAACuD,IAAa,UAAW7D,GAAS,cAAad,EAAY,IAAAW,GAAW,GAAGD,GACvE,SAAAS,EAAAA,KAAC,MAAA,CACC,UAAWzB,EAAG,GAAGG,CAAa,yBAA0B,CACtD,CAAC,GAAGA,CAAa,+CAA+C,EAAG,CAAC,CAAC6B,CAAA,CACtE,EAED,SAAA,CAAAP,OAAC,OAAI,UAAWzB,EAAG,GAAGG,CAAa,6BAA6B,EAC9D,SAAA,CAAAsB,EAAAA,KAAC4B,EAAA,CACE,GAAG2B,EACJ,YAAAZ,EACA,aAAYG,EACZ,UAAWvE,EAAG,GAAGG,CAAa,gBAAgB,EAC9C,cAAa,GAAGG,CAAU,yBAC1B,SAAUG,IAAgB,EAC1B,aAAckE,EACd,iBAAkBlE,EAAc,EAChC,WAAA+C,EAEA,SAAA,CAAA9B,EAAAA,IAACwD,EAAA,CAAc,KAAK,IAAA,CAAK,EACzBxD,EAAAA,IAAC,OAAA,CACC,UAAW1B,EAAG,GAAGG,CAAa,uBAAwB,CACpD,CAAC,GAAGA,CAAa,qCAAqC,EAAG,CAACqD,CAAA,CAC3D,EAEA,SAAAgB,CAAA,CAAA,EAEF/D,IAAgB,GACfiB,EAAAA,IAACC,EAAAA,eAAA,CAAe,cAAa,GAAGrB,CAAU,qCACvC,SAAA,GAAGsC,CAAgB,IAAInC,EAAc,CAAC,EAAA,CACzC,CAAA,CAAA,CAAA,SAGH,MAAA,CAAI,UAAWT,EAAG,GAAGG,CAAa,0BAA0B,EAC3D,SAAA,CAAAuB,EAAAA,IAACtB,EAAA,CACE,GAAG4E,EACJ,UAAWhF,EAAG,GAAGG,CAAa,kBAAmB,CAC/C,CAAC,GAAGA,CAAa,0BAA0B,EAAG6C,EAAM,OAAS,CAAA,CAC9D,EACD,YAAAvC,EACA,cAAa,GAAGH,CAAU,iBAC1B,mBAAoByE,GACpB,cAAAnF,EACA,aAAc+E,EACd,WAAA9D,EACA,eAAAC,EACA,kBAAAC,CAAA,CAAA,EAEFW,EAAAA,IAACqB,EAAA,CACE,GAAGiC,EACJ,YAAAZ,EACA,UAAWpE,EAAG,GAAGG,CAAa,UAAW,CACvC,CAAC,GAAGA,CAAa,kBAAkB,EAAG6C,EAAM,QAAU,CAAA,CACvD,EACD,YAAAvC,EACA,cAAa,GAAGH,CAAU,SAC1B,iBAAAsC,EACA,aAAc+B,EACd,6BAAA1B,GACA,MAAAD,CAAA,CAAA,CACF,EACF,EACAvB,EAAAA,KAAC4B,EAAA,CACE,GAAG2B,EACJ,YAAAZ,EACA,aAAYC,EACZ,UAAWrE,EAAG,GAAGG,CAAa,gBAAgB,EAC9C,cAAa,GAAGG,CAAU,qBAC1B,SAAUG,IAAgBb,EAC1B,aAAc+E,EACd,iBAAkBlE,EAAc,EAChC,WAAA+C,EAEA,SAAA,CAAA9B,EAAAA,IAAC,OAAA,CACC,UAAW1B,EAAG,GAAGG,CAAa,uBAAwB,CACpD,CAAC,GAAGA,CAAa,qCAAqC,EAAG,CAACqD,CAAA,CAC3D,EAEA,SAAAc,CAAA,CAAA,EAEF7D,IAAgBb,GACf8B,MAACC,EAAAA,eAAA,CAAe,cAAa,GAAGrB,CAAU,iCACvC,SAAA,GAAGsC,CAAgB,IAAInC,EAAc,CAAC,GACzC,EAEFiB,EAAAA,IAACyD,GAAAA,EAAA,CAAe,KAAK,IAAA,CAAK,CAAA,CAAA,CAAA,CAC5B,EACF,EACCnD,SACE,MAAA,CAAI,UAAWhC,EAAG,GAAGG,CAAa,8BAA8B,EAC/D,SAAAuB,EAAAA,IAACQ,EAAA,CACE,GAAI3B,EACD,CAAE,OAAQ,GAAM,WAAAG,EAAY,mBAAAC,CAAA,EAC5B,CAAE,OAAQ,OAAoB,WAAY,MAAA,EAC9C,mBAAAqB,EACA,UAAWhC,EAAG,GAAGG,CAAa,sBAAsB,EACpD,cAAa,GAAGG,CAAU,sBAC1B,iBAAkBuE,GAClB,SAAUJ,EACV,cAAArC,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,EAGN,EA3GO,IA6GX,CACF,EAEA+B,EAAW,YAAc"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const r=require("react/jsx-runtime"),g=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-BwxGMWds.js"),C=require("./bind-DeUYJ6m9.js"),K=require("./button-Dqxdc3nC.js"),V=require("./icon-DNHpBTHs-faYHqTXU.js"),L={"purpur-quantity-selector":"_purpur-quantity-selector_pun3b_1","purpur-quantity-selector--full-width":"_purpur-quantity-selector--full-width_pun3b_25","purpur-quantity-selector--loading":"_purpur-quantity-selector--loading_pun3b_31","purpur-quantity-selector--no-gap":"_purpur-quantity-selector--no-gap_pun3b_34","purpur-quantity-selector--no-gap-disabled-left":"_purpur-quantity-selector--no-gap-disabled-left_pun3b_39","purpur-quantity-selector--no-gap-disabled-right":"_purpur-quantity-selector--no-gap-disabled-right_pun3b_43","purpur-quantity-selector--no-gap-disabled":"_purpur-quantity-selector--no-gap-disabled_pun3b_39","purpur-quantity-selector__spinner":"_purpur-quantity-selector__spinner_pun3b_50","purpur-quantity-selector__spinner--full-width":"_purpur-quantity-selector__spinner--full-width_pun3b_57","purpur-quantity-selector__spinner--separated":"_purpur-quantity-selector__spinner--separated_pun3b_61"},Y={name:"minus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["minus"],category:"utility"},D=s=>r.jsx(V.b,{...s,svg:Y});D.displayName="IconMinus";const G={name:"plus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z" clip-rule="evenodd"/></svg>',keywords:["plus"],category:"utility"},F=s=>r.jsx(V.b,{...s,svg:G});F.displayName="IconPlus";const W={"purpur-quantity-selector-button":"_purpur-quantity-selector-button_qjlbs_1","purpur-quantity-selector-button--gap-left":"_purpur-quantity-selector-button--gap-left_qjlbs_4","purpur-quantity-selector-button--gap-right":"_purpur-quantity-selector-button--gap-right_qjlbs_7","purpur-quantity-selector-button--no-gap-right":"_purpur-quantity-selector-button--no-gap-right_qjlbs_10","purpur-quantity-selector-button--no-gap-left":"_purpur-quantity-selector-button--no-gap-left_qjlbs_13"},T=C.c.bind(W),q="purpur-quantity-selector-button",tt=({["data-testid"]:s,["aria-label"]:h,disabled:u,hasGap:o,variant:p,buttonType:e,onClick:x})=>{const d=T(q,{[`${q}--gap-left`]:o&&e==="decrement",[`${q}--gap-right`]:o&&e==="increment",[`${q}--no-gap-left`]:!o&&e==="decrement",[`${q}--no-gap-right`]:!o&&e==="increment"});return r.jsx(K.Button,{"data-testid":s,className:d,size:"sm",type:"submit",variant:p,onClick:()=>x(e),iconOnly:!0,"aria-label":h??"",disabled:u,tabIndex:-1,children:e==="increment"?r.jsx(F,{size:"xs"}):r.jsx(D,{size:"xs"})})},B=C.c.bind(L),et=["attached","separated"],rt=["primary","secondary"],n="purpur-quantity-selector",R=g.forwardRef(({["data-testid"]:s,className:h,variant:u,buttonVariant:o,onChange:p,value:e,defaultValue:x,fullWidth:d,disabled:k,loading:v,minValue:E,maxValue:H,ariaLabelDecrement:M,ariaLabelIncrement:z,...Q},I)=>{const[O,$]=g.useState(x??0),[w,j]=g.useState(O),a=e!==void 0,l=a?e:w,S=t=>s?`${s}-${t}`:void 0,i=k||v,y=Math.max(E??0,0),m=H??Number.MAX_SAFE_INTEGER,_=l===m,b=l===y;g.useEffect(()=>{a&&$(e)},[e,a]),g.useEffect(()=>{if(!a){const t=setTimeout(()=>{$(w)},300);return()=>clearTimeout(t)}},[w,a,p]);const A=B(h,n,{[`${n}--no-gap`]:u==="attached"&&!i&&!b&&!_,[`${n}--no-gap-disabled-left`]:u==="attached"&&!i&&!_&&b,[`${n}--no-gap-disabled-right`]:u==="attached"&&!i&&!b&&_,[`${n}--no-gap-disabled`]:u==="attached"&&(i||_&&b),[`${n}--full-width`]:d,[`${n}--loading`]:v}),Z=t=>{if(!/^[0-9]*$/.test(t.target.value))return;const f=+t.target.value;f<y||f>m||(a||j(f),p(f))},P=t=>{const c=t==="increment"?l+1:l-1;c<0||(a||j(c),p(c))},N=t=>{const c=t==="increment"&&_||t==="decrement"&&b;return r.jsx(tt,{"data-testid":S("button-"+t),variant:o,buttonType:t,hasGap:u==="separated",onClick:P,disabled:i||c,"aria-label":t==="increment"?z:M})},U=r.jsxs(r.Fragment,{children:[v&&r.jsx("div",{className:B(`${n}__spinner`,{[`${n}__spinner--full-width`]:d,[`${n}__spinner--separated`]:!d&&u==="separated"}),children:r.jsx(X.Spinner,{disabled:i,size:"xs","data-testid":S("spinner")},"spinner")}),N("decrement")]});return r.jsx(J.TextField,{value:l,type:"number",ref:I,className:A,"data-testid":s,onChange:Z,beforeField:U,afterField:N("increment"),disabled:i,min:y,max:m,role:"spinbutton","aria-valuenow":l,"aria-valuemax":m,"aria-valuemin":y,...Q})});R.displayName="QuantitySelector";exports.QuantitySelector=R;exports.quantitySelectorButtonVariants=rt;exports.quantitySelectorVariants=et;
|
|
2
|
-
//# sourceMappingURL=quantity-selector-BV7QwVlT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quantity-selector-BV7QwVlT.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n [\"aria-label\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n [\"aria-label\"]: ariaLabel,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n aria-label={ariaLabel ?? \"\"}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","ariaLabel","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
|