@purpur/library 9.0.6 → 9.0.8
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 +45 -0
- package/CHANGELOG.md +22 -1
- package/dist/{RichText-DRacgpis.mjs → RichText-Bi51HE6X.mjs} +3 -3
- package/dist/{RichText-DRacgpis.mjs.map → RichText-Bi51HE6X.mjs.map} +1 -1
- package/dist/{RichText-DMyGiMN0.js → RichText-DNroJJXv.js} +2 -2
- package/dist/{RichText-DMyGiMN0.js.map → RichText-DNroJJXv.js.map} +1 -1
- package/dist/{ThemeProvider-CrjMv3M8.mjs → ThemeProvider-BR1hJQOD.mjs} +85 -85
- package/dist/{ThemeProvider-CrjMv3M8.mjs.map → ThemeProvider-BR1hJQOD.mjs.map} +1 -1
- package/dist/{accordion-DWflnyWa.mjs → accordion-BKTz9DM6.mjs} +18 -18
- package/dist/{accordion-DWflnyWa.mjs.map → accordion-BKTz9DM6.mjs.map} +1 -1
- package/dist/{accordion-CF2fj2uq.js → accordion-DX8efWOt.js} +2 -2
- package/dist/{accordion-CF2fj2uq.js.map → accordion-DX8efWOt.js.map} +1 -1
- package/dist/accordion.cjs.js +1 -1
- package/dist/accordion.es.js +1 -1
- package/dist/{alert-badge-u7qAhYbR.mjs → alert-badge-DR8cigWu.mjs} +3 -3
- package/dist/{alert-badge-u7qAhYbR.mjs.map → alert-badge-DR8cigWu.mjs.map} +1 -1
- package/dist/alert-badge.es.js +1 -1
- package/dist/{autocomplete-yD0-1vlF.js → autocomplete-B_OBQM2h.js} +2 -2
- package/dist/{autocomplete-yD0-1vlF.js.map → autocomplete-B_OBQM2h.js.map} +1 -1
- package/dist/{autocomplete-0kGG_STe.mjs → autocomplete-DJ3zbA0m.mjs} +3 -3
- package/dist/{autocomplete-0kGG_STe.mjs.map → autocomplete-DJ3zbA0m.mjs.map} +1 -1
- package/dist/autocomplete.cjs.js +1 -1
- package/dist/autocomplete.es.js +1 -1
- package/dist/button-BxdChrq-.js +2 -0
- package/dist/button-BxdChrq-.js.map +1 -0
- package/dist/button-D-BBdNhd.mjs +105 -0
- package/dist/button-D-BBdNhd.mjs.map +1 -0
- package/dist/button.cjs.js +1 -1
- package/dist/button.es.js +1 -1
- package/dist/{calendar-DDie8jSH.mjs → calendar-9p_aA7KY.mjs} +2 -2
- package/dist/{calendar-DDie8jSH.mjs.map → calendar-9p_aA7KY.mjs.map} +1 -1
- package/dist/{calendar-pMM0fKEu.js → calendar-BSdvi_DA.js} +2 -2
- package/dist/{calendar-pMM0fKEu.js.map → calendar-BSdvi_DA.js.map} +1 -1
- package/dist/calendar.cjs.js +1 -1
- package/dist/calendar.es.js +1 -1
- package/dist/{card-DiMVw06l.mjs → card-CkZQZOz1.mjs} +9 -9
- package/dist/{card-DiMVw06l.mjs.map → card-CkZQZOz1.mjs.map} +1 -1
- package/dist/{card-B512KHpr.js → card-VMa3cGCP.js} +2 -2
- package/dist/{card-B512KHpr.js.map → card-VMa3cGCP.js.map} +1 -1
- package/dist/card.cjs.js +1 -1
- package/dist/card.es.js +1 -1
- package/dist/{checkbox-LYzMiXu7.mjs → checkbox-D6qWgpWR.mjs} +8 -8
- package/dist/{checkbox-LYzMiXu7.mjs.map → checkbox-D6qWgpWR.mjs.map} +1 -1
- package/dist/checkbox.es.js +1 -1
- package/dist/{chip-group-aj1fdnjC.js → chip-group-B775zvKD.js} +2 -2
- package/dist/{chip-group-aj1fdnjC.js.map → chip-group-B775zvKD.js.map} +1 -1
- package/dist/{chip-group-CJVvfl_J.mjs → chip-group-xuOe7nL3.mjs} +3 -3
- package/dist/{chip-group-CJVvfl_J.mjs.map → chip-group-xuOe7nL3.mjs.map} +1 -1
- package/dist/chip-group.cjs.js +1 -1
- package/dist/chip-group.es.js +1 -1
- package/dist/components/button/src/button.d.ts.map +1 -1
- package/dist/components/date-field/src/date-field.d.ts.map +1 -1
- package/dist/components/stepper/src/stepper-button.d.ts.map +1 -1
- package/dist/components/table/src/table-toolbar.d.ts.map +1 -1
- package/dist/components/tabs/src/tab-content.d.ts.map +1 -1
- package/dist/components/tabs/src/tabs.d.ts.map +1 -1
- package/dist/{container-Bw12NgHN.mjs → container-DLjBTB_w.mjs} +3 -3
- package/dist/{container-Bw12NgHN.mjs.map → container-DLjBTB_w.mjs.map} +1 -1
- package/dist/container.es.js +1 -1
- package/dist/{content-block-DUcjAZgG.mjs → content-block-BMOvlH7a.mjs} +6 -6
- package/dist/{content-block-DUcjAZgG.mjs.map → content-block-BMOvlH7a.mjs.map} +1 -1
- package/dist/{content-block-kzdUWgvH.js → content-block-Cd7xSE8t.js} +2 -2
- package/dist/{content-block-kzdUWgvH.js.map → content-block-Cd7xSE8t.js.map} +1 -1
- package/dist/content-block.cjs.js +1 -1
- package/dist/content-block.es.js +1 -1
- package/dist/{countdown-DxAGVUFI.mjs → countdown-DZ4IwkNy.mjs} +12 -12
- package/dist/{countdown-DxAGVUFI.mjs.map → countdown-DZ4IwkNy.mjs.map} +1 -1
- package/dist/countdown.es.js +1 -1
- package/dist/{date-field-D_6iP2fC.mjs → date-field-Ch2lM7-P.mjs} +325 -310
- package/dist/{date-field-D_6iP2fC.mjs.map → date-field-Ch2lM7-P.mjs.map} +1 -1
- package/dist/date-field-DTI5mQkg.js +2 -0
- package/dist/{date-field-CPiTZqa0.js.map → date-field-DTI5mQkg.js.map} +1 -1
- package/dist/date-field.cjs.js +1 -1
- package/dist/date-field.es.js +1 -1
- package/dist/{date-picker-BRnwwZv1.mjs → date-picker-Bt3IaH23.mjs} +5 -5
- package/dist/{date-picker-BRnwwZv1.mjs.map → date-picker-Bt3IaH23.mjs.map} +1 -1
- package/dist/{date-picker-DlJGggam.js → date-picker-Dk39IXG5.js} +2 -2
- package/dist/{date-picker-DlJGggam.js.map → date-picker-Dk39IXG5.js.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/{dismissable-chip-group-DsO2cZaF.js → dismissable-chip-group-CnziecOt.js} +2 -2
- package/dist/{dismissable-chip-group-DsO2cZaF.js.map → dismissable-chip-group-CnziecOt.js.map} +1 -1
- package/dist/{dismissable-chip-group-Bl0D18qM.mjs → dismissable-chip-group-ZCYOt1sB.mjs} +2 -2
- package/dist/{dismissable-chip-group-Bl0D18qM.mjs.map → dismissable-chip-group-ZCYOt1sB.mjs.map} +1 -1
- package/dist/dismissable-chip-group.cjs.js +1 -1
- package/dist/dismissable-chip-group.es.js +1 -1
- package/dist/{drawer-Boqmgh-i.mjs → drawer-B6j8nfAY.mjs} +14 -14
- package/dist/{drawer-Boqmgh-i.mjs.map → drawer-B6j8nfAY.mjs.map} +1 -1
- package/dist/{drawer-nBpCtIdI.js → drawer-CJsLdd2x.js} +2 -2
- package/dist/{drawer-nBpCtIdI.js.map → drawer-CJsLdd2x.js.map} +1 -1
- package/dist/drawer.cjs.js +1 -1
- package/dist/drawer.es.js +1 -1
- package/dist/{floating-ui.react-dom-0ol4sFzt.mjs → floating-ui.react-dom-gsHLgcoR.mjs} +5 -5
- package/dist/{floating-ui.react-dom-0ol4sFzt.mjs.map → floating-ui.react-dom-gsHLgcoR.mjs.map} +1 -1
- package/dist/{footer-DrjAwjuL.js → footer-BL0ewBZT.js} +2 -2
- package/dist/{footer-DrjAwjuL.js.map → footer-BL0ewBZT.js.map} +1 -1
- package/dist/{footer-DcWsihxS.mjs → footer-cH07Xqil.mjs} +5 -5
- package/dist/{footer-DcWsihxS.mjs.map → footer-cH07Xqil.mjs.map} +1 -1
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/heading-drD5ugCC.js +2 -0
- package/dist/{heading-DLCdW6gx.js.map → heading-drD5ugCC.js.map} +1 -1
- package/dist/heading-xwBuT_-9.mjs +75 -0
- package/dist/{heading-gqtQNo5n.mjs.map → heading-xwBuT_-9.mjs.map} +1 -1
- package/dist/heading.cjs.js +1 -1
- package/dist/heading.es.js +1 -1
- package/dist/{hero-banner-B8fRHxXc.mjs → hero-banner-B5HKmkXc.mjs} +5 -5
- package/dist/{hero-banner-B8fRHxXc.mjs.map → hero-banner-B5HKmkXc.mjs.map} +1 -1
- package/dist/{hero-banner-D3peC1NR.js → hero-banner-OnNSuxNT.js} +2 -2
- package/dist/{hero-banner-D3peC1NR.js.map → hero-banner-OnNSuxNT.js.map} +1 -1
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +44 -44
- package/dist/{listbox-u6__DsLw.mjs → listbox-oDeP8FvH.mjs} +2 -2
- package/dist/{listbox-u6__DsLw.mjs.map → listbox-oDeP8FvH.mjs.map} +1 -1
- package/dist/listbox.es.js +1 -1
- package/dist/{modal-C2UQsW-g.mjs → modal-B1eJu9HN.mjs} +19 -19
- package/dist/{modal-C2UQsW-g.mjs.map → modal-B1eJu9HN.mjs.map} +1 -1
- package/dist/{modal-nyhf5zxG.js → modal-CQiJ98iI.js} +2 -2
- package/dist/{modal-nyhf5zxG.js.map → modal-CQiJ98iI.js.map} +1 -1
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{notification-C32wHljA.mjs → notification-BtcM7Ndu.mjs} +22 -22
- package/dist/{notification-C32wHljA.mjs.map → notification-BtcM7Ndu.mjs.map} +1 -1
- package/dist/{notification-Bg1vQkQ3.js → notification-Dsg3Vzfi.js} +2 -2
- package/dist/{notification-Bg1vQkQ3.js.map → notification-Dsg3Vzfi.js.map} +1 -1
- package/dist/{notification-banner-C8XsBDTq.js → notification-banner-B0CUuKZn.js} +2 -2
- package/dist/{notification-banner-C8XsBDTq.js.map → notification-banner-B0CUuKZn.js.map} +1 -1
- package/dist/{notification-banner-BY2iZOIa.mjs → notification-banner-CbKcE7o4.mjs} +3 -3
- package/dist/{notification-banner-BY2iZOIa.mjs.map → notification-banner-CbKcE7o4.mjs.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-CVVCAQ65.mjs → pagination-BdCjh1Pi.mjs} +2 -2
- package/dist/{pagination-CVVCAQ65.mjs.map → pagination-BdCjh1Pi.mjs.map} +1 -1
- package/dist/pagination.es.js +1 -1
- package/dist/{paragraph-DNtj7OLr.mjs → paragraph-Ci50OF1u.mjs} +3 -3
- package/dist/{paragraph-DNtj7OLr.mjs.map → paragraph-Ci50OF1u.mjs.map} +1 -1
- package/dist/paragraph.es.js +1 -1
- package/dist/{popover-DBMI9Jy1.mjs → popover-D3b2gHm-.mjs} +25 -25
- package/dist/{popover-DBMI9Jy1.mjs.map → popover-D3b2gHm-.mjs.map} +1 -1
- package/dist/{popover-B1BgSoQx.js → popover-D6k4-oO1.js} +2 -2
- package/dist/{popover-B1BgSoQx.js.map → popover-D6k4-oO1.js.map} +1 -1
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{product-card-rfpJbzzV.mjs → product-card-BU1ThhCx.mjs} +12 -12
- package/dist/{product-card-rfpJbzzV.mjs.map → product-card-BU1ThhCx.mjs.map} +1 -1
- package/dist/{product-card-DOBHGAa2.js → product-card-CNBegEBW.js} +2 -2
- package/dist/{product-card-DOBHGAa2.js.map → product-card-CNBegEBW.js.map} +1 -1
- package/dist/product-card.cjs.js +1 -1
- package/dist/product-card.es.js +1 -1
- package/dist/{promotion-card-BIFOwMrw.js → promotion-card-CXNhskRl.js} +2 -2
- package/dist/{promotion-card-BIFOwMrw.js.map → promotion-card-CXNhskRl.js.map} +1 -1
- package/dist/{promotion-card-DeyqFnyP.mjs → promotion-card-_bPyVr9t.mjs} +9 -9
- package/dist/{promotion-card-DeyqFnyP.mjs.map → promotion-card-_bPyVr9t.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-DPOTlMSq.js → quantity-selector-Bc-4Dnpc.js} +2 -2
- package/dist/{quantity-selector-DPOTlMSq.js.map → quantity-selector-Bc-4Dnpc.js.map} +1 -1
- package/dist/{quantity-selector-_VcZYLjR.mjs → quantity-selector-Djf8APeL.mjs} +5 -5
- package/dist/{quantity-selector-_VcZYLjR.mjs.map → quantity-selector-Djf8APeL.mjs.map} +1 -1
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +1 -1
- package/dist/{radio-button-group-CZ_FnVAi.js → radio-button-group-BaFpGAcD.js} +2 -2
- package/dist/{radio-button-group-CZ_FnVAi.js.map → radio-button-group-BaFpGAcD.js.map} +1 -1
- package/dist/{radio-button-group-BnCPcmSN.mjs → radio-button-group-CFqPsu5A.mjs} +5 -5
- package/dist/{radio-button-group-BnCPcmSN.mjs.map → radio-button-group-CFqPsu5A.mjs.map} +1 -1
- package/dist/radio-button-group.cjs.js +1 -1
- package/dist/radio-button-group.es.js +1 -1
- package/dist/{radio-card-group-DkaMcmen.mjs → radio-card-group-BlRZBa-9.mjs} +16 -16
- package/dist/{radio-card-group-DkaMcmen.mjs.map → radio-card-group-BlRZBa-9.mjs.map} +1 -1
- package/dist/{radio-card-group-BT5pV3tA.js → radio-card-group-sYcfDPJq.js} +2 -2
- package/dist/{radio-card-group-BT5pV3tA.js.map → radio-card-group-sYcfDPJq.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/scss/heading.mixins.scss +1 -1
- package/dist/{search-field-CxX4BBcg.js → search-field-0CBoxcNH.js} +2 -2
- package/dist/{search-field-CxX4BBcg.js.map → search-field-0CBoxcNH.js.map} +1 -1
- package/dist/{search-field-DH0xeW_J.mjs → search-field-aP_i6Nr0.mjs} +11 -11
- package/dist/{search-field-DH0xeW_J.mjs.map → search-field-aP_i6Nr0.mjs.map} +1 -1
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/stepper-BaoOY4Ea.js +2 -0
- package/dist/stepper-BaoOY4Ea.js.map +1 -0
- package/dist/{stepper-BfIbJwZn.mjs → stepper-CTdGj87I.mjs} +68 -71
- package/dist/stepper-CTdGj87I.mjs.map +1 -0
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-DvcpczWf.mjs → table-D7qthqj_.mjs} +181 -179
- package/dist/{table-DvcpczWf.mjs.map → table-D7qthqj_.mjs.map} +1 -1
- package/dist/{table-BNeo_B1h.js → table-TdOPMFoP.js} +4 -4
- package/dist/{table-BNeo_B1h.js.map → table-TdOPMFoP.js.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/tabs-Bye5lgZ1.mjs +424 -0
- package/dist/tabs-Bye5lgZ1.mjs.map +1 -0
- package/dist/tabs-D-nfZHIA.js +2 -0
- package/dist/tabs-D-nfZHIA.js.map +1 -0
- package/dist/tabs.cjs.js +1 -1
- package/dist/tabs.es.js +1 -1
- package/dist/{text-area-Cb9Hm2Z9.mjs → text-area-CpYWt99s.mjs} +3 -3
- package/dist/{text-area-Cb9Hm2Z9.mjs.map → text-area-CpYWt99s.mjs.map} +1 -1
- package/dist/text-area.es.js +1 -1
- package/dist/{text-field-PKAaXO1N.mjs → text-field-9zPmL99g.mjs} +2 -2
- package/dist/{text-field-PKAaXO1N.mjs.map → text-field-9zPmL99g.mjs.map} +1 -1
- package/dist/{text-field-B8a-NKm4.js → text-field-CKCwxTJX.js} +2 -2
- package/dist/{text-field-B8a-NKm4.js.map → text-field-CKCwxTJX.js.map} +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.es.js +1 -1
- package/dist/theme.es.js +2 -2
- package/dist/{toggle-Cezg5MUc.mjs → toggle-D23x1wWk.mjs} +9 -9
- package/dist/{toggle-Cezg5MUc.mjs.map → toggle-D23x1wWk.mjs.map} +1 -1
- package/dist/toggle.es.js +1 -1
- package/dist/tokens.es.js +3 -3
- package/dist/{tooltip-DXi7ikUT.mjs → tooltip-BtGtu3ph.mjs} +12 -12
- package/dist/{tooltip-DXi7ikUT.mjs.map → tooltip-BtGtu3ph.mjs.map} +1 -1
- package/dist/{tooltip-CLQLxoaf.js → tooltip-eUP35j3v.js} +2 -2
- package/dist/{tooltip-CLQLxoaf.js.map → tooltip-eUP35j3v.js.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/{useColorScheme-DRQcbSog.mjs → useColorScheme-9rgSgG0N.mjs} +2 -2
- package/dist/{useColorScheme-DRQcbSog.mjs.map → useColorScheme-9rgSgG0N.mjs.map} +1 -1
- package/dist/{variables-91UvS2rU.mjs → variables-BVgnpUH9.mjs} +253 -253
- package/dist/{variables-91UvS2rU.mjs.map → variables-BVgnpUH9.mjs.map} +1 -1
- package/dist/{variables-BSsIx39i.mjs → variables-DkCN2x27.mjs} +7 -7
- package/dist/{variables-BSsIx39i.mjs.map → variables-DkCN2x27.mjs.map} +1 -1
- package/dist/{variables-BUfnQw6H.mjs → variables-Dr3Hsdn-.mjs} +9 -9
- package/dist/{variables-BUfnQw6H.mjs.map → variables-Dr3Hsdn-.mjs.map} +1 -1
- package/package.json +22 -22
- package/scripts/generate.mts +4 -1
- package/vite-plugin-generate-components-metadata.js +4 -1
- package/dist/button-ChYUPi2k.js +0 -2
- package/dist/button-ChYUPi2k.js.map +0 -1
- package/dist/button-DBX_tvfJ.mjs +0 -105
- package/dist/button-DBX_tvfJ.mjs.map +0 -1
- package/dist/date-field-CPiTZqa0.js +0 -2
- package/dist/heading-DLCdW6gx.js +0 -2
- package/dist/heading-gqtQNo5n.mjs +0 -75
- package/dist/stepper-B248FwO-.js +0 -2
- package/dist/stepper-B248FwO-.js.map +0 -1
- package/dist/stepper-BfIbJwZn.mjs.map +0 -1
- package/dist/tabs-CfHd4UQ2.js +0 -2
- package/dist/tabs-CfHd4UQ2.js.map +0 -1
- package/dist/tabs-CoXMAwMx.mjs +0 -396
- package/dist/tabs-CoXMAwMx.mjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsxs as v, jsx as u, Fragment as
|
|
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 {
|
|
3
|
+
import { P as M } from "./paragraph-Ci50OF1u.mjs";
|
|
4
4
|
import { V as O } from "./visually-hidden-BYFkJEp1.mjs";
|
|
5
|
-
import { c as
|
|
5
|
+
import { c as A } from "./bind-CU-R61T-.mjs";
|
|
6
6
|
const U = {
|
|
7
7
|
"purpur-countdown--size-md": "_purpur-countdown--size-md_ytnsp_1",
|
|
8
8
|
"purpur-countdown--size-lg": "_purpur-countdown--size-lg_ytnsp_5",
|
|
@@ -27,10 +27,10 @@ const U = {
|
|
|
27
27
|
"purpur-countdown-counter__label": "_purpur-countdown-counter__label_23fbu_64",
|
|
28
28
|
"purpur-countdown-counter__label--abbr": "_purpur-countdown-counter__label--abbr_23fbu_71",
|
|
29
29
|
"purpur-countdown-counter__label--full": "_purpur-countdown-counter__label--full_23fbu_74"
|
|
30
|
-
}, m =
|
|
30
|
+
}, m = A.bind(X), r = "purpur-countdown-counter", $ = ({ tag: t, size: a, numbers: n, counterLabels: _ }) => {
|
|
31
31
|
const w = () => {
|
|
32
32
|
const s = _[t], e = _[`${t}Abbr`];
|
|
33
|
-
return /* @__PURE__ */ v(
|
|
33
|
+
return /* @__PURE__ */ v(T, { children: [
|
|
34
34
|
e && /* @__PURE__ */ u(M, { className: m(`${r}__label`, `${r}__label--abbr`), children: /* @__PURE__ */ u("abbr", { title: s, children: e }) }),
|
|
35
35
|
/* @__PURE__ */ u(
|
|
36
36
|
M,
|
|
@@ -94,13 +94,13 @@ const d = {
|
|
|
94
94
|
hour: 3600 * 1e3,
|
|
95
95
|
day: 1440 * 60 * 1e3
|
|
96
96
|
};
|
|
97
|
-
function
|
|
97
|
+
function P(t) {
|
|
98
98
|
return t instanceof Date ? t : new Date(t);
|
|
99
99
|
}
|
|
100
100
|
function g(t) {
|
|
101
101
|
return String(t).padStart(2, "0").split("");
|
|
102
102
|
}
|
|
103
|
-
const D =
|
|
103
|
+
const D = A.bind(U), o = "purpur-countdown", B = k(
|
|
104
104
|
({ renderAfterEnd: t, renderBeforeStart: a, ...n }, _) => {
|
|
105
105
|
const w = /* @__PURE__ */ new Date(), s = G(), {
|
|
106
106
|
size: e = "lg",
|
|
@@ -108,10 +108,10 @@ const D = L.bind(U), o = "purpur-countdown", B = k(
|
|
|
108
108
|
negative: b = !1,
|
|
109
109
|
showDays: i = !0,
|
|
110
110
|
variant: j = "primary",
|
|
111
|
-
className:
|
|
111
|
+
className: L,
|
|
112
112
|
counterLabels: f,
|
|
113
113
|
useMediaQueries: C = !1
|
|
114
|
-
} = n, [p, V] = J(w), N = z(() =>
|
|
114
|
+
} = n, [p, V] = J(w), N = z(() => P(n.starttime), [n.starttime]), y = z(() => P(n.endtime), [n.endtime]), { days: q, hours: x, minutes: I, seconds: S } = z(() => Z(y.getTime()), [p]);
|
|
115
115
|
K(() => {
|
|
116
116
|
if (p < N || p > y) return;
|
|
117
117
|
const c = setInterval(() => V(/* @__PURE__ */ new Date()), 1e3);
|
|
@@ -122,7 +122,7 @@ const D = L.bind(U), o = "purpur-countdown", B = k(
|
|
|
122
122
|
if (F) return t ? t(n) : null;
|
|
123
123
|
const H = () => {
|
|
124
124
|
const c = { size: e, counterLabels: f };
|
|
125
|
-
return /* @__PURE__ */ v(
|
|
125
|
+
return /* @__PURE__ */ v(T, { children: [
|
|
126
126
|
i && /* @__PURE__ */ u($, { numbers: q, tag: "days", ...c }),
|
|
127
127
|
/* @__PURE__ */ u($, { numbers: x, tag: "hours", ...c }),
|
|
128
128
|
/* @__PURE__ */ u($, { numbers: I, tag: "minutes", ...c }),
|
|
@@ -153,7 +153,7 @@ const D = L.bind(U), o = "purpur-countdown", B = k(
|
|
|
153
153
|
[`${o}--use-media-queries`]: C,
|
|
154
154
|
[`${o}--use-container-queries`]: !C
|
|
155
155
|
},
|
|
156
|
-
|
|
156
|
+
L
|
|
157
157
|
);
|
|
158
158
|
return /* @__PURE__ */ v(
|
|
159
159
|
"section",
|
|
@@ -176,4 +176,4 @@ B.displayName = "Countdown";
|
|
|
176
176
|
export {
|
|
177
177
|
B as C
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=countdown-
|
|
179
|
+
//# sourceMappingURL=countdown-DZ4IwkNy.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"countdown-DxAGVUFI.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-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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"}
|
package/dist/countdown.es.js
CHANGED