@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
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ */
4
+
5
+ /* Grid structure the contract's static CSS cannot hold: one column of options, and each option's circle beside its words. */
6
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice {
7
+ grid-template-columns: minmax(0, 1fr);
8
+ }
9
+
10
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__option {
11
+ grid-template-columns: auto minmax(0, 1fr);
12
+ grid-column: 1;
13
+ }
14
+
15
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__label {
16
+ grid-column: 2;
17
+ }
18
+
19
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__description {
20
+ grid-column: 2;
21
+ }
22
+
23
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__outline {
24
+ grid-column: 1;
25
+ }
26
+
27
+ /*
28
+ * The dot fills its circle with a margin of a quarter of it, and only on the picked option.
29
+ */
30
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__dot {
31
+ background-color: currentColor;
32
+ block-size: 50%;
33
+ inline-size: 50%;
34
+ scale: 0;
35
+ }
36
+
37
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__option[data-picked] .dds-illustrationchoice__dot {
38
+ scale: 1;
39
+ }
40
+
41
+ /* The outline covers its row exactly, over the option it marks. */
42
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice .dds-illustrationchoice__outline {
43
+ align-self: stretch;
44
+ justify-self: stretch;
45
+ }
46
+
47
+ /*
48
+ * `motion="pick"`: the outline starts a row away — `--dds-illustrationchoice-from` rows, a sign —
49
+ * holds for motion.duration.hold with that row's circle still filled, then slides to the picked
50
+ * option over motion.duration.shift as the circle it left empties; the picked circle pops full over
51
+ * motion.duration.slow once it has arrived. `data-arrival` is the choice's own answer from
52
+ * useArrival (arrival.ts): `waiting` holds the first frame, `playing` runs it, and no attribute —
53
+ * a server, a reader who asked for less movement — is the choice as made. A row's height plus the
54
+ * gap is how far one row away is.
55
+ */
56
+ @keyframes dds-illustrationchoice-slide {
57
+ from {
58
+ translate: 0 calc(var(--dds-illustrationchoice-from) * (100% + var(--space-gap-sm)));
59
+ }
60
+ }
61
+
62
+ @keyframes dds-illustrationchoice-leave {
63
+ from {
64
+ scale: 1;
65
+ }
66
+
67
+ to {
68
+ scale: 0;
69
+ }
70
+ }
71
+
72
+ @keyframes dds-illustrationchoice-fill {
73
+ 0% {
74
+ scale: 0;
75
+ }
76
+
77
+ 70% {
78
+ scale: 1.2;
79
+ }
80
+ }
81
+
82
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice[data-motion='pick'][data-arrival] .dds-illustrationchoice__outline {
83
+ animation: dds-illustrationchoice-slide var(--motion-duration-shift) var(--motion-easing-shift) var(--motion-duration-hold) both;
84
+ }
85
+
86
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice[data-motion='pick'][data-arrival] .dds-illustrationchoice__option[data-start] .dds-illustrationchoice__dot {
87
+ animation: dds-illustrationchoice-leave var(--motion-duration-hold) steps(1, end) both;
88
+ }
89
+
90
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice[data-motion='pick'][data-arrival] .dds-illustrationchoice__option[data-picked] .dds-illustrationchoice__dot {
91
+ animation: dds-illustrationchoice-fill var(--motion-duration-slow) var(--motion-easing-reveal)
92
+ calc(var(--motion-duration-hold) + var(--motion-duration-shift)) both;
93
+ }
94
+
95
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice[data-motion='pick'][data-arrival='waiting'] :is(.dds-illustrationchoice__outline, .dds-illustrationchoice__dot) {
96
+ animation-play-state: paused !important;
97
+ }
98
+
99
+ @media (prefers-reduced-motion: reduce) {
100
+ :where([data-dds-context="marketing"]) .dds-illustrationchoice[data-motion='pick'][data-arrival] :is(.dds-illustrationchoice__outline, .dds-illustrationchoice__dot) {
101
+ animation: none;
102
+ }
103
+ }
@@ -0,0 +1,25 @@
1
+ /* GENERATED from illustrationcode.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-illustrationcode {
4
+ box-sizing: border-box;
5
+ display: grid;
6
+ inline-size: 100%;
7
+ column-gap: var(--space-gap-sm);
8
+ }
9
+
10
+ :where([data-dds-context="marketing"]) .dds-illustrationcode .dds-illustrationcode__box {
11
+ border-style: solid;
12
+ box-sizing: border-box;
13
+ display: grid;
14
+ place-items: center;
15
+ border-color: var(--color-border-strong);
16
+ border-radius: var(--radius-control-sm);
17
+ border-width: var(--border-width-emphasis);
18
+ font-family: var(--font-label-md-family);
19
+ font-size: var(--font-label-md-size);
20
+ font-weight: var(--font-label-md-weight);
21
+ letter-spacing: var(--font-label-md-letter-spacing);
22
+ line-height: var(--font-label-md-line-height);
23
+ padding-block: var(--space-inset-xs);
24
+ }
25
+
@@ -0,0 +1,12 @@
1
+ import './IllustrationCode.css';
2
+ import './illustration-code-impl.css';
3
+ import { type IllustrationCodeProps } from './IllustrationCode.types.js';
4
+ export type { IllustrationCodeProps };
5
+ /**
6
+ * A drawn row of code boxes — a picture of the product asking for a code, never a field.
7
+ *
8
+ * A filled box holds a dot rather than a digit: a picture should never show a code. Each box carries
9
+ * its place in the row for the stylesheet, so the boxes can fill one after another on arrival. No
10
+ * script of its own: a row that fills on arrival is wrapped to take one (arrives.tsx).
11
+ */
12
+ export declare function IllustrationCode({ length, filled, motion, label, ...rest }: IllustrationCodeProps): import("react").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import './IllustrationCode.css';
3
+ import './illustration-code-impl.css';
4
+ import { Arrives } from '../../arrives.js';
5
+ import { given } from '../../given.js';
6
+ import { illustrationCodeDefaults, illustrationCodeParts, } from './IllustrationCode.types.js';
7
+ /**
8
+ * A drawn row of code boxes — a picture of the product asking for a code, never a field.
9
+ *
10
+ * A filled box holds a dot rather than a digit: a picture should never show a code. Each box carries
11
+ * its place in the row for the stylesheet, so the boxes can fill one after another on arrival. No
12
+ * script of its own: a row that fills on arrival is wrapped to take one (arrives.tsx).
13
+ */
14
+ export function IllustrationCode({ length = illustrationCodeDefaults.length, filled, motion, label, ...rest }) {
15
+ const count = Math.max(1, Math.min(8, Math.round(length)));
16
+ const full = Math.max(0, Math.min(count, filled === undefined ? count : Math.round(filled)));
17
+ const named = given(label);
18
+ const row = (_jsx("div", { ...rest, className: illustrationCodeParts.root, "data-motion": motion, role: named ? 'img' : undefined, "aria-label": named ? label : undefined, "aria-hidden": named ? undefined : true, style: { gridTemplateColumns: `repeat(${count}, minmax(0, 1fr))` }, children: Array.from({ length: count }, (_, at) => (_jsx("span", { className: illustrationCodeParts.box, "data-filled": at < full ? '' : undefined, style: { '--dds-illustrationcode-step': at + 1 }, children: at < full ? '•' : null }, at))) }));
19
+ return motion === undefined ? row : _jsx(Arrives, { children: row });
20
+ }
@@ -0,0 +1,23 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export interface IllustrationCodeOwnProps {
3
+ /** How many boxes: six, the default, for the usual verification code; four for a short one */
4
+ length?: number;
5
+ /** How many boxes are filled, from the start. Left out, all of them — a code entered */
6
+ filled?: number;
7
+ /**
8
+ * `fill` — The boxes fill one after another, a step of motion.duration.stagger apart
9
+ */
10
+ motion?: 'fill';
11
+ /** Where the picture stands on its own — "A verification code, entered". It names the row as one image */
12
+ label?: string;
13
+ }
14
+ export type IllustrationCodeProps = IllustrationCodeOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'length' | 'filled' | 'motion' | 'label'>;
15
+ /** The class each part carries. Apply these — do not retype them. */
16
+ export declare const illustrationCodeParts: {
17
+ readonly root: "dds-illustrationcode";
18
+ readonly box: "dds-illustrationcode__box";
19
+ };
20
+ /** Generated so defaults cannot drift from the contract. */
21
+ export declare const illustrationCodeDefaults: {
22
+ readonly length: 6;
23
+ };
@@ -0,0 +1,8 @@
1
+ // GENERATED from illustration-code.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const illustrationCodeParts = {
4
+ root: 'dds-illustrationcode',
5
+ box: 'dds-illustrationcode__box',
6
+ };
7
+ /** Generated so defaults cannot drift from the contract. */
8
+ export const illustrationCodeDefaults = { length: 6 };
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * A box is a little taller than it is wide, as the product's are; a filled one is outlined in the
5
+ * text's own ink rather than the empty box's quieter edge.
6
+ */
7
+ :where([data-dds-context="marketing"]) .dds-illustrationcode .dds-illustrationcode__box {
8
+ aspect-ratio: var(--aspect-upright);
9
+ }
10
+
11
+ :where([data-dds-context="marketing"]) .dds-illustrationcode .dds-illustrationcode__box[data-filled] {
12
+ border-color: currentColor;
13
+ }
14
+
15
+ /*
16
+ * `motion="fill"`: each filled box takes its ink and its dot a step of motion.duration.stagger after
17
+ * the one before, settling from a little small over motion.duration.normal. `data-arrival` is the
18
+ * row's own answer from useArrival (arrival.ts): `waiting` holds every box empty, `playing` fills
19
+ * them, and no attribute — a server, a reader who asked for less movement — is the row as filled.
20
+ */
21
+ @keyframes dds-illustrationcode-fill {
22
+ from {
23
+ border-color: var(--color-border-strong);
24
+ color: transparent;
25
+ scale: 0.85;
26
+ }
27
+ }
28
+
29
+ :where([data-dds-context="marketing"]) .dds-illustrationcode[data-motion='fill'][data-arrival] .dds-illustrationcode__box[data-filled] {
30
+ animation: dds-illustrationcode-fill var(--motion-duration-normal) var(--motion-easing-reveal) both;
31
+ animation-delay: calc(var(--dds-illustrationcode-step, 1) * var(--motion-duration-stagger));
32
+ }
33
+
34
+ :where([data-dds-context="marketing"]) .dds-illustrationcode[data-motion='fill'][data-arrival='waiting'] .dds-illustrationcode__box {
35
+ animation-play-state: paused !important;
36
+ }
37
+
38
+ @media (prefers-reduced-motion: reduce) {
39
+ :where([data-dds-context="marketing"]) .dds-illustrationcode[data-motion='fill'][data-arrival] .dds-illustrationcode__box {
40
+ animation: none;
41
+ }
42
+ }
@@ -0,0 +1,19 @@
1
+ /* GENERATED from illustrationlist.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-illustrationlist {
4
+ box-sizing: border-box;
5
+ display: flex;
6
+ flex-direction: column;
7
+ inline-size: 100%;
8
+ }
9
+
10
+ :where([data-dds-context="marketing"]) .dds-illustrationlist .dds-illustrationlist__row {
11
+ align-items: center;
12
+ border-style: none;
13
+ display: flex;
14
+ border-block-start-width: var(--border-width-hairline);
15
+ border-color: var(--color-border-subtle);
16
+ column-gap: var(--space-gap-sm);
17
+ padding-block: var(--space-inset-xs);
18
+ }
19
+
@@ -0,0 +1,16 @@
1
+ import { type ReactNode } from 'react';
2
+ import './IllustrationList.css';
3
+ import './illustration-list-impl.css';
4
+ import { type IllustrationListProps } from './IllustrationList.types.js';
5
+ export type { IllustrationListProps };
6
+ /**
7
+ * A drawn list — each child one row, ruled from the row above — for a picture of the product
8
+ * listing things.
9
+ *
10
+ * Each row carries its place in the list for the stylesheet, so the rows can arrive one after
11
+ * another and a glyph in each can pop as its row lands. No script of its own: a list that arrives
12
+ * is wrapped to take one (arrives.tsx).
13
+ */
14
+ export declare function IllustrationList({ motion, children, ...rest }: IllustrationListProps & {
15
+ children?: ReactNode;
16
+ }): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Children } from 'react';
3
+ import './IllustrationList.css';
4
+ import './illustration-list-impl.css';
5
+ import { Arrives } from '../../arrives.js';
6
+ import { illustrationListParts } from './IllustrationList.types.js';
7
+ /**
8
+ * A drawn list — each child one row, ruled from the row above — for a picture of the product
9
+ * listing things.
10
+ *
11
+ * Each row carries its place in the list for the stylesheet, so the rows can arrive one after
12
+ * another and a glyph in each can pop as its row lands. No script of its own: a list that arrives
13
+ * is wrapped to take one (arrives.tsx).
14
+ */
15
+ export function IllustrationList({ motion, children, ...rest }) {
16
+ const list = (_jsx("div", { ...rest, className: illustrationListParts.root, "data-motion": motion, children: Children.toArray(children).map((child, at) => (_jsx("div", { className: illustrationListParts.row, style: { '--dds-illustrationlist-step': at }, children: child }, at))) }));
17
+ return motion === undefined ? list : _jsx(Arrives, { children: list });
18
+ }
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface IllustrationListOwnProps {
3
+ /**
4
+ * `arrive` — The rows come in one after another, and each glyph pops in as its row lands
5
+ */
6
+ motion?: 'arrive';
7
+ /** Allowed: any content */
8
+ children: ReactNode;
9
+ }
10
+ export type IllustrationListProps = IllustrationListOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'motion'>;
11
+ /** The class each part carries. Apply these — do not retype them. */
12
+ export declare const illustrationListParts: {
13
+ readonly root: "dds-illustrationlist";
14
+ readonly row: "dds-illustrationlist__row";
15
+ };
@@ -0,0 +1,6 @@
1
+ // GENERATED from illustration-list.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const illustrationListParts = {
4
+ root: 'dds-illustrationlist',
5
+ row: 'dds-illustrationlist__row',
6
+ };
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * Rows ruled from the row above; the first has nothing above it.
5
+ */
6
+ :where([data-dds-context="marketing"]) .dds-illustrationlist .dds-illustrationlist__row + .dds-illustrationlist__row {
7
+ border-block-start-style: solid;
8
+ }
9
+
10
+ /*
11
+ * `motion="arrive"`: each row comes up into place over motion.duration.reveal, a step of
12
+ * motion.duration.stagger behind the row before it, and any glyph in it — an Icon — pops in over
13
+ * motion.duration.shift a step of motion.duration.fast after its row starts. `data-arrival` is the
14
+ * list's own answer from useArrival (arrival.ts): `waiting` holds the first frame, `playing` runs
15
+ * it, and no attribute — a server, a reader who asked for less movement — is the list at rest.
16
+ */
17
+ @keyframes dds-illustrationlist-arrive {
18
+ from {
19
+ opacity: var(--opacity-hidden);
20
+ translate: 0 var(--space-gap-sm);
21
+ }
22
+ }
23
+
24
+ @keyframes dds-illustrationlist-pop {
25
+ 0% {
26
+ scale: 0.4;
27
+ }
28
+
29
+ 70% {
30
+ scale: 1.12;
31
+ }
32
+ }
33
+
34
+ :where([data-dds-context="marketing"]) .dds-illustrationlist[data-motion='arrive'][data-arrival] .dds-illustrationlist__row {
35
+ animation: dds-illustrationlist-arrive var(--motion-duration-reveal) var(--motion-easing-reveal) both;
36
+ animation-delay: calc(var(--dds-illustrationlist-step, 0) * var(--motion-duration-stagger));
37
+ }
38
+
39
+ :where([data-dds-context="marketing"]) .dds-illustrationlist[data-motion='arrive'][data-arrival] .dds-illustrationlist__row .dds-icon {
40
+ animation: dds-illustrationlist-pop var(--motion-duration-shift) var(--motion-easing-reveal) both;
41
+ animation-delay: calc(var(--dds-illustrationlist-step, 0) * var(--motion-duration-stagger) + var(--motion-duration-fast));
42
+ }
43
+
44
+ :where([data-dds-context="marketing"]) .dds-illustrationlist[data-motion='arrive'][data-arrival='waiting'] :is(.dds-illustrationlist__row, .dds-icon) {
45
+ animation-play-state: paused !important;
46
+ }
47
+
48
+ @media (prefers-reduced-motion: reduce) {
49
+ :where([data-dds-context="marketing"]) .dds-illustrationlist[data-motion='arrive'][data-arrival] :is(.dds-illustrationlist__row, .dds-icon) {
50
+ animation: none;
51
+ }
52
+ }
@@ -18,6 +18,12 @@
18
18
  background-color: var(--color-bg-surface);
19
19
  }
20
20
 
21
+ :where([data-dds-context="marketing"]) .dds-illustrationscene .dds-illustrationscene__shade {
22
+ align-self: stretch;
23
+ justify-self: stretch;
24
+ pointer-events: none;
25
+ }
26
+
21
27
  :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement="bottom"] {
22
28
  align-items: end;
23
29
  justify-items: center;
@@ -9,6 +9,7 @@ export type { IllustrationSceneProps };
9
9
  * every picture of the product in use is composed the same way across a site. The photograph is
10
10
  * decoration unless `alt` says otherwise; the card's own label describes the whole picture.
11
11
  *
12
- * No state and no script, so it renders on a server as it is.
12
+ * No state and no script, so it renders on a server as it is. The card's two-beat arrival inside a
13
+ * block's reveal is the stylesheet's, read from the step the block gave whatever holds the scene.
13
14
  */
14
- export declare function IllustrationScene({ ratio, placement, src, alt, children, ...rest }: IllustrationSceneProps): import("react").JSX.Element;
15
+ export declare function IllustrationScene({ ratio, placement, src, alt, shade, children, ...rest }: IllustrationSceneProps): import("react").JSX.Element;
@@ -9,8 +9,9 @@ import { illustrationSceneDefaults, illustrationSceneParts, } from './Illustrati
9
9
  * every picture of the product in use is composed the same way across a site. The photograph is
10
10
  * decoration unless `alt` says otherwise; the card's own label describes the whole picture.
11
11
  *
12
- * No state and no script, so it renders on a server as it is.
12
+ * No state and no script, so it renders on a server as it is. The card's two-beat arrival inside a
13
+ * block's reveal is the stylesheet's, read from the step the block gave whatever holds the scene.
13
14
  */
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] }));
15
+ export function IllustrationScene({ ratio = illustrationSceneDefaults.ratio, placement = illustrationSceneDefaults.placement, src, alt = illustrationSceneDefaults.alt, shade = illustrationSceneDefaults.shade, children, ...rest }) {
16
+ return (_jsxs("div", { ...rest, className: illustrationSceneParts.root, "data-ratio": ratio, "data-placement": placement, children: [_jsx("img", { className: illustrationSceneParts.image, src: src, alt: alt }), shade ? _jsx("div", { className: illustrationSceneParts.shade }) : null, children] }));
16
17
  }
@@ -15,18 +15,22 @@ export interface IllustrationSceneOwnProps {
15
15
  src: string;
16
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
17
  alt?: string;
18
+ /** The photograph is bright where the card sits — a sunny sky, a white wall — so the glass would come out mid-grey and the card's small lines would fall below AA. A shade under the card only, following the card's placement, so the rest of the photograph keeps its light. */
19
+ shade?: boolean;
18
20
  /** Allowed: IllustrationCard */
19
21
  children: ReactNode;
20
22
  }
21
- export type IllustrationSceneProps = IllustrationSceneOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'ratio' | 'placement' | 'src' | 'alt'>;
23
+ export type IllustrationSceneProps = IllustrationSceneOwnProps & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'ratio' | 'placement' | 'src' | 'alt' | 'shade'>;
22
24
  /** The class each part carries. Apply these — do not retype them. */
23
25
  export declare const illustrationSceneParts: {
24
26
  readonly root: "dds-illustrationscene";
25
27
  readonly image: "dds-illustrationscene__image";
28
+ readonly shade: "dds-illustrationscene__shade";
26
29
  };
27
30
  /** Generated so defaults cannot drift from the contract. */
28
31
  export declare const illustrationSceneDefaults: {
29
32
  readonly ratio: "square";
30
33
  readonly placement: "center";
31
34
  readonly alt: "";
35
+ readonly shade: false;
32
36
  };
@@ -3,6 +3,7 @@
3
3
  export const illustrationSceneParts = {
4
4
  root: 'dds-illustrationscene',
5
5
  image: 'dds-illustrationscene__image',
6
+ shade: 'dds-illustrationscene__shade',
6
7
  };
7
8
  /** Generated so defaults cannot drift from the contract. */
8
- export const illustrationSceneDefaults = { ratio: 'square', placement: 'center', alt: '' };
9
+ export const illustrationSceneDefaults = { ratio: 'square', placement: 'center', alt: '', shade: false };
@@ -59,3 +59,68 @@
59
59
  justify-self: stretch;
60
60
  margin-block-end: var(--space-inset-card);
61
61
  }
62
+
63
+ /*
64
+ * At the foot, the strip is held to two fifths of the frame and its UI scaled into it.
65
+ *
66
+ * A strip is as tall as what it holds, and what it holds keeps its full type sizes however small the
67
+ * scene is drawn — so on a narrow column the strip outgrew its share and, at a tablet's width, its
68
+ * photograph. Capped, the pane has a height smaller than its UI, and IllustrationCard's fit scales
69
+ * the UI down into it as it does for a centred card. Two fifths is about the share the strip takes
70
+ * on a desktop, where nothing needs scaling, so the composition holds at every width rather than
71
+ * changing with it. A proportion of the frame, like every share here.
72
+ */
73
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement='bottom'] > .dds-illustrationcard {
74
+ max-block-size: 40%;
75
+ }
76
+
77
+ /*
78
+ * The shade, between the photograph and the card.
79
+ *
80
+ * It fills the frame's one cell like the photograph and draws only where the card is: up from the
81
+ * foot at full strength to just above a strip at the foot, then clear by two thirds of the way up,
82
+ * so the subject above keeps its light; or an oval behind a centred card, full strength under the
83
+ * card's words and fading from there, so it never stands round the card as a dark ring, and clear at
84
+ * the frame's edges. color.bg.overlay, which takes a white photograph to a grey that the card's glass and its
85
+ * small type clear at AA.
86
+ */
87
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement='bottom'] .dds-illustrationscene__shade {
88
+ background-image: linear-gradient(to top, var(--color-bg-overlay), var(--color-bg-overlay) 45%, transparent 70%);
89
+ }
90
+
91
+ :where([data-dds-context="marketing"]) .dds-illustrationscene[data-placement='center'] .dds-illustrationscene__shade {
92
+ background-image: radial-gradient(closest-side, var(--color-bg-overlay), var(--color-bg-overlay) 45%, transparent);
93
+ }
94
+
95
+ /*
96
+ * The card arrives after its photograph.
97
+ *
98
+ * Inside a block's arrival — block-reveal.css — whatever holds the scene comes up at its step, and
99
+ * the scene with it. The card then waits three steps of motion.duration.stagger more and rises onto
100
+ * the photograph, so the place lands and then the product does. The holder's step is read from
101
+ * `--dds-reveal-at`, which the block sets on the part and which the card inherits, so this follows
102
+ * whatever number the block gives its media rather than guessing past it; with none it counts from
103
+ * the block's first step. The same distance, duration and curve as every other part's arrival.
104
+ *
105
+ * Only inside a reveal — a scene with no `data-revealed` above it is simply drawn — and never for a
106
+ * reader who asked for less movement, as every arrival. Written a class deeper than block-reveal's
107
+ * own rule, so a page that marked the card with a step of its own is overruled by this one.
108
+ */
109
+ :where([data-dds-context="marketing"]) [data-revealed='false'] .dds-illustrationscene > .dds-illustrationcard {
110
+ opacity: var(--opacity-hidden);
111
+ transition: none;
112
+ translate: var(--motion-translate-reveal);
113
+ }
114
+
115
+ :where([data-dds-context="marketing"]) [data-revealed='true'] .dds-illustrationscene > .dds-illustrationcard {
116
+ transition-delay: calc((var(--dds-reveal-at, 0) + 3) * var(--motion-duration-stagger));
117
+ transition-duration: var(--motion-duration-reveal);
118
+ transition-property: opacity, translate;
119
+ transition-timing-function: var(--motion-easing-reveal);
120
+ }
121
+
122
+ @media (prefers-reduced-motion: reduce) {
123
+ :where([data-dds-context="marketing"]) [data-revealed] .dds-illustrationscene > .dds-illustrationcard {
124
+ transition: none;
125
+ }
126
+ }
@@ -56,27 +56,13 @@
56
56
  }
57
57
 
58
58
  /*
59
- * A link whose ink belongs to the ground gets its underline back under the pointer.
59
+ * A link that inherits its ink, with no mark, gets an underline under the pointer.
60
60
  *
61
- * A standalone link at `tone: inherit` — one on a brand card, a dark band, a scrim. It takes
62
- * the colour around it, so the colour cannot change under the pointer, and
63
- * `text-decoration-thickness` thickens a line that is not there. Without this it had no hover
64
- * affordance at all.
65
- *
66
- * The list variant had the same hole and answers it differently, below: it has a mark to
67
- * bring in, and a column of rows that underline one at a time reads as a table of contents
68
- * being corrected.
69
- *
70
- * Product reaches the same conclusion from the other end: its standalone drops the underline
71
- * except at `tone: inherit`, "because the link is the same colour as the text around it and
72
- * the rule is the only thing left saying it is a link". It keeps the line at all times. These
73
- * designs have no line at rest — a footer of fifty underlined rows is a wall — so it arrives
74
- * with the pointer instead, which is the same argument applied to a denser page.
75
- *
76
- * Here rather than in the contract because `structure` carries no state: it says what a
77
- * variant looks like, not what it looks like while a pointer is over it.
61
+ * At `tone: inherit` the colour is the ground's and cannot change, so what answers the pointer is
62
+ * the mark moving, below — the brand link's behaviour, with no line. A link given `showIcon={false}`
63
+ * has no mark to move, and without this nothing about it would answer the pointer at all.
78
64
  */
79
- :where([data-dds-context="marketing"]) .dds-link[data-variant='standalone'][data-tone='inherit']:hover {
65
+ :where([data-dds-context="marketing"]) .dds-link[data-variant='standalone'][data-tone='inherit']:not(:has(.dds-link__icon-trailing)):hover {
80
66
  text-decoration-line: underline;
81
67
  }
82
68