@purpur/library 9.2.3 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +27 -0
- package/CHANGELOG.md +13 -1
- package/dist/LICENSE.txt +1 -1
- package/dist/{RichText-Bi51HE6X.mjs → RichText-jZ-sHV-u.mjs} +2 -2
- package/dist/{RichText-Bi51HE6X.mjs.map → RichText-jZ-sHV-u.mjs.map} +1 -1
- package/dist/{RichText-DNroJJXv.js → RichText-yobCUjTD.js} +2 -2
- package/dist/{RichText-DNroJJXv.js.map → RichText-yobCUjTD.js.map} +1 -1
- package/dist/{ThemeProvider-bkyFCeo6.mjs → ThemeProvider-CkX-BNWN.mjs} +2 -2
- package/dist/ThemeProvider-CkX-BNWN.mjs.map +1 -0
- package/dist/{ThemeProvider-5r7lDX-h.js → ThemeProvider-Dy771oix.js} +2 -2
- package/dist/ThemeProvider-Dy771oix.js.map +1 -0
- package/dist/{accordion-OtFSShSB.mjs → accordion-CIU4U8-4.mjs} +3 -3
- package/dist/accordion-CIU4U8-4.mjs.map +1 -0
- package/dist/{accordion-OsA0HvdA.js → accordion-DyhOG54L.js} +2 -2
- package/dist/accordion-DyhOG54L.js.map +1 -0
- package/dist/accordion.cjs.js +1 -1
- package/dist/accordion.es.js +3 -3
- package/dist/{autocomplete-D9uCJzjY.js → autocomplete-3kV1btuI.js} +2 -2
- package/dist/{autocomplete-D9uCJzjY.js.map → autocomplete-3kV1btuI.js.map} +1 -1
- package/dist/{autocomplete-BipmyKf0.mjs → autocomplete-BEGRn-Wh.mjs} +2 -2
- package/dist/{autocomplete-BipmyKf0.mjs.map → autocomplete-BEGRn-Wh.mjs.map} +1 -1
- package/dist/autocomplete.cjs.js +1 -1
- package/dist/autocomplete.es.js +1 -1
- package/dist/{card-DR2hvxjZ.mjs → card-C2mdp-ur.mjs} +2 -2
- package/dist/{card-DR2hvxjZ.mjs.map → card-C2mdp-ur.mjs.map} +1 -1
- package/dist/{card-CRHXm5NR.js → card-DFdUs5RG.js} +2 -2
- package/dist/{card-CRHXm5NR.js.map → card-DFdUs5RG.js.map} +1 -1
- package/dist/card.cjs.js +1 -1
- package/dist/card.es.js +1 -1
- package/dist/{carousel-BkxojLwn.mjs → carousel-DLkTL9sj.mjs} +29 -29
- package/dist/{carousel-BkxojLwn.mjs.map → carousel-DLkTL9sj.mjs.map} +1 -1
- package/dist/{carousel-BCw-5u92.js → carousel-DXrtxRz5.js} +2 -2
- package/dist/{carousel-BCw-5u92.js.map → carousel-DXrtxRz5.js.map} +1 -1
- package/dist/carousel.cjs.js +1 -1
- package/dist/carousel.es.js +1 -1
- package/dist/checkbox-BHTx89JQ.mjs +236 -0
- package/dist/checkbox-BHTx89JQ.mjs.map +1 -0
- package/dist/checkbox-CDNcNv6d.js +2 -0
- package/dist/checkbox-CDNcNv6d.js.map +1 -0
- package/dist/checkbox.cjs.js +1 -1
- package/dist/checkbox.es.js +1 -1
- package/dist/{comparison-table-B8w65g43.js → comparison-table-CitEzX7h.js} +2 -2
- package/dist/comparison-table-CitEzX7h.js.map +1 -0
- package/dist/{comparison-table-D1zJpdLL.mjs → comparison-table-Dmbjsqyg.mjs} +52 -52
- package/dist/comparison-table-Dmbjsqyg.mjs.map +1 -0
- package/dist/comparison-table.cjs.js +1 -1
- package/dist/comparison-table.es.js +1 -1
- package/dist/components/accordion/src/accordion.d.ts +1 -1
- package/dist/components/accordion/src/accordion.d.ts.map +1 -1
- package/dist/components/checkbox/src/checkbox.d.ts +4 -0
- package/dist/components/checkbox/src/checkbox.d.ts.map +1 -1
- package/dist/components/comparison-table/src/comparison-table.d.ts +1 -1
- package/dist/components/comparison-table/src/comparison-table.d.ts.map +1 -1
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group-item.d.ts.map +1 -1
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +4 -2
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-combobox.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-select.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-shared.d.ts +3 -2
- package/dist/components/dropdown/src/dropdown-shared.d.ts.map +1 -1
- package/dist/components/dropdown/src/useDropdown.d.ts +2 -1
- package/dist/components/dropdown/src/useDropdown.d.ts.map +1 -1
- package/dist/components/listbox/src/listbox-item.d.ts +2 -2
- package/dist/components/listbox/src/listbox-item.d.ts.map +1 -1
- package/dist/components/listbox/src/listbox.d.ts +4 -1
- package/dist/components/listbox/src/listbox.d.ts.map +1 -1
- package/dist/components/toggle/src/toggle.d.ts +1 -0
- package/dist/components/toggle/src/toggle.d.ts.map +1 -1
- package/dist/components-metadata.js +4 -2
- package/dist/{content-block-Dm3L4g8w.mjs → content-block-CakKeJtN.mjs} +2 -2
- package/dist/{content-block-Dm3L4g8w.mjs.map → content-block-CakKeJtN.mjs.map} +1 -1
- package/dist/{content-block-CDRUH0pg.js → content-block-CrekbIfe.js} +2 -2
- package/dist/{content-block-CDRUH0pg.js.map → content-block-CrekbIfe.js.map} +1 -1
- package/dist/content-block.cjs.js +1 -1
- package/dist/content-block.es.js +1 -1
- package/dist/{countdown-DZ4IwkNy.mjs → countdown-BsLsEZBv.mjs} +2 -2
- package/dist/{countdown-DZ4IwkNy.mjs.map → countdown-BsLsEZBv.mjs.map} +1 -1
- package/dist/{countdown-CqYsZigV.js → countdown-hYrFLmRg.js} +2 -2
- package/dist/{countdown-CqYsZigV.js.map → countdown-hYrFLmRg.js.map} +1 -1
- package/dist/countdown.cjs.js +1 -1
- package/dist/countdown.es.js +1 -1
- package/dist/dismissable-chip-group-2updhyuR.js +2 -0
- package/dist/dismissable-chip-group-2updhyuR.js.map +1 -0
- package/dist/dismissable-chip-group-Cfs2s2BH.mjs +94 -0
- package/dist/dismissable-chip-group-Cfs2s2BH.mjs.map +1 -0
- package/dist/dismissable-chip-group.cjs.js +1 -1
- package/dist/dismissable-chip-group.es.js +6 -5
- package/dist/dropdown-CMO_VD5e.mjs +916 -0
- package/dist/dropdown-CMO_VD5e.mjs.map +1 -0
- package/dist/dropdown-DJKNQnuo.js +2 -0
- package/dist/dropdown-DJKNQnuo.js.map +1 -0
- package/dist/dropdown.cjs.js +1 -1
- package/dist/dropdown.es.js +1 -1
- package/dist/{footer-BXs8uzTA.mjs → footer-BLPlXaZK.mjs} +4 -4
- package/dist/{footer-BXs8uzTA.mjs.map → footer-BLPlXaZK.mjs.map} +1 -1
- package/dist/{footer-DF9adlni.js → footer-D9AcPwlH.js} +2 -2
- package/dist/{footer-DF9adlni.js.map → footer-D9AcPwlH.js.map} +1 -1
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/{hero-banner-BfxclVFT.js → hero-banner-D1A-_qou.js} +2 -2
- package/dist/{hero-banner-BfxclVFT.js.map → hero-banner-D1A-_qou.js.map} +1 -1
- package/dist/{hero-banner-CxPvhXD2.mjs → hero-banner-DkC_BqM7.mjs} +3 -3
- package/dist/{hero-banner-CxPvhXD2.mjs.map → hero-banner-DkC_BqM7.mjs.map} +1 -1
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/libraries/theme/src/theme-props.d.ts +1 -0
- package/dist/libraries/theme/src/theme-props.d.ts.map +1 -1
- package/dist/libraries/tokens/dist/color/variables.d.ts +1 -0
- package/dist/libraries/tokens/dist/color/variables.dark.d.ts +1 -0
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +592 -589
- package/dist/listbox-ATP4hOWF.js +2 -0
- package/dist/listbox-ATP4hOWF.js.map +1 -0
- package/dist/listbox-i6BQQ-NZ.mjs +73 -0
- package/dist/listbox-i6BQQ-NZ.mjs.map +1 -0
- package/dist/listbox.cjs.js +1 -1
- package/dist/listbox.es.js +3 -2
- package/dist/{modal-COF_UhvY.js → modal-Baisuc6m.js} +2 -2
- package/dist/{modal-COF_UhvY.js.map → modal-Baisuc6m.js.map} +1 -1
- package/dist/{modal-BMg43Fvd.mjs → modal-COZ1POGG.mjs} +2 -2
- package/dist/{modal-BMg43Fvd.mjs.map → modal-COZ1POGG.mjs.map} +1 -1
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{notification-BqjaT4E7.js → notification-B5bNNq86.js} +2 -2
- package/dist/{notification-BqjaT4E7.js.map → notification-B5bNNq86.js.map} +1 -1
- package/dist/{notification-DdRS5BF2.mjs → notification-BbQCmsnY.mjs} +2 -2
- package/dist/{notification-DdRS5BF2.mjs.map → notification-BbQCmsnY.mjs.map} +1 -1
- package/dist/notification.cjs.js +1 -1
- package/dist/notification.es.js +1 -1
- package/dist/{pagination-CVYUacXN.mjs → pagination-Cc_4zCQA.mjs} +2 -2
- package/dist/{pagination-CVYUacXN.mjs.map → pagination-Cc_4zCQA.mjs.map} +1 -1
- package/dist/{pagination-Bwlkvqye.js → pagination-rFRdkHII.js} +2 -2
- package/dist/{pagination-Bwlkvqye.js.map → pagination-rFRdkHII.js.map} +1 -1
- package/dist/pagination.cjs.js +1 -1
- package/dist/pagination.es.js +1 -1
- package/dist/paragraph-By4jMjnH.js +2 -0
- package/dist/{paragraph-BsI53OR0.js.map → paragraph-By4jMjnH.js.map} +1 -1
- package/dist/{paragraph-Ci50OF1u.mjs → paragraph-DSxXmX_0.mjs} +23 -23
- package/dist/{paragraph-Ci50OF1u.mjs.map → paragraph-DSxXmX_0.mjs.map} +1 -1
- package/dist/paragraph.cjs.js +1 -1
- package/dist/paragraph.es.js +1 -1
- package/dist/{popover-XCUa2GfC.js → popover-B0XJZ5mj.js} +2 -2
- package/dist/{popover-XCUa2GfC.js.map → popover-B0XJZ5mj.js.map} +1 -1
- package/dist/{popover-Dwqs1wGH.mjs → popover-_xJATlhN.mjs} +2 -2
- package/dist/{popover-Dwqs1wGH.mjs.map → popover-_xJATlhN.mjs.map} +1 -1
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{product-card-BfB82XpS.mjs → product-card-C3_N0t-R.mjs} +3 -3
- package/dist/{product-card-BfB82XpS.mjs.map → product-card-C3_N0t-R.mjs.map} +1 -1
- package/dist/{product-card-bVQ7JhHj.js → product-card-CoY1KggV.js} +2 -2
- package/dist/{product-card-bVQ7JhHj.js.map → product-card-CoY1KggV.js.map} +1 -1
- package/dist/product-card.cjs.js +1 -1
- package/dist/product-card.es.js +1 -1
- package/dist/{promotion-card-DqBBt2sz.js → promotion-card-Bag64gqP.js} +2 -2
- package/dist/{promotion-card-DqBBt2sz.js.map → promotion-card-Bag64gqP.js.map} +1 -1
- package/dist/{promotion-card-BhNw94sC.mjs → promotion-card-BiHnQvhn.mjs} +4 -4
- package/dist/{promotion-card-BhNw94sC.mjs.map → promotion-card-BiHnQvhn.mjs.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-CDSfcTb1.js +2 -0
- package/dist/{quantity-selector-8AkKNDik.js.map → quantity-selector-CDSfcTb1.js.map} +1 -1
- package/dist/{quantity-selector-C23kU1hF.mjs → quantity-selector-CvBvnMeB.mjs} +35 -35
- package/dist/{quantity-selector-C23kU1hF.mjs.map → quantity-selector-CvBvnMeB.mjs.map} +1 -1
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +1 -1
- package/dist/{radio-card-group-BlRZBa-9.mjs → radio-card-group-CneOprGY.mjs} +2 -2
- package/dist/{radio-card-group-BlRZBa-9.mjs.map → radio-card-group-CneOprGY.mjs.map} +1 -1
- package/dist/{radio-card-group-sYcfDPJq.js → radio-card-group-Ctuvg61o.js} +2 -2
- package/dist/{radio-card-group-sYcfDPJq.js.map → radio-card-group-Ctuvg61o.js.map} +1 -1
- package/dist/radio-card-group.cjs.js +1 -1
- package/dist/radio-card-group.es.js +1 -1
- package/dist/rich-text.cjs.js +1 -1
- package/dist/rich-text.es.js +1 -1
- package/dist/{search-field-CZ9mIyZ-.mjs → search-field-CpkHGIYi.mjs} +3 -3
- package/dist/{search-field-CZ9mIyZ-.mjs.map → search-field-CpkHGIYi.mjs.map} +1 -1
- package/dist/{search-field-DD9UkOca.js → search-field-Z0PqDARl.js} +2 -2
- package/dist/{search-field-DD9UkOca.js.map → search-field-Z0PqDARl.js.map} +1 -1
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/{stepper-uBfDdIju.mjs → stepper-CNnx_NiR.mjs} +2 -2
- package/dist/{stepper-uBfDdIju.mjs.map → stepper-CNnx_NiR.mjs.map} +1 -1
- package/dist/{stepper-w-raIwqJ.js → stepper-Df4X7DDR.js} +2 -2
- package/dist/{stepper-w-raIwqJ.js.map → stepper-Df4X7DDR.js.map} +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-DsgqX7Vv.js → table-DRYW0yw4.js} +2 -2
- package/dist/{table-DsgqX7Vv.js.map → table-DRYW0yw4.js.map} +1 -1
- package/dist/{table-Dx_dhGT6.mjs → table-DUY8kQfE.mjs} +5 -5
- package/dist/{table-Dx_dhGT6.mjs.map → table-DUY8kQfE.mjs.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/{text-area-DDZ_GQPW.mjs → text-area-kJvg6cFp.mjs} +3 -3
- package/dist/{text-area-DDZ_GQPW.mjs.map → text-area-kJvg6cFp.mjs.map} +1 -1
- package/dist/{text-area-C6W0fDiQ.js → text-area-peNKG7g4.js} +2 -2
- package/dist/{text-area-C6W0fDiQ.js.map → text-area-peNKG7g4.js.map} +1 -1
- package/dist/text-area.cjs.js +1 -1
- package/dist/text-area.es.js +1 -1
- package/dist/theme.cjs.js +1 -1
- package/dist/theme.es.js +2 -2
- package/dist/toggle-B8ZLUVar.js +2 -0
- package/dist/{toggle-C8IwTbX8.js.map → toggle-B8ZLUVar.js.map} +1 -1
- package/dist/toggle-CY3J8BRX.mjs +302 -0
- package/dist/{toggle-D23x1wWk.mjs.map → toggle-CY3J8BRX.mjs.map} +1 -1
- package/dist/toggle.cjs.js +1 -1
- package/dist/toggle.es.js +1 -1
- package/dist/tokens/color/variables.css +1 -0
- package/dist/tokens/color/variables.d.ts +1 -0
- package/dist/tokens/color/variables.dark.css +1 -0
- package/dist/tokens/color/variables.dark.d.ts +1 -0
- package/dist/tokens/color/variables.dark.js +1 -0
- package/dist/tokens/color/variables.dark.json +2 -1
- package/dist/tokens/color/variables.dark.scss +1 -0
- package/dist/tokens/color/variables.js +1 -0
- package/dist/tokens/color/variables.json +2 -1
- package/dist/tokens/color/variables.scss +1 -0
- package/dist/tokens.cjs.js +1 -1
- package/dist/tokens.es.js +76 -75
- package/dist/{tooltip-0pLBlDG3.js → tooltip-C8Zxnqdb.js} +2 -2
- package/dist/{tooltip-0pLBlDG3.js.map → tooltip-C8Zxnqdb.js.map} +1 -1
- package/dist/{tooltip-Kom0VfOC.mjs → tooltip-VlURN8H3.mjs} +2 -2
- package/dist/{tooltip-Kom0VfOC.mjs.map → tooltip-VlURN8H3.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/use-autocomplete.es-BwAzMcau.js +2 -0
- package/dist/use-autocomplete.es-BwAzMcau.js.map +1 -0
- package/dist/{use-autocomplete.es-CVv3z8t6.mjs → use-autocomplete.es-CKb0RHKG.mjs} +37 -35
- package/dist/use-autocomplete.es-CKb0RHKG.mjs.map +1 -0
- package/dist/useColorScheme-DNyjsWX9.js +2 -0
- package/dist/{useColorScheme-0GMDl2GF.js.map → useColorScheme-DNyjsWX9.js.map} +1 -1
- package/dist/{useColorScheme-Di_Q0JR4.mjs → useColorScheme-tAkY9LHt.mjs} +2 -2
- package/dist/{useColorScheme-Di_Q0JR4.mjs.map → useColorScheme-tAkY9LHt.mjs.map} +1 -1
- package/dist/{variables-CKp4o9Tn.mjs → variables-B5hbV0Uy.mjs} +128 -127
- package/dist/variables-B5hbV0Uy.mjs.map +1 -0
- package/dist/variables-DoI78zZc.js +2 -0
- package/dist/variables-DoI78zZc.js.map +1 -0
- package/package.json +20 -20
- package/tokens/color/variables.css +1 -0
- package/tokens/color/variables.d.ts +1 -0
- package/tokens/color/variables.dark.css +1 -0
- package/tokens/color/variables.dark.d.ts +1 -0
- package/tokens/color/variables.dark.js +1 -0
- package/tokens/color/variables.dark.json +2 -1
- package/tokens/color/variables.dark.scss +1 -0
- package/tokens/color/variables.js +1 -0
- package/tokens/color/variables.json +2 -1
- package/tokens/color/variables.scss +1 -0
- package/dist/ThemeProvider-5r7lDX-h.js.map +0 -1
- package/dist/ThemeProvider-bkyFCeo6.mjs.map +0 -1
- package/dist/accordion-OsA0HvdA.js.map +0 -1
- package/dist/accordion-OtFSShSB.mjs.map +0 -1
- package/dist/checkbox-D6qWgpWR.mjs +0 -231
- package/dist/checkbox-D6qWgpWR.mjs.map +0 -1
- package/dist/checkbox-Dk3bZkZ3.js +0 -2
- package/dist/checkbox-Dk3bZkZ3.js.map +0 -1
- package/dist/comparison-table-B8w65g43.js.map +0 -1
- package/dist/comparison-table-D1zJpdLL.mjs.map +0 -1
- package/dist/dismissable-chip-group-Cd23yjBa.js +0 -2
- package/dist/dismissable-chip-group-Cd23yjBa.js.map +0 -1
- package/dist/dismissable-chip-group-D-gD93ON.mjs +0 -89
- package/dist/dismissable-chip-group-D-gD93ON.mjs.map +0 -1
- package/dist/dropdown-BsqVnd7z.js +0 -2
- package/dist/dropdown-BsqVnd7z.js.map +0 -1
- package/dist/dropdown-TO3Mh0bk.mjs +0 -910
- package/dist/dropdown-TO3Mh0bk.mjs.map +0 -1
- package/dist/listbox-COBHLRtB.js +0 -2
- package/dist/listbox-COBHLRtB.js.map +0 -1
- package/dist/listbox-DG4KmQP_.mjs +0 -66
- package/dist/listbox-DG4KmQP_.mjs.map +0 -1
- package/dist/paragraph-BsI53OR0.js +0 -2
- package/dist/quantity-selector-8AkKNDik.js +0 -2
- package/dist/toggle-C8IwTbX8.js +0 -2
- package/dist/toggle-D23x1wWk.mjs +0 -287
- package/dist/use-autocomplete.es-BHDgQLae.js +0 -2
- package/dist/use-autocomplete.es-BHDgQLae.js.map +0 -1
- package/dist/use-autocomplete.es-CVv3z8t6.mjs.map +0 -1
- package/dist/useColorScheme-0GMDl2GF.js +0 -2
- package/dist/variables-CKp4o9Tn.mjs.map +0 -1
- package/dist/variables-DH61hVNE.js +0 -2
- package/dist/variables-DH61hVNE.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-block-
|
|
1
|
+
{"version":3,"file":"content-block-CakKeJtN.mjs","sources":["../../../components/content-block/src/content-block-group.tsx","../../../components/content-block/src/content-block.tsx"],"sourcesContent":["import React, { createContext, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./content-block-group.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-content-block-group\";\n\nexport const ContentBlockGroupContext = createContext<{\n negative?: boolean;\n reverse?: boolean;\n} | null>(null);\n\nexport type ContentBlockGroupProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n negative?: boolean;\n mediaStartPosition?: \"left\" | \"right\";\n};\n\nexport const ContentBlockGroup = ({\n children,\n className,\n negative,\n mediaStartPosition = \"left\",\n ...props\n}: ContentBlockGroupProps) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--negative`]: negative,\n },\n className,\n ]);\n\n return (\n <div className={classes} {...props}>\n <ContentBlockGroupContext.Provider\n value={{ negative, reverse: mediaStartPosition === \"right\" }}\n >\n {children}\n </ContentBlockGroupContext.Provider>\n </div>\n );\n};\n\nContentBlockGroup.displayName = \"ContentBlockGroup\";\n","import React, { type ReactNode, useContext } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType, type HeadingVariant } from \"@purpur/heading\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./content-block.module.scss\";\nimport { ContentBlockGroup, ContentBlockGroupContext } from \"./content-block-group\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-content-block\";\n\nexport type ContentBlockProps = BaseProps & {\n /**\n * @deprecated Set negative on ContentBlockGroup instead\n */\n negative?: boolean;\n image?: ReactNode;\n video?: ReactNode;\n /**\n * @deprecated Use beforeTitle instead\n */\n badge?: ReactNode;\n actions?: ReactNode;\n listItems?: string[];\n beforeTitle?: ReactNode;\n title?: string;\n headingTag?: HeadingTagType;\n headingVariant?: HeadingVariant;\n};\n\nexport const ContentBlock = ({\n className,\n negative,\n image,\n video,\n badge,\n beforeTitle,\n title,\n actions,\n listItems,\n headingTag = \"h2\",\n headingVariant = \"display-15\",\n children,\n ...props\n}: ContentBlockProps) => {\n const context = useContext(ContentBlockGroupContext);\n\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--negative`]: context?.negative || negative,\n [`${rootClassName}--reverse`]: context?.reverse,\n },\n className,\n ]);\n\n return (\n <div className={classes} {...props}>\n <div className={cx(`${rootClassName}__section`)}>\n {video ? (\n <div className={cx(`${rootClassName}__video-wrapper`)}>{video}</div>\n ) : (\n <div className={cx(`${rootClassName}__image-wrapper`)}>{image}</div>\n )}\n </div>\n <div className={cx(`${rootClassName}__section`)}>\n <div className={cx(`${rootClassName}__content-wrapper`)}>\n {badge && <div className={cx(`${rootClassName}__badge-wrapper`)}>{badge}</div>}\n {beforeTitle}\n {title?.trim() && (\n <Heading variant={headingVariant} tag={headingTag} negative={negative}>\n {title}\n </Heading>\n )}\n <div className={cx(`${rootClassName}__content`)}>{children}</div>\n {!!listItems?.length && (\n <ul className={cx(`${rootClassName}__list`)}>\n {listItems.map(\n (item) =>\n item && (\n <li className={cx(`${rootClassName}__list-item`)} key={item}>\n <IconCheckmark size=\"xs\" className={cx(`${rootClassName}__list-item-icon`)} />\n <Paragraph negative={negative}>{item}</Paragraph>\n </li>\n )\n )}\n </ul>\n )}\n {actions && <div className={cx(`${rootClassName}__actions`)}>{actions}</div>}\n </div>\n </div>\n </div>\n );\n};\n\nContentBlock.Group = ContentBlockGroup;\nContentBlock.displayName = \"ContentBlock\";\n"],"names":["cx","c","styles","rootClassName","ContentBlockGroupContext","createContext","ContentBlockGroup","children","className","negative","mediaStartPosition","props","classes","jsx","ContentBlock","image","video","badge","beforeTitle","title","actions","listItems","headingTag","headingVariant","context","useContext","jsxs","Heading","item","IconCheckmark","Paragraph"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("react/jsx-runtime"),k=require("react"),w=require("./heading-drD5ugCC.js"),C=require("./checkmark.es-lYntWFA3.js"),y=require("./paragraph-
|
|
2
|
-
//# sourceMappingURL=content-block-
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),k=require("react"),w=require("./heading-drD5ugCC.js"),C=require("./checkmark.es-lYntWFA3.js"),y=require("./paragraph-By4jMjnH.js"),j=require("./bind-DeUYJ6m9.js"),B={"purpur-content-block":"_purpur-content-block_mjbqd_1","purpur-content-block--reverse":"_purpur-content-block--reverse_mjbqd_13","purpur-content-block__section":"_purpur-content-block__section_mjbqd_20","purpur-content-block__image-wrapper":"_purpur-content-block__image-wrapper_mjbqd_28","purpur-content-block__video-wrapper":"_purpur-content-block__video-wrapper_mjbqd_31","purpur-content-block__content-wrapper":"_purpur-content-block__content-wrapper_mjbqd_41","purpur-content-block__badge-wrapper":"_purpur-content-block__badge-wrapper_mjbqd_46","purpur-content-block__content":"_purpur-content-block__content_mjbqd_41","purpur-content-block__list":"_purpur-content-block__list_mjbqd_52","purpur-content-block__list-item":"_purpur-content-block__list-item_mjbqd_57","purpur-content-block__list-item-icon":"_purpur-content-block__list-item-icon_mjbqd_65","purpur-content-block__actions":"_purpur-content-block__actions_mjbqd_68","purpur-content-block--negative":"_purpur-content-block--negative_mjbqd_79","purpur-content-block__text-spacing":"_purpur-content-block__text-spacing_mjbqd_79"},G={"purpur-content-block-group":"_purpur-content-block-group_xzyy2_1"},z=j.c.bind(G),m="purpur-content-block-group",x=k.createContext(null),v=({children:s,className:n,negative:c,mediaStartPosition:o="left",..._})=>{const p=z([m,{[`${m}--negative`]:c},n]);return e.jsx("div",{className:p,..._,children:e.jsx(x.Provider,{value:{negative:c,reverse:o==="right"},children:s})})};v.displayName="ContentBlockGroup";const r=j.c.bind(B),t="purpur-content-block",u=({className:s,negative:n,image:c,video:o,badge:_,beforeTitle:p,title:a,actions:i,listItems:b,headingTag:h="h2",headingVariant:q="display-15",children:g,...N})=>{const d=k.useContext(x),$=r([t,{[`${t}--negative`]:d?.negative||n,[`${t}--reverse`]:d?.reverse},s]);return e.jsxs("div",{className:$,...N,children:[e.jsx("div",{className:r(`${t}__section`),children:o?e.jsx("div",{className:r(`${t}__video-wrapper`),children:o}):e.jsx("div",{className:r(`${t}__image-wrapper`),children:c})}),e.jsx("div",{className:r(`${t}__section`),children:e.jsxs("div",{className:r(`${t}__content-wrapper`),children:[_&&e.jsx("div",{className:r(`${t}__badge-wrapper`),children:_}),p,a?.trim()&&e.jsx(w.Heading,{variant:q,tag:h,negative:n,children:a}),e.jsx("div",{className:r(`${t}__content`),children:g}),!!b?.length&&e.jsx("ul",{className:r(`${t}__list`),children:b.map(l=>l&&e.jsxs("li",{className:r(`${t}__list-item`),children:[e.jsx(C.a,{size:"xs",className:r(`${t}__list-item-icon`)}),e.jsx(y.Paragraph,{negative:n,children:l})]},l))}),i&&e.jsx("div",{className:r(`${t}__actions`),children:i})]})})]})};u.Group=v;u.displayName="ContentBlock";exports.ContentBlock=u;
|
|
2
|
+
//# sourceMappingURL=content-block-CrekbIfe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-block-
|
|
1
|
+
{"version":3,"file":"content-block-CrekbIfe.js","sources":["../../../components/content-block/src/content-block-group.tsx","../../../components/content-block/src/content-block.tsx"],"sourcesContent":["import React, { createContext, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./content-block-group.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-content-block-group\";\n\nexport const ContentBlockGroupContext = createContext<{\n negative?: boolean;\n reverse?: boolean;\n} | null>(null);\n\nexport type ContentBlockGroupProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n negative?: boolean;\n mediaStartPosition?: \"left\" | \"right\";\n};\n\nexport const ContentBlockGroup = ({\n children,\n className,\n negative,\n mediaStartPosition = \"left\",\n ...props\n}: ContentBlockGroupProps) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--negative`]: negative,\n },\n className,\n ]);\n\n return (\n <div className={classes} {...props}>\n <ContentBlockGroupContext.Provider\n value={{ negative, reverse: mediaStartPosition === \"right\" }}\n >\n {children}\n </ContentBlockGroupContext.Provider>\n </div>\n );\n};\n\nContentBlockGroup.displayName = \"ContentBlockGroup\";\n","import React, { type ReactNode, useContext } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType, type HeadingVariant } from \"@purpur/heading\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./content-block.module.scss\";\nimport { ContentBlockGroup, ContentBlockGroupContext } from \"./content-block-group\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-content-block\";\n\nexport type ContentBlockProps = BaseProps & {\n /**\n * @deprecated Set negative on ContentBlockGroup instead\n */\n negative?: boolean;\n image?: ReactNode;\n video?: ReactNode;\n /**\n * @deprecated Use beforeTitle instead\n */\n badge?: ReactNode;\n actions?: ReactNode;\n listItems?: string[];\n beforeTitle?: ReactNode;\n title?: string;\n headingTag?: HeadingTagType;\n headingVariant?: HeadingVariant;\n};\n\nexport const ContentBlock = ({\n className,\n negative,\n image,\n video,\n badge,\n beforeTitle,\n title,\n actions,\n listItems,\n headingTag = \"h2\",\n headingVariant = \"display-15\",\n children,\n ...props\n}: ContentBlockProps) => {\n const context = useContext(ContentBlockGroupContext);\n\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--negative`]: context?.negative || negative,\n [`${rootClassName}--reverse`]: context?.reverse,\n },\n className,\n ]);\n\n return (\n <div className={classes} {...props}>\n <div className={cx(`${rootClassName}__section`)}>\n {video ? (\n <div className={cx(`${rootClassName}__video-wrapper`)}>{video}</div>\n ) : (\n <div className={cx(`${rootClassName}__image-wrapper`)}>{image}</div>\n )}\n </div>\n <div className={cx(`${rootClassName}__section`)}>\n <div className={cx(`${rootClassName}__content-wrapper`)}>\n {badge && <div className={cx(`${rootClassName}__badge-wrapper`)}>{badge}</div>}\n {beforeTitle}\n {title?.trim() && (\n <Heading variant={headingVariant} tag={headingTag} negative={negative}>\n {title}\n </Heading>\n )}\n <div className={cx(`${rootClassName}__content`)}>{children}</div>\n {!!listItems?.length && (\n <ul className={cx(`${rootClassName}__list`)}>\n {listItems.map(\n (item) =>\n item && (\n <li className={cx(`${rootClassName}__list-item`)} key={item}>\n <IconCheckmark size=\"xs\" className={cx(`${rootClassName}__list-item-icon`)} />\n <Paragraph negative={negative}>{item}</Paragraph>\n </li>\n )\n )}\n </ul>\n )}\n {actions && <div className={cx(`${rootClassName}__actions`)}>{actions}</div>}\n </div>\n </div>\n </div>\n );\n};\n\nContentBlock.Group = ContentBlockGroup;\nContentBlock.displayName = \"ContentBlock\";\n"],"names":["cx","c","styles","rootClassName","ContentBlockGroupContext","createContext","ContentBlockGroup","children","className","negative","mediaStartPosition","props","classes","jsx","ContentBlock","image","video","badge","beforeTitle","title","actions","listItems","headingTag","headingVariant","context","useContext","jsxs","Heading","item","IconCheckmark","Paragraph"],"mappings":"q2CAMMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,6BAETC,EAA2BC,EAAAA,cAG9B,IAAI,EAQDC,EAAoB,CAAC,CAChC,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,OACrB,GAAGC,CACL,IAA8B,CAC5B,MAAMC,EAAUZ,EAAG,CACjBG,EACA,CACE,CAAC,GAAGA,CAAa,YAAY,EAAGM,CAAA,EAElCD,CAAA,CACD,EAED,OACEK,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAU,GAAGD,EAC3B,SAAAE,EAAAA,IAACT,EAAyB,SAAzB,CACC,MAAO,CAAE,SAAAK,EAAU,QAASC,IAAuB,OAAA,EAElD,SAAAH,CAAA,CAAA,EAEL,CAEJ,EAEAD,EAAkB,YAAc,oBCpChC,MAAMN,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,uBAqBTW,EAAe,CAAC,CAC3B,UAAAN,EACA,SAAAC,EACA,MAAAM,EACA,MAAAC,EACA,MAAAC,EACA,YAAAC,EACA,MAAAC,EACA,QAAAC,EACA,UAAAC,EACA,WAAAC,EAAa,KACb,eAAAC,EAAiB,aACjB,SAAAhB,EACA,GAAGI,CACL,IAAyB,CACvB,MAAMa,EAAUC,EAAAA,WAAWrB,CAAwB,EAE7CQ,EAAUZ,EAAG,CACjBG,EACA,CACE,CAAC,GAAGA,CAAa,YAAY,EAAGqB,GAAS,UAAYf,EACrD,CAAC,GAAGN,CAAa,WAAW,EAAGqB,GAAS,OAAA,EAE1ChB,CAAA,CACD,EAED,OACEkB,EAAAA,KAAC,MAAA,CAAI,UAAWd,EAAU,GAAGD,EAC3B,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAI,UAAWb,EAAG,GAAGG,CAAa,WAAW,EAC3C,SAAAa,EACCH,MAAC,MAAA,CAAI,UAAWb,EAAG,GAAGG,CAAa,iBAAiB,EAAI,SAAAa,CAAA,CAAM,EAE9DH,EAAAA,IAAC,MAAA,CAAI,UAAWb,EAAG,GAAGG,CAAa,iBAAiB,EAAI,SAAAY,CAAA,CAAM,EAElE,EACAF,MAAC,MAAA,CAAI,UAAWb,EAAG,GAAGG,CAAa,WAAW,EAC5C,SAAAuB,EAAAA,KAAC,OAAI,UAAW1B,EAAG,GAAGG,CAAa,mBAAmB,EACnD,SAAA,CAAAc,GAASJ,EAAAA,IAAC,OAAI,UAAWb,EAAG,GAAGG,CAAa,iBAAiB,EAAI,SAAAc,CAAA,CAAM,EACvEC,EACAC,GAAO,KAAA,GACNN,MAACc,EAAAA,QAAA,CAAQ,QAASJ,EAAgB,IAAKD,EAAY,SAAAb,EAChD,SAAAU,CAAA,CACH,EAEFN,MAAC,OAAI,UAAWb,EAAG,GAAGG,CAAa,WAAW,EAAI,SAAAI,EAAS,EAC1D,CAAC,CAACc,GAAW,QACZR,EAAAA,IAAC,KAAA,CAAG,UAAWb,EAAG,GAAGG,CAAa,QAAQ,EACvC,SAAAkB,EAAU,IACRO,GACCA,GACEF,EAAAA,KAAC,KAAA,CAAG,UAAW1B,EAAG,GAAGG,CAAa,aAAa,EAC7C,SAAA,CAAAU,EAAAA,IAACgB,EAAAA,EAAA,CAAc,KAAK,KAAK,UAAW7B,EAAG,GAAGG,CAAa,kBAAkB,CAAA,CAAG,EAC5EU,EAAAA,IAACiB,EAAAA,UAAA,CAAU,SAAArB,EAAqB,SAAAmB,CAAA,CAAK,CAAA,CAAA,EAFgBA,CAGvD,CAAA,EAGR,EAEDR,SAAY,MAAA,CAAI,UAAWpB,EAAG,GAAGG,CAAa,WAAW,EAAI,SAAAiB,CAAA,CAAQ,CAAA,CAAA,CACxE,CAAA,CACF,CAAA,EACF,CAEJ,EAEAN,EAAa,MAAQR,EACrBQ,EAAa,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./content-block-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./content-block-CrekbIfe.js");exports.ContentBlock=t.ContentBlock;
|
|
2
2
|
//# sourceMappingURL=content-block.cjs.js.map
|
package/dist/content-block.es.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as v, jsx as u, Fragment as T } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as k, useId as G, useState as J, useMemo as z, useEffect as K } from "react";
|
|
3
|
-
import { P as M } from "./paragraph-
|
|
3
|
+
import { P as M } from "./paragraph-DSxXmX_0.mjs";
|
|
4
4
|
import { V as O } from "./visually-hidden-BYFkJEp1.mjs";
|
|
5
5
|
import { c as A } from "./bind-CU-R61T-.mjs";
|
|
6
6
|
const U = {
|
|
@@ -176,4 +176,4 @@ B.displayName = "Countdown";
|
|
|
176
176
|
export {
|
|
177
177
|
B as C
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=countdown-
|
|
179
|
+
//# sourceMappingURL=countdown-BsLsEZBv.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"countdown-DZ4IwkNy.mjs","sources":["../../../components/countdown/src/counter.tsx","../../../components/countdown/src/utils.ts","../../../components/countdown/src/countdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport { type CounterLabels } from \"./countdown.types\";\nimport styles from \"./counter.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown-counter\";\n\ninterface CounterProps {\n numbers: string[];\n size: \"md\" | \"lg\";\n tag: \"days\" | \"hours\" | \"minutes\" | \"seconds\";\n counterLabels: CounterLabels;\n}\n\nexport const Counter = ({ tag, size, numbers, counterLabels }: CounterProps) => {\n const renderLabel = () => {\n const label = counterLabels[tag];\n const abbreviatedLabel = counterLabels[`${tag}Abbr`];\n\n return (\n <>\n {abbreviatedLabel && (\n <Paragraph className={cx(`${rootClassName}__label`, `${rootClassName}__label--abbr`)}>\n <abbr title={label}>{abbreviatedLabel}</abbr>\n </Paragraph>\n )}\n <Paragraph\n className={cx(`${rootClassName}__label`, {\n [`${rootClassName}__label--full`]: !!abbreviatedLabel,\n })}\n >\n {label}\n </Paragraph>\n </>\n );\n };\n\n return (\n <div\n className={cx(rootClassName, `${rootClassName}--size-${size}`)}\n role=\"group\"\n aria-hidden=\"true\"\n data-testid={`counter-${tag}`}\n >\n <div className={cx(`${rootClassName}__number-list-container`)}>\n {numbers.map((number, index) => {\n return (\n <ul\n key={index}\n className={cx(`${rootClassName}__number-list`)}\n style={\n {\n \"--offset\": number,\n } as React.CSSProperties\n }\n >\n {digits.map((d, i) => {\n const selected = d === number;\n\n return (\n <li\n key={i}\n className={cx(`${rootClassName}__number`, {\n [`${rootClassName}__number--selected`]: selected,\n })}\n >\n {d}\n </li>\n );\n })}\n </ul>\n );\n })}\n </div>\n\n {renderLabel()}\n </div>\n );\n};\n\nconst digits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n","export function getDiffs(endtime: number) {\n const now = new Date().getTime();\n\n const totalSeconds = Math.max(0, endtime - now);\n\n const _days = Math.floor(totalSeconds / inMs.day);\n const _hours = Math.floor((totalSeconds % inMs.day) / inMs.hour);\n const _minutes = Math.floor((totalSeconds % inMs.hour) / inMs.minute);\n const _seconds = Math.floor((totalSeconds % inMs.minute) / inMs.second);\n\n const days = splitDigits(_days);\n const hours = splitDigits(_hours);\n const minutes = splitDigits(_minutes);\n const seconds = splitDigits(_seconds);\n\n return {\n seconds,\n minutes,\n hours,\n days,\n };\n}\n\nexport const inMs = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n};\n\nexport function toDate(t: string | number | Date) {\n return t instanceof Date ? t : new Date(t);\n}\n\nexport function splitDigits(value: number) {\n const s = String(value).padStart(2, \"0\");\n return s.split(\"\");\n}\n","import React, { type ForwardedRef, forwardRef, useEffect, useId, useMemo, useState } from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./countdown.module.scss\";\nimport { type CountdownProps } from \"./countdown.types\";\nimport { Counter } from \"./counter\";\nimport { getDiffs, toDate } from \"./utils\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown\";\n\n/**\n * Countdown component to display a countdown timer.\n * @param props - CountdownProps\n * @returns A React component that displays a countdown timer.\n */\n\nexport const Countdown = forwardRef(\n (\n { renderAfterEnd, renderBeforeStart, ...props }: CountdownProps,\n ref: ForwardedRef<HTMLButtonElement>\n ) => {\n const nowInit = new Date();\n const id = useId();\n\n const {\n size = \"lg\",\n fullWidth = false,\n negative = false,\n showDays = true,\n variant = \"primary\",\n className,\n counterLabels,\n useMediaQueries = false,\n } = props;\n\n const [now, setNow] = useState<Date>(nowInit);\n\n const start = useMemo(() => toDate(props.starttime), [props.starttime]);\n const end = useMemo(() => toDate(props.endtime), [props.endtime]);\n const { days, hours, minutes, seconds } = useMemo(() => getDiffs(end.getTime()), [now]);\n\n useEffect(() => {\n if (now < start || now > end) return;\n const t = setInterval(() => setNow(new Date()), 1000);\n return () => clearInterval(t);\n }, [start, end, now]);\n\n const hasNotStarted = start > now;\n const hasEnded = end < now;\n\n // don't render if before start or after end\n if (hasNotStarted) return renderBeforeStart ? renderBeforeStart(props) : null;\n if (hasEnded) return renderAfterEnd ? renderAfterEnd(props) : null;\n\n const getCounters = () => {\n const counterProps = { size, counterLabels };\n\n return (\n <>\n {showDays && <Counter numbers={days} tag=\"days\" {...counterProps} />}\n <Counter numbers={hours} tag=\"hours\" {...counterProps} />\n <Counter numbers={minutes} tag=\"minutes\" {...counterProps} />\n <Counter numbers={seconds} tag=\"seconds\" {...counterProps} />\n </>\n );\n };\n\n // Create a single announcement of the current time (only once)\n\n const renderAnnouncer = () => {\n const getTimeAnnouncement = () => {\n const parts = [];\n\n if (showDays) parts.push(`${days.join(\"\")} ${counterLabels.days}`);\n parts.push(`${hours.join(\"\")} ${counterLabels.hours}`);\n parts.push(`${minutes.join(\"\")} ${counterLabels.minutes}`);\n parts.push(`${seconds.join(\"\")} ${counterLabels.seconds}`);\n\n return parts.join(\", \");\n };\n\n return (\n <VisuallyHidden\n data-testid=\"live-region\"\n aria-live=\"polite\"\n aria-label={props[\"aria-label\"]}\n >\n {getTimeAnnouncement()}\n </VisuallyHidden>\n );\n };\n\n const counters = getCounters();\n\n const classes = cx(\n rootClassName,\n `${rootClassName}--size-${size}`,\n `${rootClassName}--variant-${variant}`,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--show-days`]: showDays,\n [`${rootClassName}--use-media-queries`]: useMediaQueries,\n [`${rootClassName}--use-container-queries`]: !useMediaQueries,\n },\n className\n );\n\n return (\n <section\n id={id}\n className={classes}\n ref={ref}\n role=\"timer\"\n data-testid={props[\"data-testid\"]}\n >\n {/* Visually hidden live region that announces time only once */}\n {renderAnnouncer()}\n {props.label && (\n <Paragraph className={cx(`${rootClassName}__label`)} variant=\"paragraph-100-medium\">\n {props.label}\n </Paragraph>\n )}\n <div className={cx(`${rootClassName}__counter-container`)}>{counters}</div>\n </section>\n );\n }\n);\n\nCountdown.displayName = \"Countdown\";\n"],"names":["cx","c","styles","rootClassName","Counter","tag","size","numbers","counterLabels","renderLabel","label","abbreviatedLabel","jsxs","Fragment","Paragraph","jsx","number","index","digits","d","i","selected","getDiffs","endtime","now","totalSeconds","_days","inMs","_hours","_minutes","_seconds","days","splitDigits","hours","minutes","toDate","value","Countdown","forwardRef","renderAfterEnd","renderBeforeStart","props","ref","nowInit","id","useId","fullWidth","negative","showDays","variant","className","useMediaQueries","setNow","useState","start","useMemo","end","seconds","useEffect","t","hasNotStarted","hasEnded","getCounters","counterProps","renderAnnouncer","getTimeAnnouncement","parts","VisuallyHidden","counters","classes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"countdown-BsLsEZBv.mjs","sources":["../../../components/countdown/src/counter.tsx","../../../components/countdown/src/utils.ts","../../../components/countdown/src/countdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport { type CounterLabels } from \"./countdown.types\";\nimport styles from \"./counter.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown-counter\";\n\ninterface CounterProps {\n numbers: string[];\n size: \"md\" | \"lg\";\n tag: \"days\" | \"hours\" | \"minutes\" | \"seconds\";\n counterLabels: CounterLabels;\n}\n\nexport const Counter = ({ tag, size, numbers, counterLabels }: CounterProps) => {\n const renderLabel = () => {\n const label = counterLabels[tag];\n const abbreviatedLabel = counterLabels[`${tag}Abbr`];\n\n return (\n <>\n {abbreviatedLabel && (\n <Paragraph className={cx(`${rootClassName}__label`, `${rootClassName}__label--abbr`)}>\n <abbr title={label}>{abbreviatedLabel}</abbr>\n </Paragraph>\n )}\n <Paragraph\n className={cx(`${rootClassName}__label`, {\n [`${rootClassName}__label--full`]: !!abbreviatedLabel,\n })}\n >\n {label}\n </Paragraph>\n </>\n );\n };\n\n return (\n <div\n className={cx(rootClassName, `${rootClassName}--size-${size}`)}\n role=\"group\"\n aria-hidden=\"true\"\n data-testid={`counter-${tag}`}\n >\n <div className={cx(`${rootClassName}__number-list-container`)}>\n {numbers.map((number, index) => {\n return (\n <ul\n key={index}\n className={cx(`${rootClassName}__number-list`)}\n style={\n {\n \"--offset\": number,\n } as React.CSSProperties\n }\n >\n {digits.map((d, i) => {\n const selected = d === number;\n\n return (\n <li\n key={i}\n className={cx(`${rootClassName}__number`, {\n [`${rootClassName}__number--selected`]: selected,\n })}\n >\n {d}\n </li>\n );\n })}\n </ul>\n );\n })}\n </div>\n\n {renderLabel()}\n </div>\n );\n};\n\nconst digits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n","export function getDiffs(endtime: number) {\n const now = new Date().getTime();\n\n const totalSeconds = Math.max(0, endtime - now);\n\n const _days = Math.floor(totalSeconds / inMs.day);\n const _hours = Math.floor((totalSeconds % inMs.day) / inMs.hour);\n const _minutes = Math.floor((totalSeconds % inMs.hour) / inMs.minute);\n const _seconds = Math.floor((totalSeconds % inMs.minute) / inMs.second);\n\n const days = splitDigits(_days);\n const hours = splitDigits(_hours);\n const minutes = splitDigits(_minutes);\n const seconds = splitDigits(_seconds);\n\n return {\n seconds,\n minutes,\n hours,\n days,\n };\n}\n\nexport const inMs = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n};\n\nexport function toDate(t: string | number | Date) {\n return t instanceof Date ? t : new Date(t);\n}\n\nexport function splitDigits(value: number) {\n const s = String(value).padStart(2, \"0\");\n return s.split(\"\");\n}\n","import React, { type ForwardedRef, forwardRef, useEffect, useId, useMemo, useState } from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./countdown.module.scss\";\nimport { type CountdownProps } from \"./countdown.types\";\nimport { Counter } from \"./counter\";\nimport { getDiffs, toDate } from \"./utils\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown\";\n\n/**\n * Countdown component to display a countdown timer.\n * @param props - CountdownProps\n * @returns A React component that displays a countdown timer.\n */\n\nexport const Countdown = forwardRef(\n (\n { renderAfterEnd, renderBeforeStart, ...props }: CountdownProps,\n ref: ForwardedRef<HTMLButtonElement>\n ) => {\n const nowInit = new Date();\n const id = useId();\n\n const {\n size = \"lg\",\n fullWidth = false,\n negative = false,\n showDays = true,\n variant = \"primary\",\n className,\n counterLabels,\n useMediaQueries = false,\n } = props;\n\n const [now, setNow] = useState<Date>(nowInit);\n\n const start = useMemo(() => toDate(props.starttime), [props.starttime]);\n const end = useMemo(() => toDate(props.endtime), [props.endtime]);\n const { days, hours, minutes, seconds } = useMemo(() => getDiffs(end.getTime()), [now]);\n\n useEffect(() => {\n if (now < start || now > end) return;\n const t = setInterval(() => setNow(new Date()), 1000);\n return () => clearInterval(t);\n }, [start, end, now]);\n\n const hasNotStarted = start > now;\n const hasEnded = end < now;\n\n // don't render if before start or after end\n if (hasNotStarted) return renderBeforeStart ? renderBeforeStart(props) : null;\n if (hasEnded) return renderAfterEnd ? renderAfterEnd(props) : null;\n\n const getCounters = () => {\n const counterProps = { size, counterLabels };\n\n return (\n <>\n {showDays && <Counter numbers={days} tag=\"days\" {...counterProps} />}\n <Counter numbers={hours} tag=\"hours\" {...counterProps} />\n <Counter numbers={minutes} tag=\"minutes\" {...counterProps} />\n <Counter numbers={seconds} tag=\"seconds\" {...counterProps} />\n </>\n );\n };\n\n // Create a single announcement of the current time (only once)\n\n const renderAnnouncer = () => {\n const getTimeAnnouncement = () => {\n const parts = [];\n\n if (showDays) parts.push(`${days.join(\"\")} ${counterLabels.days}`);\n parts.push(`${hours.join(\"\")} ${counterLabels.hours}`);\n parts.push(`${minutes.join(\"\")} ${counterLabels.minutes}`);\n parts.push(`${seconds.join(\"\")} ${counterLabels.seconds}`);\n\n return parts.join(\", \");\n };\n\n return (\n <VisuallyHidden\n data-testid=\"live-region\"\n aria-live=\"polite\"\n aria-label={props[\"aria-label\"]}\n >\n {getTimeAnnouncement()}\n </VisuallyHidden>\n );\n };\n\n const counters = getCounters();\n\n const classes = cx(\n rootClassName,\n `${rootClassName}--size-${size}`,\n `${rootClassName}--variant-${variant}`,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--show-days`]: showDays,\n [`${rootClassName}--use-media-queries`]: useMediaQueries,\n [`${rootClassName}--use-container-queries`]: !useMediaQueries,\n },\n className\n );\n\n return (\n <section\n id={id}\n className={classes}\n ref={ref}\n role=\"timer\"\n data-testid={props[\"data-testid\"]}\n >\n {/* Visually hidden live region that announces time only once */}\n {renderAnnouncer()}\n {props.label && (\n <Paragraph className={cx(`${rootClassName}__label`)} variant=\"paragraph-100-medium\">\n {props.label}\n </Paragraph>\n )}\n <div className={cx(`${rootClassName}__counter-container`)}>{counters}</div>\n </section>\n );\n }\n);\n\nCountdown.displayName = \"Countdown\";\n"],"names":["cx","c","styles","rootClassName","Counter","tag","size","numbers","counterLabels","renderLabel","label","abbreviatedLabel","jsxs","Fragment","Paragraph","jsx","number","index","digits","d","i","selected","getDiffs","endtime","now","totalSeconds","_days","inMs","_hours","_minutes","_seconds","days","splitDigits","hours","minutes","toDate","value","Countdown","forwardRef","renderAfterEnd","renderBeforeStart","props","ref","nowInit","id","useId","fullWidth","negative","showDays","variant","className","useMediaQueries","setNow","useState","start","useMemo","end","seconds","useEffect","t","hasNotStarted","hasEnded","getCounters","counterProps","renderAnnouncer","getTimeAnnouncement","parts","VisuallyHidden","counters","classes"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const n=require("react/jsx-runtime"),d=require("react"),N=require("./paragraph-
|
|
2
|
-
//# sourceMappingURL=countdown-
|
|
1
|
+
"use strict";const n=require("react/jsx-runtime"),d=require("react"),N=require("./paragraph-By4jMjnH.js"),W=require("./visually-hidden-C2CKovZx.js"),S=require("./bind-DeUYJ6m9.js"),k={"purpur-countdown--size-md":"_purpur-countdown--size-md_ytnsp_1","purpur-countdown--size-lg":"_purpur-countdown--size-lg_ytnsp_5","purpur-countdown--use-container-queries":"_purpur-countdown--use-container-queries_ytnsp_10","purpur-countdown__counter-container":"_purpur-countdown__counter-container_ytnsp_10","purpur-countdown--full-width":"_purpur-countdown--full-width_ytnsp_15","purpur-countdown--use-media-queries":"_purpur-countdown--use-media-queries_ytnsp_25","purpur-countdown":"_purpur-countdown_ytnsp_1","purpur-countdown--variant-primary":"_purpur-countdown--variant-primary_ytnsp_40","purpur-countdown--variant-secondary":"_purpur-countdown--variant-secondary_ytnsp_43","purpur-countdown--negative":"_purpur-countdown--negative_ytnsp_46","purpur-countdown--show-days":"_purpur-countdown--show-days_ytnsp_56","purpur-countdown__label":"_purpur-countdown__label_ytnsp_72"},G={"purpur-countdown-counter":"_purpur-countdown-counter_23fbu_1","purpur-countdown-counter--size-lg":"_purpur-countdown-counter--size-lg_23fbu_10","purpur-countdown-counter__number":"_purpur-countdown-counter__number_23fbu_15","purpur-countdown-counter--size-md":"_purpur-countdown-counter--size-md_23fbu_21","purpur-countdown-counter__number-list-container":"_purpur-countdown-counter__number-list-container_23fbu_35","purpur-countdown-counter__number-list":"_purpur-countdown-counter__number-list_23fbu_35","purpur-countdown-counter__number--selected":"_purpur-countdown-counter__number--selected_23fbu_61","purpur-countdown-counter__label":"_purpur-countdown-counter__label_23fbu_64","purpur-countdown-counter__label--abbr":"_purpur-countdown-counter__label--abbr_23fbu_71","purpur-countdown-counter__label--full":"_purpur-countdown-counter__label--full_23fbu_74"},w=S.c.bind(G),r="purpur-countdown-counter",g=({tag:u,size:a,numbers:e,counterLabels:_})=>{const b=()=>{const s=_[u],t=_[`${u}Abbr`];return n.jsxs(n.Fragment,{children:[t&&n.jsx(N.Paragraph,{className:w(`${r}__label`,`${r}__label--abbr`),children:n.jsx("abbr",{title:s,children:t})}),n.jsx(N.Paragraph,{className:w(`${r}__label`,{[`${r}__label--full`]:!!t}),children:s})]})};return n.jsxs("div",{className:w(r,`${r}--size-${a}`),role:"group","aria-hidden":"true","data-testid":`counter-${u}`,children:[n.jsx("div",{className:w(`${r}__number-list-container`),children:e.map((s,t)=>n.jsx("ul",{className:w(`${r}__number-list`),style:{"--offset":s},children:J.map((p,h)=>{const i=p===s;return n.jsx("li",{className:w(`${r}__number`,{[`${r}__number--selected`]:i}),children:p},h)})},t))}),b()]})},J=["0","1","2","3","4","5","6","7","8","9"];function K(u){const a=new Date().getTime(),e=Math.max(0,u-a),_=Math.floor(e/l.day),b=Math.floor(e%l.day/l.hour),s=Math.floor(e%l.hour/l.minute),t=Math.floor(e%l.minute/l.second),p=j(_),h=j(b),i=j(s);return{seconds:j(t),minutes:i,hours:h,days:p}}const l={second:1e3,minute:60*1e3,hour:3600*1e3,day:1440*60*1e3};function P(u){return u instanceof Date?u:new Date(u)}function j(u){return String(u).padStart(2,"0").split("")}const v=S.c.bind(k),o="purpur-countdown",R=d.forwardRef(({renderAfterEnd:u,renderBeforeStart:a,...e},_)=>{const b=new Date,s=d.useId(),{size:t="lg",fullWidth:p=!1,negative:h=!1,showDays:i=!0,variant:q="primary",className:T,counterLabels:f,useMediaQueries:z=!1}=e,[m,A]=d.useState(b),x=d.useMemo(()=>P(e.starttime),[e.starttime]),$=d.useMemo(()=>P(e.endtime),[e.endtime]),{days:M,hours:D,minutes:C,seconds:I}=d.useMemo(()=>K($.getTime()),[m]);d.useEffect(()=>{if(m<x||m>$)return;const c=setInterval(()=>A(new Date),1e3);return()=>clearInterval(c)},[x,$,m]);const F=x>m,H=$<m;if(F)return a?a(e):null;if(H)return u?u(e):null;const L=()=>{const c={size:t,counterLabels:f};return n.jsxs(n.Fragment,{children:[i&&n.jsx(g,{numbers:M,tag:"days",...c}),n.jsx(g,{numbers:D,tag:"hours",...c}),n.jsx(g,{numbers:C,tag:"minutes",...c}),n.jsx(g,{numbers:I,tag:"seconds",...c})]})},E=()=>{const c=()=>{const y=[];return i&&y.push(`${M.join("")} ${f.days}`),y.push(`${D.join("")} ${f.hours}`),y.push(`${C.join("")} ${f.minutes}`),y.push(`${I.join("")} ${f.seconds}`),y.join(", ")};return n.jsx(W.VisuallyHidden,{"data-testid":"live-region","aria-live":"polite","aria-label":e["aria-label"],children:c()})},Q=L(),V=v(o,`${o}--size-${t}`,`${o}--variant-${q}`,{[`${o}--full-width`]:p,[`${o}--negative`]:h,[`${o}--show-days`]:i,[`${o}--use-media-queries`]:z,[`${o}--use-container-queries`]:!z},T);return n.jsxs("section",{id:s,className:V,ref:_,role:"timer","data-testid":e["data-testid"],children:[E(),e.label&&n.jsx(N.Paragraph,{className:v(`${o}__label`),variant:"paragraph-100-medium",children:e.label}),n.jsx("div",{className:v(`${o}__counter-container`),children:Q})]})});R.displayName="Countdown";exports.Countdown=R;
|
|
2
|
+
//# sourceMappingURL=countdown-hYrFLmRg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"countdown-CqYsZigV.js","sources":["../../../components/countdown/src/counter.tsx","../../../components/countdown/src/utils.ts","../../../components/countdown/src/countdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport { type CounterLabels } from \"./countdown.types\";\nimport styles from \"./counter.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown-counter\";\n\ninterface CounterProps {\n numbers: string[];\n size: \"md\" | \"lg\";\n tag: \"days\" | \"hours\" | \"minutes\" | \"seconds\";\n counterLabels: CounterLabels;\n}\n\nexport const Counter = ({ tag, size, numbers, counterLabels }: CounterProps) => {\n const renderLabel = () => {\n const label = counterLabels[tag];\n const abbreviatedLabel = counterLabels[`${tag}Abbr`];\n\n return (\n <>\n {abbreviatedLabel && (\n <Paragraph className={cx(`${rootClassName}__label`, `${rootClassName}__label--abbr`)}>\n <abbr title={label}>{abbreviatedLabel}</abbr>\n </Paragraph>\n )}\n <Paragraph\n className={cx(`${rootClassName}__label`, {\n [`${rootClassName}__label--full`]: !!abbreviatedLabel,\n })}\n >\n {label}\n </Paragraph>\n </>\n );\n };\n\n return (\n <div\n className={cx(rootClassName, `${rootClassName}--size-${size}`)}\n role=\"group\"\n aria-hidden=\"true\"\n data-testid={`counter-${tag}`}\n >\n <div className={cx(`${rootClassName}__number-list-container`)}>\n {numbers.map((number, index) => {\n return (\n <ul\n key={index}\n className={cx(`${rootClassName}__number-list`)}\n style={\n {\n \"--offset\": number,\n } as React.CSSProperties\n }\n >\n {digits.map((d, i) => {\n const selected = d === number;\n\n return (\n <li\n key={i}\n className={cx(`${rootClassName}__number`, {\n [`${rootClassName}__number--selected`]: selected,\n })}\n >\n {d}\n </li>\n );\n })}\n </ul>\n );\n })}\n </div>\n\n {renderLabel()}\n </div>\n );\n};\n\nconst digits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n","export function getDiffs(endtime: number) {\n const now = new Date().getTime();\n\n const totalSeconds = Math.max(0, endtime - now);\n\n const _days = Math.floor(totalSeconds / inMs.day);\n const _hours = Math.floor((totalSeconds % inMs.day) / inMs.hour);\n const _minutes = Math.floor((totalSeconds % inMs.hour) / inMs.minute);\n const _seconds = Math.floor((totalSeconds % inMs.minute) / inMs.second);\n\n const days = splitDigits(_days);\n const hours = splitDigits(_hours);\n const minutes = splitDigits(_minutes);\n const seconds = splitDigits(_seconds);\n\n return {\n seconds,\n minutes,\n hours,\n days,\n };\n}\n\nexport const inMs = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n};\n\nexport function toDate(t: string | number | Date) {\n return t instanceof Date ? t : new Date(t);\n}\n\nexport function splitDigits(value: number) {\n const s = String(value).padStart(2, \"0\");\n return s.split(\"\");\n}\n","import React, { type ForwardedRef, forwardRef, useEffect, useId, useMemo, useState } from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./countdown.module.scss\";\nimport { type CountdownProps } from \"./countdown.types\";\nimport { Counter } from \"./counter\";\nimport { getDiffs, toDate } from \"./utils\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown\";\n\n/**\n * Countdown component to display a countdown timer.\n * @param props - CountdownProps\n * @returns A React component that displays a countdown timer.\n */\n\nexport const Countdown = forwardRef(\n (\n { renderAfterEnd, renderBeforeStart, ...props }: CountdownProps,\n ref: ForwardedRef<HTMLButtonElement>\n ) => {\n const nowInit = new Date();\n const id = useId();\n\n const {\n size = \"lg\",\n fullWidth = false,\n negative = false,\n showDays = true,\n variant = \"primary\",\n className,\n counterLabels,\n useMediaQueries = false,\n } = props;\n\n const [now, setNow] = useState<Date>(nowInit);\n\n const start = useMemo(() => toDate(props.starttime), [props.starttime]);\n const end = useMemo(() => toDate(props.endtime), [props.endtime]);\n const { days, hours, minutes, seconds } = useMemo(() => getDiffs(end.getTime()), [now]);\n\n useEffect(() => {\n if (now < start || now > end) return;\n const t = setInterval(() => setNow(new Date()), 1000);\n return () => clearInterval(t);\n }, [start, end, now]);\n\n const hasNotStarted = start > now;\n const hasEnded = end < now;\n\n // don't render if before start or after end\n if (hasNotStarted) return renderBeforeStart ? renderBeforeStart(props) : null;\n if (hasEnded) return renderAfterEnd ? renderAfterEnd(props) : null;\n\n const getCounters = () => {\n const counterProps = { size, counterLabels };\n\n return (\n <>\n {showDays && <Counter numbers={days} tag=\"days\" {...counterProps} />}\n <Counter numbers={hours} tag=\"hours\" {...counterProps} />\n <Counter numbers={minutes} tag=\"minutes\" {...counterProps} />\n <Counter numbers={seconds} tag=\"seconds\" {...counterProps} />\n </>\n );\n };\n\n // Create a single announcement of the current time (only once)\n\n const renderAnnouncer = () => {\n const getTimeAnnouncement = () => {\n const parts = [];\n\n if (showDays) parts.push(`${days.join(\"\")} ${counterLabels.days}`);\n parts.push(`${hours.join(\"\")} ${counterLabels.hours}`);\n parts.push(`${minutes.join(\"\")} ${counterLabels.minutes}`);\n parts.push(`${seconds.join(\"\")} ${counterLabels.seconds}`);\n\n return parts.join(\", \");\n };\n\n return (\n <VisuallyHidden\n data-testid=\"live-region\"\n aria-live=\"polite\"\n aria-label={props[\"aria-label\"]}\n >\n {getTimeAnnouncement()}\n </VisuallyHidden>\n );\n };\n\n const counters = getCounters();\n\n const classes = cx(\n rootClassName,\n `${rootClassName}--size-${size}`,\n `${rootClassName}--variant-${variant}`,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--show-days`]: showDays,\n [`${rootClassName}--use-media-queries`]: useMediaQueries,\n [`${rootClassName}--use-container-queries`]: !useMediaQueries,\n },\n className\n );\n\n return (\n <section\n id={id}\n className={classes}\n ref={ref}\n role=\"timer\"\n data-testid={props[\"data-testid\"]}\n >\n {/* Visually hidden live region that announces time only once */}\n {renderAnnouncer()}\n {props.label && (\n <Paragraph className={cx(`${rootClassName}__label`)} variant=\"paragraph-100-medium\">\n {props.label}\n </Paragraph>\n )}\n <div className={cx(`${rootClassName}__counter-container`)}>{counters}</div>\n </section>\n );\n }\n);\n\nCountdown.displayName = \"Countdown\";\n"],"names":["cx","c","styles","rootClassName","Counter","tag","size","numbers","counterLabels","renderLabel","label","abbreviatedLabel","jsxs","Fragment","Paragraph","jsx","number","index","digits","d","i","selected","getDiffs","endtime","now","totalSeconds","_days","inMs","_hours","_minutes","_seconds","days","splitDigits","hours","minutes","toDate","t","value","Countdown","forwardRef","renderAfterEnd","renderBeforeStart","props","ref","nowInit","id","useId","fullWidth","negative","showDays","variant","className","useMediaQueries","setNow","useState","start","useMemo","end","seconds","useEffect","hasNotStarted","hasEnded","getCounters","counterProps","renderAnnouncer","getTimeAnnouncement","parts","VisuallyHidden","counters","classes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"countdown-hYrFLmRg.js","sources":["../../../components/countdown/src/counter.tsx","../../../components/countdown/src/utils.ts","../../../components/countdown/src/countdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport { type CounterLabels } from \"./countdown.types\";\nimport styles from \"./counter.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown-counter\";\n\ninterface CounterProps {\n numbers: string[];\n size: \"md\" | \"lg\";\n tag: \"days\" | \"hours\" | \"minutes\" | \"seconds\";\n counterLabels: CounterLabels;\n}\n\nexport const Counter = ({ tag, size, numbers, counterLabels }: CounterProps) => {\n const renderLabel = () => {\n const label = counterLabels[tag];\n const abbreviatedLabel = counterLabels[`${tag}Abbr`];\n\n return (\n <>\n {abbreviatedLabel && (\n <Paragraph className={cx(`${rootClassName}__label`, `${rootClassName}__label--abbr`)}>\n <abbr title={label}>{abbreviatedLabel}</abbr>\n </Paragraph>\n )}\n <Paragraph\n className={cx(`${rootClassName}__label`, {\n [`${rootClassName}__label--full`]: !!abbreviatedLabel,\n })}\n >\n {label}\n </Paragraph>\n </>\n );\n };\n\n return (\n <div\n className={cx(rootClassName, `${rootClassName}--size-${size}`)}\n role=\"group\"\n aria-hidden=\"true\"\n data-testid={`counter-${tag}`}\n >\n <div className={cx(`${rootClassName}__number-list-container`)}>\n {numbers.map((number, index) => {\n return (\n <ul\n key={index}\n className={cx(`${rootClassName}__number-list`)}\n style={\n {\n \"--offset\": number,\n } as React.CSSProperties\n }\n >\n {digits.map((d, i) => {\n const selected = d === number;\n\n return (\n <li\n key={i}\n className={cx(`${rootClassName}__number`, {\n [`${rootClassName}__number--selected`]: selected,\n })}\n >\n {d}\n </li>\n );\n })}\n </ul>\n );\n })}\n </div>\n\n {renderLabel()}\n </div>\n );\n};\n\nconst digits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n","export function getDiffs(endtime: number) {\n const now = new Date().getTime();\n\n const totalSeconds = Math.max(0, endtime - now);\n\n const _days = Math.floor(totalSeconds / inMs.day);\n const _hours = Math.floor((totalSeconds % inMs.day) / inMs.hour);\n const _minutes = Math.floor((totalSeconds % inMs.hour) / inMs.minute);\n const _seconds = Math.floor((totalSeconds % inMs.minute) / inMs.second);\n\n const days = splitDigits(_days);\n const hours = splitDigits(_hours);\n const minutes = splitDigits(_minutes);\n const seconds = splitDigits(_seconds);\n\n return {\n seconds,\n minutes,\n hours,\n days,\n };\n}\n\nexport const inMs = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n};\n\nexport function toDate(t: string | number | Date) {\n return t instanceof Date ? t : new Date(t);\n}\n\nexport function splitDigits(value: number) {\n const s = String(value).padStart(2, \"0\");\n return s.split(\"\");\n}\n","import React, { type ForwardedRef, forwardRef, useEffect, useId, useMemo, useState } from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./countdown.module.scss\";\nimport { type CountdownProps } from \"./countdown.types\";\nimport { Counter } from \"./counter\";\nimport { getDiffs, toDate } from \"./utils\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-countdown\";\n\n/**\n * Countdown component to display a countdown timer.\n * @param props - CountdownProps\n * @returns A React component that displays a countdown timer.\n */\n\nexport const Countdown = forwardRef(\n (\n { renderAfterEnd, renderBeforeStart, ...props }: CountdownProps,\n ref: ForwardedRef<HTMLButtonElement>\n ) => {\n const nowInit = new Date();\n const id = useId();\n\n const {\n size = \"lg\",\n fullWidth = false,\n negative = false,\n showDays = true,\n variant = \"primary\",\n className,\n counterLabels,\n useMediaQueries = false,\n } = props;\n\n const [now, setNow] = useState<Date>(nowInit);\n\n const start = useMemo(() => toDate(props.starttime), [props.starttime]);\n const end = useMemo(() => toDate(props.endtime), [props.endtime]);\n const { days, hours, minutes, seconds } = useMemo(() => getDiffs(end.getTime()), [now]);\n\n useEffect(() => {\n if (now < start || now > end) return;\n const t = setInterval(() => setNow(new Date()), 1000);\n return () => clearInterval(t);\n }, [start, end, now]);\n\n const hasNotStarted = start > now;\n const hasEnded = end < now;\n\n // don't render if before start or after end\n if (hasNotStarted) return renderBeforeStart ? renderBeforeStart(props) : null;\n if (hasEnded) return renderAfterEnd ? renderAfterEnd(props) : null;\n\n const getCounters = () => {\n const counterProps = { size, counterLabels };\n\n return (\n <>\n {showDays && <Counter numbers={days} tag=\"days\" {...counterProps} />}\n <Counter numbers={hours} tag=\"hours\" {...counterProps} />\n <Counter numbers={minutes} tag=\"minutes\" {...counterProps} />\n <Counter numbers={seconds} tag=\"seconds\" {...counterProps} />\n </>\n );\n };\n\n // Create a single announcement of the current time (only once)\n\n const renderAnnouncer = () => {\n const getTimeAnnouncement = () => {\n const parts = [];\n\n if (showDays) parts.push(`${days.join(\"\")} ${counterLabels.days}`);\n parts.push(`${hours.join(\"\")} ${counterLabels.hours}`);\n parts.push(`${minutes.join(\"\")} ${counterLabels.minutes}`);\n parts.push(`${seconds.join(\"\")} ${counterLabels.seconds}`);\n\n return parts.join(\", \");\n };\n\n return (\n <VisuallyHidden\n data-testid=\"live-region\"\n aria-live=\"polite\"\n aria-label={props[\"aria-label\"]}\n >\n {getTimeAnnouncement()}\n </VisuallyHidden>\n );\n };\n\n const counters = getCounters();\n\n const classes = cx(\n rootClassName,\n `${rootClassName}--size-${size}`,\n `${rootClassName}--variant-${variant}`,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--show-days`]: showDays,\n [`${rootClassName}--use-media-queries`]: useMediaQueries,\n [`${rootClassName}--use-container-queries`]: !useMediaQueries,\n },\n className\n );\n\n return (\n <section\n id={id}\n className={classes}\n ref={ref}\n role=\"timer\"\n data-testid={props[\"data-testid\"]}\n >\n {/* Visually hidden live region that announces time only once */}\n {renderAnnouncer()}\n {props.label && (\n <Paragraph className={cx(`${rootClassName}__label`)} variant=\"paragraph-100-medium\">\n {props.label}\n </Paragraph>\n )}\n <div className={cx(`${rootClassName}__counter-container`)}>{counters}</div>\n </section>\n );\n }\n);\n\nCountdown.displayName = \"Countdown\";\n"],"names":["cx","c","styles","rootClassName","Counter","tag","size","numbers","counterLabels","renderLabel","label","abbreviatedLabel","jsxs","Fragment","Paragraph","jsx","number","index","digits","d","i","selected","getDiffs","endtime","now","totalSeconds","_days","inMs","_hours","_minutes","_seconds","days","splitDigits","hours","minutes","toDate","t","value","Countdown","forwardRef","renderAfterEnd","renderBeforeStart","props","ref","nowInit","id","useId","fullWidth","negative","showDays","variant","className","useMediaQueries","setNow","useState","start","useMemo","end","seconds","useEffect","hasNotStarted","hasEnded","getCounters","counterProps","renderAnnouncer","getTimeAnnouncement","parts","VisuallyHidden","counters","classes"],"mappings":"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"}
|
package/dist/countdown.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./countdown-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./countdown-hYrFLmRg.js");exports.Countdown=o.Countdown;
|
|
2
2
|
//# sourceMappingURL=countdown.cjs.js.map
|
package/dist/countdown.es.js
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),r=require("react"),N=require("./heading-drD5ugCC.js"),C=require("./bind-DeUYJ6m9.js"),G=require("./close.es-VL3lKi1O.js"),v={"purpur-dismissable-chip-group":"_purpur-dismissable-chip-group_8e4xu_1","purpur-dismissable-chip-group--negative":"_purpur-dismissable-chip-group--negative_8e4xu_7","purpur-dismissable-chip-group__container":"_purpur-dismissable-chip-group__container_8e4xu_10","purpur-dismissable-chip-group__container--full-width":"_purpur-dismissable-chip-group__container--full-width_8e4xu_16","purpur-dismissable-chip-group-item-wrapper":"_purpur-dismissable-chip-group-item-wrapper_8e4xu_19","purpur-dismissable-chip-group-item":"_purpur-dismissable-chip-group-item_8e4xu_19","purpur-dismissable-chip-group__container--sm":"_purpur-dismissable-chip-group__container--sm_8e4xu_25","purpur-dismissable-chip-group__container--md":"_purpur-dismissable-chip-group__container--md_8e4xu_28","purpur-dismissable-chip-group-item--sm":"_purpur-dismissable-chip-group-item--sm_8e4xu_44","purpur-dismissable-chip-group-item--md":"_purpur-dismissable-chip-group-item--md_8e4xu_53","purpur-dismissable-chip-group-item--disabled":"_purpur-dismissable-chip-group-item--disabled_8e4xu_62","purpur-dismissable-chip-group-item--negative":"_purpur-dismissable-chip-group-item--negative_8e4xu_67"},g=C.c.bind(v),a="purpur-dismissable-chip-group-item",$=({children:o,id:p,onDismiss:c,disabled:s,...u})=>{const i=r.useContext(d),l=r.useContext(h),n=m=>{s?m.preventDefault():c?.(p)};return e.jsx("li",{className:g(`${a}-wrapper`),children:r.createElement("button",{...u,className:g(`${a}`,{[`${a}--disabled`]:s,[`${a}--negative`]:l,[`${a}--${i}`]:i}),key:p,disabled:s,"aria-disabled":s,onClick:n},o,e.jsx(G.r,{size:i==="sm"?"xs":"sm"}))},p)};$.displayName="DismissableChipGroupItem";const x=C.c.bind(v),f=["sm","md"],_="md",d=r.createContext(_),h=r.createContext(!1),t="purpur-dismissable-chip-group",b=({children:o,className:p,fullWidth:c=!1,negative:s=!1,size:u=_,title:i,titleTag:l,...n})=>{const m=r.useId(),D=x(t,{[`${t}--negative`]:s},p);return e.jsxs("div",{...n,"aria-labelledby":i?`${m}-label`:void 0,className:D,role:"group",children:[i&&e.jsx(N.Heading,{tag:l??"h2",variant:"subsection-100",negative:s,children:i}),e.jsx("ul",{"data-testid":"dismissable-chip-group-container",className:x(`${t}__container`,{[`${t}__container--full-width`]:c,[`${t}__container--${u}`]:u}),"aria-live":"polite","aria-relevant":"additions removals",children:e.jsx(h.Provider,{value:s,children:e.jsx(d.Provider,{value:u,children:o})})})]})};b.Item=$;b.displayName="DismissableChipGroup";exports.DEFAULT_SIZE=_;exports.DismissableChipGroup=b;exports.DismissableChipGroupNegativeContext=h;exports.DismissableChipGroupSizeContext=d;exports.sizes=f;
|
|
2
|
+
//# sourceMappingURL=dismissable-chip-group-2updhyuR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismissable-chip-group-2updhyuR.js","sources":["../../../components/dismissable-chip-group/src/dismissable-chip-group-item.tsx","../../../components/dismissable-chip-group/src/dismissable-chip-group.tsx"],"sourcesContent":["import React, { type MouseEvent, type ReactNode, useContext } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport c from \"classnames/bind\";\n\nimport {\n DismissableChipGroupNegativeContext,\n DismissableChipGroupSizeContext,\n} from \"./dismissable-chip-group\";\nimport styles from \"./dismissable-chip-group.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type DismissableChipGroupItemProps = Omit<BaseProps<\"button\">, \"aria-label\" | \"children\"> & {\n [\"aria-label\"]: string;\n children: ReactNode;\n onDismiss?: (id?: string) => void;\n};\n\nconst rootClassName = \"purpur-dismissable-chip-group-item\";\n\nexport const DismissableChipGroupItem = ({\n children,\n id,\n onDismiss,\n disabled,\n ...props\n}: DismissableChipGroupItemProps) => {\n const size = useContext(DismissableChipGroupSizeContext);\n const negative = useContext(DismissableChipGroupNegativeContext);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n } else {\n onDismiss?.(id);\n }\n };\n\n return (\n <li key={id} className={cx(`${rootClassName}-wrapper`)}>\n <button\n {...props}\n className={cx(`${rootClassName}`, {\n [`${rootClassName}--disabled`]: disabled,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--${size}`]: size,\n })}\n key={id}\n disabled={disabled}\n aria-disabled={disabled}\n onClick={handleClick}\n >\n {children}\n <IconClose size={size === \"sm\" ? \"xs\" : \"sm\"} />\n </button>\n </li>\n );\n};\n\nDismissableChipGroupItem.displayName = \"DismissableChipGroupItem\";\n","import React, { createContext, type ReactNode, useId } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./dismissable-chip-group.module.scss\";\nimport { DismissableChipGroupItem } from \"./dismissable-chip-group-item\";\n\nconst cx = c.bind(styles);\n\nexport const sizes = [\"sm\", \"md\"] as const;\nexport const DEFAULT_SIZE = \"md\" as const;\n\nexport type Size = (typeof sizes)[number];\n\nexport type DismissableChipGroupProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n fullWidth?: boolean;\n negative?: boolean;\n size?: Size;\n title?: string;\n titleTag?: HeadingTagType;\n};\n\nexport const DismissableChipGroupSizeContext = createContext<Size>(DEFAULT_SIZE);\nexport const DismissableChipGroupNegativeContext = createContext(false);\n\nconst rootClassName = \"purpur-dismissable-chip-group\";\n\nexport const DismissableChipGroup = ({\n children,\n className,\n fullWidth = false,\n negative = false,\n size = DEFAULT_SIZE,\n title,\n titleTag,\n ...props\n}: DismissableChipGroupProps) => {\n const id = useId();\n const classes = cx(rootClassName, { [`${rootClassName}--negative`]: negative }, className);\n\n return (\n <div\n {...props}\n aria-labelledby={title ? `${id}-label` : undefined}\n className={classes}\n role=\"group\"\n >\n {title && (\n <Heading tag={titleTag ?? \"h2\"} variant=\"subsection-100\" negative={negative}>\n {title}\n </Heading>\n )}\n <ul\n data-testid=\"dismissable-chip-group-container\"\n className={cx(`${rootClassName}__container`, {\n [`${rootClassName}__container--full-width`]: fullWidth,\n [`${rootClassName}__container--${size}`]: size,\n })}\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n >\n <DismissableChipGroupNegativeContext.Provider value={negative}>\n <DismissableChipGroupSizeContext.Provider value={size}>\n {children}\n </DismissableChipGroupSizeContext.Provider>\n </DismissableChipGroupNegativeContext.Provider>\n </ul>\n </div>\n );\n};\n\nDismissableChipGroup.Item = DismissableChipGroupItem;\n\nDismissableChipGroup.displayName = \"DismissableChipGroup\";\n"],"names":["cx","c","styles","rootClassName","DismissableChipGroupItem","children","id","onDismiss","disabled","props","size","useContext","DismissableChipGroupSizeContext","negative","DismissableChipGroupNegativeContext","handleClick","e","createElement","IconClose","sizes","DEFAULT_SIZE","createContext","DismissableChipGroup","className","fullWidth","title","titleTag","useId","classes","jsxs","jsx","Heading"],"mappings":"8zCAWMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAQlBC,EAAgB,qCAETC,EAA2B,CAAC,CACvC,SAAAC,EACA,GAAAC,EACA,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAAqC,CACnC,MAAMC,EAAOC,EAAAA,WAAWC,CAA+B,EACjDC,EAAWF,EAAAA,WAAWG,CAAmC,EAEzDC,EAAeC,GAAqC,CACpDR,EACFQ,EAAE,eAAA,EAEFT,IAAYD,CAAE,CAElB,EAEA,aACG,KAAA,CAAY,UAAWN,EAAG,GAAGG,CAAa,UAAU,EACnD,SAAAc,EAAAA,cAAC,SAAA,CACE,GAAGR,EACJ,UAAWT,EAAG,GAAGG,CAAa,GAAI,CAChC,CAAC,GAAGA,CAAa,YAAY,EAAGK,EAChC,CAAC,GAAGL,CAAa,YAAY,EAAGU,EAChC,CAAC,GAAGV,CAAa,KAAKO,CAAI,EAAE,EAAGA,CAAA,CAChC,EACD,IAAKJ,EACL,SAAAE,EACA,gBAAeA,EACf,QAASO,CAAA,EAERV,QACAa,EAAAA,EAAA,CAAU,KAAMR,IAAS,KAAO,KAAO,IAAA,CAAM,CAAA,GAdzCJ,CAgBT,CAEJ,EAEAF,EAAyB,YAAc,2BCpDvC,MAAMJ,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAEXiB,EAAQ,CAAC,KAAM,IAAI,EACnBC,EAAe,KAafR,EAAkCS,EAAAA,cAAoBD,CAAY,EAClEN,EAAsCO,EAAAA,cAAc,EAAK,EAEhElB,EAAgB,gCAETmB,EAAuB,CAAC,CACnC,SAAAjB,EACA,UAAAkB,EACA,UAAAC,EAAY,GACZ,SAAAX,EAAW,GACX,KAAAH,EAAOU,EACP,MAAAK,EACA,SAAAC,EACA,GAAGjB,CACL,IAAiC,CAC/B,MAAMH,EAAKqB,EAAAA,MAAA,EACLC,EAAU5B,EAAGG,EAAe,CAAE,CAAC,GAAGA,CAAa,YAAY,EAAGU,CAAA,EAAYU,CAAS,EAEzF,OACEM,EAAAA,KAAC,MAAA,CACE,GAAGpB,EACJ,kBAAiBgB,EAAQ,GAAGnB,CAAE,SAAW,OACzC,UAAWsB,EACX,KAAK,QAEJ,SAAA,CAAAH,GACCK,EAAAA,IAACC,WAAQ,IAAKL,GAAY,KAAM,QAAQ,iBAAiB,SAAAb,EACtD,SAAAY,CAAA,CACH,EAEFK,EAAAA,IAAC,KAAA,CACC,cAAY,mCACZ,UAAW9B,EAAG,GAAGG,CAAa,cAAe,CAC3C,CAAC,GAAGA,CAAa,yBAAyB,EAAGqB,EAC7C,CAAC,GAAGrB,CAAa,gBAAgBO,CAAI,EAAE,EAAGA,CAAA,CAC3C,EACD,YAAU,SACV,gBAAc,qBAEd,SAAAoB,EAAAA,IAAChB,EAAoC,SAApC,CAA6C,MAAOD,EACnD,SAAAiB,EAAAA,IAAClB,EAAgC,SAAhC,CAAyC,MAAOF,EAC9C,SAAAL,EACH,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,EAEAiB,EAAqB,KAAOlB,EAE5BkB,EAAqB,YAAc"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as e, jsxs as N } from "react/jsx-runtime";
|
|
2
|
+
import { useContext as n, createElement as w, createContext as h, useId as G } from "react";
|
|
3
|
+
import { H as y } from "./heading-xwBuT_-9.mjs";
|
|
4
|
+
import { c as b } from "./bind-CU-R61T-.mjs";
|
|
5
|
+
import { r as I } from "./close.es-BPmk2wkU.mjs";
|
|
6
|
+
const g = {
|
|
7
|
+
"purpur-dismissable-chip-group": "_purpur-dismissable-chip-group_8e4xu_1",
|
|
8
|
+
"purpur-dismissable-chip-group--negative": "_purpur-dismissable-chip-group--negative_8e4xu_7",
|
|
9
|
+
"purpur-dismissable-chip-group__container": "_purpur-dismissable-chip-group__container_8e4xu_10",
|
|
10
|
+
"purpur-dismissable-chip-group__container--full-width": "_purpur-dismissable-chip-group__container--full-width_8e4xu_16",
|
|
11
|
+
"purpur-dismissable-chip-group-item-wrapper": "_purpur-dismissable-chip-group-item-wrapper_8e4xu_19",
|
|
12
|
+
"purpur-dismissable-chip-group-item": "_purpur-dismissable-chip-group-item_8e4xu_19",
|
|
13
|
+
"purpur-dismissable-chip-group__container--sm": "_purpur-dismissable-chip-group__container--sm_8e4xu_25",
|
|
14
|
+
"purpur-dismissable-chip-group__container--md": "_purpur-dismissable-chip-group__container--md_8e4xu_28",
|
|
15
|
+
"purpur-dismissable-chip-group-item--sm": "_purpur-dismissable-chip-group-item--sm_8e4xu_44",
|
|
16
|
+
"purpur-dismissable-chip-group-item--md": "_purpur-dismissable-chip-group-item--md_8e4xu_53",
|
|
17
|
+
"purpur-dismissable-chip-group-item--disabled": "_purpur-dismissable-chip-group-item--disabled_8e4xu_62",
|
|
18
|
+
"purpur-dismissable-chip-group-item--negative": "_purpur-dismissable-chip-group-item--negative_8e4xu_67"
|
|
19
|
+
}, _ = b.bind(g), u = "purpur-dismissable-chip-group-item", x = ({
|
|
20
|
+
children: o,
|
|
21
|
+
id: r,
|
|
22
|
+
onDismiss: t,
|
|
23
|
+
disabled: i,
|
|
24
|
+
...p
|
|
25
|
+
}) => {
|
|
26
|
+
const s = n(C), m = n($), l = (c) => {
|
|
27
|
+
i ? c.preventDefault() : t?.(r);
|
|
28
|
+
};
|
|
29
|
+
return /* @__PURE__ */ e("li", { className: _(`${u}-wrapper`), children: /* @__PURE__ */ w(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
...p,
|
|
33
|
+
className: _(`${u}`, {
|
|
34
|
+
[`${u}--disabled`]: i,
|
|
35
|
+
[`${u}--negative`]: m,
|
|
36
|
+
[`${u}--${s}`]: s
|
|
37
|
+
}),
|
|
38
|
+
key: r,
|
|
39
|
+
disabled: i,
|
|
40
|
+
"aria-disabled": i,
|
|
41
|
+
onClick: l
|
|
42
|
+
},
|
|
43
|
+
o,
|
|
44
|
+
/* @__PURE__ */ e(I, { size: s === "sm" ? "xs" : "sm" })
|
|
45
|
+
) }, r);
|
|
46
|
+
};
|
|
47
|
+
x.displayName = "DismissableChipGroupItem";
|
|
48
|
+
const d = b.bind(g), P = ["sm", "md"], v = "md", C = h(v), $ = h(!1), a = "purpur-dismissable-chip-group", f = ({
|
|
49
|
+
children: o,
|
|
50
|
+
className: r,
|
|
51
|
+
fullWidth: t = !1,
|
|
52
|
+
negative: i = !1,
|
|
53
|
+
size: p = v,
|
|
54
|
+
title: s,
|
|
55
|
+
titleTag: m,
|
|
56
|
+
...l
|
|
57
|
+
}) => {
|
|
58
|
+
const c = G(), D = d(a, { [`${a}--negative`]: i }, r);
|
|
59
|
+
return /* @__PURE__ */ N(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
...l,
|
|
63
|
+
"aria-labelledby": s ? `${c}-label` : void 0,
|
|
64
|
+
className: D,
|
|
65
|
+
role: "group",
|
|
66
|
+
children: [
|
|
67
|
+
s && /* @__PURE__ */ e(y, { tag: m ?? "h2", variant: "subsection-100", negative: i, children: s }),
|
|
68
|
+
/* @__PURE__ */ e(
|
|
69
|
+
"ul",
|
|
70
|
+
{
|
|
71
|
+
"data-testid": "dismissable-chip-group-container",
|
|
72
|
+
className: d(`${a}__container`, {
|
|
73
|
+
[`${a}__container--full-width`]: t,
|
|
74
|
+
[`${a}__container--${p}`]: p
|
|
75
|
+
}),
|
|
76
|
+
"aria-live": "polite",
|
|
77
|
+
"aria-relevant": "additions removals",
|
|
78
|
+
children: /* @__PURE__ */ e($.Provider, { value: i, children: /* @__PURE__ */ e(C.Provider, { value: p, children: o }) })
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
f.Item = x;
|
|
86
|
+
f.displayName = "DismissableChipGroup";
|
|
87
|
+
export {
|
|
88
|
+
v as D,
|
|
89
|
+
f as a,
|
|
90
|
+
$ as b,
|
|
91
|
+
C as c,
|
|
92
|
+
P as s
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=dismissable-chip-group-Cfs2s2BH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismissable-chip-group-Cfs2s2BH.mjs","sources":["../../../components/dismissable-chip-group/src/dismissable-chip-group-item.tsx","../../../components/dismissable-chip-group/src/dismissable-chip-group.tsx"],"sourcesContent":["import React, { type MouseEvent, type ReactNode, useContext } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport c from \"classnames/bind\";\n\nimport {\n DismissableChipGroupNegativeContext,\n DismissableChipGroupSizeContext,\n} from \"./dismissable-chip-group\";\nimport styles from \"./dismissable-chip-group.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type DismissableChipGroupItemProps = Omit<BaseProps<\"button\">, \"aria-label\" | \"children\"> & {\n [\"aria-label\"]: string;\n children: ReactNode;\n onDismiss?: (id?: string) => void;\n};\n\nconst rootClassName = \"purpur-dismissable-chip-group-item\";\n\nexport const DismissableChipGroupItem = ({\n children,\n id,\n onDismiss,\n disabled,\n ...props\n}: DismissableChipGroupItemProps) => {\n const size = useContext(DismissableChipGroupSizeContext);\n const negative = useContext(DismissableChipGroupNegativeContext);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n } else {\n onDismiss?.(id);\n }\n };\n\n return (\n <li key={id} className={cx(`${rootClassName}-wrapper`)}>\n <button\n {...props}\n className={cx(`${rootClassName}`, {\n [`${rootClassName}--disabled`]: disabled,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--${size}`]: size,\n })}\n key={id}\n disabled={disabled}\n aria-disabled={disabled}\n onClick={handleClick}\n >\n {children}\n <IconClose size={size === \"sm\" ? \"xs\" : \"sm\"} />\n </button>\n </li>\n );\n};\n\nDismissableChipGroupItem.displayName = \"DismissableChipGroupItem\";\n","import React, { createContext, type ReactNode, useId } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./dismissable-chip-group.module.scss\";\nimport { DismissableChipGroupItem } from \"./dismissable-chip-group-item\";\n\nconst cx = c.bind(styles);\n\nexport const sizes = [\"sm\", \"md\"] as const;\nexport const DEFAULT_SIZE = \"md\" as const;\n\nexport type Size = (typeof sizes)[number];\n\nexport type DismissableChipGroupProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n fullWidth?: boolean;\n negative?: boolean;\n size?: Size;\n title?: string;\n titleTag?: HeadingTagType;\n};\n\nexport const DismissableChipGroupSizeContext = createContext<Size>(DEFAULT_SIZE);\nexport const DismissableChipGroupNegativeContext = createContext(false);\n\nconst rootClassName = \"purpur-dismissable-chip-group\";\n\nexport const DismissableChipGroup = ({\n children,\n className,\n fullWidth = false,\n negative = false,\n size = DEFAULT_SIZE,\n title,\n titleTag,\n ...props\n}: DismissableChipGroupProps) => {\n const id = useId();\n const classes = cx(rootClassName, { [`${rootClassName}--negative`]: negative }, className);\n\n return (\n <div\n {...props}\n aria-labelledby={title ? `${id}-label` : undefined}\n className={classes}\n role=\"group\"\n >\n {title && (\n <Heading tag={titleTag ?? \"h2\"} variant=\"subsection-100\" negative={negative}>\n {title}\n </Heading>\n )}\n <ul\n data-testid=\"dismissable-chip-group-container\"\n className={cx(`${rootClassName}__container`, {\n [`${rootClassName}__container--full-width`]: fullWidth,\n [`${rootClassName}__container--${size}`]: size,\n })}\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n >\n <DismissableChipGroupNegativeContext.Provider value={negative}>\n <DismissableChipGroupSizeContext.Provider value={size}>\n {children}\n </DismissableChipGroupSizeContext.Provider>\n </DismissableChipGroupNegativeContext.Provider>\n </ul>\n </div>\n );\n};\n\nDismissableChipGroup.Item = DismissableChipGroupItem;\n\nDismissableChipGroup.displayName = \"DismissableChipGroup\";\n"],"names":["cx","c","styles","rootClassName","DismissableChipGroupItem","children","id","onDismiss","disabled","props","size","useContext","DismissableChipGroupSizeContext","negative","DismissableChipGroupNegativeContext","handleClick","e","createElement","IconClose","sizes","DEFAULT_SIZE","createContext","DismissableChipGroup","className","fullWidth","title","titleTag","useId","classes","jsxs","jsx","Heading"],"mappings":";;;;;;;;;;;;;;;;;;GAWMA,IAAKC,EAAE,KAAKC,CAAM,GAQlBC,IAAgB,sCAETC,IAA2B,CAAC;AAAA,EACvC,UAAAC;AAAA,EACA,IAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MAAqC;AACnC,QAAMC,IAAOC,EAAWC,CAA+B,GACjDC,IAAWF,EAAWG,CAAmC,GAEzDC,IAAc,CAACC,MAAqC;AACxD,IAAIR,IACFQ,EAAE,eAAA,IAEFT,IAAYD,CAAE;AAAA,EAElB;AAEA,2BACG,MAAA,EAAY,WAAWN,EAAG,GAAGG,CAAa,UAAU,GACnD,UAAA,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGR;AAAA,MACJ,WAAWT,EAAG,GAAGG,CAAa,IAAI;AAAA,QAChC,CAAC,GAAGA,CAAa,YAAY,GAAGK;AAAA,QAChC,CAAC,GAAGL,CAAa,YAAY,GAAGU;AAAA,QAChC,CAAC,GAAGV,CAAa,KAAKO,CAAI,EAAE,GAAGA;AAAA,MAAA,CAChC;AAAA,MACD,KAAKJ;AAAA,MACL,UAAAE;AAAA,MACA,iBAAeA;AAAA,MACf,SAASO;AAAA,IAAA;AAAA,IAERV;AAAA,sBACAa,GAAA,EAAU,MAAMR,MAAS,OAAO,OAAO,KAAA,CAAM;AAAA,EAAA,KAdzCJ,CAgBT;AAEJ;AAEAF,EAAyB,cAAc;ACpDvC,MAAMJ,IAAKC,EAAE,KAAKC,CAAM,GAEXiB,IAAQ,CAAC,MAAM,IAAI,GACnBC,IAAe,MAafR,IAAkCS,EAAoBD,CAAY,GAClEN,IAAsCO,EAAc,EAAK,GAEhElB,IAAgB,iCAETmB,IAAuB,CAAC;AAAA,EACnC,UAAAjB;AAAA,EACA,WAAAkB;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAX,IAAW;AAAA,EACX,MAAAH,IAAOU;AAAA,EACP,OAAAK;AAAA,EACA,UAAAC;AAAA,EACA,GAAGjB;AACL,MAAiC;AAC/B,QAAMH,IAAKqB,EAAA,GACLC,IAAU5B,EAAGG,GAAe,EAAE,CAAC,GAAGA,CAAa,YAAY,GAAGU,EAAA,GAAYU,CAAS;AAEzF,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGpB;AAAA,MACJ,mBAAiBgB,IAAQ,GAAGnB,CAAE,WAAW;AAAA,MACzC,WAAWsB;AAAA,MACX,MAAK;AAAA,MAEJ,UAAA;AAAA,QAAAH,KACC,gBAAAK,EAACC,KAAQ,KAAKL,KAAY,MAAM,SAAQ,kBAAiB,UAAAb,GACtD,UAAAY,EAAA,CACH;AAAA,QAEF,gBAAAK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAW9B,EAAG,GAAGG,CAAa,eAAe;AAAA,cAC3C,CAAC,GAAGA,CAAa,yBAAyB,GAAGqB;AAAA,cAC7C,CAAC,GAAGrB,CAAa,gBAAgBO,CAAI,EAAE,GAAGA;AAAA,YAAA,CAC3C;AAAA,YACD,aAAU;AAAA,YACV,iBAAc;AAAA,YAEd,UAAA,gBAAAoB,EAAChB,EAAoC,UAApC,EAA6C,OAAOD,GACnD,UAAA,gBAAAiB,EAAClB,EAAgC,UAAhC,EAAyC,OAAOF,GAC9C,UAAAL,GACH,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAiB,EAAqB,OAAOlB;AAE5BkB,EAAqB,cAAc;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./dismissable-chip-group-2updhyuR.js");exports.DEFAULT_SIZE=i.DEFAULT_SIZE;exports.DismissableChipGroup=i.DismissableChipGroup;exports.DismissableChipGroupNegativeContext=i.DismissableChipGroupNegativeContext;exports.DismissableChipGroupSizeContext=i.DismissableChipGroupSizeContext;exports.sizes=i.sizes;
|
|
2
2
|
//# sourceMappingURL=dismissable-chip-group.cjs.js.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { D as
|
|
1
|
+
import { D as a, a as e, b as o, c as p, s as t } from "./dismissable-chip-group-Cfs2s2BH.mjs";
|
|
2
2
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
o as
|
|
6
|
-
p as
|
|
3
|
+
a as DEFAULT_SIZE,
|
|
4
|
+
e as DismissableChipGroup,
|
|
5
|
+
o as DismissableChipGroupNegativeContext,
|
|
6
|
+
p as DismissableChipGroupSizeContext,
|
|
7
|
+
t as sizes
|
|
7
8
|
};
|
|
8
9
|
//# sourceMappingURL=dismissable-chip-group.es.js.map
|