@deriv-com/dds-marketing 1.1.3 → 1.2.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.
Files changed (295) hide show
  1. package/.llm/components/accordion.md +6 -0
  2. package/.llm/components/accordionitem.md +6 -0
  3. package/.llm/components/aspectratio.md +6 -0
  4. package/.llm/components/awards.md +6 -0
  5. package/.llm/components/background.md +49 -10
  6. package/.llm/components/badge.md +6 -0
  7. package/.llm/components/bottomsheet.md +6 -0
  8. package/.llm/components/breadcrumb.md +6 -0
  9. package/.llm/components/breadcrumbitem.md +6 -0
  10. package/.llm/components/button.md +9 -3
  11. package/.llm/components/buttonicon.md +7 -1
  12. package/.llm/components/card.md +6 -0
  13. package/.llm/components/cardbody.md +7 -1
  14. package/.llm/components/cardbutton.md +6 -0
  15. package/.llm/components/checkbox.md +6 -0
  16. package/.llm/components/comparisoncards.md +9 -3
  17. package/.llm/components/comparisontable.md +6 -0
  18. package/.llm/components/ctabanner.md +6 -0
  19. package/.llm/components/ctabannerslider.md +6 -0
  20. package/.llm/components/datatable.md +6 -0
  21. package/.llm/components/divider.md +6 -0
  22. package/.llm/components/documentlink.md +237 -0
  23. package/.llm/components/documents.md +268 -0
  24. package/.llm/components/downloadbanner.md +7 -1
  25. package/.llm/components/dropdownmenu.md +6 -0
  26. package/.llm/components/estimator.md +6 -0
  27. package/.llm/components/faqaccordion.md +6 -0
  28. package/.llm/components/featurebullets.md +6 -0
  29. package/.llm/components/featurecards.md +42 -2
  30. package/.llm/components/featurecardscarousel.md +7 -1
  31. package/.llm/components/featurescroll.md +6 -0
  32. package/.llm/components/featuresplit.md +6 -0
  33. package/.llm/components/featurestack.md +6 -0
  34. package/.llm/components/featuretabs.md +369 -0
  35. package/.llm/components/filterchip.md +6 -0
  36. package/.llm/components/footer.md +6 -0
  37. package/.llm/components/footergroup.md +6 -0
  38. package/.llm/components/grid.md +30 -1
  39. package/.llm/components/icon.md +6 -0
  40. package/.llm/components/illustrationcard.md +52 -2
  41. package/.llm/components/illustrationcheck.md +193 -0
  42. package/.llm/components/illustrationchoice.md +187 -0
  43. package/.llm/components/illustrationcode.md +192 -0
  44. package/.llm/components/illustrationlist.md +175 -0
  45. package/.llm/components/illustrationscene.md +29 -3
  46. package/.llm/components/imagebanner.md +30 -5
  47. package/.llm/components/landinghero.md +6 -0
  48. package/.llm/components/link.md +7 -1
  49. package/.llm/components/logocolumns.md +7 -1
  50. package/.llm/components/logorows.md +42 -2
  51. package/.llm/components/menuitem.md +6 -0
  52. package/.llm/components/navbar.md +6 -0
  53. package/.llm/components/navbaritem.md +6 -0
  54. package/.llm/components/navbarmenu.md +6 -0
  55. package/.llm/components/navbarmenugroup.md +6 -0
  56. package/.llm/components/navbarpanel.md +6 -0
  57. package/.llm/components/navbarswitcher.md +6 -0
  58. package/.llm/components/navbarswitcheroption.md +6 -0
  59. package/.llm/components/option.md +6 -0
  60. package/.llm/components/pageheader.md +6 -0
  61. package/.llm/components/pagination.md +6 -0
  62. package/.llm/components/paginationdots.md +6 -0
  63. package/.llm/components/producthero.md +29 -4
  64. package/.llm/components/progressbar.md +305 -0
  65. package/.llm/components/removablechip.md +6 -0
  66. package/.llm/components/resourcebanner.md +6 -0
  67. package/.llm/components/row.md +6 -0
  68. package/.llm/components/scenescroll.md +38 -24
  69. package/.llm/components/scenescrollword.md +267 -0
  70. package/.llm/components/scroller.md +6 -0
  71. package/.llm/components/searchinput.md +6 -0
  72. package/.llm/components/segmentedcontrol.md +28 -1
  73. package/.llm/components/segmentedcontrolitem.md +6 -0
  74. package/.llm/components/select.md +6 -0
  75. package/.llm/components/selectchip.md +6 -0
  76. package/.llm/components/spinner.md +6 -0
  77. package/.llm/components/stack.md +6 -0
  78. package/.llm/components/stats.md +46 -1
  79. package/.llm/components/statscarousel.md +227 -0
  80. package/.llm/components/statusdot.md +41 -1
  81. package/.llm/components/steps.md +6 -0
  82. package/.llm/components/stickycards.md +6 -0
  83. package/.llm/components/subdomainnavbar.md +6 -0
  84. package/.llm/components/tab.md +6 -0
  85. package/.llm/components/table.md +6 -0
  86. package/.llm/components/tablebody.md +6 -0
  87. package/.llm/components/tablecell.md +6 -0
  88. package/.llm/components/tablehead.md +6 -0
  89. package/.llm/components/tableheadercell.md +6 -0
  90. package/.llm/components/tablerow.md +6 -0
  91. package/.llm/components/tablist.md +6 -0
  92. package/.llm/components/teamgrid.md +6 -0
  93. package/.llm/components/testimonialrow.md +43 -3
  94. package/.llm/components/testimonialslider.md +8 -2
  95. package/.llm/components/textarea.md +6 -0
  96. package/.llm/components/textinput.md +6 -0
  97. package/.llm/components/textscroll.md +6 -0
  98. package/.llm/components/tiers.md +13 -7
  99. package/.llm/components/tooltip.md +6 -0
  100. package/.llm/components/typography.md +63 -1
  101. package/.llm/digest/background.md +14 -6
  102. package/.llm/digest/button.md +1 -1
  103. package/.llm/digest/buttonicon.md +1 -1
  104. package/.llm/digest/documentlink.md +52 -0
  105. package/.llm/digest/documents.md +51 -0
  106. package/.llm/digest/downloadbanner.md +1 -1
  107. package/.llm/digest/featurecards.md +7 -0
  108. package/.llm/digest/featuretabs.md +50 -0
  109. package/.llm/digest/grid.md +1 -0
  110. package/.llm/digest/illustrationcard.md +6 -1
  111. package/.llm/digest/illustrationcheck.md +42 -0
  112. package/.llm/digest/illustrationchoice.md +43 -0
  113. package/.llm/digest/illustrationcode.md +41 -0
  114. package/.llm/digest/illustrationlist.md +38 -0
  115. package/.llm/digest/illustrationscene.md +4 -2
  116. package/.llm/digest/imagebanner.md +9 -3
  117. package/.llm/digest/logocolumns.md +1 -1
  118. package/.llm/digest/logorows.md +8 -1
  119. package/.llm/digest/producthero.md +8 -2
  120. package/.llm/digest/progressbar.md +56 -0
  121. package/.llm/digest/scenescroll.md +6 -5
  122. package/.llm/digest/scenescrollword.md +56 -0
  123. package/.llm/digest/segmentedcontrol.md +3 -0
  124. package/.llm/digest/stats.md +8 -0
  125. package/.llm/digest/statscarousel.md +48 -0
  126. package/.llm/digest/statusdot.md +7 -0
  127. package/.llm/digest/testimonialrow.md +8 -1
  128. package/.llm/digest/testimonialslider.md +1 -1
  129. package/.llm/digest/typography.md +18 -0
  130. package/.llm/index.md +14 -4
  131. package/.llm/rules.md +10 -0
  132. package/.llm/tokens.md +12 -3
  133. package/AGENTS.md +13 -2
  134. package/dist/components/arrival.d.ts +32 -0
  135. package/dist/components/arrival.js +140 -0
  136. package/dist/components/arrives.d.ts +17 -0
  137. package/dist/components/arrives.js +14 -0
  138. package/dist/components/blocks/awards/Awards.js +2 -27
  139. package/dist/components/blocks/block-pattern.css +23 -0
  140. package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +29 -0
  141. package/dist/components/blocks/documents/Documents.css +90 -0
  142. package/dist/components/blocks/documents/Documents.d.ts +22 -0
  143. package/dist/components/blocks/documents/Documents.js +30 -0
  144. package/dist/components/blocks/documents/Documents.types.d.ts +37 -0
  145. package/dist/components/blocks/documents/Documents.types.js +14 -0
  146. package/dist/components/blocks/documents/documents-impl.css +103 -0
  147. package/dist/components/blocks/download-banner/DownloadBanner.css +1 -1
  148. package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +1 -1
  149. package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
  150. package/dist/components/blocks/feature-cards/FeatureCards.js +10 -7
  151. package/dist/components/blocks/feature-cards/FeatureCards.types.d.ts +9 -1
  152. package/dist/components/blocks/feature-cards/feature-cards-impl.css +15 -3
  153. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +1 -1
  154. package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +12 -0
  155. package/dist/components/blocks/feature-tabs/FeatureTabs.css +100 -0
  156. package/dist/components/blocks/feature-tabs/FeatureTabs.d.ts +23 -0
  157. package/dist/components/blocks/feature-tabs/FeatureTabs.js +38 -0
  158. package/dist/components/blocks/feature-tabs/FeatureTabs.types.d.ts +35 -0
  159. package/dist/components/blocks/feature-tabs/FeatureTabs.types.js +14 -0
  160. package/dist/components/blocks/feature-tabs/feature-tabs-impl.css +53 -0
  161. package/dist/components/blocks/image-banner/ImageBanner.css +1 -1
  162. package/dist/components/blocks/image-banner/ImageBanner.d.ts +1 -1
  163. package/dist/components/blocks/image-banner/ImageBanner.js +2 -2
  164. package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +9 -7
  165. package/dist/components/blocks/image-banner/ImageBanner.types.js +1 -1
  166. package/dist/components/blocks/image-banner/image-banner-impl.css +77 -26
  167. package/dist/components/blocks/laurel.d.ts +16 -0
  168. package/dist/components/blocks/laurel.js +28 -0
  169. package/dist/components/blocks/logo-columns/LogoColumns.css +1 -1
  170. package/dist/components/blocks/logo-columns/LogoColumns.types.d.ts +1 -1
  171. package/dist/components/blocks/logo-rows/LogoRows.css +1 -1
  172. package/dist/components/blocks/logo-rows/LogoRows.d.ts +2 -1
  173. package/dist/components/blocks/logo-rows/LogoRows.js +7 -4
  174. package/dist/components/blocks/logo-rows/LogoRows.types.d.ts +9 -1
  175. package/dist/components/blocks/pattern-tone.d.ts +11 -0
  176. package/dist/components/blocks/pattern-tone.js +7 -0
  177. package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
  178. package/dist/components/blocks/product-hero/ProductHero.js +2 -2
  179. package/dist/components/blocks/product-hero/ProductHero.types.d.ts +8 -3
  180. package/dist/components/blocks/product-hero/ProductHero.types.js +1 -1
  181. package/dist/components/blocks/product-hero/product-hero-impl.css +54 -0
  182. package/dist/components/blocks/resource-banner/ResourceBanner.css +1 -1
  183. package/dist/components/blocks/scene-scroll/SceneScroll.css +1 -1
  184. package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +6 -5
  185. package/dist/components/blocks/scene-scroll/SceneScroll.js +8 -7
  186. package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +5 -5
  187. package/dist/components/blocks/scene-scroll/SceneScroll.types.js +1 -1
  188. package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +61 -44
  189. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.css +105 -0
  190. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.d.ts +31 -0
  191. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.js +67 -0
  192. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.d.ts +39 -0
  193. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.js +18 -0
  194. package/dist/components/blocks/scene-scroll-word/scene-scroll-word-impl.css +370 -0
  195. package/dist/components/blocks/stats/Stats.d.ts +2 -1
  196. package/dist/components/blocks/stats/Stats.js +17 -14
  197. package/dist/components/blocks/stats/Stats.types.d.ts +8 -0
  198. package/dist/components/blocks/stats/stats-impl.css +4 -1
  199. package/dist/components/blocks/stats/use-wheel.d.ts +1 -1
  200. package/dist/components/blocks/stats/use-wheel.js +8 -4
  201. package/dist/components/blocks/stats-carousel/StatsCarousel.css +209 -0
  202. package/dist/components/blocks/stats-carousel/StatsCarousel.d.ts +20 -0
  203. package/dist/components/blocks/stats-carousel/StatsCarousel.js +48 -0
  204. package/dist/components/blocks/stats-carousel/StatsCarousel.types.d.ts +43 -0
  205. package/dist/components/blocks/stats-carousel/StatsCarousel.types.js +23 -0
  206. package/dist/components/blocks/stats-carousel/stats-carousel-impl.css +233 -0
  207. package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +8 -0
  208. package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -1
  209. package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +2 -1
  210. package/dist/components/blocks/testimonial-row/TestimonialRow.js +16 -13
  211. package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +9 -1
  212. package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -1
  213. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +1 -1
  214. package/dist/components/blocks/tiers/Tiers.types.d.ts +1 -1
  215. package/dist/components/core/background/Background.css +19 -0
  216. package/dist/components/core/background/Background.types.d.ts +2 -1
  217. package/dist/components/core/background/background-impl.css +47 -15
  218. package/dist/components/core/background/halftone.js +1 -1
  219. package/dist/components/core/button/Button.css +5 -5
  220. package/dist/components/core/button-icon/ButtonIcon.types.d.ts +1 -1
  221. package/dist/components/core/card-body/CardBody.css +5 -0
  222. package/dist/components/core/card-body/CardBody.types.d.ts +1 -1
  223. package/dist/components/core/document-link/DocumentLink.css +59 -0
  224. package/dist/components/core/document-link/DocumentLink.d.ts +19 -0
  225. package/dist/components/core/document-link/DocumentLink.js +21 -0
  226. package/dist/components/core/document-link/DocumentLink.types.d.ts +41 -0
  227. package/dist/components/core/document-link/DocumentLink.types.js +11 -0
  228. package/dist/components/core/document-link/document-link-impl.css +23 -0
  229. package/dist/components/core/illustration-card/IllustrationCard.css +7 -0
  230. package/dist/components/core/illustration-card/IllustrationCard.d.ts +5 -1
  231. package/dist/components/core/illustration-card/IllustrationCard.js +34 -8
  232. package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +8 -1
  233. package/dist/components/core/illustration-card/IllustrationCard.types.js +1 -0
  234. package/dist/components/core/illustration-card/illustration-card-impl.css +113 -0
  235. package/dist/components/core/illustration-check/IllustrationCheck.css +25 -0
  236. package/dist/components/core/illustration-check/IllustrationCheck.d.ts +16 -0
  237. package/dist/components/core/illustration-check/IllustrationCheck.js +22 -0
  238. package/dist/components/core/illustration-check/IllustrationCheck.types.d.ts +25 -0
  239. package/dist/components/core/illustration-check/IllustrationCheck.types.js +9 -0
  240. package/dist/components/core/illustration-check/illustration-check-impl.css +76 -0
  241. package/dist/components/core/illustration-choice/IllustrationChoice.css +62 -0
  242. package/dist/components/core/illustration-choice/IllustrationChoice.d.ts +16 -0
  243. package/dist/components/core/illustration-choice/IllustrationChoice.js +31 -0
  244. package/dist/components/core/illustration-choice/IllustrationChoice.types.d.ts +25 -0
  245. package/dist/components/core/illustration-choice/IllustrationChoice.types.js +11 -0
  246. package/dist/components/core/illustration-choice/illustration-choice-impl.css +103 -0
  247. package/dist/components/core/illustration-code/IllustrationCode.css +25 -0
  248. package/dist/components/core/illustration-code/IllustrationCode.d.ts +12 -0
  249. package/dist/components/core/illustration-code/IllustrationCode.js +20 -0
  250. package/dist/components/core/illustration-code/IllustrationCode.types.d.ts +23 -0
  251. package/dist/components/core/illustration-code/IllustrationCode.types.js +8 -0
  252. package/dist/components/core/illustration-code/illustration-code-impl.css +42 -0
  253. package/dist/components/core/illustration-list/IllustrationList.css +19 -0
  254. package/dist/components/core/illustration-list/IllustrationList.d.ts +16 -0
  255. package/dist/components/core/illustration-list/IllustrationList.js +18 -0
  256. package/dist/components/core/illustration-list/IllustrationList.types.d.ts +15 -0
  257. package/dist/components/core/illustration-list/IllustrationList.types.js +6 -0
  258. package/dist/components/core/illustration-list/illustration-list-impl.css +52 -0
  259. package/dist/components/core/illustration-scene/IllustrationScene.css +6 -0
  260. package/dist/components/core/illustration-scene/IllustrationScene.d.ts +3 -2
  261. package/dist/components/core/illustration-scene/IllustrationScene.js +4 -3
  262. package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +5 -1
  263. package/dist/components/core/illustration-scene/IllustrationScene.types.js +2 -1
  264. package/dist/components/core/illustration-scene/illustration-scene-impl.css +65 -0
  265. package/dist/components/core/link/link-impl.css +5 -19
  266. package/dist/components/core/progress-bar/ProgressBar.css +101 -0
  267. package/dist/components/core/progress-bar/ProgressBar.d.ts +5 -0
  268. package/dist/components/core/progress-bar/ProgressBar.js +34 -0
  269. package/dist/components/core/progress-bar/ProgressBar.types.d.ts +52 -0
  270. package/dist/components/core/progress-bar/ProgressBar.types.js +12 -0
  271. package/dist/components/core/progress-bar/progress-bar-impl.css +45 -0
  272. package/dist/components/core/segmented-control/SegmentedControl.d.ts +1 -1
  273. package/dist/components/core/segmented-control/SegmentedControl.js +13 -5
  274. package/dist/components/core/segmented-control/SegmentedControl.types.d.ts +5 -1
  275. package/dist/components/core/segmented-control/segmented-control-impl.css +35 -0
  276. package/dist/components/core/status-dot/StatusDot.d.ts +1 -1
  277. package/dist/components/core/status-dot/StatusDot.js +7 -4
  278. package/dist/components/core/status-dot/StatusDot.types.d.ts +9 -1
  279. package/dist/components/core/status-dot/status-dot-impl.css +101 -0
  280. package/dist/components/core/typography/Typography.d.ts +3 -283
  281. package/dist/components/core/typography/Typography.js +9 -1
  282. package/dist/components/core/typography/Typography.types.d.ts +9 -15
  283. package/dist/components/core/typography/TypographyMotion.d.ts +28 -0
  284. package/dist/components/core/typography/TypographyMotion.js +43 -0
  285. package/dist/components/core/typography/typography-impl.css +106 -0
  286. package/dist/components/illustration-data.d.ts +15 -0
  287. package/dist/components/illustration-data.js +7 -0
  288. package/dist/components/index.d.ts +22 -1
  289. package/dist/components/index.js +20 -0
  290. package/dist/components/layout/grid/Grid.css +5 -0
  291. package/dist/components/layout/grid/Grid.types.d.ts +2 -1
  292. package/dist/components/scene-scroll-data.d.ts +35 -0
  293. package/dist/components/tiers-data.d.ts +3 -2
  294. package/dist/marketing.css +24 -6
  295. package/package.json +1 -1
@@ -4,12 +4,15 @@ import { useCallback, useId, useLayoutEffect, useRef, useState } from 'react';
4
4
  import './Stats.css';
5
5
  import './stats-impl.css';
6
6
  import '../block-reveal.css';
7
+ import '../block-pattern.css';
7
8
  import { given } from '../../given.js';
8
9
  import { milliseconds } from '../../css-time.js';
9
10
  import { arriving, useReveal } from '../use-reveal.js';
10
11
  import { countable, easing, partway } from './stats-count.js';
11
12
  import { slotOf, useWheel } from './use-wheel.js';
12
13
  import { statsDefaults, statsParts } from './Stats.types.js';
14
+ import { Background } from '../../core/background/Background.js';
15
+ import { PATTERN_TONE } from '../pattern-tone.js';
13
16
  /**
14
17
  * Where a figure comes in the arrival, capped so a long set does not keep a reader waiting.
15
18
  *
@@ -37,7 +40,7 @@ const stepOf = (at) => Math.min(FIRST_FIGURE + at, LAST_STEP);
37
40
  *
38
41
  * `'use client'` for the count, the arrival, and `useId`, which names the region by its heading.
39
42
  */
40
- export function Stats({ ground = statsDefaults.ground, title, description, stats }) {
43
+ export function Stats({ ground = statsDefaults.ground, background, title, description, stats, }) {
41
44
  const titleId = useId();
42
45
  const [band, revealed] = useReveal();
43
46
  const held = useRef(null);
@@ -104,17 +107,17 @@ export function Stats({ ground = statsDefaults.ground, title, description, stats
104
107
  // Nothing to show is nothing drawn: a named region with no figure in it leads nowhere.
105
108
  if (figures === 0)
106
109
  return null;
107
- return (_jsx("section", { className: statsParts.root, ref: section, "data-ground": ground, "aria-labelledby": titleId, children: _jsxs("div", { className: statsParts.inner, ref: hold, "data-revealed": revealed, children: [_jsxs("div", { className: statsParts.header, children: [_jsx("h2", { className: statsParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: statsParts.description, ...arriving(1), children: description })) : null] }), _jsx("span", { className: statsParts.dots, "aria-hidden": "true", ...(wheeling ? arriving(FIRST_FIGURE) : {}), children: stats.map((_, at) => (_jsx("span", { className: statsParts.dot, "data-current": wheeling && at === turn % figures }, at))) }), _jsx("ul", { className: statsParts.list, role: "list", "data-wheel": wheeling || undefined, tabIndex: wheeling ? 0 : undefined, "aria-labelledby": wheeling ? titleId : undefined, ...(wheeling ? { ...arriving(FIRST_FIGURE), ...holdWheel } : {}), children: stats.map((figure, at) => {
108
- const step = stepOf(at);
109
- const number = elapsed === null || timing === null ? null : countable(figure.value);
110
- // The share of its count this figure has run, from its own arrival rather than the
111
- // section's — so each number starts climbing as it starts to rise.
112
- const share = number === null || timing === null || elapsed === null
113
- ? 1
114
- : timing.curve(Math.min(Math.max((elapsed - step * timing.stagger) / timing.duration, 0), 1));
115
- const counting = number !== null && share < 1;
116
- return (
117
- // A figure's position is its identity: the set is a list, and nothing reorders it.
118
- _jsxs("li", { className: statsParts.item, "data-slot": wheeling ? slotOf(at, turn, figures) : undefined, ...(wheeling ? {} : arriving(step)), children: [_jsxs("span", { className: statsParts.value, "data-counting": counting, children: [_jsx("span", { className: statsParts.amount, children: _jsx("bdi", { children: figure.value }) }), _jsx("span", { className: statsParts.count, "aria-hidden": "true", children: counting ? _jsx("bdi", { children: partway(number, share) }) : null })] }), _jsx("span", { className: statsParts.label, children: figure.label })] }, at));
119
- }) })] }) }));
110
+ return (_jsxs("section", { className: statsParts.root, ref: section, "data-ground": ground, "data-background": background, "aria-labelledby": titleId, children: [background ? _jsx(Background, { tone: PATTERN_TONE[ground], pattern: background, children: null }) : null, _jsxs("div", { className: statsParts.inner, ref: hold, "data-revealed": revealed, children: [_jsxs("div", { className: statsParts.header, children: [_jsx("h2", { className: statsParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: statsParts.description, ...arriving(1), children: description })) : null] }), _jsx("span", { className: statsParts.dots, "aria-hidden": "true", ...(wheeling ? arriving(FIRST_FIGURE) : {}), children: stats.map((_, at) => (_jsx("span", { className: statsParts.dot, "data-current": wheeling && at === turn % figures }, at))) }), _jsx("ul", { className: statsParts.list, role: "list", "data-wheel": wheeling || undefined, tabIndex: wheeling ? 0 : undefined, "aria-labelledby": wheeling ? titleId : undefined, ...(wheeling ? { ...arriving(FIRST_FIGURE), ...holdWheel } : {}), children: stats.map((figure, at) => {
111
+ const step = stepOf(at);
112
+ const number = elapsed === null || timing === null ? null : countable(figure.value);
113
+ // The share of its count this figure has run, from its own arrival rather than the
114
+ // section's — so each number starts climbing as it starts to rise.
115
+ const share = number === null || timing === null || elapsed === null
116
+ ? 1
117
+ : timing.curve(Math.min(Math.max((elapsed - step * timing.stagger) / timing.duration, 0), 1));
118
+ const counting = number !== null && share < 1;
119
+ return (
120
+ // A figure's position is its identity: the set is a list, and nothing reorders it.
121
+ _jsxs("li", { className: statsParts.item, "data-slot": wheeling ? slotOf(at, turn, figures) : undefined, ...(wheeling ? {} : arriving(step)), children: [_jsxs("span", { className: statsParts.value, "data-counting": counting, children: [_jsx("span", { className: statsParts.amount, children: _jsx("bdi", { children: figure.value }) }), _jsx("span", { className: statsParts.count, "aria-hidden": "true", children: counting ? _jsx("bdi", { children: partway(number, share) }) : null })] }), _jsx("span", { className: statsParts.label, children: figure.label })] }, at));
122
+ }) })] })] }));
120
123
  }
@@ -6,6 +6,14 @@ export interface StatsOwnProps {
6
6
  * `strong` — `color.bg.brand-strong`, the dark band, for a set of figures a reader should arrive at — a home page's "Trade with confidence". The heading and the figures turn white and the labels take color.fg.muted-inverse
7
7
  */
8
8
  ground?: 'page' | 'subtle' | 'strong';
9
+ /**
10
+ * `halftone` — A field of coral dots that grow towards a soft glow at the band's foot and settle to a fine screen away from it.
11
+ * `aurora` — Curtains of the brand's light rising from the band's foot and swaying slowly.
12
+ * `mesh` — The band in the brand's reds folded into one another like a liquid — the loudest of the five, for a dark band.
13
+ * `grid` — Hairlines a pitch apart rising from a soft bloom at the band's foot — the quietest, and the one to reach for first.
14
+ * `rings` — Hairline circles spreading out from the middle of the band's foot.
15
+ */
16
+ background?: 'halftone' | 'aurora' | 'mesh' | 'grid' | 'rings';
9
17
  /** Always. What the numbers prove, in the fewest words — "Trade with confidence", "Deriv in numbers". */
10
18
  title: string;
11
19
  /** A line under the heading, when the heading alone does not say whose numbers these are or since when — "For over 25 years, a trusted partner of traders worldwide." */
@@ -91,9 +91,12 @@
91
91
 
92
92
  /*
93
93
  * The wheel is a tab stop while it turns — focus holds it still — so it shows where focus is. The
94
- * ring is drawn inside: the mask would fade one drawn outside at its top and foot.
94
+ * fade goes while it holds focus: a mask fades everything the list paints, its ring too, so the
95
+ * ring's top and foot would vanish into it — and a reader on the keyboard, holding the wheel still,
96
+ * is the one reader who wants every figure plainly.
95
97
  */
96
98
  :where([data-dds-context="marketing"]) .dds-stats .dds-stats__list[data-wheel]:focus-visible {
99
+ mask-image: none;
97
100
  outline: var(--border-width-focus) solid var(--color-border-focus);
98
101
  outline-offset: calc(-1 * var(--border-width-focus));
99
102
  }
@@ -24,7 +24,7 @@ export declare function slotOf(at: number, turn: number, count: number): WheelSl
24
24
  * - the section is on screen. A wheel nobody can see does not turn, and starts again where it was;
25
25
  * - nothing holds or has stopped it — see `hold`.
26
26
  */
27
- export declare function useWheel(section: RefObject<HTMLElement | null>, count: number): {
27
+ export declare function useWheel(section: RefObject<HTMLElement | null>, count: number, always?: boolean): {
28
28
  wheeling: boolean;
29
29
  turn: number;
30
30
  hold: {
@@ -39,7 +39,7 @@ export function slotOf(at, turn, count) {
39
39
  * - the section is on screen. A wheel nobody can see does not turn, and starts again where it was;
40
40
  * - nothing holds or has stopped it — see `hold`.
41
41
  */
42
- export function useWheel(section, count) {
42
+ export function useWheel(section, count, always = false) {
43
43
  const [narrow, setNarrow] = useState(false);
44
44
  const [seen, setSeen] = useState(false);
45
45
  const [turn, setTurn] = useState(0);
@@ -54,7 +54,11 @@ export function useWheel(section, count) {
54
54
  */
55
55
  const [held, setHeld] = useState(false);
56
56
  const [stopped, setStopped] = useState(false);
57
- const wheeling = narrow && count > 1 && !still;
57
+ // Whether there is anything to turn. The section is not in the page while there is not — the
58
+ // blocks draw nothing for an empty list — so the observers below attach once there is.
59
+ const present = count > 0;
60
+ // A carousel turns at every width; the row of figures turns only below the fold.
61
+ const wheeling = (always || narrow) && count > 1 && !still;
58
62
  // Asked live rather than once: a reader who turns on reduced motion mid-visit stops the wheel then.
59
63
  useEffect(() => {
60
64
  if (typeof window.matchMedia !== 'function')
@@ -81,7 +85,7 @@ export function useWheel(section, count) {
81
85
  const observer = new ResizeObserver(measure);
82
86
  observer.observe(element);
83
87
  return () => observer.disconnect();
84
- }, [section]);
88
+ }, [section, present]);
85
89
  useEffect(() => {
86
90
  const element = section.current;
87
91
  if (element === null || typeof IntersectionObserver === 'undefined')
@@ -89,7 +93,7 @@ export function useWheel(section, count) {
89
93
  const observer = new IntersectionObserver(([entry]) => setSeen(entry?.isIntersecting ?? false));
90
94
  observer.observe(element);
91
95
  return () => observer.disconnect();
92
- }, [section]);
96
+ }, [section, present]);
93
97
  useEffect(() => {
94
98
  const element = section.current;
95
99
  if (!wheeling || !seen || held || stopped || element === null)
@@ -0,0 +1,209 @@
1
+ /* GENERATED from statscarousel.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-statscarousel {
4
+ box-sizing: border-box;
5
+ container-type: inline-size;
6
+ display: flex;
7
+ inline-size: 100%;
8
+ justify-content: center;
9
+ overflow-wrap: anywhere;
10
+ }
11
+
12
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__inner {
13
+ box-sizing: border-box;
14
+ display: flex;
15
+ flex-direction: column;
16
+ inline-size: 100%;
17
+ min-inline-size: 0;
18
+ max-inline-size: var(--size-content-max);
19
+ padding-block: var(--space-section-default);
20
+ padding-inline: var(--space-inset-page);
21
+ row-gap: var(--space-heading-content);
22
+ }
23
+
24
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__header {
25
+ display: flex;
26
+ flex-direction: column;
27
+ min-inline-size: 0;
28
+ max-inline-size: var(--size-measure-heading);
29
+ row-gap: var(--space-gap-none);
30
+ }
31
+
32
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__title {
33
+ margin-block: 0;
34
+ text-wrap: balance;
35
+ font-family: var(--font-h2-family);
36
+ font-size: var(--font-h2-size);
37
+ font-weight: var(--font-h2-weight);
38
+ letter-spacing: var(--font-h2-letter-spacing);
39
+ line-height: var(--font-h2-line-height);
40
+ margin-block-end: var(--space-heading-title-description);
41
+ }
42
+
43
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__description {
44
+ margin-block: 0;
45
+ font-family: var(--font-body-md-family);
46
+ font-size: var(--font-body-md-size);
47
+ font-weight: var(--font-body-md-weight);
48
+ letter-spacing: var(--font-body-md-letter-spacing);
49
+ line-height: var(--font-body-md-line-height);
50
+ max-inline-size: var(--size-measure-description);
51
+ }
52
+
53
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__stage {
54
+ align-items: center;
55
+ display: grid;
56
+ justify-items: center;
57
+ gap: var(--space-gap-xl);
58
+ }
59
+
60
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__card {
61
+ box-sizing: border-box;
62
+ display: grid;
63
+ overflow: clip;
64
+ place-items: center;
65
+ position: relative;
66
+ border-radius: var(--radius-expressive);
67
+ padding-inline: var(--space-inset-xl);
68
+ }
69
+
70
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__list {
71
+ display: grid;
72
+ list-style: none;
73
+ margin-block: 0;
74
+ padding-inline: 0;
75
+ column-gap: var(--space-grid-gutter);
76
+ row-gap: var(--space-grid-gutter);
77
+ }
78
+
79
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__item {
80
+ align-items: center;
81
+ display: flex;
82
+ flex-direction: column;
83
+ min-inline-size: 0;
84
+ text-align: center;
85
+ row-gap: var(--space-gap-sm);
86
+ }
87
+
88
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__awards {
89
+ align-items: center;
90
+ display: flex;
91
+ flex-direction: column;
92
+ list-style: none;
93
+ margin-block: 0;
94
+ padding-inline: 0;
95
+ row-gap: var(--space-gap-lg);
96
+ }
97
+
98
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__award {
99
+ align-items: center;
100
+ box-sizing: border-box;
101
+ display: flex;
102
+ justify-content: center;
103
+ min-inline-size: 0;
104
+ column-gap: var(--space-gap-xs);
105
+ max-inline-size: var(--size-grid-track-md);
106
+ }
107
+
108
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__award-laurel {
109
+ display: block;
110
+ flex: none;
111
+ inline-size: var(--icon-size-md);
112
+ }
113
+
114
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__award-copy {
115
+ align-items: center;
116
+ display: flex;
117
+ flex-direction: column;
118
+ min-inline-size: 0;
119
+ text-align: center;
120
+ row-gap: var(--space-heading-title-description-compact);
121
+ }
122
+
123
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__award-name {
124
+ margin: 0;
125
+ text-wrap: balance;
126
+ font-family: var(--font-label-sm-family);
127
+ font-size: var(--font-label-sm-size);
128
+ font-weight: var(--font-label-sm-weight);
129
+ letter-spacing: var(--font-label-sm-letter-spacing);
130
+ line-height: var(--font-label-sm-line-height);
131
+ }
132
+
133
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__award-issuer {
134
+ margin: 0;
135
+ font-family: var(--font-body-sm-family);
136
+ font-size: var(--font-body-sm-size);
137
+ font-weight: var(--font-body-sm-weight);
138
+ letter-spacing: var(--font-body-sm-letter-spacing);
139
+ line-height: var(--font-body-sm-line-height);
140
+ }
141
+
142
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__label {
143
+ font-family: var(--font-body-lg-family);
144
+ font-size: var(--font-body-lg-size);
145
+ font-weight: var(--font-body-lg-weight);
146
+ letter-spacing: var(--font-body-lg-letter-spacing);
147
+ line-height: var(--font-body-lg-line-height);
148
+ }
149
+
150
+ :where([data-dds-context="marketing"]) .dds-statscarousel .dds-statscarousel__value {
151
+ font-family: var(--font-figure-lg-family);
152
+ font-size: var(--font-figure-lg-size);
153
+ font-weight: var(--font-figure-lg-weight);
154
+ letter-spacing: var(--font-figure-lg-letter-spacing);
155
+ line-height: var(--font-figure-lg-line-height);
156
+ }
157
+
158
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="page"] {
159
+ background-color: var(--color-bg-page);
160
+ color: var(--color-fg-default);
161
+ }
162
+
163
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="page"] .dds-statscarousel__award-laurel {
164
+ color: var(--color-fg-muted);
165
+ }
166
+
167
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="page"] .dds-statscarousel__card {
168
+ background-color: var(--color-bg-surface);
169
+ }
170
+
171
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="page"] .dds-statscarousel__label {
172
+ color: var(--color-fg-muted);
173
+ }
174
+
175
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="strong"] {
176
+ background-color: var(--color-bg-brand-strong);
177
+ color: var(--color-fg-on-brand-strong);
178
+ }
179
+
180
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="strong"] .dds-statscarousel__award-laurel {
181
+ color: var(--color-fg-muted-inverse);
182
+ }
183
+
184
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="strong"] .dds-statscarousel__card {
185
+ background-color: var(--color-bg-surface-inverse);
186
+ }
187
+
188
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="strong"] .dds-statscarousel__label {
189
+ color: var(--color-fg-muted-inverse);
190
+ }
191
+
192
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="subtle"] {
193
+ background-color: var(--color-bg-page);
194
+ background-image: linear-gradient(var(--color-bg-band-subtle), var(--color-bg-band-subtle));
195
+ color: var(--color-fg-default);
196
+ }
197
+
198
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="subtle"] .dds-statscarousel__award-laurel {
199
+ color: var(--color-fg-muted);
200
+ }
201
+
202
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="subtle"] .dds-statscarousel__card {
203
+ background-color: var(--color-bg-surface-card-raised);
204
+ }
205
+
206
+ :where([data-dds-context="marketing"]) .dds-statscarousel[data-ground="subtle"] .dds-statscarousel__label {
207
+ color: var(--color-fg-muted);
208
+ }
209
+
@@ -0,0 +1,20 @@
1
+ import './StatsCarousel.css';
2
+ import './stats-carousel-impl.css';
3
+ import '../block-reveal.css';
4
+ import { type StatsCarouselProps } from './StatsCarousel.types.js';
5
+ export type { StatsCarouselProps };
6
+ /**
7
+ * A heading over a square card that turns through a few key figures, one at a time, with the awards
8
+ * behind them beside it — the reference design's Stats.
9
+ *
10
+ * The turn is Stats' own wheel (use-wheel.ts), turning at every width here rather than only on a
11
+ * phone: the same hold and turn, held while a pointer rests on the card or focus is in it, stopped for
12
+ * good by a press, and never for a reader who asked for less movement — they get the figures two to
13
+ * a row in the card. Every figure is in the list the whole time, so a screen reader reads them all.
14
+ *
15
+ * The awards are drawn the way the Awards block draws them — the same laurel (laurel.tsx), the same
16
+ * tokens — from the same records, so an award looks the same wherever a page shows it.
17
+ *
18
+ * `'use client'` for the turn, the reveal and `useId`, which names the region by its heading.
19
+ */
20
+ export declare function StatsCarousel({ ground, title, description, stats, awards, }: StatsCarouselProps): import("react").JSX.Element | null;
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId, useRef } from 'react';
4
+ import './StatsCarousel.css';
5
+ import './stats-carousel-impl.css';
6
+ import '../block-reveal.css';
7
+ import { given } from '../../given.js';
8
+ import { arriving, useReveal } from '../use-reveal.js';
9
+ import { slotOf, useWheel } from '../stats/use-wheel.js';
10
+ import { Laurel } from '../laurel.js';
11
+ import { statsCarouselDefaults, statsCarouselParts, } from './StatsCarousel.types.js';
12
+ /**
13
+ * A heading over a square card that turns through a few key figures, one at a time, with the awards
14
+ * behind them beside it — the reference design's Stats.
15
+ *
16
+ * The turn is Stats' own wheel (use-wheel.ts), turning at every width here rather than only on a
17
+ * phone: the same hold and turn, held while a pointer rests on the card or focus is in it, stopped for
18
+ * good by a press, and never for a reader who asked for less movement — they get the figures two to
19
+ * a row in the card. Every figure is in the list the whole time, so a screen reader reads them all.
20
+ *
21
+ * The awards are drawn the way the Awards block draws them — the same laurel (laurel.tsx), the same
22
+ * tokens — from the same records, so an award looks the same wherever a page shows it.
23
+ *
24
+ * `'use client'` for the turn, the reveal and `useId`, which names the region by its heading.
25
+ */
26
+ export function StatsCarousel({ ground = statsCarouselDefaults.ground, title, description, stats, awards, }) {
27
+ const titleId = useId();
28
+ const [band, revealed] = useReveal();
29
+ const section = useRef(null);
30
+ const figures = Array.isArray(stats) ? stats.length : 0;
31
+ const { wheeling, turn, hold } = useWheel(section, figures, true);
32
+ // A record from a feed or an editor is not typed: an empty list draws nothing rather than a card
33
+ // with nothing in it.
34
+ if (figures === 0)
35
+ return null;
36
+ // The first half of the awards at the card's start, the rest at its end.
37
+ const listed = Array.isArray(awards) ? awards : [];
38
+ const half = Math.ceil(listed.length / 2);
39
+ const start = listed.slice(0, half);
40
+ const end = listed.slice(half);
41
+ return (_jsx("section", { className: statsCarouselParts.root, ref: section, "data-ground": ground, "aria-labelledby": titleId, children: _jsxs("div", { className: statsCarouselParts.inner, ref: band, "data-revealed": revealed, children: [_jsxs("div", { className: statsCarouselParts.header, children: [_jsx("h2", { className: statsCarouselParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: statsCarouselParts.description, ...arriving(1), children: description })) : null] }), _jsxs("div", { className: statsCarouselParts.stage, ...arriving(2), children: [start.length > 0 ? _jsx(AwardColumn, { awards: start, side: "start" }) : null, _jsx("div", { className: statsCarouselParts.card, children: _jsx("ul", { className: statsCarouselParts.list, role: "list", "data-wheel": wheeling || undefined, tabIndex: wheeling ? 0 : undefined, "aria-labelledby": wheeling ? titleId : undefined, ...(wheeling ? hold : {}), children: stats.map((figure, at) => (_jsxs("li", { className: statsCarouselParts.item, "data-slot": wheeling ? slotOf(at, turn, figures) : undefined, children: [_jsx("span", { className: statsCarouselParts.value, children: _jsx("bdi", { children: figure.value }) }), _jsx("span", { className: statsCarouselParts.label, children: figure.label })] }, at))) }) }), end.length > 0 ? _jsx(AwardColumn, { awards: end, side: "end" }) : null] })] }) }));
42
+ }
43
+ /** A column of award badges beside the card, each between two laurels as the Awards block draws them. */
44
+ function AwardColumn({ awards, side }) {
45
+ return (
46
+ // `role="list"` spelled out: Safari drops a list's role once its markers are styled away.
47
+ _jsx("ul", { className: statsCarouselParts.awards, role: "list", "data-side": side, children: awards.map((award, at) => (_jsxs("li", { className: statsCarouselParts.award, children: [_jsx(Laurel, { className: statsCarouselParts['award-laurel'], side: "leading" }), _jsxs("div", { className: statsCarouselParts['award-copy'], children: [_jsx("p", { className: statsCarouselParts['award-name'], children: award.title }), _jsx("p", { className: statsCarouselParts['award-issuer'], children: award.issuer })] }), _jsx(Laurel, { className: statsCarouselParts['award-laurel'], side: "trailing" })] }, at))) }));
48
+ }
@@ -0,0 +1,43 @@
1
+ import type { Award } from '../../awards-data.js';
2
+ import type { StatsFigure } from '../../stats-data.js';
3
+ export interface StatsCarouselOwnProps {
4
+ /**
5
+ * `page` — The default, and the page's own white. A row of figures between two sections that need nothing to separate them
6
+ * `subtle` — The grey band, for a row of figures that should read as a section of its own without changing the page's voice. Painted as the band's tint laid over the page's own ground, so it is the same grey whatever is behind the section
7
+ * `strong` — `color.bg.brand-strong`, the dark band, for a set of figures a reader should arrive at — a home page's "Trade with confidence". The heading and the figures turn white and the labels take color.fg.muted-inverse
8
+ */
9
+ ground?: 'page' | 'subtle' | 'strong';
10
+ /** Always. What the numbers prove, in the fewest words — "Trade with confidence", "Deriv in numbers". */
11
+ title: string;
12
+ /** A line under the heading, when the heading alone does not say whose numbers these are or since when — "For over 25 years, a trusted partner of traders worldwide." */
13
+ description?: string;
14
+ /** Always. The figures, in the order they turn — three to five, each a short `value` exactly as it is to be read and a `label` of a few words. Two or more turn; one simply stands in the card. An empty list draws nothing. */
15
+ stats: StatsFigure[];
16
+ /** Two to four awards the figures stand beside: the first half in a column at the card's start, the rest at its end; on a phone, the two columns side by side under the card. Each between two laurels, as the Awards block draws its badges, from the same records */
17
+ awards?: Award[];
18
+ }
19
+ export type StatsCarouselProps = StatsCarouselOwnProps;
20
+ /** The class each part carries. Apply these — do not retype them. */
21
+ export declare const statsCarouselParts: {
22
+ readonly root: "dds-statscarousel";
23
+ readonly inner: "dds-statscarousel__inner";
24
+ readonly header: "dds-statscarousel__header";
25
+ readonly title: "dds-statscarousel__title";
26
+ readonly description: "dds-statscarousel__description";
27
+ readonly stage: "dds-statscarousel__stage";
28
+ readonly card: "dds-statscarousel__card";
29
+ readonly list: "dds-statscarousel__list";
30
+ readonly item: "dds-statscarousel__item";
31
+ readonly value: "dds-statscarousel__value";
32
+ readonly label: "dds-statscarousel__label";
33
+ readonly awards: "dds-statscarousel__awards";
34
+ readonly award: "dds-statscarousel__award";
35
+ readonly 'award-laurel': "dds-statscarousel__award-laurel";
36
+ readonly 'award-copy': "dds-statscarousel__award-copy";
37
+ readonly 'award-name': "dds-statscarousel__award-name";
38
+ readonly 'award-issuer': "dds-statscarousel__award-issuer";
39
+ };
40
+ /** Generated so defaults cannot drift from the contract. */
41
+ export declare const statsCarouselDefaults: {
42
+ readonly ground: "page";
43
+ };
@@ -0,0 +1,23 @@
1
+ // GENERATED from stats-carousel.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const statsCarouselParts = {
4
+ root: 'dds-statscarousel',
5
+ inner: 'dds-statscarousel__inner',
6
+ header: 'dds-statscarousel__header',
7
+ title: 'dds-statscarousel__title',
8
+ description: 'dds-statscarousel__description',
9
+ stage: 'dds-statscarousel__stage',
10
+ card: 'dds-statscarousel__card',
11
+ list: 'dds-statscarousel__list',
12
+ item: 'dds-statscarousel__item',
13
+ value: 'dds-statscarousel__value',
14
+ label: 'dds-statscarousel__label',
15
+ awards: 'dds-statscarousel__awards',
16
+ award: 'dds-statscarousel__award',
17
+ 'award-laurel': 'dds-statscarousel__award-laurel',
18
+ 'award-copy': 'dds-statscarousel__award-copy',
19
+ 'award-name': 'dds-statscarousel__award-name',
20
+ 'award-issuer': 'dds-statscarousel__award-issuer',
21
+ };
22
+ /** Generated so defaults cannot drift from the contract. */
23
+ export const statsCarouselDefaults = { ground: 'page' };