@purpur/library 9.8.0 → 9.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.json +27 -0
  2. package/CHANGELOG.md +13 -1
  3. package/dist/{RichText-yobCUjTD.js → RichText-BAVZadzi.js} +2 -2
  4. package/dist/{RichText-yobCUjTD.js.map → RichText-BAVZadzi.js.map} +1 -1
  5. package/dist/{RichText-jZ-sHV-u.mjs → RichText-D4vznH1B.mjs} +2 -2
  6. package/dist/{RichText-jZ-sHV-u.mjs.map → RichText-D4vznH1B.mjs.map} +1 -1
  7. package/dist/{accordion-CIU4U8-4.mjs → accordion-B6OoQ4uZ.mjs} +2 -2
  8. package/dist/{accordion-CIU4U8-4.mjs.map → accordion-B6OoQ4uZ.mjs.map} +1 -1
  9. package/dist/{accordion-DyhOG54L.js → accordion-BfpN5h4C.js} +2 -2
  10. package/dist/{accordion-DyhOG54L.js.map → accordion-BfpN5h4C.js.map} +1 -1
  11. package/dist/accordion.cjs.js +1 -1
  12. package/dist/accordion.es.js +1 -1
  13. package/dist/{autocomplete-Bbth0nDG.js → autocomplete-CcVDJbwS.js} +2 -2
  14. package/dist/{autocomplete-Bbth0nDG.js.map → autocomplete-CcVDJbwS.js.map} +1 -1
  15. package/dist/{autocomplete-A9-Ni60G.mjs → autocomplete-DF17Zm7Q.mjs} +2 -2
  16. package/dist/{autocomplete-A9-Ni60G.mjs.map → autocomplete-DF17Zm7Q.mjs.map} +1 -1
  17. package/dist/autocomplete.cjs.js +1 -1
  18. package/dist/autocomplete.es.js +1 -1
  19. package/dist/avatar-BDF2KuEh.mjs +28 -0
  20. package/dist/avatar-BDF2KuEh.mjs.map +1 -0
  21. package/dist/avatar-nDQ8fk-2.js +2 -0
  22. package/dist/avatar-nDQ8fk-2.js.map +1 -0
  23. package/dist/avatar.cjs.js +1 -1
  24. package/dist/avatar.es.js +1 -1
  25. package/dist/{card-DFdUs5RG.js → card-pdsBEJif.js} +2 -2
  26. package/dist/{card-DFdUs5RG.js.map → card-pdsBEJif.js.map} +1 -1
  27. package/dist/{card-C2mdp-ur.mjs → card-t2ZkZ82G.mjs} +2 -2
  28. package/dist/{card-C2mdp-ur.mjs.map → card-t2ZkZ82G.mjs.map} +1 -1
  29. package/dist/card.cjs.js +1 -1
  30. package/dist/card.es.js +1 -1
  31. package/dist/{checkbox-BHTx89JQ.mjs → checkbox-DaRtZXrE.mjs} +2 -2
  32. package/dist/{checkbox-BHTx89JQ.mjs.map → checkbox-DaRtZXrE.mjs.map} +1 -1
  33. package/dist/{checkbox-CDNcNv6d.js → checkbox-qjWQEoa5.js} +2 -2
  34. package/dist/{checkbox-CDNcNv6d.js.map → checkbox-qjWQEoa5.js.map} +1 -1
  35. package/dist/checkbox.cjs.js +1 -1
  36. package/dist/checkbox.es.js +1 -1
  37. package/dist/comparison-table-DHFpydbq.js +2 -0
  38. package/dist/comparison-table-DHFpydbq.js.map +1 -0
  39. package/dist/comparison-table-DQJL1IVC.mjs +293 -0
  40. package/dist/comparison-table-DQJL1IVC.mjs.map +1 -0
  41. package/dist/comparison-table.cjs.js +1 -1
  42. package/dist/comparison-table.es.js +1 -1
  43. package/dist/components/alert-badge/src/alert-badge.visual.fixtures.d.ts +15 -0
  44. package/dist/components/alert-badge/src/alert-badge.visual.fixtures.d.ts.map +1 -0
  45. package/dist/components/avatar/src/avatar.d.ts +2 -2
  46. package/dist/components/avatar/src/avatar.d.ts.map +1 -1
  47. package/dist/components/avatar/src/avatar.visual.fixtures.d.ts +14 -0
  48. package/dist/components/avatar/src/avatar.visual.fixtures.d.ts.map +1 -0
  49. package/dist/components/badge/src/badge.visual.fixtures.d.ts.map +1 -1
  50. package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts +1 -1
  51. package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts.map +1 -1
  52. package/dist/components/countdown/src/countdown.d.ts.map +1 -1
  53. package/dist/components/countdown/src/countdown.types.d.ts +10 -0
  54. package/dist/components/countdown/src/countdown.types.d.ts.map +1 -1
  55. package/dist/components/countdown/src/countdown.visual.fixtures.d.ts +13 -0
  56. package/dist/components/countdown/src/countdown.visual.fixtures.d.ts.map +1 -0
  57. package/dist/components/countdown/src/utils.d.ts +1 -1
  58. package/dist/components/countdown/src/utils.d.ts.map +1 -1
  59. package/dist/components/search-field/src/search-field.visual.fixtures.d.ts +14 -0
  60. package/dist/components/search-field/src/search-field.visual.fixtures.d.ts.map +1 -0
  61. package/dist/{content-block-CakKeJtN.mjs → content-block-CDMrz41K.mjs} +2 -2
  62. package/dist/{content-block-CakKeJtN.mjs.map → content-block-CDMrz41K.mjs.map} +1 -1
  63. package/dist/{content-block-CrekbIfe.js → content-block-DyYAnL2e.js} +2 -2
  64. package/dist/{content-block-CrekbIfe.js.map → content-block-DyYAnL2e.js.map} +1 -1
  65. package/dist/content-block.cjs.js +1 -1
  66. package/dist/content-block.es.js +1 -1
  67. package/dist/countdown-5Ni6OlVY.mjs +189 -0
  68. package/dist/countdown-5Ni6OlVY.mjs.map +1 -0
  69. package/dist/countdown-CGXJyzB2.js +2 -0
  70. package/dist/countdown-CGXJyzB2.js.map +1 -0
  71. package/dist/countdown.cjs.js +1 -1
  72. package/dist/countdown.es.js +1 -1
  73. package/dist/{dropdown-CMO_VD5e.mjs → dropdown-CDK_eRm3.mjs} +3 -3
  74. package/dist/{dropdown-CMO_VD5e.mjs.map → dropdown-CDK_eRm3.mjs.map} +1 -1
  75. package/dist/{dropdown-DJKNQnuo.js → dropdown-_FLHLyPL.js} +2 -2
  76. package/dist/{dropdown-DJKNQnuo.js.map → dropdown-_FLHLyPL.js.map} +1 -1
  77. package/dist/dropdown.cjs.js +1 -1
  78. package/dist/dropdown.es.js +1 -1
  79. package/dist/{footer-cet787Iq.js → footer-CS6ZfztM.js} +2 -2
  80. package/dist/{footer-cet787Iq.js.map → footer-CS6ZfztM.js.map} +1 -1
  81. package/dist/{footer-BMlXRro2.mjs → footer-OJXbTn1e.mjs} +2 -2
  82. package/dist/{footer-BMlXRro2.mjs.map → footer-OJXbTn1e.mjs.map} +1 -1
  83. package/dist/footer.cjs.js +1 -1
  84. package/dist/footer.es.js +1 -1
  85. package/dist/{hero-banner-D__doaU7.js → hero-banner--v-ezYMr.js} +2 -2
  86. package/dist/{hero-banner-D__doaU7.js.map → hero-banner--v-ezYMr.js.map} +1 -1
  87. package/dist/{hero-banner-B08jC0Sf.mjs → hero-banner-n9K-Jsdz.mjs} +2 -2
  88. package/dist/{hero-banner-B08jC0Sf.mjs.map → hero-banner-n9K-Jsdz.mjs.map} +1 -1
  89. package/dist/hero-banner.cjs.js +1 -1
  90. package/dist/hero-banner.es.js +1 -1
  91. package/dist/library.cjs.js +1 -1
  92. package/dist/library.es.js +28 -28
  93. package/dist/{listbox-i6BQQ-NZ.mjs → listbox-CtV-Vcmy.mjs} +2 -2
  94. package/dist/{listbox-i6BQQ-NZ.mjs.map → listbox-CtV-Vcmy.mjs.map} +1 -1
  95. package/dist/{listbox-ATP4hOWF.js → listbox-lXO21cJV.js} +2 -2
  96. package/dist/{listbox-ATP4hOWF.js.map → listbox-lXO21cJV.js.map} +1 -1
  97. package/dist/listbox.cjs.js +1 -1
  98. package/dist/listbox.es.js +1 -1
  99. package/dist/{loading-Dwtkjstg.js → loading-B_0NjCnh.js} +2 -2
  100. package/dist/{loading-Dwtkjstg.js.map → loading-B_0NjCnh.js.map} +1 -1
  101. package/dist/{loading-r23nxJSz.mjs → loading-DqZBpMaa.mjs} +2 -2
  102. package/dist/{loading-r23nxJSz.mjs.map → loading-DqZBpMaa.mjs.map} +1 -1
  103. package/dist/loading.cjs.js +1 -1
  104. package/dist/loading.es.js +1 -1
  105. package/dist/{message-D9CDwcw9.mjs → message-CeXuAhmb.mjs} +3 -3
  106. package/dist/{message-D9CDwcw9.mjs.map → message-CeXuAhmb.mjs.map} +1 -1
  107. package/dist/{message-0yTS5pOF.js → message-DsGB-JFh.js} +2 -2
  108. package/dist/{message-0yTS5pOF.js.map → message-DsGB-JFh.js.map} +1 -1
  109. package/dist/message.cjs.js +1 -1
  110. package/dist/message.es.js +1 -1
  111. package/dist/{modal-Evh8sCBO.mjs → modal-Bu1Zv5Ic.mjs} +2 -2
  112. package/dist/{modal-Evh8sCBO.mjs.map → modal-Bu1Zv5Ic.mjs.map} +1 -1
  113. package/dist/{modal-CmPPxJ7Y.js → modal-D0Qxrvx5.js} +2 -2
  114. package/dist/{modal-CmPPxJ7Y.js.map → modal-D0Qxrvx5.js.map} +1 -1
  115. package/dist/modal.cjs.js +1 -1
  116. package/dist/modal.es.js +1 -1
  117. package/dist/{notification-B5bNNq86.js → notification-D2oClkX2.js} +2 -2
  118. package/dist/{notification-B5bNNq86.js.map → notification-D2oClkX2.js.map} +1 -1
  119. package/dist/{notification-BbQCmsnY.mjs → notification-DiVdy6E_.mjs} +2 -2
  120. package/dist/{notification-BbQCmsnY.mjs.map → notification-DiVdy6E_.mjs.map} +1 -1
  121. package/dist/notification.cjs.js +1 -1
  122. package/dist/notification.es.js +1 -1
  123. package/dist/{pagination-rFRdkHII.js → pagination-BDfaybj3.js} +2 -2
  124. package/dist/{pagination-rFRdkHII.js.map → pagination-BDfaybj3.js.map} +1 -1
  125. package/dist/{pagination-Cc_4zCQA.mjs → pagination-Bm38GKga.mjs} +2 -2
  126. package/dist/{pagination-Cc_4zCQA.mjs.map → pagination-Bm38GKga.mjs.map} +1 -1
  127. package/dist/pagination.cjs.js +1 -1
  128. package/dist/pagination.es.js +1 -1
  129. package/dist/{paragraph-By4jMjnH.js → paragraph-B8HFdNne.js} +2 -2
  130. package/dist/{paragraph-By4jMjnH.js.map → paragraph-B8HFdNne.js.map} +1 -1
  131. package/dist/{paragraph-DSxXmX_0.mjs → paragraph-CwAdFoIm.mjs} +3 -3
  132. package/dist/{paragraph-DSxXmX_0.mjs.map → paragraph-CwAdFoIm.mjs.map} +1 -1
  133. package/dist/paragraph.cjs.js +1 -1
  134. package/dist/paragraph.es.js +1 -1
  135. package/dist/{popover-XJqF5DHT.js → popover-BFozkeS3.js} +2 -2
  136. package/dist/{popover-XJqF5DHT.js.map → popover-BFozkeS3.js.map} +1 -1
  137. package/dist/{popover-BSUdf0Ae.mjs → popover-DFPGkVJ6.mjs} +2 -2
  138. package/dist/{popover-BSUdf0Ae.mjs.map → popover-DFPGkVJ6.mjs.map} +1 -1
  139. package/dist/popover.cjs.js +1 -1
  140. package/dist/popover.es.js +1 -1
  141. package/dist/{product-card-Bt-F0wKr.mjs → product-card-CxfHfJVV.mjs} +3 -3
  142. package/dist/{product-card-Bt-F0wKr.mjs.map → product-card-CxfHfJVV.mjs.map} +1 -1
  143. package/dist/{product-card-8X-Ld2d_.js → product-card-XxBwuxM-.js} +2 -2
  144. package/dist/{product-card-8X-Ld2d_.js.map → product-card-XxBwuxM-.js.map} +1 -1
  145. package/dist/product-card.cjs.js +1 -1
  146. package/dist/product-card.es.js +1 -1
  147. package/dist/{promotion-card-BnXD2mkp.js → promotion-card-C1UoxzcV.js} +2 -2
  148. package/dist/{promotion-card-BnXD2mkp.js.map → promotion-card-C1UoxzcV.js.map} +1 -1
  149. package/dist/{promotion-card-DOO0VCI8.mjs → promotion-card-CooYPpFo.mjs} +37 -37
  150. package/dist/{promotion-card-DOO0VCI8.mjs.map → promotion-card-CooYPpFo.mjs.map} +1 -1
  151. package/dist/promotion-card.cjs.js +1 -1
  152. package/dist/promotion-card.es.js +1 -1
  153. package/dist/purpur.css +1 -1
  154. package/dist/{radio-card-group-nrDi5EPK.js → radio-card-group-BXwkIIEw.js} +2 -2
  155. package/dist/{radio-card-group-nrDi5EPK.js.map → radio-card-group-BXwkIIEw.js.map} +1 -1
  156. package/dist/{radio-card-group-ZBXjYcQs.mjs → radio-card-group-Bn6SK0Wc.mjs} +2 -2
  157. package/dist/{radio-card-group-ZBXjYcQs.mjs.map → radio-card-group-Bn6SK0Wc.mjs.map} +1 -1
  158. package/dist/radio-card-group.cjs.js +1 -1
  159. package/dist/radio-card-group.es.js +1 -1
  160. package/dist/rich-text.cjs.js +1 -1
  161. package/dist/rich-text.es.js +1 -1
  162. package/dist/{search-field-_h8xn-sj.mjs → search-field-BPLzy3RR.mjs} +2 -2
  163. package/dist/{search-field-_h8xn-sj.mjs.map → search-field-BPLzy3RR.mjs.map} +1 -1
  164. package/dist/{search-field-vh6uz5KV.js → search-field-Dx4qCcrh.js} +2 -2
  165. package/dist/{search-field-vh6uz5KV.js.map → search-field-Dx4qCcrh.js.map} +1 -1
  166. package/dist/search-field.cjs.js +1 -1
  167. package/dist/search-field.es.js +1 -1
  168. package/dist/{stepper-B-nCLs2D.mjs → stepper-DSl-YCMe.mjs} +2 -2
  169. package/dist/{stepper-B-nCLs2D.mjs.map → stepper-DSl-YCMe.mjs.map} +1 -1
  170. package/dist/{stepper-CTKlnH0q.js → stepper-eaxkBC7o.js} +2 -2
  171. package/dist/{stepper-CTKlnH0q.js.map → stepper-eaxkBC7o.js.map} +1 -1
  172. package/dist/stepper.cjs.js +1 -1
  173. package/dist/stepper.es.js +1 -1
  174. package/dist/{table-DOPXfD-s.mjs → table-D9MKkbPO.mjs} +5 -5
  175. package/dist/{table-DOPXfD-s.mjs.map → table-D9MKkbPO.mjs.map} +1 -1
  176. package/dist/{table-DTQe4nN8.js → table-rS3hITtj.js} +2 -2
  177. package/dist/{table-DTQe4nN8.js.map → table-rS3hITtj.js.map} +1 -1
  178. package/dist/table.cjs.js +1 -1
  179. package/dist/table.es.js +1 -1
  180. package/dist/{toggle-B8ZLUVar.js → toggle-BgrfdtmN.js} +2 -2
  181. package/dist/{toggle-B8ZLUVar.js.map → toggle-BgrfdtmN.js.map} +1 -1
  182. package/dist/{toggle-CY3J8BRX.mjs → toggle-Cg1KFa_2.mjs} +2 -2
  183. package/dist/{toggle-CY3J8BRX.mjs.map → toggle-Cg1KFa_2.mjs.map} +1 -1
  184. package/dist/toggle.cjs.js +1 -1
  185. package/dist/toggle.es.js +1 -1
  186. package/dist/{tooltip-CDnJKoIA.js → tooltip-B-11qk-0.js} +2 -2
  187. package/dist/{tooltip-CDnJKoIA.js.map → tooltip-B-11qk-0.js.map} +1 -1
  188. package/dist/{tooltip-pwJMEBBP.mjs → tooltip-DngYHn5W.mjs} +2 -2
  189. package/dist/{tooltip-pwJMEBBP.mjs.map → tooltip-DngYHn5W.mjs.map} +1 -1
  190. package/dist/tooltip.cjs.js +1 -1
  191. package/dist/tooltip.es.js +1 -1
  192. package/package.json +25 -25
  193. package/dist/avatar-CYnD57o4.js +0 -2
  194. package/dist/avatar-CYnD57o4.js.map +0 -1
  195. package/dist/avatar-CzbDD1MK.mjs +0 -27
  196. package/dist/avatar-CzbDD1MK.mjs.map +0 -1
  197. package/dist/comparison-table-0UDB2BTU.js +0 -2
  198. package/dist/comparison-table-0UDB2BTU.js.map +0 -1
  199. package/dist/comparison-table-CjTE-fHN.mjs +0 -292
  200. package/dist/comparison-table-CjTE-fHN.mjs.map +0 -1
  201. package/dist/countdown-BsLsEZBv.mjs +0 -179
  202. package/dist/countdown-BsLsEZBv.mjs.map +0 -1
  203. package/dist/countdown-hYrFLmRg.js +0 -2
  204. package/dist/countdown-hYrFLmRg.js.map +0 -1
@@ -1,179 +0,0 @@
1
- import { jsxs as v, jsx as u, Fragment as T } from "react/jsx-runtime";
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-DSxXmX_0.mjs";
4
- import { V as O } from "./visually-hidden-BYFkJEp1.mjs";
5
- import { c as A } from "./bind-CU-R61T-.mjs";
6
- const U = {
7
- "purpur-countdown--size-md": "_purpur-countdown--size-md_ytnsp_1",
8
- "purpur-countdown--size-lg": "_purpur-countdown--size-lg_ytnsp_5",
9
- "purpur-countdown--use-container-queries": "_purpur-countdown--use-container-queries_ytnsp_10",
10
- "purpur-countdown__counter-container": "_purpur-countdown__counter-container_ytnsp_10",
11
- "purpur-countdown--full-width": "_purpur-countdown--full-width_ytnsp_15",
12
- "purpur-countdown--use-media-queries": "_purpur-countdown--use-media-queries_ytnsp_25",
13
- "purpur-countdown": "_purpur-countdown_ytnsp_1",
14
- "purpur-countdown--variant-primary": "_purpur-countdown--variant-primary_ytnsp_40",
15
- "purpur-countdown--variant-secondary": "_purpur-countdown--variant-secondary_ytnsp_43",
16
- "purpur-countdown--negative": "_purpur-countdown--negative_ytnsp_46",
17
- "purpur-countdown--show-days": "_purpur-countdown--show-days_ytnsp_56",
18
- "purpur-countdown__label": "_purpur-countdown__label_ytnsp_72"
19
- }, X = {
20
- "purpur-countdown-counter": "_purpur-countdown-counter_23fbu_1",
21
- "purpur-countdown-counter--size-lg": "_purpur-countdown-counter--size-lg_23fbu_10",
22
- "purpur-countdown-counter__number": "_purpur-countdown-counter__number_23fbu_15",
23
- "purpur-countdown-counter--size-md": "_purpur-countdown-counter--size-md_23fbu_21",
24
- "purpur-countdown-counter__number-list-container": "_purpur-countdown-counter__number-list-container_23fbu_35",
25
- "purpur-countdown-counter__number-list": "_purpur-countdown-counter__number-list_23fbu_35",
26
- "purpur-countdown-counter__number--selected": "_purpur-countdown-counter__number--selected_23fbu_61",
27
- "purpur-countdown-counter__label": "_purpur-countdown-counter__label_23fbu_64",
28
- "purpur-countdown-counter__label--abbr": "_purpur-countdown-counter__label--abbr_23fbu_71",
29
- "purpur-countdown-counter__label--full": "_purpur-countdown-counter__label--full_23fbu_74"
30
- }, m = A.bind(X), r = "purpur-countdown-counter", $ = ({ tag: t, size: a, numbers: n, counterLabels: _ }) => {
31
- const w = () => {
32
- const s = _[t], e = _[`${t}Abbr`];
33
- return /* @__PURE__ */ v(T, { children: [
34
- e && /* @__PURE__ */ u(M, { className: m(`${r}__label`, `${r}__label--abbr`), children: /* @__PURE__ */ u("abbr", { title: s, children: e }) }),
35
- /* @__PURE__ */ u(
36
- M,
37
- {
38
- className: m(`${r}__label`, {
39
- [`${r}__label--full`]: !!e
40
- }),
41
- children: s
42
- }
43
- )
44
- ] });
45
- };
46
- return /* @__PURE__ */ v(
47
- "div",
48
- {
49
- className: m(r, `${r}--size-${a}`),
50
- role: "group",
51
- "aria-hidden": "true",
52
- "data-testid": `counter-${t}`,
53
- children: [
54
- /* @__PURE__ */ u("div", { className: m(`${r}__number-list-container`), children: n.map((s, e) => /* @__PURE__ */ u(
55
- "ul",
56
- {
57
- className: m(`${r}__number-list`),
58
- style: {
59
- "--offset": s
60
- },
61
- children: Y.map((l, b) => {
62
- const i = l === s;
63
- return /* @__PURE__ */ u(
64
- "li",
65
- {
66
- className: m(`${r}__number`, {
67
- [`${r}__number--selected`]: i
68
- }),
69
- children: l
70
- },
71
- b
72
- );
73
- })
74
- },
75
- e
76
- )) }),
77
- w()
78
- ]
79
- }
80
- );
81
- }, Y = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
82
- function Z(t) {
83
- const a = (/* @__PURE__ */ new Date()).getTime(), n = Math.max(0, t - a), _ = Math.floor(n / d.day), w = Math.floor(n % d.day / d.hour), s = Math.floor(n % d.hour / d.minute), e = Math.floor(n % d.minute / d.second), l = g(_), b = g(w), i = g(s);
84
- return {
85
- seconds: g(e),
86
- minutes: i,
87
- hours: b,
88
- days: l
89
- };
90
- }
91
- const d = {
92
- second: 1e3,
93
- minute: 60 * 1e3,
94
- hour: 3600 * 1e3,
95
- day: 1440 * 60 * 1e3
96
- };
97
- function P(t) {
98
- return t instanceof Date ? t : new Date(t);
99
- }
100
- function g(t) {
101
- return String(t).padStart(2, "0").split("");
102
- }
103
- const D = A.bind(U), o = "purpur-countdown", B = k(
104
- ({ renderAfterEnd: t, renderBeforeStart: a, ...n }, _) => {
105
- const w = /* @__PURE__ */ new Date(), s = G(), {
106
- size: e = "lg",
107
- fullWidth: l = !1,
108
- negative: b = !1,
109
- showDays: i = !0,
110
- variant: j = "primary",
111
- className: L,
112
- counterLabels: f,
113
- useMediaQueries: C = !1
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
- K(() => {
116
- if (p < N || p > y) return;
117
- const c = setInterval(() => V(/* @__PURE__ */ new Date()), 1e3);
118
- return () => clearInterval(c);
119
- }, [N, y, p]);
120
- const E = N > p, F = y < p;
121
- if (E) return a ? a(n) : null;
122
- if (F) return t ? t(n) : null;
123
- const H = () => {
124
- const c = { size: e, counterLabels: f };
125
- return /* @__PURE__ */ v(T, { children: [
126
- i && /* @__PURE__ */ u($, { numbers: q, tag: "days", ...c }),
127
- /* @__PURE__ */ u($, { numbers: x, tag: "hours", ...c }),
128
- /* @__PURE__ */ u($, { numbers: I, tag: "minutes", ...c }),
129
- /* @__PURE__ */ u($, { numbers: S, tag: "seconds", ...c })
130
- ] });
131
- }, Q = () => {
132
- const c = () => {
133
- const h = [];
134
- return i && h.push(`${q.join("")} ${f.days}`), h.push(`${x.join("")} ${f.hours}`), h.push(`${I.join("")} ${f.minutes}`), h.push(`${S.join("")} ${f.seconds}`), h.join(", ");
135
- };
136
- return /* @__PURE__ */ u(
137
- O,
138
- {
139
- "data-testid": "live-region",
140
- "aria-live": "polite",
141
- "aria-label": n["aria-label"],
142
- children: c()
143
- }
144
- );
145
- }, R = H(), W = D(
146
- o,
147
- `${o}--size-${e}`,
148
- `${o}--variant-${j}`,
149
- {
150
- [`${o}--full-width`]: l,
151
- [`${o}--negative`]: b,
152
- [`${o}--show-days`]: i,
153
- [`${o}--use-media-queries`]: C,
154
- [`${o}--use-container-queries`]: !C
155
- },
156
- L
157
- );
158
- return /* @__PURE__ */ v(
159
- "section",
160
- {
161
- id: s,
162
- className: W,
163
- ref: _,
164
- role: "timer",
165
- "data-testid": n["data-testid"],
166
- children: [
167
- Q(),
168
- n.label && /* @__PURE__ */ u(M, { className: D(`${o}__label`), variant: "paragraph-100-medium", children: n.label }),
169
- /* @__PURE__ */ u("div", { className: D(`${o}__counter-container`), children: R })
170
- ]
171
- }
172
- );
173
- }
174
- );
175
- B.displayName = "Countdown";
176
- export {
177
- B as C
178
- };
179
- //# sourceMappingURL=countdown-BsLsEZBv.mjs.map
@@ -1 +0,0 @@
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 +0,0 @@
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 +0,0 @@
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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"}