@deriv-com/dds-marketing 1.0.1 → 1.1.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 (336) hide show
  1. package/.llm/components/awards.md +209 -0
  2. package/.llm/components/background.md +420 -0
  3. package/.llm/components/bottomsheet.md +5 -0
  4. package/.llm/components/comparisoncards.md +257 -0
  5. package/.llm/components/comparisontable.md +231 -0
  6. package/.llm/components/ctabanner.md +22 -0
  7. package/.llm/components/ctabannerslider.md +36 -2
  8. package/.llm/components/datatable.md +273 -0
  9. package/.llm/components/downloadbanner.md +283 -0
  10. package/.llm/components/featurecards.md +41 -3
  11. package/.llm/components/featurecardscarousel.md +311 -0
  12. package/.llm/components/featuresplit.md +5 -0
  13. package/.llm/components/featurestack.md +227 -0
  14. package/.llm/components/illustrationcard.md +236 -0
  15. package/.llm/components/illustrationscene.md +229 -0
  16. package/.llm/components/imagebanner.md +278 -0
  17. package/.llm/components/landinghero.md +24 -0
  18. package/.llm/components/navbar.md +1 -1
  19. package/.llm/components/navbaritem.md +4 -0
  20. package/.llm/components/pageheader.md +22 -0
  21. package/.llm/components/paginationdots.md +6 -1
  22. package/.llm/components/producthero.md +35 -11
  23. package/.llm/components/resourcebanner.md +247 -0
  24. package/.llm/components/scenescroll.md +222 -0
  25. package/.llm/components/select.md +17 -0
  26. package/.llm/components/stats.md +219 -0
  27. package/.llm/components/steps.md +286 -0
  28. package/.llm/components/stickycards.md +251 -0
  29. package/.llm/components/tableheadercell.md +19 -0
  30. package/.llm/components/teamgrid.md +243 -0
  31. package/.llm/components/testimonialrow.md +5 -0
  32. package/.llm/components/testimonialslider.md +14 -1
  33. package/.llm/components/textarea.md +13 -0
  34. package/.llm/components/textinput.md +13 -0
  35. package/.llm/components/textscroll.md +187 -0
  36. package/.llm/components/tiers.md +227 -0
  37. package/.llm/digest/awards.md +45 -0
  38. package/.llm/digest/background.md +53 -0
  39. package/.llm/digest/bottomsheet.md +2 -0
  40. package/.llm/digest/comparisoncards.md +51 -0
  41. package/.llm/digest/comparisontable.md +53 -0
  42. package/.llm/digest/ctabanner.md +4 -0
  43. package/.llm/digest/ctabannerslider.md +7 -0
  44. package/.llm/digest/datatable.md +65 -0
  45. package/.llm/digest/downloadbanner.md +65 -0
  46. package/.llm/digest/featurecards.md +1 -1
  47. package/.llm/digest/featurecardscarousel.md +54 -0
  48. package/.llm/digest/featuresplit.md +1 -0
  49. package/.llm/digest/featurestack.md +48 -0
  50. package/.llm/digest/illustrationcard.md +46 -0
  51. package/.llm/digest/illustrationscene.md +50 -0
  52. package/.llm/digest/imagebanner.md +64 -0
  53. package/.llm/digest/landinghero.md +7 -0
  54. package/.llm/digest/navbaritem.md +1 -0
  55. package/.llm/digest/pageheader.md +4 -0
  56. package/.llm/digest/paginationdots.md +3 -1
  57. package/.llm/digest/producthero.md +4 -2
  58. package/.llm/digest/resourcebanner.md +53 -0
  59. package/.llm/digest/scenescroll.md +49 -0
  60. package/.llm/digest/select.md +5 -0
  61. package/.llm/digest/stats.md +46 -0
  62. package/.llm/digest/steps.md +55 -0
  63. package/.llm/digest/stickycards.md +52 -0
  64. package/.llm/digest/tableheadercell.md +4 -0
  65. package/.llm/digest/teamgrid.md +53 -0
  66. package/.llm/digest/testimonialrow.md +2 -0
  67. package/.llm/digest/testimonialslider.md +4 -0
  68. package/.llm/digest/textarea.md +4 -0
  69. package/.llm/digest/textinput.md +4 -0
  70. package/.llm/digest/textscroll.md +43 -0
  71. package/.llm/digest/tiers.md +50 -0
  72. package/.llm/index.md +25 -2
  73. package/.llm/tokens.md +37 -1
  74. package/AGENTS.md +20 -1
  75. package/dist/components/awards-data.d.ts +24 -0
  76. package/dist/components/awards-data.js +11 -0
  77. package/dist/components/block-image-data.d.ts +24 -0
  78. package/dist/components/block-image-data.js +9 -0
  79. package/dist/components/blocks/awards/Awards.css +134 -0
  80. package/dist/components/blocks/awards/Awards.d.ts +24 -0
  81. package/dist/components/blocks/awards/Awards.js +114 -0
  82. package/dist/components/blocks/awards/Awards.types.d.ts +31 -0
  83. package/dist/components/blocks/awards/Awards.types.js +16 -0
  84. package/dist/components/blocks/awards/awards-impl.css +222 -0
  85. package/dist/components/blocks/cards-of.d.ts +16 -0
  86. package/dist/components/blocks/cards-of.js +23 -0
  87. package/dist/components/blocks/comparison-cards/ComparisonCards.css +195 -0
  88. package/dist/components/blocks/comparison-cards/ComparisonCards.d.ts +24 -0
  89. package/dist/components/blocks/comparison-cards/ComparisonCards.js +75 -0
  90. package/dist/components/blocks/comparison-cards/ComparisonCards.types.d.ts +49 -0
  91. package/dist/components/blocks/comparison-cards/ComparisonCards.types.js +26 -0
  92. package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +262 -0
  93. package/dist/components/blocks/comparison-table/ComparisonTable.css +111 -0
  94. package/dist/components/blocks/comparison-table/ComparisonTable.d.ts +25 -0
  95. package/dist/components/blocks/comparison-table/ComparisonTable.js +100 -0
  96. package/dist/components/blocks/comparison-table/ComparisonTable.types.d.ts +36 -0
  97. package/dist/components/blocks/comparison-table/ComparisonTable.types.js +15 -0
  98. package/dist/components/blocks/comparison-table/comparison-table-impl.css +143 -0
  99. package/dist/components/blocks/cta-banner/CtaBanner.css +1 -0
  100. package/dist/components/blocks/cta-banner/CtaBanner.d.ts +1 -1
  101. package/dist/components/blocks/cta-banner/CtaBanner.js +3 -2
  102. package/dist/components/blocks/cta-banner/CtaBanner.types.d.ts +6 -0
  103. package/dist/components/blocks/cta-banner/CtaBanner.types.js +1 -1
  104. package/dist/components/blocks/cta-banner/cta-banner-impl.css +8 -0
  105. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.css +1 -0
  106. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.d.ts +1 -1
  107. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.js +10 -5
  108. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.d.ts +12 -0
  109. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.js +1 -1
  110. package/dist/components/blocks/cta-banner-slider/cta-banner-slider-impl.css +8 -0
  111. package/dist/components/blocks/data-table/DataTable.css +170 -0
  112. package/dist/components/blocks/data-table/DataTable.d.ts +29 -0
  113. package/dist/components/blocks/data-table/DataTable.js +84 -0
  114. package/dist/components/blocks/data-table/DataTable.types.d.ts +69 -0
  115. package/dist/components/blocks/data-table/DataTable.types.js +19 -0
  116. package/dist/components/blocks/data-table/data-table-impl.css +155 -0
  117. package/dist/components/blocks/download-banner/DownloadBanner.css +228 -0
  118. package/dist/components/blocks/download-banner/DownloadBanner.d.ts +28 -0
  119. package/dist/components/blocks/download-banner/DownloadBanner.js +75 -0
  120. package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +56 -0
  121. package/dist/components/blocks/download-banner/DownloadBanner.types.js +23 -0
  122. package/dist/components/blocks/download-banner/download-banner-impl.css +216 -0
  123. package/dist/components/blocks/faq-accordion/FaqAccordion.css +1 -0
  124. package/dist/components/blocks/faq-accordion/faq-accordion-impl.css +3 -7
  125. package/dist/components/blocks/feature-bullets/FeatureBullets.css +1 -0
  126. package/dist/components/blocks/feature-bullets/feature-bullets-impl.css +14 -1
  127. package/dist/components/blocks/feature-cards/FeatureCards.css +1 -0
  128. package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
  129. package/dist/components/blocks/feature-cards/FeatureCards.js +4 -21
  130. package/dist/components/blocks/feature-cards/feature-cards-impl.css +10 -9
  131. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.css +115 -0
  132. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.d.ts +30 -0
  133. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.js +160 -0
  134. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +52 -0
  135. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.js +17 -0
  136. package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +207 -0
  137. package/dist/components/blocks/feature-scroll/FeatureScroll.css +1 -0
  138. package/dist/components/blocks/feature-split/FeatureSplit.css +1 -0
  139. package/dist/components/blocks/feature-split/feature-split-impl.css +14 -1
  140. package/dist/components/blocks/feature-stack/FeatureStack.css +86 -0
  141. package/dist/components/blocks/feature-stack/FeatureStack.d.ts +19 -0
  142. package/dist/components/blocks/feature-stack/FeatureStack.js +27 -0
  143. package/dist/components/blocks/feature-stack/FeatureStack.types.d.ts +34 -0
  144. package/dist/components/blocks/feature-stack/FeatureStack.types.js +14 -0
  145. package/dist/components/blocks/feature-stack/feature-stack-impl.css +87 -0
  146. package/dist/components/blocks/image-banner/ImageBanner.css +133 -0
  147. package/dist/components/blocks/image-banner/ImageBanner.d.ts +32 -0
  148. package/dist/components/blocks/image-banner/ImageBanner.js +41 -0
  149. package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +54 -0
  150. package/dist/components/blocks/image-banner/ImageBanner.types.js +14 -0
  151. package/dist/components/blocks/image-banner/image-banner-impl.css +281 -0
  152. package/dist/components/blocks/landing-hero/LandingHero.css +1 -0
  153. package/dist/components/blocks/landing-hero/LandingHero.d.ts +1 -1
  154. package/dist/components/blocks/landing-hero/LandingHero.js +4 -3
  155. package/dist/components/blocks/landing-hero/LandingHero.types.d.ts +7 -3
  156. package/dist/components/blocks/logo-columns/LogoColumns.css +1 -0
  157. package/dist/components/blocks/logo-rows/LogoRows.css +1 -0
  158. package/dist/components/blocks/page-header/PageHeader.css +1 -0
  159. package/dist/components/blocks/page-header/PageHeader.d.ts +1 -1
  160. package/dist/components/blocks/page-header/PageHeader.js +3 -2
  161. package/dist/components/blocks/page-header/PageHeader.types.d.ts +6 -0
  162. package/dist/components/blocks/page-header/PageHeader.types.js +1 -1
  163. package/dist/components/blocks/page-header/page-header-impl.css +10 -0
  164. package/dist/components/blocks/product-hero/ProductHero.css +8 -3
  165. package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
  166. package/dist/components/blocks/product-hero/ProductHero.js +5 -2
  167. package/dist/components/blocks/product-hero/ProductHero.types.d.ts +5 -1
  168. package/dist/components/blocks/product-hero/ProductHero.types.js +1 -0
  169. package/dist/components/blocks/product-hero/product-hero-impl.css +43 -12
  170. package/dist/components/blocks/resource-banner/ResourceBanner.css +106 -0
  171. package/dist/components/blocks/resource-banner/ResourceBanner.d.ts +32 -0
  172. package/dist/components/blocks/resource-banner/ResourceBanner.js +51 -0
  173. package/dist/components/blocks/resource-banner/ResourceBanner.types.d.ts +44 -0
  174. package/dist/components/blocks/resource-banner/ResourceBanner.types.js +14 -0
  175. package/dist/components/blocks/resource-banner/resource-banner-impl.css +69 -0
  176. package/dist/components/blocks/scene-scroll/SceneScroll.css +93 -0
  177. package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +36 -0
  178. package/dist/components/blocks/scene-scroll/SceneScroll.js +54 -0
  179. package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +32 -0
  180. package/dist/components/blocks/scene-scroll/SceneScroll.types.js +15 -0
  181. package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +275 -0
  182. package/dist/components/blocks/stats/Stats.css +139 -0
  183. package/dist/components/blocks/stats/Stats.d.ts +24 -0
  184. package/dist/components/blocks/stats/Stats.js +120 -0
  185. package/dist/components/blocks/stats/Stats.types.d.ts +36 -0
  186. package/dist/components/blocks/stats/Stats.types.js +19 -0
  187. package/dist/components/blocks/stats/stats-count.d.ts +34 -0
  188. package/dist/components/blocks/stats/stats-count.js +61 -0
  189. package/dist/components/blocks/stats/stats-impl.css +284 -0
  190. package/dist/components/blocks/stats/use-wheel.d.ts +37 -0
  191. package/dist/components/blocks/stats/use-wheel.js +126 -0
  192. package/dist/components/blocks/steps/Steps.css +202 -0
  193. package/dist/components/blocks/steps/Steps.d.ts +32 -0
  194. package/dist/components/blocks/steps/Steps.js +65 -0
  195. package/dist/components/blocks/steps/Steps.types.d.ts +48 -0
  196. package/dist/components/blocks/steps/Steps.types.js +21 -0
  197. package/dist/components/blocks/steps/steps-impl.css +216 -0
  198. package/dist/components/blocks/steps/use-turn.d.ts +33 -0
  199. package/dist/components/blocks/steps/use-turn.js +75 -0
  200. package/dist/components/blocks/sticky-cards/StickyCards.css +154 -0
  201. package/dist/components/blocks/sticky-cards/StickyCards.d.ts +35 -0
  202. package/dist/components/blocks/sticky-cards/StickyCards.js +153 -0
  203. package/dist/components/blocks/sticky-cards/StickyCards.types.d.ts +43 -0
  204. package/dist/components/blocks/sticky-cards/StickyCards.types.js +18 -0
  205. package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +393 -0
  206. package/dist/components/blocks/team-grid/TeamGrid.css +159 -0
  207. package/dist/components/blocks/team-grid/TeamGrid.d.ts +28 -0
  208. package/dist/components/blocks/team-grid/TeamGrid.js +74 -0
  209. package/dist/components/blocks/team-grid/TeamGrid.types.d.ts +51 -0
  210. package/dist/components/blocks/team-grid/TeamGrid.types.js +20 -0
  211. package/dist/components/blocks/team-grid/team-grid-impl.css +129 -0
  212. package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -0
  213. package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +1 -1
  214. package/dist/components/blocks/testimonial-row/TestimonialRow.js +4 -3
  215. package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +3 -0
  216. package/dist/components/blocks/testimonial-row/TestimonialRow.types.js +1 -1
  217. package/dist/components/blocks/testimonial-row/testimonial-row-impl.css +8 -0
  218. package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -0
  219. package/dist/components/blocks/testimonial-slider/TestimonialSlider.d.ts +1 -1
  220. package/dist/components/blocks/testimonial-slider/TestimonialSlider.js +2 -2
  221. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +8 -0
  222. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.js +1 -1
  223. package/dist/components/blocks/text-scroll/TextScroll.css +53 -0
  224. package/dist/components/blocks/text-scroll/TextScroll.d.ts +5 -0
  225. package/dist/components/blocks/text-scroll/TextScroll.js +71 -0
  226. package/dist/components/blocks/text-scroll/TextScroll.types.d.ts +22 -0
  227. package/dist/components/blocks/text-scroll/TextScroll.types.js +10 -0
  228. package/dist/components/blocks/text-scroll/text-scroll-impl.css +115 -0
  229. package/dist/components/blocks/tiers/Tiers.css +233 -0
  230. package/dist/components/blocks/tiers/Tiers.d.ts +32 -0
  231. package/dist/components/blocks/tiers/Tiers.js +68 -0
  232. package/dist/components/blocks/tiers/Tiers.types.d.ts +45 -0
  233. package/dist/components/blocks/tiers/Tiers.types.js +25 -0
  234. package/dist/components/blocks/tiers/tiers-impl.css +185 -0
  235. package/dist/components/blocks/use-rotation.d.ts +12 -2
  236. package/dist/components/blocks/use-rotation.js +6 -28
  237. package/dist/components/comparison-cards-data.d.ts +59 -0
  238. package/dist/components/comparison-cards-data.js +12 -0
  239. package/dist/components/comparison-table-data.d.ts +39 -0
  240. package/dist/components/comparison-table-data.js +11 -0
  241. package/dist/components/core/accordion-item/AccordionItem.css +1 -5
  242. package/dist/components/core/background/Background.css +92 -0
  243. package/dist/components/core/background/Background.d.ts +27 -0
  244. package/dist/components/core/background/Background.js +45 -0
  245. package/dist/components/core/background/Background.types.d.ts +39 -0
  246. package/dist/components/core/background/Background.types.js +11 -0
  247. package/dist/components/core/background/background-impl.css +760 -0
  248. package/dist/components/core/background/halftone.d.ts +134 -0
  249. package/dist/components/core/background/halftone.js +722 -0
  250. package/dist/components/core/background/patterns.d.ts +66 -0
  251. package/dist/components/core/background/patterns.js +244 -0
  252. package/dist/components/core/background/shader.d.ts +44 -0
  253. package/dist/components/core/background/shader.js +307 -0
  254. package/dist/components/core/background/use-halftone.d.ts +15 -0
  255. package/dist/components/core/background/use-halftone.js +27 -0
  256. package/dist/components/core/background/use-offscreen.d.ts +10 -0
  257. package/dist/components/core/background/use-offscreen.js +30 -0
  258. package/dist/components/core/background/use-shader.d.ts +11 -0
  259. package/dist/components/core/background/use-shader.js +25 -0
  260. package/dist/components/core/background/use-spotlight.d.ts +14 -0
  261. package/dist/components/core/background/use-spotlight.js +73 -0
  262. package/dist/components/core/bottom-sheet/BottomSheet.js +2 -2
  263. package/dist/components/core/bottom-sheet/BottomSheet.types.d.ts +3 -1
  264. package/dist/components/core/breadcrumb/Breadcrumb.d.ts +1 -0
  265. package/dist/components/core/breadcrumb/Breadcrumb.js +1 -0
  266. package/dist/components/core/breadcrumb/breadcrumb-impl.css +11 -0
  267. package/dist/components/core/button/button-impl.css +14 -1
  268. package/dist/components/core/illustration-card/IllustrationCard.css +40 -0
  269. package/dist/components/core/illustration-card/IllustrationCard.d.ts +22 -0
  270. package/dist/components/core/illustration-card/IllustrationCard.js +82 -0
  271. package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +23 -0
  272. package/dist/components/core/illustration-card/IllustrationCard.types.js +8 -0
  273. package/dist/components/core/illustration-card/illustration-card-impl.css +47 -0
  274. package/dist/components/core/illustration-scene/IllustrationScene.css +41 -0
  275. package/dist/components/core/illustration-scene/IllustrationScene.d.ts +14 -0
  276. package/dist/components/core/illustration-scene/IllustrationScene.js +16 -0
  277. package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +32 -0
  278. package/dist/components/core/illustration-scene/IllustrationScene.types.js +8 -0
  279. package/dist/components/core/illustration-scene/illustration-scene-impl.css +46 -0
  280. package/dist/components/core/link/Link.js +7 -3
  281. package/dist/components/core/link/link-impl.css +29 -2
  282. package/dist/components/core/navbar/Navbar.css +2 -2
  283. package/dist/components/core/navbar/Navbar.types.d.ts +1 -1
  284. package/dist/components/core/navbar-item/NavbarItem.d.ts +2 -1
  285. package/dist/components/core/navbar-item/NavbarItem.js +3 -10
  286. package/dist/components/core/navbar-item/NavbarItem.types.d.ts +4 -1
  287. package/dist/components/core/navbar-item/NavbarItem.types.js +1 -1
  288. package/dist/components/core/navbar-item/navbar-item-impl.css +10 -0
  289. package/dist/components/core/navbar-menu/navbar-menu-impl.css +9 -0
  290. package/dist/components/core/navbar-switcher/navbar-switcher-impl.css +19 -0
  291. package/dist/components/core/pagination/Pagination.js +1 -1
  292. package/dist/components/core/pagination/pagination-impl.css +9 -0
  293. package/dist/components/core/pagination-dots/PaginationDots.d.ts +1 -1
  294. package/dist/components/core/pagination-dots/PaginationDots.js +3 -3
  295. package/dist/components/core/pagination-dots/PaginationDots.types.d.ts +3 -1
  296. package/dist/components/core/segmented-control/SegmentedControl.css +4 -3
  297. package/dist/components/core/segmented-control/SegmentedControl.js +17 -3
  298. package/dist/components/core/segmented-control-item/SegmentedControlItem.css +2 -1
  299. package/dist/components/core/select/Select.js +3 -3
  300. package/dist/components/core/select/Select.types.d.ts +11 -1
  301. package/dist/components/core/select/Select.types.js +1 -1
  302. package/dist/components/core/tab-list/TabList.js +9 -1
  303. package/dist/components/core/table-header-cell/TableHeaderCell.d.ts +1 -1
  304. package/dist/components/core/table-header-cell/TableHeaderCell.js +5 -2
  305. package/dist/components/core/table-header-cell/TableHeaderCell.types.d.ts +7 -1
  306. package/dist/components/core/table-header-cell/TableHeaderCell.types.js +1 -1
  307. package/dist/components/core/text-area/TextArea.d.ts +1 -1
  308. package/dist/components/core/text-area/TextArea.js +2 -2
  309. package/dist/components/core/text-area/TextArea.types.d.ts +9 -1
  310. package/dist/components/core/text-area/TextArea.types.js +1 -1
  311. package/dist/components/core/text-input/TextInput.d.ts +1 -1
  312. package/dist/components/core/text-input/TextInput.js +2 -2
  313. package/dist/components/core/text-input/TextInput.types.d.ts +9 -1
  314. package/dist/components/core/text-input/TextInput.types.js +1 -1
  315. package/dist/components/data-table-data.d.ts +33 -0
  316. package/dist/components/data-table-data.js +12 -0
  317. package/dist/components/download-banner-data.d.ts +52 -0
  318. package/dist/components/download-banner-data.js +11 -0
  319. package/dist/components/index.d.ts +51 -0
  320. package/dist/components/index.js +38 -0
  321. package/dist/components/resource-banner-data.d.ts +34 -0
  322. package/dist/components/resource-banner-data.js +13 -0
  323. package/dist/components/scene-scroll-data.d.ts +24 -0
  324. package/dist/components/scene-scroll-data.js +9 -0
  325. package/dist/components/stats-data.d.ts +28 -0
  326. package/dist/components/stats-data.js +11 -0
  327. package/dist/components/steps-data.d.ts +38 -0
  328. package/dist/components/steps-data.js +13 -0
  329. package/dist/components/sticky-cards-data.d.ts +43 -0
  330. package/dist/components/sticky-cards-data.js +12 -0
  331. package/dist/components/team-grid-data.d.ts +38 -0
  332. package/dist/components/team-grid-data.js +11 -0
  333. package/dist/components/tiers-data.d.ts +47 -0
  334. package/dist/components/tiers-data.js +13 -0
  335. package/dist/marketing.css +101 -28
  336. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ import './IllustrationCard.css';
2
+ import './illustration-card-impl.css';
3
+ import { type IllustrationCardProps } from './IllustrationCard.types.js';
4
+ export type { IllustrationCardProps };
5
+ /**
6
+ * A pane of glass holding a picture of the product, in one of three shapes.
7
+ *
8
+ * The shape and the surface are this component's and nobody else's — that is the whole reason it
9
+ * exists. Every picture of this kind across a site is four by three, square or three by four, and is
10
+ * the same glass, because those are the two things each page would otherwise decide for itself and
11
+ * decide differently. What the pane shows is the page's.
12
+ *
13
+ * Everything inside is illustrative. The pane is one image to assistive technology, described by
14
+ * `label`, and its contents are `inert`: real components draw it, so it looks exactly like the
15
+ * product, and none of them can be focused, pressed or typed into.
16
+ *
17
+ * And it scales like a picture. The UI is laid out at its own size and, where the pane is too small
18
+ * to hold it, scaled down as a whole to fit — never up — so a pane on a phone shows the same picture
19
+ * smaller rather than text overlapping or cut off. The scale is worked out when the pane changes
20
+ * size and at no other time.
21
+ */
22
+ export declare function IllustrationCard({ ratio, label, children, ...rest }: IllustrationCardProps): import("react").JSX.Element;
@@ -0,0 +1,82 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useLayoutEffect, useRef } from 'react';
4
+ import './IllustrationCard.css';
5
+ import './illustration-card-impl.css';
6
+ import { illustrationCardDefaults, illustrationCardParts, } from './IllustrationCard.types.js';
7
+ /**
8
+ * A pane of glass holding a picture of the product, in one of three shapes.
9
+ *
10
+ * The shape and the surface are this component's and nobody else's — that is the whole reason it
11
+ * exists. Every picture of this kind across a site is four by three, square or three by four, and is
12
+ * the same glass, because those are the two things each page would otherwise decide for itself and
13
+ * decide differently. What the pane shows is the page's.
14
+ *
15
+ * Everything inside is illustrative. The pane is one image to assistive technology, described by
16
+ * `label`, and its contents are `inert`: real components draw it, so it looks exactly like the
17
+ * product, and none of them can be focused, pressed or typed into.
18
+ *
19
+ * And it scales like a picture. The UI is laid out at its own size and, where the pane is too small
20
+ * to hold it, scaled down as a whole to fit — never up — so a pane on a phone shows the same picture
21
+ * smaller rather than text overlapping or cut off. The scale is worked out when the pane changes
22
+ * size and at no other time.
23
+ */
24
+ export function IllustrationCard({ ratio = illustrationCardDefaults.ratio, label, children, ...rest }) {
25
+ const pane = useRef(null);
26
+ const content = useRef(null);
27
+ useLayoutEffect(() => {
28
+ const root = pane.current;
29
+ const inner = content.current;
30
+ if (root === null || inner === null || typeof ResizeObserver === 'undefined')
31
+ return undefined;
32
+ const fit = () => {
33
+ const style = getComputedStyle(root);
34
+ const across = root.clientWidth - Number.parseFloat(style.paddingInlineStart) - Number.parseFloat(style.paddingInlineEnd);
35
+ const down = root.clientHeight - Number.parseFloat(style.paddingBlockStart) - Number.parseFloat(style.paddingBlockEnd);
36
+ if (across <= 0 || down <= 0)
37
+ return;
38
+ // Laid out unscaled at the pane's own width, to see how much room the UI wants there — down,
39
+ // and across, since a line that cannot wrap (a large figure) overflows sideways.
40
+ inner.style.transform = '';
41
+ inner.style.inlineSize = `${across}px`;
42
+ const tall = inner.scrollHeight;
43
+ const wide = inner.scrollWidth;
44
+ const scale = Math.min(1, down / tall, across / wide);
45
+ if (scale >= 1) {
46
+ inner.style.inlineSize = '';
47
+ return;
48
+ }
49
+ // Scaled, the UI is narrower than the pane too; laying it out wider by the same factor gives
50
+ // the width back, so the picture fills the pane across as well as down. Wider, it can only
51
+ // wrap less and so be shorter, which keeps it inside the pane.
52
+ inner.style.inlineSize = `${across / scale}px`;
53
+ inner.style.transformOrigin = style.direction === 'rtl' ? 'top right' : 'top left';
54
+ inner.style.transform = `scale(${scale})`;
55
+ };
56
+ // Fitted again only when something can have changed: the pane's size, the size of what it
57
+ // holds, or the typeface arriving — before it does, the UI is measured in a fallback face of a
58
+ // different size. Batched to one fit a frame; scaling is a transform and does not resize what
59
+ // is observed, so a fit does not set off another.
60
+ let queued = 0;
61
+ const refit = () => {
62
+ if (queued !== 0)
63
+ return;
64
+ queued = requestAnimationFrame(() => {
65
+ queued = 0;
66
+ fit();
67
+ });
68
+ };
69
+ const watch = new ResizeObserver(refit);
70
+ watch.observe(root);
71
+ for (const child of Array.from(inner.children))
72
+ watch.observe(child);
73
+ void document.fonts?.ready.then(refit);
74
+ fit();
75
+ return () => {
76
+ watch.disconnect();
77
+ if (queued !== 0)
78
+ cancelAnimationFrame(queued);
79
+ };
80
+ }, []);
81
+ return (_jsx("div", { ...rest, ref: pane, className: illustrationCardParts.root, "data-ratio": ratio, "data-theme": "dark", role: "img", "aria-label": label, children: _jsx("div", { ref: content, className: illustrationCardParts.content, inert: true, children: children }) }));
82
+ }
@@ -0,0 +1,23 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface IllustrationCardOwnProps {
3
+ /**
4
+ * `landscape` — Four by three, and the default. For a panel beside words in a wide section
5
+ * `square` — One by one. For a grid of panels, or a column no wider than it is tall
6
+ * `upright` — Three by four. For a phone, or a narrow column beside a tall run of words
7
+ */
8
+ ratio?: 'landscape' | 'square' | 'upright';
9
+ /** Always. What the picture shows, in a sentence — "Trade ticket: buy Gold to rise over 5 minutes, staking 10 USD". The pane is one image to assistive technology and this is its whole description; nothing inside it is read out on its own */
10
+ label: string;
11
+ /** Allowed: any content */
12
+ children: ReactNode;
13
+ }
14
+ export type IllustrationCardProps = IllustrationCardOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'ratio' | 'label'>;
15
+ /** The class each part carries. Apply these — do not retype them. */
16
+ export declare const illustrationCardParts: {
17
+ readonly root: "dds-illustrationcard";
18
+ readonly content: "dds-illustrationcard__content";
19
+ };
20
+ /** Generated so defaults cannot drift from the contract. */
21
+ export declare const illustrationCardDefaults: {
22
+ readonly ratio: "landscape";
23
+ };
@@ -0,0 +1,8 @@
1
+ // GENERATED from illustration-card.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const illustrationCardParts = {
4
+ root: 'dds-illustrationcard',
5
+ content: 'dds-illustrationcard__content',
6
+ };
7
+ /** Generated so defaults cannot drift from the contract. */
8
+ export const illustrationCardDefaults = { ratio: 'landscape' };
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * `:where([data-dds-context="marketing"])` confines these rules without contributing
5
+ * specificity, so every override below still ties or beats exactly what it did before.
6
+ */
7
+
8
+ /*
9
+ * The glass: whatever is behind the pane, blurred. The fill is bound in the contract —
10
+ * color.bg.surface-glass — and the blur is here because `blur()` is a function no binding can
11
+ * name, the same division navbar-material.css makes. size.backdrop-blur is enough that what is
12
+ * behind stops reading as detail, so the UI on the pane stays legible.
13
+ */
14
+ :where([data-dds-context="marketing"]) .dds-illustrationcard {
15
+ -webkit-backdrop-filter: blur(var(--size-backdrop-blur));
16
+ backdrop-filter: blur(var(--size-backdrop-blur));
17
+ }
18
+
19
+ /*
20
+ * Standing on its own, the glass is laid over the dark page rather than over whatever page it is on.
21
+ *
22
+ * The pane is dark in both themes — see `data-theme` in IllustrationCard.tsx — and the dark glass is
23
+ * a faint white, which is only the charcoal pane it is meant to be over the dark page's near-black.
24
+ * Over a light page the same glass came out near-white, behind the dark theme's white ink. So the
25
+ * dark page's ground goes under it, and the card is the same charcoal on every page.
26
+ *
27
+ * Not in a scene, where the glass is there to show the photograph through it.
28
+ */
29
+ :where([data-dds-context="marketing"]) .dds-illustrationcard {
30
+ background-color: var(--color-bg-page);
31
+ background-image: linear-gradient(var(--color-bg-surface-glass), var(--color-bg-surface-glass));
32
+ }
33
+
34
+ :where([data-dds-context="marketing"]) .dds-illustrationscene .dds-illustrationcard {
35
+ background-color: var(--color-bg-surface-glass);
36
+ background-image: none;
37
+ }
38
+
39
+ /*
40
+ * What the pane holds keeps its own size: nothing in it shrinks to make room, because a shrunk item
41
+ * in a flex column overlaps the next one. Where the UI is taller than the pane, IllustrationCard
42
+ * scales the whole of it down to fit, as a picture would be; until that has run — on a server
43
+ * render — whatever does not fit is clipped at the pane's edge.
44
+ */
45
+ :where([data-dds-context="marketing"]) .dds-illustrationcard .dds-illustrationcard__content > * {
46
+ flex-shrink: 0;
47
+ }
@@ -0,0 +1,41 @@
1
+ /* GENERATED from illustrationscene.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-illustrationscene {
4
+ align-items: center;
5
+ box-sizing: border-box;
6
+ display: grid;
7
+ inline-size: 100%;
8
+ isolation: isolate;
9
+ overflow: hidden;
10
+ position: relative;
11
+ border-radius: var(--radius-surface);
12
+ }
13
+
14
+ :where([data-dds-context="marketing"]) .dds-illustrationscene .dds-illustrationscene__image {
15
+ block-size: 100%;
16
+ inline-size: 100%;
17
+ object-fit: cover;
18
+ background-color: var(--color-bg-surface);
19
+ }
20
+
21
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement="bottom"] {
22
+ align-items: end;
23
+ justify-items: center;
24
+ }
25
+
26
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement="center"] {
27
+ justify-items: center;
28
+ }
29
+
30
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-ratio="landscape"] {
31
+ aspect-ratio: var(--aspect-landscape);
32
+ }
33
+
34
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-ratio="square"] {
35
+ aspect-ratio: var(--aspect-square);
36
+ }
37
+
38
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-ratio="upright"] {
39
+ aspect-ratio: var(--aspect-upright);
40
+ }
41
+
@@ -0,0 +1,14 @@
1
+ import './IllustrationScene.css';
2
+ import './illustration-scene-impl.css';
3
+ import { type IllustrationSceneProps } from './IllustrationScene.types.js';
4
+ export type { IllustrationSceneProps };
5
+ /**
6
+ * A photograph with an IllustrationCard laid over it, in one of three shapes.
7
+ *
8
+ * The scene owns how the two meet — the shape, the card's share of the frame, where it sits — so
9
+ * every picture of the product in use is composed the same way across a site. The photograph is
10
+ * decoration unless `alt` says otherwise; the card's own label describes the whole picture.
11
+ *
12
+ * No state and no script, so it renders on a server as it is.
13
+ */
14
+ export declare function IllustrationScene({ ratio, placement, src, alt, children, ...rest }: IllustrationSceneProps): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './IllustrationScene.css';
3
+ import './illustration-scene-impl.css';
4
+ import { illustrationSceneDefaults, illustrationSceneParts, } from './IllustrationScene.types.js';
5
+ /**
6
+ * A photograph with an IllustrationCard laid over it, in one of three shapes.
7
+ *
8
+ * The scene owns how the two meet — the shape, the card's share of the frame, where it sits — so
9
+ * every picture of the product in use is composed the same way across a site. The photograph is
10
+ * decoration unless `alt` says otherwise; the card's own label describes the whole picture.
11
+ *
12
+ * No state and no script, so it renders on a server as it is.
13
+ */
14
+ export function IllustrationScene({ ratio = illustrationSceneDefaults.ratio, placement = illustrationSceneDefaults.placement, src, alt = illustrationSceneDefaults.alt, children, ...rest }) {
15
+ return (_jsxs("div", { ...rest, className: illustrationSceneParts.root, "data-ratio": ratio, "data-placement": placement, children: [_jsx("img", { className: illustrationSceneParts.image, src: src, alt: alt }), children] }));
16
+ }
@@ -0,0 +1,32 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface IllustrationSceneOwnProps {
3
+ /**
4
+ * `landscape` — Four by three. A scene beside words in a wide section; the card takes a little under half the width
5
+ * `square` — One by one, and the default — the shape most such scenes are drawn in. The card takes a little over half the width
6
+ * `upright` — Three by four. A scene on a phone or in a narrow column; the card takes most of the width
7
+ */
8
+ ratio?: 'landscape' | 'square' | 'upright';
9
+ /**
10
+ * `center` — The default: the card in the middle of the frame. For a photograph whose subject frames the middle — a person looking down at what the card shows
11
+ * `bottom` — The card centred along the foot of the frame, held off it by the card's own inset — for a photograph whose subject fills the top: a face, a person reaching up, a skyline
12
+ */
13
+ placement?: 'center' | 'bottom';
14
+ /** Always. The photograph the scene is set in */
15
+ src: string;
16
+ /** Empty by default, because the card's `label` describes the whole picture and the photograph is decoration. Write one only where the photograph says something the label does not */
17
+ alt?: string;
18
+ /** Allowed: IllustrationCard */
19
+ children: ReactNode;
20
+ }
21
+ export type IllustrationSceneProps = IllustrationSceneOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'ratio' | 'placement' | 'src' | 'alt'>;
22
+ /** The class each part carries. Apply these — do not retype them. */
23
+ export declare const illustrationSceneParts: {
24
+ readonly root: "dds-illustrationscene";
25
+ readonly image: "dds-illustrationscene__image";
26
+ };
27
+ /** Generated so defaults cannot drift from the contract. */
28
+ export declare const illustrationSceneDefaults: {
29
+ readonly ratio: "square";
30
+ readonly placement: "center";
31
+ readonly alt: "";
32
+ };
@@ -0,0 +1,8 @@
1
+ // GENERATED from illustration-scene.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const illustrationSceneParts = {
4
+ root: 'dds-illustrationscene',
5
+ image: 'dds-illustrationscene__image',
6
+ };
7
+ /** Generated so defaults cannot drift from the contract. */
8
+ export const illustrationSceneDefaults = { ratio: 'square', placement: 'center', alt: '' };
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * `:where([data-dds-context="marketing"])` confines these rules without contributing
5
+ * specificity, so every override below still ties or beats exactly what it did before.
6
+ */
7
+
8
+ /*
9
+ * The photograph fills the frame behind everything; the card sits in the frame's one grid cell
10
+ * over it. Both share the cell, so the card is placed by the grid's own alignment — centred, or
11
+ * to one edge — and the photograph is laid underneath by coming first.
12
+ */
13
+ :where([data-dds-context="marketing"]) .dds-illustrationscene > * {
14
+ grid-area: 1 / 1;
15
+ }
16
+
17
+ :where([data-dds-context="marketing"]) .dds-illustrationscene .dds-illustrationscene__image {
18
+ align-self: stretch;
19
+ justify-self: stretch;
20
+ display: block;
21
+ }
22
+
23
+ /*
24
+ * The card's share of the frame, per shape: a little under half of a wide frame, a little over half
25
+ * of a square one, most of a tall one. Proportions of the frame rather than measures — a scene is
26
+ * drawn at whatever width its column gives it, and the composition has to hold at all of them.
27
+ * Held off the frame's edges by space.inset.card, so it never touches them.
28
+ */
29
+ :where([data-dds-context="marketing"]) .dds-illustrationscene > .dds-illustrationcard {
30
+ inline-size: 46%;
31
+ margin-inline: var(--space-inset-card);
32
+ }
33
+
34
+ /* At the foot, the same inset below the card as either side of it. Only there: under a centred card
35
+ a margin would lift it off the middle by half the inset. */
36
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement='bottom'] > .dds-illustrationcard {
37
+ margin-block-end: var(--space-inset-card);
38
+ }
39
+
40
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-ratio='square'] > .dds-illustrationcard {
41
+ inline-size: 58%;
42
+ }
43
+
44
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-ratio='upright'] > .dds-illustrationcard {
45
+ inline-size: 78%;
46
+ }
@@ -123,9 +123,13 @@ export function Link({ variant = linkDefaults.variant, tone = linkDefaults.tone,
123
123
  same distance measured along the diagonal rather than four pixels twice.
124
124
  */
125
125
  style: {
126
+ /*
127
+ The two axes apart, so the stylesheet can turn the inline one round in a
128
+ right-to-left line — where the arrow is mirrored and travels the other way.
129
+ */
126
130
  ...(external
127
- ? { '--dds-link-arrow-travel': '18% -18%' }
128
- : { '--dds-link-arrow-travel': '25% 0' }),
131
+ ? { '--dds-link-arrow-travel-x': '18%', '--dds-link-arrow-travel-y': '-18%' }
132
+ : { '--dds-link-arrow-travel-x': '25%', '--dds-link-arrow-travel-y': '0%' }),
129
133
  /*
130
134
  A list link's mark rests displaced and at zero, and the pointer
131
135
  brings it to where it belongs — the arrival and the nudge are the
@@ -135,7 +139,7 @@ export function Link({ variant = linkDefaults.variant, tone = linkDefaults.tone,
135
139
  them.
136
140
  */
137
141
  ...(revealOnHover
138
- ? { '--dds-link-arrow-rest-travel': '-60% 0', '--dds-link-arrow-rest': '0' }
142
+ ? { '--dds-link-arrow-rest-travel-x': '-60%', '--dds-link-arrow-rest': '0' }
139
143
  : {}),
140
144
  }, children: _jsx(Icon, { size: "xs", children: trailing }) }))] }));
141
145
  }
@@ -144,14 +144,28 @@
144
144
  }
145
145
 
146
146
  :where([data-dds-context="marketing"]) .dds-link__icon-trailing .dds-icon {
147
- translate: var(--dds-link-arrow-rest-travel, 0 0);
147
+ translate: calc(var(--dds-link-arrow-rest-travel-x, 0%) * var(--dds-link-arrow-sign, 1)) 0;
148
148
  transition-property: translate;
149
149
  transition-duration: var(--motion-duration-normal);
150
150
  transition-timing-function: var(--motion-easing-standard);
151
151
  }
152
152
 
153
153
  :where([data-dds-context="marketing"]) .dds-link:hover .dds-link__icon-trailing .dds-icon {
154
- translate: var(--dds-link-arrow-travel, 0 0);
154
+ translate: calc(var(--dds-link-arrow-travel-x, 0%) * var(--dds-link-arrow-sign, 1)) var(--dds-link-arrow-travel-y, 0%);
155
+ }
156
+
157
+ /*
158
+ * A right-to-left line reads the other way, so the arrow points the other way: mirrored, and
159
+ * travelling along the line it now points down. Mirroring the glyph and not the box around it,
160
+ * because the box carries the gap to the words as padding on its inline start, and a mirrored box
161
+ * would draw the arrow against the words with the gap on its far side.
162
+ *
163
+ * The external arrow mirrors too — up and to the start of the line, which is where "out of this
164
+ * page" points in a script that reads leftward.
165
+ */
166
+ :where([data-dds-context="marketing"]) .dds-link__icon-trailing .dds-icon:dir(rtl) {
167
+ --dds-link-arrow-sign: -1;
168
+ scale: -1 1;
155
169
  }
156
170
 
157
171
  /*
@@ -166,3 +180,16 @@
166
180
  translate: none;
167
181
  }
168
182
  }
183
+
184
+ /*
185
+ * A link that inherits its ink draws its focus ring in that ink.
186
+ *
187
+ * `tone="inherit"` is the link a page puts on a ground of its own — a dark panel, the brand's
188
+ * band — where color.border.focus, the page's near-black in light mode, sat on a near-black panel
189
+ * at about 1.2:1 and the ring vanished: ResourceBanner's links in light mode, TeamGrid's on the dark
190
+ * band. The words already contrast with whatever they sit on, which is what `inherit` is for, so
191
+ * the ring takes the words' colour and reads wherever they do.
192
+ */
193
+ :where([data-dds-context="marketing"]) .dds-link[data-tone="inherit"]:focus-visible {
194
+ outline-color: currentcolor;
195
+ }
@@ -121,11 +121,11 @@
121
121
  }
122
122
 
123
123
  :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] .dds-navbar__cluster {
124
- background-color: var(--color-bg-surface-translucent-on-brand-strong);
124
+ background-color: var(--color-bg-surface-translucent-tint-on-brand-strong);
125
125
  }
126
126
 
127
127
  :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] .dds-navbar__ground {
128
- background-color: var(--color-bg-surface-translucent-on-brand-strong);
128
+ background-color: var(--color-bg-surface-translucent-tint-on-brand-strong);
129
129
  }
130
130
 
131
131
  :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] .dds-navbar__trigger:focus-visible {
@@ -2,7 +2,7 @@ import type { HTMLAttributes, ReactNode } from 'react';
2
2
  export interface NavbarOwnProps {
3
3
  /**
4
4
  * `default` — The page begins on a light ground, which is most marketing pages. The bar paints in ink and the pill is paper
5
- * `inverse` — The first section of the page paints its own dark ground and the bar stands on it — a dark hero, a photograph, a brand-coloured takeover. The bar's ink runs light, and the pill and the collapsed bar take the dark see-through material — a near-opaque black base, a white tint and a blur — so a light photograph behind cannot wash them out
5
+ * `inverse` — The first section of the page paints its own dark ground and the bar stands on it — a dark hero, a photograph, a brand-coloured takeover. The bar's ink runs light, and the pill and the collapsed bar take a frosted white glass — a faint white base, a white tint over it and a blur — so the dark ground or the photograph shows through it, lightened, rather than a black slab standing on it. Choose a photograph dark where the bar sits: the glass lightens what is behind it and does not darken it
6
6
  */
7
7
  tone?: 'default' | 'inverse';
8
8
  /** Always — it names the navigation landmark, and a page with an unnamed one tells a screen-reader user there is navigation here without saying which navigation. Name the set rather than the act: 'Main', not 'Main navigation' — the role already supplies the word, and a name carrying it is announced as 'main navigation navigation' */
@@ -1,4 +1,5 @@
1
1
  import './NavbarItem.css';
2
+ import './navbar-item-impl.css';
2
3
  import { type NavbarItemProps } from './NavbarItem.types.js';
3
4
  export type { NavbarItemProps };
4
5
  /**
@@ -19,4 +20,4 @@ export type { NavbarItemProps };
19
20
  * section you are in is one you can return to the top of, and a reader who lands
20
21
  * on it should hear which section that is rather than meet a dead stop.
21
22
  */
22
- export declare function NavbarItem({ current, tone, href, icon, external, children, ...rest }: NavbarItemProps): import("react").JSX.Element;
23
+ export declare function NavbarItem({ current, tone, href, icon, external, externalLabel, children, ...rest }: NavbarItemProps): import("react").JSX.Element;
@@ -2,17 +2,10 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ArrowUpRightRegularIcon } from '@deriv-com/quill-icons-web';
4
4
  import './NavbarItem.css';
5
+ import './navbar-item-impl.css';
5
6
  import { Icon } from '../icon/Icon.js';
6
7
  import { visuallyHidden } from '../../visually-hidden.js';
7
8
  import { navbarItemDefaults, navbarItemParts } from './NavbarItem.types.js';
8
- /**
9
- * What the words become when the destination leaves the site.
10
- *
11
- * Appended to the content rather than replacing it with an `aria-label`: a label
12
- * replaces the words a sighted reader is looking at, and somebody using both
13
- * hears one thing and sees another. This keeps them the same sentence.
14
- */
15
- const OPENS_ELSEWHERE = '(opens in a new tab)';
16
9
  /**
17
10
  * One place the site has, in the bar across the top of it.
18
11
  *
@@ -31,10 +24,10 @@ const OPENS_ELSEWHERE = '(opens in a new tab)';
31
24
  * section you are in is one you can return to the top of, and a reader who lands
32
25
  * on it should hear which section that is rather than meet a dead stop.
33
26
  */
34
- export function NavbarItem({ current = navbarItemDefaults.current, tone = navbarItemDefaults.tone, href, icon, external = navbarItemDefaults.external, children, ...rest }) {
27
+ export function NavbarItem({ current = navbarItemDefaults.current, tone = navbarItemDefaults.tone, href, icon, external = navbarItemDefaults.external, externalLabel = navbarItemDefaults.externalLabel, children, ...rest }) {
35
28
  return (_jsxs("a", { ...rest, href: href, className: navbarItemParts.root, "data-current": String(current), "data-tone": tone, "aria-current": current ? 'page' : undefined,
36
29
  // Both, or neither. `target` without `rel` hands the opened document a live
37
30
  // reference back to this one; `rel` without `target` guards a navigation
38
31
  // that never leaves.
39
- target: external ? '_blank' : undefined, rel: external ? 'noreferrer' : undefined, children: [icon !== undefined && icon !== null && (_jsx("span", { className: navbarItemParts.icon, children: icon })), _jsx("span", { className: navbarItemParts.label, children: children }), external && (_jsxs(_Fragment, { children: [_jsx("span", { className: navbarItemParts.external, "aria-hidden": "true", children: _jsx(Icon, { size: "xs", children: _jsx(ArrowUpRightRegularIcon, {}) }) }), _jsx("span", { style: visuallyHidden, children: ` ${OPENS_ELSEWHERE}` })] }))] }));
32
+ target: external ? '_blank' : undefined, rel: external ? 'noreferrer' : undefined, children: [icon !== undefined && icon !== null && (_jsx("span", { className: navbarItemParts.icon, children: icon })), _jsx("span", { className: navbarItemParts.label, children: children }), external && (_jsxs(_Fragment, { children: [_jsx("span", { className: navbarItemParts.external, "aria-hidden": "true", children: _jsx(Icon, { size: "xs", children: _jsx(ArrowUpRightRegularIcon, {}) }) }), _jsx("span", { style: visuallyHidden, children: ` ${externalLabel}` })] }))] }));
40
33
  }
@@ -9,10 +9,12 @@ export interface NavbarItemOwnProps {
9
9
  href: string;
10
10
  /** The bar's sections are quicker to tell apart by a mark than by reading them, which is rare on a marketing site and usual in an application */
11
11
  icon?: ReactNode;
12
+ /** What a screen reader hears after an external destination's name, since the arrow that shows it to everyone else is hidden. Translate it with the page. */
13
+ externalLabel?: string;
12
14
  /** Allowed: text */
13
15
  children: ReactNode;
14
16
  }
15
- export type NavbarItemProps = NavbarItemOwnProps & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'current' | 'tone' | 'href' | 'icon' | 'external'> & ({
17
+ export type NavbarItemProps = NavbarItemOwnProps & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'current' | 'tone' | 'href' | 'icon' | 'external' | 'externalLabel'> & ({
16
18
  current?: boolean;
17
19
  external?: false;
18
20
  } | {
@@ -31,4 +33,5 @@ export declare const navbarItemDefaults: {
31
33
  readonly current: false;
32
34
  readonly tone: "default";
33
35
  readonly external: false;
36
+ readonly externalLabel: "(opens in a new tab)";
34
37
  };
@@ -7,4 +7,4 @@ export const navbarItemParts = {
7
7
  external: 'dds-navbaritem__external',
8
8
  };
9
9
  /** Generated so defaults cannot drift from the contract. */
10
- export const navbarItemDefaults = { current: false, tone: 'default', external: false };
10
+ export const navbarItemDefaults = { current: false, tone: 'default', external: false, externalLabel: '(opens in a new tab)' };
@@ -0,0 +1,10 @@
1
+ /*
2
+ * What the contract cannot hold: a reading direction.
3
+ *
4
+ * The external mark points out of the page along the line, up and to its end. In a right-to-left
5
+ * line the end is on the left, so the arrow is mirrored to point there; as it ships it pointed
6
+ * back into the words it qualifies.
7
+ */
8
+ :where([data-dds-context="marketing"]) .dds-navbaritem .dds-navbaritem__external .dds-icon:dir(rtl) {
9
+ scale: -1 1;
10
+ }
@@ -34,6 +34,15 @@
34
34
  translate: -50%;
35
35
  }
36
36
 
37
+ /*
38
+ * Centred in a right-to-left line too. `inset-inline-start: 50%` is the right edge there, while a
39
+ * translate is physical and still pulled the panel leftward — so it opened a whole panel-width to
40
+ * the left of where it hangs. Half its width back towards the inline start, which is rightward.
41
+ */
42
+ :where([data-dds-context="marketing"]) .dds-navbarmenu .dds-navbarmenu__surface:dir(rtl) {
43
+ translate: 50%;
44
+ }
45
+
37
46
  /*
38
47
  * Above the bar it hangs from, which a contract cannot hold: an integer with no unit.
39
48
  *
@@ -30,6 +30,15 @@
30
30
  z-index: var(--layer-popup);
31
31
  }
32
32
 
33
+ /*
34
+ * Centred in a right-to-left line too. `inset-inline-start: 50%` is the right edge there, while a
35
+ * translate is physical and still pulled the panel leftward — so it opened a whole panel-width to
36
+ * the left of where it hangs. Half its width back towards the inline start, which is rightward.
37
+ */
38
+ :where([data-dds-context="marketing"]) .dds-navbarswitcher[data-presentation='floating'] .dds-navbarswitcher__surface:dir(rtl) {
39
+ translate: 50%;
40
+ }
41
+
33
42
  /*
34
43
  * And in the panel it is a page rather than a panel.
35
44
  *
@@ -177,3 +186,13 @@
177
186
  block-size: 100%;
178
187
  inline-size: auto;
179
188
  }
189
+
190
+ /*
191
+ * In the panel, the chevron points to the page that opens beside it and the back mark to the one
192
+ * it came from — both along the line. Mirrored in a right-to-left line, where beside is leftward.
193
+ * The trigger's own chevron points down and is left alone.
194
+ */
195
+ :where([data-dds-context="marketing"]) .dds-navbarswitcher .dds-navbarswitcher__chevron .dds-icon:dir(rtl),
196
+ :where([data-dds-context="marketing"]) .dds-navbarswitcher .dds-navbarswitcher__back .dds-icon:dir(rtl) {
197
+ scale: -1 1;
198
+ }
@@ -362,5 +362,5 @@ export function Pagination({ variant = paginationDefaults.variant, page = pagina
362
362
  return (_jsx("a", { className: paginationParts.page, href: pageHref(slot), "aria-current": isCurrent ? 'page' : undefined, "data-current": isCurrent ? 'true' : undefined, onClick: go(slot), children: slot }, slot));
363
363
  }
364
364
  return (_jsx("button", { className: paginationParts.page, type: "button", "aria-current": isCurrent ? 'page' : undefined, "data-current": isCurrent ? 'true' : undefined, onClick: go(slot), children: slot }, slot));
365
- }) })), variant === 'compact' && (_jsx("span", { className: paginationParts.summary, children: readout(current, last) })), stepControl(current + 1, nextLabel, atEnd, _jsx(ChevronRightRegularIcon, {}))] }));
365
+ }) })), variant === 'compact' && (_jsx("span", { className: paginationParts.summary, dir: "ltr", children: readout(current, last) })), stepControl(current + 1, nextLabel, atEnd, _jsx(ChevronRightRegularIcon, {}))] }));
366
366
  }
@@ -15,3 +15,12 @@
15
15
  :where([data-dds-context="marketing"]) .dds-pagination .dds-pagination__list:has([aria-expanded='true']) {
16
16
  overflow: visible;
17
17
  }
18
+
19
+ /*
20
+ * The step chevrons point along the row: previous towards its start, next towards its end. A
21
+ * right-to-left row puts previous on the right, so both are mirrored; as they ship, previous
22
+ * pointed outward and next pointed back across the pages.
23
+ */
24
+ :where([data-dds-context="marketing"]) .dds-pagination .dds-pagination__step .dds-icon:dir(rtl) {
25
+ scale: -1 1;
26
+ }
@@ -22,4 +22,4 @@ export type { PaginationDotsProps };
22
22
  * There is no pause control, by decision: a press is the way to stop it, and the contract says what
23
23
  * that does and does not give WCAG 2.2.2.
24
24
  */
25
- export declare function PaginationDots({ variant, page, totalPages, onPageChange, autoplay, paused, label, itemLabel, }: PaginationDotsProps): import("react").JSX.Element;
25
+ export declare function PaginationDots({ variant, page, totalPages, onPageChange, autoplay, paused, label, itemLabel, positionLabel, }: PaginationDotsProps): import("react").JSX.Element;