@deriv-com/dds-marketing 1.1.2 → 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 (401) hide show
  1. package/.llm/components/accordion.md +10 -0
  2. package/.llm/components/accordionitem.md +10 -0
  3. package/.llm/components/aspectratio.md +10 -0
  4. package/.llm/components/awards.md +10 -0
  5. package/.llm/components/background.md +52 -9
  6. package/.llm/components/badge.md +13 -3
  7. package/.llm/components/bottomsheet.md +13 -3
  8. package/.llm/components/breadcrumb.md +10 -0
  9. package/.llm/components/breadcrumbitem.md +10 -0
  10. package/.llm/components/button.md +13 -3
  11. package/.llm/components/buttonicon.md +17 -7
  12. package/.llm/components/card.md +11 -1
  13. package/.llm/components/cardbody.md +12 -2
  14. package/.llm/components/cardbutton.md +10 -0
  15. package/.llm/components/checkbox.md +7 -1
  16. package/.llm/components/comparisoncards.md +13 -3
  17. package/.llm/components/comparisontable.md +10 -0
  18. package/.llm/components/ctabanner.md +10 -0
  19. package/.llm/components/ctabannerslider.md +10 -0
  20. package/.llm/components/datatable.md +10 -0
  21. package/.llm/components/divider.md +10 -0
  22. package/.llm/components/documentlink.md +237 -0
  23. package/.llm/components/documents.md +268 -0
  24. package/.llm/components/downloadbanner.md +11 -1
  25. package/.llm/components/dropdownmenu.md +15 -5
  26. package/.llm/components/estimator.md +342 -0
  27. package/.llm/components/faqaccordion.md +10 -0
  28. package/.llm/components/featurebullets.md +10 -0
  29. package/.llm/components/featurecards.md +47 -3
  30. package/.llm/components/featurecardscarousel.md +11 -1
  31. package/.llm/components/featurescroll.md +10 -0
  32. package/.llm/components/featuresplit.md +10 -0
  33. package/.llm/components/featurestack.md +10 -0
  34. package/.llm/components/featuretabs.md +369 -0
  35. package/.llm/components/filterchip.md +11 -1
  36. package/.llm/components/footer.md +10 -0
  37. package/.llm/components/footergroup.md +10 -0
  38. package/.llm/components/grid.md +34 -1
  39. package/.llm/components/icon.md +15 -5
  40. package/.llm/components/illustrationcard.md +56 -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 +33 -3
  46. package/.llm/components/imagebanner.md +35 -6
  47. package/.llm/components/landinghero.md +10 -0
  48. package/.llm/components/link.md +12 -2
  49. package/.llm/components/logocolumns.md +11 -1
  50. package/.llm/components/logorows.md +46 -2
  51. package/.llm/components/menuitem.md +12 -2
  52. package/.llm/components/navbar.md +11 -1
  53. package/.llm/components/navbaritem.md +10 -0
  54. package/.llm/components/navbarmenu.md +10 -0
  55. package/.llm/components/navbarmenugroup.md +10 -0
  56. package/.llm/components/navbarpanel.md +10 -0
  57. package/.llm/components/navbarswitcher.md +16 -6
  58. package/.llm/components/navbarswitcheroption.md +10 -0
  59. package/.llm/components/option.md +11 -1
  60. package/.llm/components/pageheader.md +10 -0
  61. package/.llm/components/pagination.md +10 -0
  62. package/.llm/components/paginationdots.md +10 -0
  63. package/.llm/components/producthero.md +33 -4
  64. package/.llm/components/progressbar.md +305 -0
  65. package/.llm/components/removablechip.md +11 -1
  66. package/.llm/components/resourcebanner.md +10 -0
  67. package/.llm/components/row.md +10 -0
  68. package/.llm/components/scenescroll.md +42 -24
  69. package/.llm/components/scenescrollword.md +267 -0
  70. package/.llm/components/scroller.md +10 -0
  71. package/.llm/components/searchinput.md +10 -0
  72. package/.llm/components/segmentedcontrol.md +33 -2
  73. package/.llm/components/segmentedcontrolitem.md +12 -2
  74. package/.llm/components/select.md +10 -0
  75. package/.llm/components/selectchip.md +10 -0
  76. package/.llm/components/spinner.md +10 -0
  77. package/.llm/components/stack.md +10 -0
  78. package/.llm/components/stats.md +50 -1
  79. package/.llm/components/statscarousel.md +227 -0
  80. package/.llm/components/statusdot.md +45 -1
  81. package/.llm/components/steps.md +10 -0
  82. package/.llm/components/stickycards.md +10 -0
  83. package/.llm/components/subdomainnavbar.md +11 -1
  84. package/.llm/components/tab.md +12 -2
  85. package/.llm/components/table.md +10 -0
  86. package/.llm/components/tablebody.md +10 -0
  87. package/.llm/components/tablecell.md +10 -0
  88. package/.llm/components/tablehead.md +10 -0
  89. package/.llm/components/tableheadercell.md +10 -0
  90. package/.llm/components/tablerow.md +10 -0
  91. package/.llm/components/tablist.md +10 -0
  92. package/.llm/components/teamgrid.md +10 -0
  93. package/.llm/components/testimonialrow.md +47 -3
  94. package/.llm/components/testimonialslider.md +12 -2
  95. package/.llm/components/textarea.md +10 -0
  96. package/.llm/components/textinput.md +11 -1
  97. package/.llm/components/textscroll.md +10 -0
  98. package/.llm/components/tiers.md +17 -7
  99. package/.llm/components/tooltip.md +6 -0
  100. package/.llm/components/typography.md +67 -1
  101. package/.llm/digest/accordion.md +1 -1
  102. package/.llm/digest/accordionitem.md +1 -1
  103. package/.llm/digest/aspectratio.md +1 -1
  104. package/.llm/digest/awards.md +1 -1
  105. package/.llm/digest/background.md +14 -6
  106. package/.llm/digest/badge.md +1 -1
  107. package/.llm/digest/bottomsheet.md +1 -1
  108. package/.llm/digest/breadcrumb.md +1 -1
  109. package/.llm/digest/breadcrumbitem.md +1 -1
  110. package/.llm/digest/button.md +2 -2
  111. package/.llm/digest/buttonicon.md +2 -2
  112. package/.llm/digest/card.md +1 -1
  113. package/.llm/digest/cardbody.md +1 -1
  114. package/.llm/digest/cardbutton.md +1 -1
  115. package/.llm/digest/checkbox.md +1 -1
  116. package/.llm/digest/comparisoncards.md +1 -1
  117. package/.llm/digest/comparisontable.md +1 -1
  118. package/.llm/digest/ctabanner.md +1 -1
  119. package/.llm/digest/ctabannerslider.md +1 -1
  120. package/.llm/digest/datatable.md +1 -1
  121. package/.llm/digest/divider.md +1 -1
  122. package/.llm/digest/documentlink.md +52 -0
  123. package/.llm/digest/documents.md +51 -0
  124. package/.llm/digest/downloadbanner.md +2 -2
  125. package/.llm/digest/dropdownmenu.md +1 -1
  126. package/.llm/digest/estimator.md +66 -0
  127. package/.llm/digest/faqaccordion.md +1 -1
  128. package/.llm/digest/featurebullets.md +1 -1
  129. package/.llm/digest/featurecards.md +8 -1
  130. package/.llm/digest/featurecardscarousel.md +1 -1
  131. package/.llm/digest/featurescroll.md +1 -1
  132. package/.llm/digest/featuresplit.md +1 -1
  133. package/.llm/digest/featurestack.md +1 -1
  134. package/.llm/digest/featuretabs.md +50 -0
  135. package/.llm/digest/filterchip.md +1 -1
  136. package/.llm/digest/footer.md +1 -1
  137. package/.llm/digest/footergroup.md +1 -1
  138. package/.llm/digest/grid.md +2 -1
  139. package/.llm/digest/icon.md +1 -1
  140. package/.llm/digest/illustrationcard.md +7 -2
  141. package/.llm/digest/illustrationcheck.md +42 -0
  142. package/.llm/digest/illustrationchoice.md +43 -0
  143. package/.llm/digest/illustrationcode.md +41 -0
  144. package/.llm/digest/illustrationlist.md +38 -0
  145. package/.llm/digest/illustrationscene.md +5 -3
  146. package/.llm/digest/imagebanner.md +11 -5
  147. package/.llm/digest/landinghero.md +1 -1
  148. package/.llm/digest/link.md +1 -1
  149. package/.llm/digest/logocolumns.md +2 -2
  150. package/.llm/digest/logorows.md +9 -2
  151. package/.llm/digest/menuitem.md +1 -1
  152. package/.llm/digest/navbar.md +1 -1
  153. package/.llm/digest/navbaritem.md +1 -1
  154. package/.llm/digest/navbarmenu.md +1 -1
  155. package/.llm/digest/navbarmenugroup.md +1 -1
  156. package/.llm/digest/navbarpanel.md +1 -1
  157. package/.llm/digest/navbarswitcher.md +1 -1
  158. package/.llm/digest/navbarswitcheroption.md +1 -1
  159. package/.llm/digest/option.md +1 -1
  160. package/.llm/digest/pageheader.md +1 -1
  161. package/.llm/digest/pagination.md +1 -1
  162. package/.llm/digest/paginationdots.md +1 -1
  163. package/.llm/digest/producthero.md +9 -3
  164. package/.llm/digest/progressbar.md +56 -0
  165. package/.llm/digest/removablechip.md +1 -1
  166. package/.llm/digest/resourcebanner.md +1 -1
  167. package/.llm/digest/row.md +1 -1
  168. package/.llm/digest/scenescroll.md +7 -6
  169. package/.llm/digest/scenescrollword.md +56 -0
  170. package/.llm/digest/scroller.md +1 -1
  171. package/.llm/digest/searchinput.md +1 -1
  172. package/.llm/digest/segmentedcontrol.md +4 -1
  173. package/.llm/digest/segmentedcontrolitem.md +2 -2
  174. package/.llm/digest/select.md +1 -1
  175. package/.llm/digest/selectchip.md +1 -1
  176. package/.llm/digest/spinner.md +1 -1
  177. package/.llm/digest/stack.md +1 -1
  178. package/.llm/digest/stats.md +9 -1
  179. package/.llm/digest/statscarousel.md +48 -0
  180. package/.llm/digest/statusdot.md +8 -1
  181. package/.llm/digest/steps.md +1 -1
  182. package/.llm/digest/stickycards.md +1 -1
  183. package/.llm/digest/subdomainnavbar.md +1 -1
  184. package/.llm/digest/tab.md +1 -1
  185. package/.llm/digest/table.md +1 -1
  186. package/.llm/digest/tablebody.md +1 -1
  187. package/.llm/digest/tablecell.md +1 -1
  188. package/.llm/digest/tablehead.md +1 -1
  189. package/.llm/digest/tableheadercell.md +1 -1
  190. package/.llm/digest/tablerow.md +1 -1
  191. package/.llm/digest/tablist.md +1 -1
  192. package/.llm/digest/teamgrid.md +1 -1
  193. package/.llm/digest/testimonialrow.md +9 -2
  194. package/.llm/digest/testimonialslider.md +2 -2
  195. package/.llm/digest/textarea.md +1 -1
  196. package/.llm/digest/textinput.md +1 -1
  197. package/.llm/digest/textscroll.md +1 -1
  198. package/.llm/digest/tiers.md +1 -1
  199. package/.llm/digest/typography.md +19 -1
  200. package/.llm/index.md +15 -4
  201. package/.llm/rules.md +10 -0
  202. package/.llm/tokens.md +13 -3
  203. package/AGENTS.md +14 -2
  204. package/README.md +28 -3
  205. package/dist/components/arrival.d.ts +32 -0
  206. package/dist/components/arrival.js +140 -0
  207. package/dist/components/arrives.d.ts +17 -0
  208. package/dist/components/arrives.js +14 -0
  209. package/dist/components/blocks/awards/Awards.js +2 -27
  210. package/dist/components/blocks/block-pattern.css +23 -0
  211. package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +29 -12
  212. package/dist/components/blocks/documents/Documents.css +90 -0
  213. package/dist/components/blocks/documents/Documents.d.ts +22 -0
  214. package/dist/components/blocks/documents/Documents.js +30 -0
  215. package/dist/components/blocks/documents/Documents.types.d.ts +37 -0
  216. package/dist/components/blocks/documents/Documents.types.js +14 -0
  217. package/dist/components/blocks/documents/documents-impl.css +103 -0
  218. package/dist/components/blocks/download-banner/DownloadBanner.css +1 -1
  219. package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +1 -1
  220. package/dist/components/blocks/estimator/Estimator.css +206 -0
  221. package/dist/components/blocks/estimator/Estimator.d.ts +27 -0
  222. package/dist/components/blocks/estimator/Estimator.js +61 -0
  223. package/dist/components/blocks/estimator/Estimator.types.d.ts +63 -0
  224. package/dist/components/blocks/estimator/Estimator.types.js +25 -0
  225. package/dist/components/blocks/estimator/estimator-impl.css +159 -0
  226. package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
  227. package/dist/components/blocks/feature-cards/FeatureCards.js +10 -7
  228. package/dist/components/blocks/feature-cards/FeatureCards.types.d.ts +9 -1
  229. package/dist/components/blocks/feature-cards/feature-cards-impl.css +15 -3
  230. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +1 -1
  231. package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +12 -0
  232. package/dist/components/blocks/feature-tabs/FeatureTabs.css +100 -0
  233. package/dist/components/blocks/feature-tabs/FeatureTabs.d.ts +23 -0
  234. package/dist/components/blocks/feature-tabs/FeatureTabs.js +38 -0
  235. package/dist/components/blocks/feature-tabs/FeatureTabs.types.d.ts +35 -0
  236. package/dist/components/blocks/feature-tabs/FeatureTabs.types.js +14 -0
  237. package/dist/components/blocks/feature-tabs/feature-tabs-impl.css +53 -0
  238. package/dist/components/blocks/image-banner/ImageBanner.css +1 -1
  239. package/dist/components/blocks/image-banner/ImageBanner.d.ts +2 -1
  240. package/dist/components/blocks/image-banner/ImageBanner.js +3 -2
  241. package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +10 -8
  242. package/dist/components/blocks/image-banner/ImageBanner.types.js +1 -1
  243. package/dist/components/blocks/image-banner/image-banner-impl.css +78 -71
  244. package/dist/components/blocks/laurel.d.ts +16 -0
  245. package/dist/components/blocks/laurel.js +28 -0
  246. package/dist/components/blocks/logo-columns/LogoColumns.css +1 -1
  247. package/dist/components/blocks/logo-columns/LogoColumns.types.d.ts +1 -1
  248. package/dist/components/blocks/logo-rows/LogoRows.css +1 -1
  249. package/dist/components/blocks/logo-rows/LogoRows.d.ts +2 -1
  250. package/dist/components/blocks/logo-rows/LogoRows.js +7 -4
  251. package/dist/components/blocks/logo-rows/LogoRows.types.d.ts +9 -1
  252. package/dist/components/blocks/pattern-tone.d.ts +11 -0
  253. package/dist/components/blocks/pattern-tone.js +7 -0
  254. package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
  255. package/dist/components/blocks/product-hero/ProductHero.js +2 -2
  256. package/dist/components/blocks/product-hero/ProductHero.types.d.ts +8 -3
  257. package/dist/components/blocks/product-hero/ProductHero.types.js +1 -1
  258. package/dist/components/blocks/product-hero/product-hero-impl.css +54 -0
  259. package/dist/components/blocks/resource-banner/ResourceBanner.css +1 -1
  260. package/dist/components/blocks/scene-scroll/SceneScroll.css +1 -1
  261. package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +6 -5
  262. package/dist/components/blocks/scene-scroll/SceneScroll.js +8 -7
  263. package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +5 -5
  264. package/dist/components/blocks/scene-scroll/SceneScroll.types.js +1 -1
  265. package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +61 -44
  266. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.css +105 -0
  267. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.d.ts +31 -0
  268. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.js +67 -0
  269. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.d.ts +39 -0
  270. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.js +18 -0
  271. package/dist/components/blocks/scene-scroll-word/scene-scroll-word-impl.css +370 -0
  272. package/dist/components/blocks/stats/Stats.d.ts +2 -1
  273. package/dist/components/blocks/stats/Stats.js +17 -14
  274. package/dist/components/blocks/stats/Stats.types.d.ts +8 -0
  275. package/dist/components/blocks/stats/stats-impl.css +4 -1
  276. package/dist/components/blocks/stats/use-wheel.d.ts +1 -1
  277. package/dist/components/blocks/stats/use-wheel.js +8 -4
  278. package/dist/components/blocks/stats-carousel/StatsCarousel.css +209 -0
  279. package/dist/components/blocks/stats-carousel/StatsCarousel.d.ts +20 -0
  280. package/dist/components/blocks/stats-carousel/StatsCarousel.js +48 -0
  281. package/dist/components/blocks/stats-carousel/StatsCarousel.types.d.ts +43 -0
  282. package/dist/components/blocks/stats-carousel/StatsCarousel.types.js +23 -0
  283. package/dist/components/blocks/stats-carousel/stats-carousel-impl.css +233 -0
  284. package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +8 -0
  285. package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -1
  286. package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +2 -1
  287. package/dist/components/blocks/testimonial-row/TestimonialRow.js +16 -13
  288. package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +9 -1
  289. package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -1
  290. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +1 -1
  291. package/dist/components/blocks/tiers/Tiers.types.d.ts +1 -1
  292. package/dist/components/core/background/Background.css +19 -0
  293. package/dist/components/core/background/Background.types.d.ts +2 -1
  294. package/dist/components/core/background/background-impl.css +47 -15
  295. package/dist/components/core/background/halftone.js +1 -1
  296. package/dist/components/core/button/Button.css +5 -5
  297. package/dist/components/core/button-icon/ButtonIcon.types.d.ts +1 -1
  298. package/dist/components/core/card-body/CardBody.css +5 -0
  299. package/dist/components/core/card-body/CardBody.types.d.ts +1 -1
  300. package/dist/components/core/document-link/DocumentLink.css +59 -0
  301. package/dist/components/core/document-link/DocumentLink.d.ts +19 -0
  302. package/dist/components/core/document-link/DocumentLink.js +21 -0
  303. package/dist/components/core/document-link/DocumentLink.types.d.ts +41 -0
  304. package/dist/components/core/document-link/DocumentLink.types.js +11 -0
  305. package/dist/components/core/document-link/document-link-impl.css +23 -0
  306. package/dist/components/core/illustration-card/IllustrationCard.css +7 -0
  307. package/dist/components/core/illustration-card/IllustrationCard.d.ts +5 -1
  308. package/dist/components/core/illustration-card/IllustrationCard.js +34 -8
  309. package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +8 -1
  310. package/dist/components/core/illustration-card/IllustrationCard.types.js +1 -0
  311. package/dist/components/core/illustration-card/illustration-card-impl.css +113 -0
  312. package/dist/components/core/illustration-check/IllustrationCheck.css +25 -0
  313. package/dist/components/core/illustration-check/IllustrationCheck.d.ts +16 -0
  314. package/dist/components/core/illustration-check/IllustrationCheck.js +22 -0
  315. package/dist/components/core/illustration-check/IllustrationCheck.types.d.ts +25 -0
  316. package/dist/components/core/illustration-check/IllustrationCheck.types.js +9 -0
  317. package/dist/components/core/illustration-check/illustration-check-impl.css +76 -0
  318. package/dist/components/core/illustration-choice/IllustrationChoice.css +62 -0
  319. package/dist/components/core/illustration-choice/IllustrationChoice.d.ts +16 -0
  320. package/dist/components/core/illustration-choice/IllustrationChoice.js +31 -0
  321. package/dist/components/core/illustration-choice/IllustrationChoice.types.d.ts +25 -0
  322. package/dist/components/core/illustration-choice/IllustrationChoice.types.js +11 -0
  323. package/dist/components/core/illustration-choice/illustration-choice-impl.css +103 -0
  324. package/dist/components/core/illustration-code/IllustrationCode.css +25 -0
  325. package/dist/components/core/illustration-code/IllustrationCode.d.ts +12 -0
  326. package/dist/components/core/illustration-code/IllustrationCode.js +20 -0
  327. package/dist/components/core/illustration-code/IllustrationCode.types.d.ts +23 -0
  328. package/dist/components/core/illustration-code/IllustrationCode.types.js +8 -0
  329. package/dist/components/core/illustration-code/illustration-code-impl.css +42 -0
  330. package/dist/components/core/illustration-list/IllustrationList.css +19 -0
  331. package/dist/components/core/illustration-list/IllustrationList.d.ts +16 -0
  332. package/dist/components/core/illustration-list/IllustrationList.js +18 -0
  333. package/dist/components/core/illustration-list/IllustrationList.types.d.ts +15 -0
  334. package/dist/components/core/illustration-list/IllustrationList.types.js +6 -0
  335. package/dist/components/core/illustration-list/illustration-list-impl.css +52 -0
  336. package/dist/components/core/illustration-scene/IllustrationScene.css +6 -0
  337. package/dist/components/core/illustration-scene/IllustrationScene.d.ts +3 -2
  338. package/dist/components/core/illustration-scene/IllustrationScene.js +4 -3
  339. package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +5 -1
  340. package/dist/components/core/illustration-scene/IllustrationScene.types.js +2 -1
  341. package/dist/components/core/illustration-scene/illustration-scene-impl.css +65 -0
  342. package/dist/components/core/link/link-impl.css +5 -19
  343. package/dist/components/core/progress-bar/ProgressBar.css +101 -0
  344. package/dist/components/core/progress-bar/ProgressBar.d.ts +5 -0
  345. package/dist/components/core/progress-bar/ProgressBar.js +34 -0
  346. package/dist/components/core/progress-bar/ProgressBar.types.d.ts +52 -0
  347. package/dist/components/core/progress-bar/ProgressBar.types.js +12 -0
  348. package/dist/components/core/progress-bar/progress-bar-impl.css +45 -0
  349. package/dist/components/core/segmented-control/SegmentedControl.d.ts +1 -1
  350. package/dist/components/core/segmented-control/SegmentedControl.js +13 -5
  351. package/dist/components/core/segmented-control/SegmentedControl.types.d.ts +5 -1
  352. package/dist/components/core/segmented-control/segmented-control-impl.css +35 -0
  353. package/dist/components/core/segmented-control-item/SegmentedControlItem.types.d.ts +1 -1
  354. package/dist/components/core/select/Select.css +2 -0
  355. package/dist/components/core/select/select-impl.css +58 -0
  356. package/dist/components/core/status-dot/StatusDot.d.ts +1 -1
  357. package/dist/components/core/status-dot/StatusDot.js +7 -4
  358. package/dist/components/core/status-dot/StatusDot.types.d.ts +9 -1
  359. package/dist/components/core/status-dot/status-dot-impl.css +101 -0
  360. package/dist/components/core/text-area/TextArea.css +2 -0
  361. package/dist/components/core/text-area/text-area-impl.css +54 -0
  362. package/dist/components/core/text-input/TextInput.css +2 -0
  363. package/dist/components/core/text-input/text-input-impl.css +63 -0
  364. package/dist/components/core/typography/Typography.d.ts +3 -283
  365. package/dist/components/core/typography/Typography.js +9 -1
  366. package/dist/components/core/typography/Typography.types.d.ts +9 -15
  367. package/dist/components/core/typography/TypographyMotion.d.ts +28 -0
  368. package/dist/components/core/typography/TypographyMotion.js +43 -0
  369. package/dist/components/core/typography/typography-impl.css +106 -0
  370. package/dist/components/estimator-data.d.ts +29 -0
  371. package/dist/components/estimator-data.js +12 -0
  372. package/dist/components/illustration-data.d.ts +15 -0
  373. package/dist/components/illustration-data.js +7 -0
  374. package/dist/components/index.d.ts +25 -1
  375. package/dist/components/index.js +22 -0
  376. package/dist/components/layout/grid/Grid.css +5 -0
  377. package/dist/components/layout/grid/Grid.types.d.ts +2 -1
  378. package/dist/components/scene-scroll-data.d.ts +35 -0
  379. package/dist/components/tiers-data.d.ts +3 -2
  380. package/dist/icons/accounts.d.ts +1 -0
  381. package/dist/icons/accounts.js +1 -0
  382. package/dist/icons/app-stores.d.ts +1 -0
  383. package/dist/icons/app-stores.js +1 -0
  384. package/dist/icons/currency.d.ts +1 -0
  385. package/dist/icons/currency.js +1 -0
  386. package/dist/icons/flag.d.ts +1 -0
  387. package/dist/icons/flag.js +1 -0
  388. package/dist/icons/illustrative.d.ts +1 -0
  389. package/dist/icons/illustrative.js +1 -0
  390. package/dist/icons/index.d.ts +1 -0
  391. package/dist/icons/index.js +4 -0
  392. package/dist/icons/markets.d.ts +1 -0
  393. package/dist/icons/markets.js +1 -0
  394. package/dist/icons/social.d.ts +1 -0
  395. package/dist/icons/social.js +1 -0
  396. package/dist/icons/system.d.ts +1 -0
  397. package/dist/icons/system.js +1 -0
  398. package/dist/icons/trade.d.ts +1 -0
  399. package/dist/icons/trade.js +1 -0
  400. package/dist/marketing.css +26 -6
  401. package/package.json +44 -2
@@ -5,11 +5,14 @@ import { ChevronLeftRegularIcon, ChevronRightRegularIcon, StarSolidIcon } from "
5
5
  import "./TestimonialRow.css";
6
6
  import "./testimonial-row-impl.css";
7
7
  import "../block-reveal.css";
8
+ import "../block-pattern.css";
8
9
  import { given } from "../../given.js";
9
10
  import { ButtonIcon } from "../../core/button-icon/ButtonIcon.js";
10
11
  import { Link } from "../../core/link/Link.js";
11
12
  import { visuallyHidden } from "../../visually-hidden.js";
12
13
  import { arriving, useReveal } from "../use-reveal.js";
14
+ import { Background } from "../../core/background/Background.js";
15
+ import { PATTERN_TONE } from "../pattern-tone.js";
13
16
  import { testimonialRowDefaults, testimonialRowParts, } from "./TestimonialRow.types.js";
14
17
  /**
15
18
  * Five stars, filled to a score out of five.
@@ -46,7 +49,7 @@ const AT_END = 2;
46
49
  * `'use client'` for the row's scroll position, the arrival, and `useId`, which names the region
47
50
  * by its heading.
48
51
  */
49
- export function TestimonialRow({ ground = testimonialRowDefaults.ground, title, reviews, summary, ratingLabel, label = testimonialRowDefaults.label, externalLabel = testimonialRowDefaults.externalLabel, previousLabel = testimonialRowDefaults.previousLabel, nextLabel = testimonialRowDefaults.nextLabel, }) {
52
+ export function TestimonialRow({ ground = testimonialRowDefaults.ground, background, title, reviews, summary, ratingLabel, label = testimonialRowDefaults.label, externalLabel = testimonialRowDefaults.externalLabel, previousLabel = testimonialRowDefaults.previousLabel, nextLabel = testimonialRowDefaults.nextLabel, }) {
50
53
  const titleId = useId();
51
54
  const [band, revealed] = useReveal();
52
55
  const row = useRef(null);
@@ -114,16 +117,16 @@ export function TestimonialRow({ ground = testimonialRowDefaults.ground, title,
114
117
  const scrolls = ends.back || ends.on;
115
118
  // Button's secondary, as a circle; on the dark band its inverse tone turns the tint white.
116
119
  const arrow = { variant: "secondary", tone: ground === "strong" ? "inverse" : "default" };
117
- return (_jsx("section", { className: testimonialRowParts.root, "data-ground": ground, "aria-labelledby": titleId, children: _jsxs("div", { className: testimonialRowParts.inner, ref: band, "data-revealed": revealed, children: [_jsxs("div", { className: testimonialRowParts.header, children: [_jsx("h2", { className: testimonialRowParts.title, id: titleId, ...arriving(0), children: title }), summary === undefined ? null : (_jsx("p", { className: testimonialRowParts.summary, ...arriving(1), children: summary.href !== undefined && given(summary.href) ? (
118
- // A link on its own line, so the standalone one: brand ink and a mark. On the dark
119
- // band it takes the band's ink, where coral is the wrong colour for words.
120
- _jsxs(Link, { variant: "standalone", tone: ground === "strong" ? "inherit" : "brand", external: true, href: summary.href, children: [summary.label, _jsx("span", { style: visuallyHidden, children: ` ${externalLabel}` })] })) : (_jsx("span", { children: summary.label })) }))] }), _jsxs("div", { className: testimonialRowParts.carousel, children: [_jsx("div", { ref: row, className: testimonialRowParts.track, role: "group", "aria-label": label, tabIndex: 0, onScroll: read, ...arriving(2), children: reviews.map((each, at) => {
121
- // A review's position is its identity: the set is a list, and nothing reorders it.
122
- const card = (_jsxs("figure", { className: testimonialRowParts.item, children: [each.rating === undefined ? null : (
123
- // Named by the score it is drawn at, so a 4.3 is heard as the 4.5 a reader
124
- // sees rather than as a number the stars do not show.
125
- _jsx(Rating, { score: each.rating, label: ratingLabel?.(toHalves(each.rating)) ?? `Rated ${toHalves(each.rating)} out of 5` })), _jsx("blockquote", { className: testimonialRowParts.quote, children: each.quote }), _jsx("figcaption", { className: testimonialRowParts.author, children: _jsxs("span", { children: [_jsx("span", { className: testimonialRowParts.name, children: each.name }), given(each.detail) ? (_jsx("span", { className: testimonialRowParts.detail, children: each.detail })) : null] }) })] }, at));
126
- // The review is on a service the page does not own, so it opens beside the page.
127
- return given(each.href) ? (_jsxs("a", { className: testimonialRowParts["review-link"], href: each.href, target: "_blank", rel: "noopener noreferrer", children: [card, _jsx("span", { style: visuallyHidden, children: ` ${externalLabel}` })] }, at)) : (card);
128
- }) }), reviews.length > 1 ? (_jsx("div", { className: testimonialRowParts.footer, ...arriving(3), children: _jsxs("div", { className: testimonialRowParts.nav, hidden: !scrolls, children: [_jsx("span", { ref: back, className: testimonialRowParts["nav-slot"], "data-available": ends.back, inert: !ends.back, children: _jsx(ButtonIcon, { icon: _jsx(ChevronLeftRegularIcon, {}), label: previousLabel, ...arrow, onClick: () => step(-1) }) }), _jsx("span", { ref: on, className: testimonialRowParts["nav-slot"], "data-available": ends.on, inert: !ends.on, children: _jsx(ButtonIcon, { icon: _jsx(ChevronRightRegularIcon, {}), label: nextLabel, ...arrow, onClick: () => step(1) }) })] }) })) : null] })] }) }));
120
+ return (_jsxs("section", { className: testimonialRowParts.root, "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: testimonialRowParts.inner, ref: band, "data-revealed": revealed, children: [_jsxs("div", { className: testimonialRowParts.header, children: [_jsx("h2", { className: testimonialRowParts.title, id: titleId, ...arriving(0), children: title }), summary === undefined ? null : (_jsx("p", { className: testimonialRowParts.summary, ...arriving(1), children: summary.href !== undefined && given(summary.href) ? (
121
+ // A link on its own line, so the standalone one: brand ink and a mark. On the dark
122
+ // band it takes the band's ink, where coral is the wrong colour for words.
123
+ _jsxs(Link, { variant: "standalone", tone: ground === "strong" ? "inherit" : "brand", external: true, href: summary.href, children: [summary.label, _jsx("span", { style: visuallyHidden, children: ` ${externalLabel}` })] })) : (_jsx("span", { children: summary.label })) }))] }), _jsxs("div", { className: testimonialRowParts.carousel, children: [_jsx("div", { ref: row, className: testimonialRowParts.track, role: "group", "aria-label": label, tabIndex: 0, onScroll: read, ...arriving(2), children: reviews.map((each, at) => {
124
+ // A review's position is its identity: the set is a list, and nothing reorders it.
125
+ const card = (_jsxs("figure", { className: testimonialRowParts.item, children: [each.rating === undefined ? null : (
126
+ // Named by the score it is drawn at, so a 4.3 is heard as the 4.5 a reader
127
+ // sees rather than as a number the stars do not show.
128
+ _jsx(Rating, { score: each.rating, label: ratingLabel?.(toHalves(each.rating)) ?? `Rated ${toHalves(each.rating)} out of 5` })), _jsx("blockquote", { className: testimonialRowParts.quote, children: each.quote }), _jsx("figcaption", { className: testimonialRowParts.author, children: _jsxs("span", { children: [_jsx("span", { className: testimonialRowParts.name, children: each.name }), given(each.detail) ? (_jsx("span", { className: testimonialRowParts.detail, children: each.detail })) : null] }) })] }, at));
129
+ // The review is on a service the page does not own, so it opens beside the page.
130
+ return given(each.href) ? (_jsxs("a", { className: testimonialRowParts["review-link"], href: each.href, target: "_blank", rel: "noopener noreferrer", children: [card, _jsx("span", { style: visuallyHidden, children: ` ${externalLabel}` })] }, at)) : (card);
131
+ }) }), reviews.length > 1 ? (_jsx("div", { className: testimonialRowParts.footer, ...arriving(3), children: _jsxs("div", { className: testimonialRowParts.nav, hidden: !scrolls, children: [_jsx("span", { ref: back, className: testimonialRowParts["nav-slot"], "data-available": ends.back, inert: !ends.back, children: _jsx(ButtonIcon, { icon: _jsx(ChevronLeftRegularIcon, {}), label: previousLabel, ...arrow, onClick: () => step(-1) }) }), _jsx("span", { ref: on, className: testimonialRowParts["nav-slot"], "data-available": ends.on, inert: !ends.on, children: _jsx(ButtonIcon, { icon: _jsx(ChevronRightRegularIcon, {}), label: nextLabel, ...arrow, onClick: () => step(1) }) })] }) })) : null] })] })] }));
129
132
  }
@@ -3,9 +3,17 @@ export interface TestimonialRowOwnProps {
3
3
  /**
4
4
  * `page` — The default, and the page's own white. The cards are the recessed gray that sets them off
5
5
  * `subtle` — The grey band, the reference design's ground for this section. The cards turn white on it. Painted as the band's tint laid over the page's own ground, so it is the same grey whatever is behind the section
6
- * `strong` — `color.bg.brand-strong`, the dark band, for a section a reader should arrive at. The heading, the summary and the cards' words turn white, and the cards take color.bg.surface-card-strong — gray.900 in both themes, the colour a page card takes in dark mode — so the band reads as a dark-mode section in either theme. The arrows take ButtonIcon's inverse tone
6
+ * `strong` — `color.bg.brand-strong`, the dark band, for a section a reader should arrive at. The heading, the summary and the cards' words turn white, and the cards take color.bg.surface-card-strong-on-brand-strong — slate.850 in light and slate.900 in dark, a step above the band in both, a step lighter than the band — so the band reads as a dark-mode section in either theme. The arrows take ButtonIcon's inverse tone
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. Whose reviews these are, in a few words — "What our customers say". */
10
18
  title: string;
11
19
  /** Always. The reviews, in the order they run along the row — five to ten of a sentence or two, each with the reviewer's name, its `rating` and, where there is one, the `href` of the review itself. An empty list draws nothing. */
@@ -157,7 +157,7 @@
157
157
  }
158
158
 
159
159
  :where([data-dds-context="marketing"]) .dds-testimonialslider[data-ground="strong"] .dds-testimonialslider__item {
160
- background-color: var(--color-bg-surface-card-strong);
160
+ background-color: var(--color-bg-surface-card-strong-on-brand-strong);
161
161
  color: var(--color-fg-on-brand-strong);
162
162
  }
163
163
 
@@ -3,7 +3,7 @@ export interface TestimonialSliderOwnProps {
3
3
  /**
4
4
  * `page` — The default, and the page's own white. The card is the recessed gray that sets it off
5
5
  * `subtle` — The grey band, the reference design's ground for this section. The card turns white on it. Painted as the band's tint laid over the page's own ground, so it is the same grey whatever is behind the section
6
- * `strong` — `color.bg.brand-strong`, the dark band, for a section a reader should arrive at. The heading and the quote turn white and the card takes color.bg.surface-card-strong — gray.900 in both themes, the colour a page card takes in dark mode, and TestimonialRow's card on the same band — so the band reads as a dark-mode section in either theme. The coral dots sit on it
6
+ * `strong` — `color.bg.brand-strong`, the dark band, for a section a reader should arrive at. The heading and the quote turn white and the card takes color.bg.surface-card-strong-on-brand-strong — slate.850 in light and slate.900 in dark, a step above the band in both, a step lighter than the band, and TestimonialRow's card on the same band — so the band reads as a dark-mode section in either theme. The coral dots sit on it
7
7
  */
8
8
  ground?: 'page' | 'subtle' | 'strong';
9
9
  /** Always. Whose words these are, in a few — "What our partners say", "What our customers say". */
@@ -11,7 +11,7 @@ export interface TiersOwnProps {
11
11
  title: string;
12
12
  /** A line saying how the tiers work, when the title alone does not — 'Our tiered partnership model rewards performance.' */
13
13
  description?: string;
14
- /** Always. The tiers, lowest first — two to four, four for a partnership programme. Each is a one-word `name`, a one-verb `stage`, a `medal` picture, a `benefit` headline and the sentence under it, and — on every tier above the entry one — the `qualification` that reaches it, with a line break before the amount. The order of the list is the order of the ladder, so reordering it reorders the tiers. */
14
+ /** Always. The tiers, lowest first — two to four, four for a partnership programme. Each is a one-word `name`, a one-verb `stage`, a `medal` picture, a `benefit` headline and the sentence under it, and the `qualification` that reaches it, with a line break before the amount — the entry tier's too, saying what it takes to join, so every tier's card has the same line under it. The order of the list is the order of the ladder, so reordering it reorders the tiers. */
15
15
  tiers: TiersItem[];
16
16
  /** A way on to the programme's full terms — 'Learn more about partner tiers'. A standalone Link, under the row. */
17
17
  link?: ReactNode;
@@ -85,6 +85,25 @@
85
85
  background-color: var(--color-bg-page);
86
86
  }
87
87
 
88
+ :where([data-dds-context="marketing"]) .dds-background[data-tone="subtle"] {
89
+ background-color: var(--color-bg-page);
90
+ background-image: linear-gradient(var(--color-bg-band-subtle), var(--color-bg-band-subtle));
91
+ }
92
+
93
+ :where([data-dds-context="marketing"]) .dds-background[data-tone="subtle"] .dds-background__canvas {
94
+ color: var(--color-bg-brand);
95
+ outline-color: var(--color-bg-brand);
96
+ }
97
+
98
+ :where([data-dds-context="marketing"]) .dds-background[data-tone="subtle"] .dds-background__content {
99
+ color: var(--color-fg-default);
100
+ }
101
+
102
+ :where([data-dds-context="marketing"]) .dds-background[data-tone="subtle"] .dds-background__mesh {
103
+ background-color: var(--color-bg-page);
104
+ background-image: linear-gradient(var(--color-bg-band-subtle), var(--color-bg-band-subtle));
105
+ }
106
+
88
107
  @media (prefers-reduced-motion: reduce) {
89
108
  :where([data-dds-context="marketing"]) .dds-background,
90
109
  :where([data-dds-context="marketing"]) .dds-background * { transition: none !important; }
@@ -3,9 +3,10 @@ export interface BackgroundOwnProps {
3
3
  /**
4
4
  * `dark` — The band the halftone was drawn for: coral dots glowing on color.bg.brand-strong, which is dark in both modes. Reach for it for the band a page opens or closes on, where the glow gives the band a centre
5
5
  * `light` — Coral dots on the page's own ground, for a light page that wants one moment of brand colour without a solid coral band. The glow reads as warmth rather than light, so keep it for a section that is not competing with a dark one nearby
6
+ * `subtle` — The light pattern on the subtle band's grey — color.bg.band-subtle laid over the page, the grey a block's `ground="subtle"` paints — for a block that carries a pattern on that ground. The same coral as the light tone; only the ground under it is the band's grey rather than the page's white.
6
7
  * `brand` — The default: the brand's own coral, the ground the mesh was made for and the one a call to action stands on. White dots on it for the halftone. The heading is white too, and the glow rises from the foot of the band towards it, so check the words read on the coral alone — the pattern can only add to what is behind them
7
8
  */
8
- tone?: 'dark' | 'light' | 'brand';
9
+ tone?: 'dark' | 'light' | 'subtle' | 'brand';
9
10
  /**
10
11
  * `halftone` — A grid of dots across the whole band that grow towards a soft glow and settle to a fine screen away from it, over a faint wash of their own ink. The glow's edge wanders from a plain ellipse as it drifts, so it reads as light on a surface rather than a spotlight. The default, and the one that moves most
11
12
  * `aurora` — Curtains of light rising from the band's foot: sheets of the brand's colour swaying and folding, with a ragged crest and fine rays running up through them — light falling through folds rather than pools of colour. Drawn by a shader with a grain over it; before it has drawn, and where it cannot, soft pools of the same colour painted by the stylesheet. At rest the curtains sway over motion.duration.drift; on an interactive band the pointer bends them towards it and brightens them. Reach for it where the halftone would be too busy — an opening band with a picture or a product on it, where dots behind the picture fight it and a wash of light does not
@@ -33,6 +33,29 @@
33
33
  position: relative;
34
34
  }
35
35
 
36
+ /*
37
+ * The ground a light pattern is drawn on, as one solid colour: the page's own on the light tone, and
38
+ * the subtle band's grey on the subtle tone, so a block on its grey band can carry a pattern without
39
+ * the band turning white under it.
40
+ *
41
+ * The patterns are drawn by shaders that take their ground as one opaque colour, and the subtle band
42
+ * is a tint laid over the page — gray.50 in light mode, which is already solid, and white at six over
43
+ * the near-black page in dark mode, which is not. So in dark mode the grey is mixed out solid: the
44
+ * band's white at its own six percent into the page, which is the colour the tint comes to.
45
+ */
46
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='light'] {
47
+ --dds-background-ground: var(--color-bg-page);
48
+ }
49
+
50
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='subtle'] {
51
+ --dds-background-ground: var(--color-bg-band-subtle);
52
+ }
53
+
54
+ :where([data-theme='dark']) :where([data-dds-context="marketing"]) .dds-background[data-tone='subtle'],
55
+ :where([data-dds-context="marketing"][data-theme='dark']) .dds-background[data-tone='subtle'] {
56
+ --dds-background-ground: color-mix(in srgb, var(--color-fg-on-brand-strong) 6%, var(--color-bg-page));
57
+ }
58
+
36
59
  /*
37
60
  * A Background with nothing to hold is a layer: it fills the band it is placed in, behind that
38
61
  * band's own content, which is how a block draws the pattern under itself without its layout
@@ -85,9 +108,9 @@
85
108
  * and the aurora's pools are there: a third of color.bg.brand, about as strong as the grey it
86
109
  * replaces, so the grid stays quiet but reads as the brand's. It lights up to the full coral.
87
110
  */
88
- :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='light'] {
111
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']):is([data-tone='light'], [data-tone='subtle']) {
89
112
  --dds-background-rule: color-mix(in srgb, var(--color-bg-brand) 35%, transparent);
90
- --dds-background-fade: var(--color-bg-page);
113
+ --dds-background-fade: var(--dds-background-ground);
91
114
  }
92
115
 
93
116
  /*
@@ -130,6 +153,15 @@
130
153
  left calc(var(--dds-background-shift, 0%) * -1);
131
154
  }
132
155
 
156
+ /*
157
+ * On the subtle tone the band's tint is the root's background-image, which the grid's and the
158
+ * rings' own images replace — so the band would fall to the page's white under them, in the frame
159
+ * before the shader draws or wherever it cannot. The ground goes under them as a colour instead.
160
+ */
161
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='subtle']:is([data-pattern='grid'], [data-pattern='rings']) {
162
+ background-color: var(--dds-background-ground);
163
+ }
164
+
133
165
  /*
134
166
  * The rings: circles at size.rings.pitch, centred on the middle of the band's foot, so they spread
135
167
  * up and out from where the halftone's glow would rest.
@@ -220,7 +252,7 @@
220
252
  background-image: var(--dds-background-rings);
221
253
  }
222
254
 
223
- :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='light']::before {
255
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']):is([data-tone='light'], [data-tone='subtle'])::before {
224
256
  --dds-background-lit: var(--color-bg-brand);
225
257
  }
226
258
 
@@ -266,7 +298,7 @@
266
298
  --dds-background-hover: 0.25;
267
299
  }
268
300
 
269
- :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='light'] {
301
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']:is([data-tone='light'], [data-tone='subtle']) {
270
302
  --dds-background-pool-deep: var(--color-bg-brand-hover);
271
303
  --dds-background-strength: 0.22;
272
304
  --dds-background-hover: 0.3;
@@ -475,7 +507,7 @@
475
507
  --dds-background-mesh-strength: 0.6;
476
508
  }
477
509
 
478
- :where([data-dds-context="marketing"]) .dds-background[data-tone='light'] .dds-background__mesh {
510
+ :where([data-dds-context="marketing"]) .dds-background:is([data-tone='light'], [data-tone='subtle']) .dds-background__mesh {
479
511
  --dds-background-mesh-1: var(--color-bg-brand-subtle);
480
512
  --dds-background-mesh-2: var(--color-bg-brand);
481
513
  --dds-background-mesh-3: var(--color-bg-brand-subtle);
@@ -620,7 +652,7 @@
620
652
  --dds-background-gl-grain: 0.05;
621
653
  }
622
654
 
623
- :where([data-dds-context="marketing"]) .dds-background[data-tone='light'] {
655
+ :where([data-dds-context="marketing"]) .dds-background:is([data-tone='light'], [data-tone='subtle']) {
624
656
  --dds-background-gl-grain: 0.025;
625
657
  }
626
658
 
@@ -654,11 +686,11 @@
654
686
  --dds-background-gl-strength: 0.85;
655
687
  }
656
688
 
657
- :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='light'] {
658
- --dds-background-gl-ink0: var(--color-bg-page);
689
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']:is([data-tone='light'], [data-tone='subtle']) {
690
+ --dds-background-gl-ink0: var(--dds-background-ground);
659
691
  --dds-background-gl-ink1: var(--color-bg-brand);
660
692
  --dds-background-gl-ink2: var(--color-bg-brand-hover);
661
- --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 50%, var(--color-bg-page));
693
+ --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 50%, var(--dds-background-ground));
662
694
  --dds-background-gl-strength: 0.35;
663
695
  }
664
696
 
@@ -689,8 +721,8 @@
689
721
  --dds-background-gl-strength: 0.35;
690
722
  }
691
723
 
692
- :where([data-dds-context="marketing"]) .dds-background[data-pattern='mesh'][data-tone='light'] {
693
- --dds-background-gl-ink0: var(--color-bg-page);
724
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='mesh']:is([data-tone='light'], [data-tone='subtle']) {
725
+ --dds-background-gl-ink0: var(--dds-background-ground);
694
726
  --dds-background-gl-ink1: var(--color-bg-brand-subtle);
695
727
  --dds-background-gl-ink2: var(--color-bg-brand);
696
728
  --dds-background-gl-ink3: var(--color-bg-brand-subtle);
@@ -730,11 +762,11 @@
730
762
  --dds-background-gl-ink3: var(--color-bg-brand-deep);
731
763
  }
732
764
 
733
- :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='light'] {
734
- --dds-background-gl-ink0: var(--color-bg-page);
735
- --dds-background-gl-ink1: color-mix(in srgb, var(--color-bg-brand) 28%, var(--color-bg-page));
765
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']):is([data-tone='light'], [data-tone='subtle']) {
766
+ --dds-background-gl-ink0: var(--dds-background-ground);
767
+ --dds-background-gl-ink1: color-mix(in srgb, var(--color-bg-brand) 28%, var(--dds-background-ground));
736
768
  --dds-background-gl-ink2: var(--color-bg-brand);
737
- --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 12%, var(--color-bg-page));
769
+ --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 12%, var(--dds-background-ground));
738
770
  }
739
771
 
740
772
  /*
@@ -37,7 +37,7 @@
37
37
  * the glow's heart outshone the words standing on it. The light and the coral grounds keep most of
38
38
  * theirs, where the dots are closer to the ground they sit on.
39
39
  */
40
- const OPACITY = { dark: 0.55, light: 0.85, brand: 0.85 };
40
+ const OPACITY = { dark: 0.55, light: 0.85, subtle: 0.85, brand: 0.85 };
41
41
  const SETTINGS = {
42
42
  // A third opaque at the faintest: the edge of the glow is a dim field of dots rather than a
43
43
  // fade to nothing, so the pattern reaches the band's edges without competing with its heart.
@@ -136,16 +136,16 @@
136
136
  }
137
137
 
138
138
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="brand"] {
139
- background-color: var(--color-bg-subtle-on-brand-strong);
139
+ border-color: var(--color-border-strong-inverse);
140
140
  color: var(--color-fg-on-brand-strong);
141
141
  }
142
142
 
143
143
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="default"] {
144
- background-color: var(--color-bg-subtle);
144
+ border-color: var(--color-border-strong);
145
145
  }
146
146
 
147
147
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="inverse"] {
148
- background-color: var(--color-bg-subtle-on-brand-strong);
148
+ border-color: var(--color-border-strong-inverse);
149
149
  color: var(--color-fg-on-brand-strong);
150
150
  }
151
151
 
@@ -158,7 +158,7 @@
158
158
  }
159
159
 
160
160
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="default"]:hover:where(:not(:disabled)) {
161
- background-image: linear-gradient(var(--color-bg-hover), var(--color-bg-hover));
161
+ background-color: var(--color-bg-hover);
162
162
  }
163
163
 
164
164
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="inverse"]:hover:where(:not(:disabled)) {
@@ -174,7 +174,7 @@
174
174
  }
175
175
 
176
176
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="default"]:active {
177
- background-image: linear-gradient(var(--color-bg-active), var(--color-bg-active));
177
+ background-color: var(--color-bg-active);
178
178
  }
179
179
 
180
180
  :where([data-dds-context="marketing"]) .dds-button[data-variant="secondary"][data-tone="inverse"]:active {
@@ -15,7 +15,7 @@ export interface ButtonIconOwnProps {
15
15
  size?: 'sm' | 'md' | 'lg';
16
16
  /**
17
17
  * `default` — The control is on a light ground, which is every surface this package paints by default
18
- * `inverse` — The control stands on the dark band, color.bg.brand-strong — a mark in a navigation bar on a hero, a social mark in a footer — which is the same near-black in light and dark. The ink and the tints move to the band's fixed roles; nothing else does
18
+ * `inverse` — The control stands on the dark band, color.bg.brand-strong — a mark in a navigation bar on a hero, a social mark in a footer — which is near-black in light and dark alike — slate.900 in light, a step deeper in dark. The ink and the tints move to the band's fixed roles; nothing else does
19
19
  */
20
20
  tone?: 'default' | 'inverse';
21
21
  /** Always — the glyph is the whole control, so it is required rather than a slot that may be empty. Pass the glyph itself, from the icon package, rather than one already sized: the size a mark takes in this circle is this component's decision, at icon.control.md on md and icon.control.lg on lg, and the width and height the glyph shipped with are overridden by the class this component clones onto it. */
@@ -70,6 +70,7 @@
70
70
  }
71
71
 
72
72
  :where([data-dds-context="marketing"]) .dds-cardbody .dds-cardbody__media-frame {
73
+ transition-property: border-radius;
73
74
  display: block;
74
75
  flex: auto;
75
76
  min-block-size: 0;
@@ -120,6 +121,10 @@
120
121
  line-height: var(--font-label-md-line-height);
121
122
  }
122
123
 
124
+ :where([data-dds-context="marketing"]) .dds-cardbody[data-flush="true"] .dds-cardbody__media-frame {
125
+ border-radius: var(--radius-container);
126
+ }
127
+
123
128
  :where([data-dds-context="marketing"]) .dds-cardbody[data-over-media="false"] .dds-cardbody__eyebrow {
124
129
  color: var(--color-fg-muted);
125
130
  }
@@ -2,7 +2,7 @@ import type { HTMLAttributes, ReactNode } from 'react';
2
2
  export interface CardBodyOwnProps {
3
3
  /** The picture is the card's ground and the copy is read on top of it. Set explicitly rather than inferred from src, which BannerBody can afford to do and this cannot: there, art is always behind the words, so having art and being over it are the same fact. Here a picture is a region in the column by default, and the same src means two different cards */
4
4
  overMedia?: boolean;
5
- /** The card has no fill for the copy to be held off — Card's `plain` variant, where the picture is the card's edge rather than the ground being it. The inline inset goes and the copy lines up with the picture above it; the block padding stays, because the space between a picture and the line under it is still doing its job */
5
+ /** The card has no fill for the copy to be held off — Card's `plain` variant, where the picture is the card's edge rather than the ground being it. The inline inset goes and the copy lines up with the picture above it; the block padding stays, because the space between a picture and the line under it is still doing its job. The picture takes the corners every contained picture in the blocks has, since with no fill around it the picture is the card's shape */
6
6
  flush?: boolean;
7
7
  /** The card is pressable and its picture is what answers the pointer — an editorial card inside a CardButton, on any ground. The picture grows by motion.scale.media-hover and media-frame clips it, so what the reader sees is the frame holding still while the art moves inside it. Setting this is also what stops the card lifting: CardButton suppresses its own lift when the body it holds zooms, so the two motions never compete */
8
8
  zoomOnHover?: boolean;
@@ -0,0 +1,59 @@
1
+ /* GENERATED from documentlink.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-documentlink {
4
+ align-items: center;
5
+ box-sizing: border-box;
6
+ display: flex;
7
+ flex-wrap: wrap;
8
+ justify-content: space-between;
9
+ min-inline-size: 0;
10
+ overflow-wrap: anywhere;
11
+ row-gap: 0;
12
+ column-gap: var(--space-gap-md);
13
+ }
14
+
15
+ :where([data-dds-context="marketing"]) .dds-documentlink .dds-documentlink__link {
16
+ align-items: center;
17
+ color: inherit;
18
+ display: inline-flex;
19
+ min-inline-size: 0;
20
+ text-decoration-line: none;
21
+ column-gap: var(--space-gap-sm);
22
+ }
23
+
24
+ :where([data-dds-context="marketing"]) .dds-documentlink .dds-documentlink__mark {
25
+ display: inline-flex;
26
+ flex: none;
27
+ }
28
+
29
+ :where([data-dds-context="marketing"]) .dds-documentlink .dds-documentlink__action {
30
+ display: flex;
31
+ flex: none;
32
+ }
33
+
34
+ :where([data-dds-context="marketing"]) .dds-documentlink[data-variant="chip"] {
35
+ background-color: var(--color-bg-surface-card-raised);
36
+ border-color: var(--color-border-subtle);
37
+ border-radius: var(--radius-surface);
38
+ border-width: var(--border-width-hairline);
39
+ color: var(--color-fg-default);
40
+ padding-block: var(--space-inset-sm);
41
+ padding-inline: var(--space-inset-md);
42
+ }
43
+
44
+ :where([data-dds-context="marketing"]) .dds-documentlink[data-variant="chip"] .dds-documentlink__title {
45
+ font-family: var(--font-label-md-family);
46
+ font-size: var(--font-label-md-size);
47
+ font-weight: var(--font-label-md-weight);
48
+ letter-spacing: var(--font-label-md-letter-spacing);
49
+ line-height: var(--font-label-md-line-height);
50
+ }
51
+
52
+ :where([data-dds-context="marketing"]) .dds-documentlink[data-variant="plain"] .dds-documentlink__title {
53
+ font-family: var(--font-body-sm-family);
54
+ font-size: var(--font-body-sm-size);
55
+ font-weight: var(--font-body-sm-weight);
56
+ letter-spacing: var(--font-body-sm-letter-spacing);
57
+ line-height: var(--font-body-sm-line-height);
58
+ }
59
+
@@ -0,0 +1,19 @@
1
+ import type { ReactNode } from 'react';
2
+ import './DocumentLink.css';
3
+ import './document-link-impl.css';
4
+ import { type DocumentLinkProps } from './DocumentLink.types.js';
5
+ export type { DocumentLinkProps };
6
+ /**
7
+ * One document a reader can open or save — a policy, a key information document, a country's
8
+ * licence — drawn the same way wherever a page lists documents.
9
+ *
10
+ * The mark and the title are one link. A second link beside it (`action`) is its sibling, never its
11
+ * child, so the row is a surface holding two targets rather than a target holding another. An
12
+ * external document opens in a new tab and a download saves the file, and each says so in words a
13
+ * screen reader hears and nobody sees, after the title.
14
+ *
15
+ * No state and no script, so it renders on a server as it is.
16
+ */
17
+ export declare function DocumentLink({ variant, href, external, download, mark, action, externalLabel, downloadLabel, children, ...rest }: DocumentLinkProps & {
18
+ children?: ReactNode;
19
+ }): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FileSolidIcon } from '@deriv-com/quill-icons-web';
3
+ import './DocumentLink.css';
4
+ import './document-link-impl.css';
5
+ import { Icon } from '../icon/Icon.js';
6
+ import { visuallyHidden } from '../../visually-hidden.js';
7
+ import { documentLinkDefaults, documentLinkParts } from './DocumentLink.types.js';
8
+ /**
9
+ * One document a reader can open or save — a policy, a key information document, a country's
10
+ * licence — drawn the same way wherever a page lists documents.
11
+ *
12
+ * The mark and the title are one link. A second link beside it (`action`) is its sibling, never its
13
+ * child, so the row is a surface holding two targets rather than a target holding another. An
14
+ * external document opens in a new tab and a download saves the file, and each says so in words a
15
+ * screen reader hears and nobody sees, after the title.
16
+ *
17
+ * No state and no script, so it renders on a server as it is.
18
+ */
19
+ export function DocumentLink({ variant = documentLinkDefaults.variant, href, external = documentLinkDefaults.external, download = documentLinkDefaults.download, mark, action, externalLabel = documentLinkDefaults.externalLabel, downloadLabel = documentLinkDefaults.downloadLabel, children, ...rest }) {
20
+ return (_jsxs("div", { ...rest, className: documentLinkParts.root, "data-variant": variant, children: [_jsxs("a", { className: documentLinkParts.link, href: href, target: external ? '_blank' : undefined, rel: external ? 'noopener noreferrer' : undefined, download: download ? '' : undefined, children: [_jsx("span", { className: documentLinkParts.mark, "aria-hidden": "true", children: _jsx(Icon, { size: variant === 'chip' ? 'lg' : 'md', children: mark ?? _jsx(FileSolidIcon, {}) }) }), _jsx("span", { className: documentLinkParts.title, children: children }), external ? _jsxs("span", { style: visuallyHidden, children: [" ", externalLabel] }) : null, download ? _jsxs("span", { style: visuallyHidden, children: [" ", downloadLabel] }) : null] }), action ? _jsx("div", { className: documentLinkParts.action, children: action }) : null] }));
21
+ }
@@ -0,0 +1,41 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface DocumentLinkOwnProps {
3
+ /**
4
+ * `chip` — The default: the document on a surface of its own, for a list of documents grouped under headings
5
+ * `plain` — The mark and the title on the page itself, for a grid of many short entries — a licence per country, each behind its flag
6
+ */
7
+ variant?: 'chip' | 'plain';
8
+ /** Always. Where the document is: a URL, usually a PDF */
9
+ href: string;
10
+ /** The document is hosted off the site — opens in a new tab, and its accessible name ends with `externalLabel` */
11
+ external?: boolean;
12
+ /** The link saves the file rather than opening it — its accessible name ends with `downloadLabel` */
13
+ download?: boolean;
14
+ /** What kind of document it is, as a glyph — FilePdfSolidIcon for a PDF, FileShieldSolidIcon for a policy, or a country's flag from `@deriv-com/dds-marketing/icons/flag` (`MaltaIcon`, `GermanyIcon`) for one country's licence. Left out, a plain file */
15
+ mark?: ReactNode;
16
+ /** A second link beside the document — "Choose language" — drawn at the far end of the row as its own target */
17
+ action?: ReactNode;
18
+ /** What an external document's accessible name ends with. Never drawn. Translate it with the page */
19
+ externalLabel?: string;
20
+ /** What a download's accessible name ends with. Never drawn. Translate it with the page */
21
+ downloadLabel?: string;
22
+ /** Allowed: text */
23
+ children: ReactNode;
24
+ }
25
+ export type DocumentLinkProps = DocumentLinkOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'variant' | 'href' | 'external' | 'download' | 'mark' | 'action' | 'externalLabel' | 'downloadLabel'>;
26
+ /** The class each part carries. Apply these — do not retype them. */
27
+ export declare const documentLinkParts: {
28
+ readonly root: "dds-documentlink";
29
+ readonly link: "dds-documentlink__link";
30
+ readonly mark: "dds-documentlink__mark";
31
+ readonly title: "dds-documentlink__title";
32
+ readonly action: "dds-documentlink__action";
33
+ };
34
+ /** Generated so defaults cannot drift from the contract. */
35
+ export declare const documentLinkDefaults: {
36
+ readonly variant: "chip";
37
+ readonly external: false;
38
+ readonly download: false;
39
+ readonly externalLabel: "(opens in a new tab)";
40
+ readonly downloadLabel: "(downloads a file)";
41
+ };
@@ -0,0 +1,11 @@
1
+ // GENERATED from document-link.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const documentLinkParts = {
4
+ root: 'dds-documentlink',
5
+ link: 'dds-documentlink__link',
6
+ mark: 'dds-documentlink__mark',
7
+ title: 'dds-documentlink__title',
8
+ action: 'dds-documentlink__action',
9
+ };
10
+ /** Generated so defaults cannot drift from the contract. */
11
+ export const documentLinkDefaults = { variant: 'chip', external: false, download: false, externalLabel: '(opens in a new tab)', downloadLabel: '(downloads a file)' };
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * The document's link answers the pointer and the keyboard itself, since the row around it is not
5
+ * interactive: its title underlines on hover, and focus draws the package's ring round the link —
6
+ * border.width.focus in color.border.focus — offset off the mark and the words.
7
+ */
8
+ :where([data-dds-context="marketing"]) .dds-documentlink .dds-documentlink__link:hover .dds-documentlink__title {
9
+ text-decoration-line: underline;
10
+ text-decoration-thickness: var(--border-width-default);
11
+ text-underline-offset: 0.2em;
12
+ }
13
+
14
+ :where([data-dds-context="marketing"]) .dds-documentlink .dds-documentlink__link:focus-visible {
15
+ border-radius: var(--radius-subtle);
16
+ outline: var(--border-width-focus) solid var(--color-border-focus);
17
+ outline-offset: var(--border-width-focus);
18
+ }
19
+
20
+ /* A chip's border is drawn only where the chip is; a plain entry has none to draw. */
21
+ :where([data-dds-context="marketing"]) .dds-documentlink[data-variant='chip'] {
22
+ border-style: solid;
23
+ }
@@ -26,6 +26,13 @@
26
26
  gap: var(--space-gap-sm);
27
27
  }
28
28
 
29
+ :where([data-dds-context="marketing"]) .dds-illustrationcard .dds-illustrationcard__stage {
30
+ display: flex;
31
+ flex-direction: column;
32
+ min-block-size: 0;
33
+ row-gap: var(--space-gap-sm);
34
+ }
35
+
29
36
  :where([data-dds-context="marketing"]) .dds-illustrationcard[data-ratio="landscape"] {
30
37
  aspect-ratio: var(--aspect-landscape);
31
38
  }
@@ -14,9 +14,13 @@ export type { IllustrationCardProps };
14
14
  * `label`, and its contents are `inert`: real components draw it, so it looks exactly like the
15
15
  * product, and none of them can be focused, pressed or typed into.
16
16
  *
17
+ * It can move once, as it arrives — frosting over its photograph, or playing two states of the
18
+ * product, the second after the first — and whatever moves inside it waits for it to land: it is
19
+ * the host its parts' arrivals follow (see arrival.ts).
20
+ *
17
21
  * And it scales like a picture. The UI is laid out at its own size and, where the pane is too small
18
22
  * to hold it, scaled down as a whole to fit — never up — so a pane on a phone shows the same picture
19
23
  * smaller rather than text overlapping or cut off. The scale is worked out when the pane changes
20
24
  * size and at no other time.
21
25
  */
22
- export declare function IllustrationCard({ ratio, label, children, ...rest }: IllustrationCardProps): import("react").JSX.Element;
26
+ export declare function IllustrationCard({ ratio, label, motion, then, children, ...rest }: IllustrationCardProps): import("react").JSX.Element;