@deriv-com/dds-marketing 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/.llm/components/accordion.md +6 -0
  2. package/.llm/components/accordionitem.md +6 -0
  3. package/.llm/components/aspectratio.md +6 -0
  4. package/.llm/components/awards.md +6 -0
  5. package/.llm/components/background.md +49 -10
  6. package/.llm/components/badge.md +6 -0
  7. package/.llm/components/bottomsheet.md +6 -0
  8. package/.llm/components/breadcrumb.md +6 -0
  9. package/.llm/components/breadcrumbitem.md +6 -0
  10. package/.llm/components/button.md +9 -3
  11. package/.llm/components/buttonicon.md +7 -1
  12. package/.llm/components/card.md +6 -0
  13. package/.llm/components/cardbody.md +7 -1
  14. package/.llm/components/cardbutton.md +6 -0
  15. package/.llm/components/checkbox.md +6 -0
  16. package/.llm/components/comparisoncards.md +9 -3
  17. package/.llm/components/comparisontable.md +6 -0
  18. package/.llm/components/ctabanner.md +6 -0
  19. package/.llm/components/ctabannerslider.md +6 -0
  20. package/.llm/components/datatable.md +6 -0
  21. package/.llm/components/divider.md +6 -0
  22. package/.llm/components/documentlink.md +237 -0
  23. package/.llm/components/documents.md +268 -0
  24. package/.llm/components/downloadbanner.md +7 -1
  25. package/.llm/components/dropdownmenu.md +6 -0
  26. package/.llm/components/estimator.md +6 -0
  27. package/.llm/components/faqaccordion.md +6 -0
  28. package/.llm/components/featurebullets.md +6 -0
  29. package/.llm/components/featurecards.md +42 -2
  30. package/.llm/components/featurecardscarousel.md +7 -1
  31. package/.llm/components/featurescroll.md +6 -0
  32. package/.llm/components/featuresplit.md +6 -0
  33. package/.llm/components/featurestack.md +6 -0
  34. package/.llm/components/featuretabs.md +369 -0
  35. package/.llm/components/filterchip.md +6 -0
  36. package/.llm/components/footer.md +6 -0
  37. package/.llm/components/footergroup.md +6 -0
  38. package/.llm/components/grid.md +30 -1
  39. package/.llm/components/icon.md +6 -0
  40. package/.llm/components/illustrationcard.md +52 -2
  41. package/.llm/components/illustrationcheck.md +193 -0
  42. package/.llm/components/illustrationchoice.md +187 -0
  43. package/.llm/components/illustrationcode.md +192 -0
  44. package/.llm/components/illustrationlist.md +175 -0
  45. package/.llm/components/illustrationscene.md +29 -3
  46. package/.llm/components/imagebanner.md +30 -5
  47. package/.llm/components/landinghero.md +6 -0
  48. package/.llm/components/link.md +7 -1
  49. package/.llm/components/logocolumns.md +7 -1
  50. package/.llm/components/logorows.md +42 -2
  51. package/.llm/components/menuitem.md +6 -0
  52. package/.llm/components/navbar.md +6 -0
  53. package/.llm/components/navbaritem.md +6 -0
  54. package/.llm/components/navbarmenu.md +6 -0
  55. package/.llm/components/navbarmenugroup.md +6 -0
  56. package/.llm/components/navbarpanel.md +6 -0
  57. package/.llm/components/navbarswitcher.md +6 -0
  58. package/.llm/components/navbarswitcheroption.md +6 -0
  59. package/.llm/components/option.md +6 -0
  60. package/.llm/components/pageheader.md +6 -0
  61. package/.llm/components/pagination.md +6 -0
  62. package/.llm/components/paginationdots.md +6 -0
  63. package/.llm/components/producthero.md +29 -4
  64. package/.llm/components/progressbar.md +305 -0
  65. package/.llm/components/removablechip.md +6 -0
  66. package/.llm/components/resourcebanner.md +6 -0
  67. package/.llm/components/row.md +6 -0
  68. package/.llm/components/scenescroll.md +38 -24
  69. package/.llm/components/scenescrollword.md +267 -0
  70. package/.llm/components/scroller.md +6 -0
  71. package/.llm/components/searchinput.md +6 -0
  72. package/.llm/components/segmentedcontrol.md +28 -1
  73. package/.llm/components/segmentedcontrolitem.md +6 -0
  74. package/.llm/components/select.md +6 -0
  75. package/.llm/components/selectchip.md +6 -0
  76. package/.llm/components/spinner.md +6 -0
  77. package/.llm/components/stack.md +6 -0
  78. package/.llm/components/stats.md +46 -1
  79. package/.llm/components/statscarousel.md +227 -0
  80. package/.llm/components/statusdot.md +41 -1
  81. package/.llm/components/steps.md +6 -0
  82. package/.llm/components/stickycards.md +6 -0
  83. package/.llm/components/subdomainnavbar.md +6 -0
  84. package/.llm/components/tab.md +6 -0
  85. package/.llm/components/table.md +6 -0
  86. package/.llm/components/tablebody.md +6 -0
  87. package/.llm/components/tablecell.md +6 -0
  88. package/.llm/components/tablehead.md +6 -0
  89. package/.llm/components/tableheadercell.md +6 -0
  90. package/.llm/components/tablerow.md +6 -0
  91. package/.llm/components/tablist.md +6 -0
  92. package/.llm/components/teamgrid.md +6 -0
  93. package/.llm/components/testimonialrow.md +43 -3
  94. package/.llm/components/testimonialslider.md +8 -2
  95. package/.llm/components/textarea.md +6 -0
  96. package/.llm/components/textinput.md +6 -0
  97. package/.llm/components/textscroll.md +6 -0
  98. package/.llm/components/tiers.md +13 -7
  99. package/.llm/components/tooltip.md +6 -0
  100. package/.llm/components/typography.md +63 -1
  101. package/.llm/digest/background.md +14 -6
  102. package/.llm/digest/button.md +1 -1
  103. package/.llm/digest/buttonicon.md +1 -1
  104. package/.llm/digest/documentlink.md +52 -0
  105. package/.llm/digest/documents.md +51 -0
  106. package/.llm/digest/downloadbanner.md +1 -1
  107. package/.llm/digest/featurecards.md +7 -0
  108. package/.llm/digest/featuretabs.md +50 -0
  109. package/.llm/digest/grid.md +1 -0
  110. package/.llm/digest/illustrationcard.md +6 -1
  111. package/.llm/digest/illustrationcheck.md +42 -0
  112. package/.llm/digest/illustrationchoice.md +43 -0
  113. package/.llm/digest/illustrationcode.md +41 -0
  114. package/.llm/digest/illustrationlist.md +38 -0
  115. package/.llm/digest/illustrationscene.md +4 -2
  116. package/.llm/digest/imagebanner.md +9 -3
  117. package/.llm/digest/logocolumns.md +1 -1
  118. package/.llm/digest/logorows.md +8 -1
  119. package/.llm/digest/producthero.md +8 -2
  120. package/.llm/digest/progressbar.md +56 -0
  121. package/.llm/digest/scenescroll.md +6 -5
  122. package/.llm/digest/scenescrollword.md +56 -0
  123. package/.llm/digest/segmentedcontrol.md +3 -0
  124. package/.llm/digest/stats.md +8 -0
  125. package/.llm/digest/statscarousel.md +48 -0
  126. package/.llm/digest/statusdot.md +7 -0
  127. package/.llm/digest/testimonialrow.md +8 -1
  128. package/.llm/digest/testimonialslider.md +1 -1
  129. package/.llm/digest/typography.md +18 -0
  130. package/.llm/index.md +14 -4
  131. package/.llm/rules.md +10 -0
  132. package/.llm/tokens.md +12 -3
  133. package/AGENTS.md +13 -2
  134. package/dist/components/arrival.d.ts +32 -0
  135. package/dist/components/arrival.js +140 -0
  136. package/dist/components/arrives.d.ts +17 -0
  137. package/dist/components/arrives.js +14 -0
  138. package/dist/components/blocks/awards/Awards.js +2 -27
  139. package/dist/components/blocks/block-pattern.css +23 -0
  140. package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +29 -0
  141. package/dist/components/blocks/documents/Documents.css +90 -0
  142. package/dist/components/blocks/documents/Documents.d.ts +22 -0
  143. package/dist/components/blocks/documents/Documents.js +30 -0
  144. package/dist/components/blocks/documents/Documents.types.d.ts +37 -0
  145. package/dist/components/blocks/documents/Documents.types.js +14 -0
  146. package/dist/components/blocks/documents/documents-impl.css +103 -0
  147. package/dist/components/blocks/download-banner/DownloadBanner.css +1 -1
  148. package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +1 -1
  149. package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
  150. package/dist/components/blocks/feature-cards/FeatureCards.js +10 -7
  151. package/dist/components/blocks/feature-cards/FeatureCards.types.d.ts +9 -1
  152. package/dist/components/blocks/feature-cards/feature-cards-impl.css +15 -3
  153. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +1 -1
  154. package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +12 -0
  155. package/dist/components/blocks/feature-tabs/FeatureTabs.css +100 -0
  156. package/dist/components/blocks/feature-tabs/FeatureTabs.d.ts +23 -0
  157. package/dist/components/blocks/feature-tabs/FeatureTabs.js +38 -0
  158. package/dist/components/blocks/feature-tabs/FeatureTabs.types.d.ts +35 -0
  159. package/dist/components/blocks/feature-tabs/FeatureTabs.types.js +14 -0
  160. package/dist/components/blocks/feature-tabs/feature-tabs-impl.css +53 -0
  161. package/dist/components/blocks/image-banner/ImageBanner.css +1 -1
  162. package/dist/components/blocks/image-banner/ImageBanner.d.ts +1 -1
  163. package/dist/components/blocks/image-banner/ImageBanner.js +2 -2
  164. package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +9 -7
  165. package/dist/components/blocks/image-banner/ImageBanner.types.js +1 -1
  166. package/dist/components/blocks/image-banner/image-banner-impl.css +77 -26
  167. package/dist/components/blocks/laurel.d.ts +16 -0
  168. package/dist/components/blocks/laurel.js +28 -0
  169. package/dist/components/blocks/logo-columns/LogoColumns.css +1 -1
  170. package/dist/components/blocks/logo-columns/LogoColumns.types.d.ts +1 -1
  171. package/dist/components/blocks/logo-rows/LogoRows.css +1 -1
  172. package/dist/components/blocks/logo-rows/LogoRows.d.ts +2 -1
  173. package/dist/components/blocks/logo-rows/LogoRows.js +7 -4
  174. package/dist/components/blocks/logo-rows/LogoRows.types.d.ts +9 -1
  175. package/dist/components/blocks/pattern-tone.d.ts +11 -0
  176. package/dist/components/blocks/pattern-tone.js +7 -0
  177. package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
  178. package/dist/components/blocks/product-hero/ProductHero.js +2 -2
  179. package/dist/components/blocks/product-hero/ProductHero.types.d.ts +8 -3
  180. package/dist/components/blocks/product-hero/ProductHero.types.js +1 -1
  181. package/dist/components/blocks/product-hero/product-hero-impl.css +54 -0
  182. package/dist/components/blocks/resource-banner/ResourceBanner.css +1 -1
  183. package/dist/components/blocks/scene-scroll/SceneScroll.css +1 -1
  184. package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +6 -5
  185. package/dist/components/blocks/scene-scroll/SceneScroll.js +8 -7
  186. package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +5 -5
  187. package/dist/components/blocks/scene-scroll/SceneScroll.types.js +1 -1
  188. package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +61 -44
  189. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.css +105 -0
  190. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.d.ts +31 -0
  191. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.js +67 -0
  192. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.d.ts +39 -0
  193. package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.js +18 -0
  194. package/dist/components/blocks/scene-scroll-word/scene-scroll-word-impl.css +370 -0
  195. package/dist/components/blocks/stats/Stats.d.ts +2 -1
  196. package/dist/components/blocks/stats/Stats.js +17 -14
  197. package/dist/components/blocks/stats/Stats.types.d.ts +8 -0
  198. package/dist/components/blocks/stats/stats-impl.css +4 -1
  199. package/dist/components/blocks/stats/use-wheel.d.ts +1 -1
  200. package/dist/components/blocks/stats/use-wheel.js +8 -4
  201. package/dist/components/blocks/stats-carousel/StatsCarousel.css +209 -0
  202. package/dist/components/blocks/stats-carousel/StatsCarousel.d.ts +20 -0
  203. package/dist/components/blocks/stats-carousel/StatsCarousel.js +48 -0
  204. package/dist/components/blocks/stats-carousel/StatsCarousel.types.d.ts +43 -0
  205. package/dist/components/blocks/stats-carousel/StatsCarousel.types.js +23 -0
  206. package/dist/components/blocks/stats-carousel/stats-carousel-impl.css +233 -0
  207. package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +8 -0
  208. package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -1
  209. package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +2 -1
  210. package/dist/components/blocks/testimonial-row/TestimonialRow.js +16 -13
  211. package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +9 -1
  212. package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -1
  213. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +1 -1
  214. package/dist/components/blocks/tiers/Tiers.types.d.ts +1 -1
  215. package/dist/components/core/background/Background.css +19 -0
  216. package/dist/components/core/background/Background.types.d.ts +2 -1
  217. package/dist/components/core/background/background-impl.css +47 -15
  218. package/dist/components/core/background/halftone.js +1 -1
  219. package/dist/components/core/button/Button.css +5 -5
  220. package/dist/components/core/button-icon/ButtonIcon.types.d.ts +1 -1
  221. package/dist/components/core/card-body/CardBody.css +5 -0
  222. package/dist/components/core/card-body/CardBody.types.d.ts +1 -1
  223. package/dist/components/core/document-link/DocumentLink.css +59 -0
  224. package/dist/components/core/document-link/DocumentLink.d.ts +19 -0
  225. package/dist/components/core/document-link/DocumentLink.js +21 -0
  226. package/dist/components/core/document-link/DocumentLink.types.d.ts +41 -0
  227. package/dist/components/core/document-link/DocumentLink.types.js +11 -0
  228. package/dist/components/core/document-link/document-link-impl.css +23 -0
  229. package/dist/components/core/illustration-card/IllustrationCard.css +7 -0
  230. package/dist/components/core/illustration-card/IllustrationCard.d.ts +5 -1
  231. package/dist/components/core/illustration-card/IllustrationCard.js +34 -8
  232. package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +8 -1
  233. package/dist/components/core/illustration-card/IllustrationCard.types.js +1 -0
  234. package/dist/components/core/illustration-card/illustration-card-impl.css +113 -0
  235. package/dist/components/core/illustration-check/IllustrationCheck.css +25 -0
  236. package/dist/components/core/illustration-check/IllustrationCheck.d.ts +16 -0
  237. package/dist/components/core/illustration-check/IllustrationCheck.js +22 -0
  238. package/dist/components/core/illustration-check/IllustrationCheck.types.d.ts +25 -0
  239. package/dist/components/core/illustration-check/IllustrationCheck.types.js +9 -0
  240. package/dist/components/core/illustration-check/illustration-check-impl.css +76 -0
  241. package/dist/components/core/illustration-choice/IllustrationChoice.css +62 -0
  242. package/dist/components/core/illustration-choice/IllustrationChoice.d.ts +16 -0
  243. package/dist/components/core/illustration-choice/IllustrationChoice.js +31 -0
  244. package/dist/components/core/illustration-choice/IllustrationChoice.types.d.ts +25 -0
  245. package/dist/components/core/illustration-choice/IllustrationChoice.types.js +11 -0
  246. package/dist/components/core/illustration-choice/illustration-choice-impl.css +103 -0
  247. package/dist/components/core/illustration-code/IllustrationCode.css +25 -0
  248. package/dist/components/core/illustration-code/IllustrationCode.d.ts +12 -0
  249. package/dist/components/core/illustration-code/IllustrationCode.js +20 -0
  250. package/dist/components/core/illustration-code/IllustrationCode.types.d.ts +23 -0
  251. package/dist/components/core/illustration-code/IllustrationCode.types.js +8 -0
  252. package/dist/components/core/illustration-code/illustration-code-impl.css +42 -0
  253. package/dist/components/core/illustration-list/IllustrationList.css +19 -0
  254. package/dist/components/core/illustration-list/IllustrationList.d.ts +16 -0
  255. package/dist/components/core/illustration-list/IllustrationList.js +18 -0
  256. package/dist/components/core/illustration-list/IllustrationList.types.d.ts +15 -0
  257. package/dist/components/core/illustration-list/IllustrationList.types.js +6 -0
  258. package/dist/components/core/illustration-list/illustration-list-impl.css +52 -0
  259. package/dist/components/core/illustration-scene/IllustrationScene.css +6 -0
  260. package/dist/components/core/illustration-scene/IllustrationScene.d.ts +3 -2
  261. package/dist/components/core/illustration-scene/IllustrationScene.js +4 -3
  262. package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +5 -1
  263. package/dist/components/core/illustration-scene/IllustrationScene.types.js +2 -1
  264. package/dist/components/core/illustration-scene/illustration-scene-impl.css +65 -0
  265. package/dist/components/core/link/link-impl.css +5 -19
  266. package/dist/components/core/progress-bar/ProgressBar.css +101 -0
  267. package/dist/components/core/progress-bar/ProgressBar.d.ts +5 -0
  268. package/dist/components/core/progress-bar/ProgressBar.js +34 -0
  269. package/dist/components/core/progress-bar/ProgressBar.types.d.ts +52 -0
  270. package/dist/components/core/progress-bar/ProgressBar.types.js +12 -0
  271. package/dist/components/core/progress-bar/progress-bar-impl.css +45 -0
  272. package/dist/components/core/segmented-control/SegmentedControl.d.ts +1 -1
  273. package/dist/components/core/segmented-control/SegmentedControl.js +13 -5
  274. package/dist/components/core/segmented-control/SegmentedControl.types.d.ts +5 -1
  275. package/dist/components/core/segmented-control/segmented-control-impl.css +35 -0
  276. package/dist/components/core/status-dot/StatusDot.d.ts +1 -1
  277. package/dist/components/core/status-dot/StatusDot.js +7 -4
  278. package/dist/components/core/status-dot/StatusDot.types.d.ts +9 -1
  279. package/dist/components/core/status-dot/status-dot-impl.css +101 -0
  280. package/dist/components/core/typography/Typography.d.ts +3 -283
  281. package/dist/components/core/typography/Typography.js +9 -1
  282. package/dist/components/core/typography/Typography.types.d.ts +9 -15
  283. package/dist/components/core/typography/TypographyMotion.d.ts +28 -0
  284. package/dist/components/core/typography/TypographyMotion.js +43 -0
  285. package/dist/components/core/typography/typography-impl.css +106 -0
  286. package/dist/components/illustration-data.d.ts +15 -0
  287. package/dist/components/illustration-data.js +7 -0
  288. package/dist/components/index.d.ts +22 -1
  289. package/dist/components/index.js +20 -0
  290. package/dist/components/layout/grid/Grid.css +5 -0
  291. package/dist/components/layout/grid/Grid.types.d.ts +2 -1
  292. package/dist/components/scene-scroll-data.d.ts +35 -0
  293. package/dist/components/tiers-data.d.ts +3 -2
  294. package/dist/marketing.css +24 -6
  295. package/package.json +1 -1
@@ -31,7 +31,7 @@ Triggers the one action a section asks for, such as signing up
31
31
  - `lg` — A hero, or a full-width conversion band that is the only control in view. …
32
32
  - **tone** `enum` · default "default"
33
33
  - `default` — The page's own ground, which sets the ink this component was drawn against — every button on a white page
34
- - `inverse` — The control stands on the dark band, color.bg.brand-strong — a hero, a navigation bar at the top of one, a footer — which is the same near-black in light and dark. …
34
+ - `inverse` — The control stands on the dark band, color.bg.brand-strong — a hero, a navigation bar at the top of one, a footer — which is near-black in light and dark alike — slate.900 in light, a step deeper in dark. …
35
35
  - `brand` — The control stands on the coral band, color.bg.brand — CtaBanner and CtaBannerSlider — which is the same coral in light and dark, so nothing on it switches either. …
36
36
  - **href** `string` · optional — The press goes somewhere with a URL of its own — the ordinary case for a call to action on a marketing page. It makes this an anchor rather than a button, which is what gives a visitor cmd-click, a visible destination and a copyable link. …
37
37
  - never: A placeholder while the destination is undecided — a # or an empty string is a control that looks live, takes focus and goes nowhere. Nor javascript: or a handler dressed as a URL: leave href out and pass onClick, and this renders a button that does the work in place
@@ -43,7 +43,7 @@ Triggers an action with an icon alone
43
43
  - never: Making one of a set stand out. Two of these side by side at different steps read as a control and its afterthought, and a carousel whose next is larger than its previous has said the path runs one way
44
44
  - **tone** `enum` · default "default"
45
45
  - `default` — The control is on a light ground, which is every surface this package paints by default
46
- - `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. …
46
+ - `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. …
47
47
  - **icon** `node` · required — Always — the glyph is the whole control, so it is required rather than a slot that may be empty. …
48
48
  - never: A glyph whose meaning the visitor has to be taught, and never a second glyph — one control, one action, one shape. …
49
49
  - **label** `string` · required — Always. It is the entire accessible name, because nothing on screen carries one — the words that would have been the label if there had been room for one. …
@@ -0,0 +1,52 @@
1
+ <!-- GENERATED from documentlink.contract.json. Do not edit. -->
2
+
3
+ # DocumentLink
4
+
5
+ One document a reader can open or save: its mark, its title, and an optional second link beside it
6
+
7
+ `import { DocumentLink } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A document on a legal, regulatory or help page — a policy, a key information document, a licence, a form
12
+ - Many documents of one kind, listed or laid in a grid inside a Documents block
13
+
14
+ ## Something else, when
15
+
16
+ - One to four related pages or documents at the end of a section → **ResourceBanner**
17
+ - A link inside a sentence, or a page rather than a document → **Link**
18
+
19
+ ## Never
20
+
21
+ - Navigation between pages of the site. A document chip says a file is behind it
22
+ - A document whose title alone does not say which it is. Two chips both reading "Key information document" are the same chip twice
23
+
24
+ ## Props
25
+
26
+ - **variant** `enum` · default "chip" — How much the document stands out from the page around it
27
+ - `chip` — The default: the document on a surface of its own, for a list of documents grouped under headings
28
+ - `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
29
+ - never: Mixing the two in one list. A list is one kind of thing; chips beside plain entries read as two
30
+ - **href** `string` · required — Always. Where the document is: a URL, usually a PDF
31
+ - never: A page on the site. A page is a Link
32
+ - **external** `boolean` · default false — The document is hosted off the site — opens in a new tab, and its accessible name ends with `externalLabel`
33
+ - never: A document on this site, which opens in place
34
+ - **download** `boolean` · default false — The link saves the file rather than opening it — its accessible name ends with `downloadLabel`
35
+ - never: A document a browser opens to read, which most PDFs are. A file on another site. Browsers ignore `download` across origins and open the file instead, so the name would promise a download that does not happen; such a file is `external`
36
+ - **mark** `node` · optional — 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. …
37
+ - never: Saying what the title does not. The mark is decoration and is never read out
38
+ - **action** `node` · optional — A second link beside the document — "Choose language" — drawn at the far end of the row as its own target
39
+ - never: A second document. Each document is its own DocumentLink
40
+ - **externalLabel** `string` · default "(opens in a new tab)" — What an external document's accessible name ends with. Never drawn. Translate it with the page
41
+ - never: Anything a sighted reader needs; it is never shown
42
+ - **downloadLabel** `string` · default "(downloads a file)" — What a download's accessible name ends with. Never drawn. Translate it with the page
43
+ - never: Naming the file's format, which belongs in the title where it matters
44
+
45
+ ## Inside it
46
+
47
+ - Takes only text.
48
+ - Renders 5 parts: root, link, mark, title, action.
49
+
50
+ ---
51
+
52
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/documentlink.md`.
@@ -0,0 +1,51 @@
1
+ <!-- GENERATED from documents.contract.json. Do not edit. -->
2
+
3
+ # Documents
4
+
5
+ A section of documents to open or save — grouped under headings that expand, or laid in a grid beside its heading
6
+
7
+ `import { Documents } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A legal or regulatory page's documents — key information documents grouped by product, policies, terms
12
+ - A document per country, region or entity, each behind its flag or mark — `layout="grid"`
13
+ - Any list of more documents than a ResourceBanner's four
14
+
15
+ ## Something else, when
16
+
17
+ - One to four documents or pages at the end of a section → **ResourceBanner**
18
+ - Questions and their answers → **FaqAccordion**
19
+
20
+ ## Never
21
+
22
+ - Documents the reader must see before acting — a risk warning on the page it governs. A folded group is one most readers never open
23
+ - Navigation between the site's pages. Each entry is a document; a page is a Link
24
+ - Mixing the two shapes in one section. Groups of chips beside a grid of flags is two sections
25
+
26
+ ## Props
27
+
28
+ - **ground** `enum` · default "page" — Which of the page's three grounds this section paints. A marketing page is white, and a band that wants to be seen as a band takes one of the other two — so this is how a page builds its rhythm: white, white, grey, white, dark. …
29
+ - `page` — The default, and the page's own white. A section that has nothing to separate itself from what is above it — most of them — and the ground a reader is already on
30
+ - `subtle` — A quiet step off the page, for a band that wants to read as its own section without changing the page's voice — the reference design's slate FAQ. …
31
+ - `strong` — `color.bg.brand-strong`, the dark band. It stops the page rather than dividing it, so it is for a section a reader should arrive at — and one per page is usually one more than enough. …
32
+ - never: Marking importance. Every section on a page painted a ground is a page with no emphasis left
33
+ - **layout** `enum` · default "groups" — How the documents are laid out: grouped under headings, or as one grid of entries
34
+ - `groups` — The default: the documents under headings that expand, one group open at a time — AccordionItem children, each holding DocumentLink chips, two to a row from the fold. …
35
+ - `grid` — Many short entries of one kind — a document per country, each behind its flag — DocumentLink children with `variant="plain"`, in a grid beside the heading from 62rem and under it below. …
36
+ - never: Choosing by how many documents there are alone. Groups are for documents of different kinds; a grid is for many of one kind
37
+ - **title** `string` · required — Always. What the documents are, in a few words — "Regulatory documents", "Licences by country". It names the section
38
+ - never: A sentence. The line under it says more
39
+ - **description** `string` · optional — A line under the heading saying what the documents are for or who they apply to
40
+ - never: Instructions a reader must follow; they belong on the page the documents govern
41
+
42
+ ## Inside it
43
+
44
+ - Takes only AccordionItem, DocumentLink.
45
+ - At least 1, no ceiling — fewer is not this component and more is a different one.
46
+ - 8 components are refused inside it; the list and the reasons are in the long document.
47
+ - Renders 8 parts: root, inner, title, header, description, body, list, item.
48
+
49
+ ---
50
+
51
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/documents.md`.
@@ -26,7 +26,7 @@ Promotes the app with a heading and links to each app store
26
26
  - **ground** `enum` · default "page" — Which of the page's grounds the section paints, and with it the card's fill: the recessed surface on the page, the raised white on the grey band, and the strong card on the dark band — TestimonialRow's three and the reference design's light, light-2 and dark. …
27
27
  - `page` — The default, and the page's own white. The card is the recessed gray that sets it off — the reference design's light-2
28
28
  - `subtle` — The grey band, with the card white on it — the reference design's light. Painted as the band's tint laid over the page's own ground, so it is the same grey whatever is behind the section
29
- - `strong` — `color.bg.brand-strong`, the dark band, with the card at color.bg.surface-card-strong and white words on it — the reference design's dark. …
29
+ - `strong` — `color.bg.brand-strong`, the dark band, with the card at color.bg.surface-card-strong-on-brand-strong and white words on it — the reference design's dark. …
30
30
  - never: Marking importance. Every section on a page painted a ground is a page with no emphasis left
31
31
  - **variant** `enum` · default "standard" — How much the banner asks for. The standard card sits with the page; the featured card is the page's moment for the app, and one per page
32
32
  - `standard` — The default: the card in the ground's own fill, quiet beside the sections around it — the reference design's banner
@@ -30,6 +30,13 @@ A heading over a grid of feature cards
30
30
  - `subtle` — A quiet step off the page, for a band that wants to read as its own section without changing the page's voice. The one to reach for first when two sections need telling apart. …
31
31
  - `strong` — `color.bg.brand-strong`, the dark band. It stops the page rather than dividing it, so it is for a section a reader should arrive at — and one per page is usually one more than enough. …
32
32
  - never: Marking importance. Every section on a page painted dark is a page with no emphasis left, and a reader stops reading the grounds as meaning anything. Alternating for its own sake is the same mistake more slowly. And never the brand's own coral, `color.bg.brand`, which is not offered here. …
33
+ - **background** `enum` · optional — The page's one patterned band, between its hero and its closing call to action — a band a reader should stop at. …
34
+ - `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
35
+ - `aurora` — Curtains of the brand's light rising from the band's foot and swaying slowly
36
+ - `mesh` — The band in the brand's reds folded into one another like a liquid — the loudest of the five, for a dark band
37
+ - `grid` — Hairlines a pitch apart rising from a soft bloom at the band's foot — the quietest, and the one to reach for first
38
+ - `rings` — Hairline circles spreading out from the middle of the band's foot
39
+ - never: More than one band on a page, or a band that is already the hero or the call to action — those carry their own patterns. One pattern is what makes a band the one a reader remembers; two make neither, and a page of them is noise. …
33
40
  - **title** `string` · required — Always. What the cards are, in the fewest words that name them — "Why trade with Deriv", "Markets you can trade"
34
41
  - never: A sentence. The line under it is for the sentence
35
42
  - **description** `string` · optional — A line saying what the set has in common, when the title alone does not
@@ -0,0 +1,50 @@
1
+ <!-- GENERATED from featuretabs.contract.json. Do not edit. -->
2
+
3
+ # FeatureTabs
4
+
5
+ A section that shows one version of something at a time behind tabs — a heading, a strip of tabs, and the content of the one selected
6
+
7
+ `import { FeatureTabs } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - Several versions of one thing a reader takes one at a time — a product's trade types, a platform's apps, the account types
12
+ - A section whose versions each need a picture, a line and a way onward, and only one is worth showing at once
13
+
14
+ ## Something else, when
15
+
16
+ - One claim and one picture, with nothing to list → **FeatureSplit**
17
+ - Two or three plans or account types compared feature by feature → **ComparisonCards**
18
+ - Showing the same section's content for a monthly or a yearly price → **TabList**
19
+
20
+ ## Never
21
+
22
+ - Content a reader needs all of. Only one tab is on the page at a time, and most readers never open the others
23
+ - Small print the reader must see. The footnote is the last thing read
24
+ - More than six tabs. A strip longer than that scrolls, and a reader stops reading it
25
+
26
+ ## Props
27
+
28
+ - **ground** `enum` · default "page" — Which of the page's three grounds this section paints. A marketing page is white, and a band that wants to be seen as a band takes one of the other two — so this is how a page builds its rhythm: white, white, grey, white, dark. …
29
+ - `page` — The default, and the page's own white. A section that has nothing to separate itself from what is above it — most of them — and the ground a reader is already on
30
+ - `subtle` — A quiet step off the page, for a band that wants to read as its own section without changing the page's voice — the reference design's slate FAQ. …
31
+ - `strong` — `color.bg.brand-strong`, the dark band. It stops the page rather than dividing it, so it is for a section a reader should arrive at — and one per page is usually one more than enough. …
32
+ - never: Marking importance. Every section on a page painted a ground is a page with no emphasis left
33
+ - **title** `string` · required — Always. What the versions are of, in a few words — "Types of digital options". It names the section and the tabs
34
+ - never: A sentence. The line under it says more
35
+ - **description** `string` · optional — A line under the heading saying what the tabs have in common
36
+ - never: Describing one tab. Each says that in its own description
37
+ - **labels** `data` · required — Always. The tabs' names, in a word or two each, in the order of the children they choose between — the first names the first child. A name without a child is not drawn
38
+ - never: Sentences. A tab is read at a glance; what it shows says the rest
39
+ - **footnote** `string` · optional — Small print every tab shares — that what is offered varies by platform or device
40
+ - never: A risk warning. Small print is the last thing a reader reads, and the one place a warning must never be
41
+
42
+ ## Inside it
43
+
44
+ - At least 1, no ceiling — fewer is not this component and more is a different one.
45
+ - 7 components are refused inside it; the list and the reasons are in the long document.
46
+ - Renders 8 parts: root, inner, header, title, description, tabs, panel, footnote.
47
+
48
+ ---
49
+
50
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/featuretabs.md`.
@@ -38,6 +38,7 @@ Lays items out in equal columns with consistent spacing
38
38
  - `xl` — Between the parts of a card, taken as a field — cells that each hold a picture as well as words. Drops one step below 768px, a phone having a third of the width to spend
39
39
  - `2xl` — Between one section of a page and the next, laid out as a field. Drops one step below 768px, a phone having a third of the width to spend
40
40
  - `3xl` — The largest gap, for separating whole movements of a page laid out as a field. Drops one step below 768px, a phone having a third of the width to spend
41
+ - `gutter` — A row of cards — the gutter every card block (FeatureCards, ComparisonCards, Tiers, TeamGrid) sets between its cards, so a grid of cards composed on a page stands as those do. …
41
42
  - never: Reaching a cell width. The gap and the column count together decide how wide a cell lands, but the gap is a relationship between cells and not a way of sizing one. A cell that needs a particular width is a track floor, and past that it is a component with a size
42
43
  - **min** `enum` · default "md" — How narrow a track may get before the field drops a column. This is the whole of the component's responsiveness, and choosing it is choosing where the layout changes
43
44
  - `sm` — The narrow floor, for a cell holding a logo, an icon and a word, or one short claim. Six of these clear the page's measure with its gutter still on both sides
@@ -35,11 +35,16 @@ A glass card showing product information, used as an illustration
35
35
  - never: Fitting a particular piece of UI. The shape is a decision about the layout; the UI is laid out for it
36
36
  - **label** `string` · required — Always. What the picture shows, in a sentence — "Trade ticket: buy Gold to rise over 5 minutes, staking 10 USD". The pane is one image to assistive technology and this is its whole description; nothing inside it is read out on its own
37
37
  - never: A title or a caption the page shows. It is never drawn; a heading the reader sees belongs to the section beside the picture
38
+ - **motion** `enum` · optional — The pane's own motion as it arrives, played once when it has landed and never again. Leave it out and the pane simply arrives with the band around it
39
+ - `frost` — The pane frosts over its photograph as it arrives: the glass blurs in over motion.duration.dramatic, and what it holds fades in a step of motion.duration.stagger apart once the glass is mostly there. …
40
+ - never: A pane whose parts already carry the lead motion — a figure that rolls, a story told with `then`. One lead motion per pane: two read as the pane fidgeting rather than the product working
41
+ - **then** `node` · optional — A second state of the same product, played once after the first: the order goes in, then the position is open. …
42
+ - never: A slideshow, or a state that undoes the first. It plays once and ends on this, and a pane that kept changing would be a carousel nobody asked for. And not with `motion`, which is not played beside it — the story is the pane's lead motion
38
43
 
39
44
  ## Inside it
40
45
 
41
46
  - 2 components are refused inside it; the list and the reasons are in the long document.
42
- - Renders 2 parts: root, content.
47
+ - Renders 3 parts: root, content, stage.
43
48
 
44
49
  ---
45
50
 
@@ -0,0 +1,42 @@
1
+ <!-- GENERATED from illustrationcheck.contract.json. Do not edit. -->
2
+
3
+ # IllustrationCheck
4
+
5
+ A drawn confirmation mark — a ring and a tick — for a picture of something done
6
+
7
+ `import { IllustrationCheck } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A pane, or any picture of the product, showing that something has gone through — a deposit received, an identity verified
12
+ - The moment of confirmation is the point of the picture, played once with `motion="resolve"`
13
+
14
+ ## Something else, when
15
+
16
+ - Something is still loading on a real page → **Spinner**
17
+ - A tick beside words in a list or a field → **Icon**
18
+
19
+ ## Never
20
+
21
+ - Reporting the outcome of something the reader did on this page. A real confirmation is announced and stays; this is a picture, and its motion says nothing to a screen reader
22
+ - More than one moving thing in a pane. One lead motion per pane
23
+
24
+ ## Props
25
+
26
+ - **size** `enum` · default "xl" — How large the mark is drawn: one of the two largest icon sizes, because a mark smaller than that is a glyph beside words and an Icon
27
+ - `lg` — Thirty-two pixels, icon.size.lg. Beside a line of words in a pane
28
+ - `xl` — Forty-eight pixels, icon.size.xl, and the default. The mark as the subject of a pane
29
+ - never: Fitting a pane. A pane scales its whole picture down to fit; the mark keeps its size in it
30
+ - **motion** `enum` · optional — The mark moves once, on arrival — in an IllustrationCard when the pane has landed, otherwise when it is well into view. At rest, and for a reader who asked for less movement, it is the finished mark
31
+ - `resolve` — The ring spins open like a Spinner for two turns, closes, and the tick draws in — the moment something goes through
32
+ - never: A mark beside another moving part in the same pane. One lead motion per pane
33
+ - **label** `string` · optional — Only where the mark says something nothing beside it does — rarely. It names the mark as an image
34
+ - never: A mark inside an IllustrationCard, which is one image named by its own label; or repeating the words beside the mark
35
+
36
+ ## Inside it
37
+
38
+ - Renders 3 parts: root, ring, tick.
39
+
40
+ ---
41
+
42
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/illustrationcheck.md`.
@@ -0,0 +1,43 @@
1
+ <!-- GENERATED from illustrationchoice.contract.json. Do not edit. -->
2
+
3
+ # IllustrationChoice
4
+
5
+ A drawn set of options with one picked, for a picture of the product making a choice
6
+
7
+ `import { IllustrationChoice } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A pane, or any picture of the product, showing a choice — a demo account or a real one, a plan, a market
12
+ - The choosing is the point of the picture, played once with `motion="pick"`
13
+
14
+ ## Something else, when
15
+
16
+ - The reader makes the choice on this page → **SegmentedControl**
17
+ - A choice between two or three short words, side by side → **SegmentedControl**
18
+
19
+ ## Never
20
+
21
+ - A choice the reader makes. It is not focusable, not pressable and not announced as a control
22
+ - More than four options. A picture of a long list is a list, and its outline would travel too far to read as one choice
23
+ - More than one moving thing in a pane. One lead motion per pane
24
+
25
+ ## Props
26
+
27
+ - **options** `data` · required — Always. Two to four options, each a name in a few words and a line under it where it needs one
28
+ - never: More than four, or options that are not alternatives to one another
29
+ - **value** `string` · required — Always. The `value` of the option shown picked
30
+ - never: A value no option has. Nothing would be picked, and the picture would show a choice not made
31
+ - **motion** `enum` · optional — The choice moves once, on arrival — in an IllustrationCard when the pane has landed, otherwise when it is well into view. At rest, and for a reader who asked for less movement, the option is simply picked
32
+ - `pick` — The outline starts on a neighbouring option and slides to the picked one, whose circle then fills — the product making the choice
33
+ - never: A choice beside another moving part in the same pane. One lead motion per pane
34
+ - **label** `string` · optional — Where the picture stands on its own and its options say less than a sentence would — "Choosing an account: the demo account". It names the whole as one image
35
+ - never: A choice inside an IllustrationCard, which is one image named by its own label
36
+
37
+ ## Inside it
38
+
39
+ - Renders 7 parts: root, option, radio, dot, label, description, outline.
40
+
41
+ ---
42
+
43
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/illustrationchoice.md`.
@@ -0,0 +1,41 @@
1
+ <!-- GENERATED from illustrationcode.contract.json. Do not edit. -->
2
+
3
+ # IllustrationCode
4
+
5
+ A drawn row of code boxes, filled or not, for a picture of the product asking for a code
6
+
7
+ `import { IllustrationCode } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A pane, or any picture of the product, showing a verification step — confirming it is you, two-step sign-in
12
+ - The code going in is the point of the picture, played once with `motion="fill"`
13
+
14
+ ## Something else, when
15
+
16
+ - The reader types a code on this page → **TextInput**
17
+
18
+ ## Never
19
+
20
+ - A real code entry. Nothing in it can be focused or typed into, and it holds no digits — only dots, because a picture should never show a code
21
+ - More than one moving thing in a pane. One lead motion per pane
22
+
23
+ ## Props
24
+
25
+ - **length** `number` · default 6 — How many boxes: six, the default, for the usual verification code; four for a short one
26
+ - never: A code longer than eight. A row of more boxes than that is too narrow to read as boxes
27
+ - **filled** `number` · optional — How many boxes are filled, from the start. Left out, all of them — a code entered
28
+ - never: Showing a code half typed with `motion="fill"`. The motion fills the boxes it is given; a picture of a code mid-entry is still, with no motion
29
+ - **motion** `enum` · optional — The row moves once, on arrival — in an IllustrationCard when the pane has landed, otherwise when it is well into view. At rest, and for a reader who asked for less movement, the boxes are as filled as `filled` says
30
+ - `fill` — The boxes fill one after another, a step of motion.duration.stagger apart
31
+ - never: A row beside another moving part in the same pane. One lead motion per pane
32
+ - **label** `string` · optional — Where the picture stands on its own — "A verification code, entered". It names the row as one image
33
+ - never: A row inside an IllustrationCard, which is one image named by its own label
34
+
35
+ ## Inside it
36
+
37
+ - Renders 2 parts: root, box.
38
+
39
+ ---
40
+
41
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/illustrationcode.md`.
@@ -0,0 +1,38 @@
1
+ <!-- GENERATED from illustrationlist.contract.json. Do not edit. -->
2
+
3
+ # IllustrationList
4
+
5
+ A drawn list of rows — a glyph and a name each — for a picture of the product listing things
6
+
7
+ `import { IllustrationList } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A pane, or any picture of the product, listing a few things — the forex pairs on a platform, the documents a check needs
12
+ - The list arriving is the point of the picture, played once with `motion="arrive"`
13
+
14
+ ## Something else, when
15
+
16
+ - A list of benefits or features the page itself is making → **FeatureBullets**
17
+ - A data table the reader compares across → **Table**
18
+
19
+ ## Never
20
+
21
+ - More than five or six rows. A picture of a long list reads as a list to scroll, and its arrival as a page loading
22
+ - Rows a reader acts on. Nothing in it can be pressed
23
+ - More than one moving thing in a pane. One lead motion per pane
24
+
25
+ ## Props
26
+
27
+ - **motion** `enum` · optional — The list moves once, on arrival — in an IllustrationCard when the pane has landed, otherwise when it is well into view. At rest, and for a reader who asked for less movement, the list is simply there
28
+ - `arrive` — The rows come in one after another, and each glyph pops in as its row lands
29
+ - never: A list beside another moving part in the same pane. One lead motion per pane
30
+
31
+ ## Inside it
32
+
33
+ - 2 components are refused inside it; the list and the reasons are in the long document.
34
+ - Renders 2 parts: root, row.
35
+
36
+ ---
37
+
38
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/illustrationlist.md`.
@@ -32,18 +32,20 @@ A photograph with an IllustrationCard laid over it
32
32
  - **placement** `enum` · default "center" — Where the card sits over the photograph, so the subject of the photograph stays clear of it
33
33
  - `center` — The default: the card in the middle of the frame. For a photograph whose subject frames the middle — a person looking down at what the card shows
34
34
  - `bottom` — The card centred along the foot of the frame, held off it by the card's own inset — for a photograph whose subject fills the top: a face, a person reaching up, a skyline
35
- - never: Anything but keeping the photograph's subject clear. The card's size is fixed by the shape; placement moves it and nothing else
35
+ - never: Anything but keeping the photograph's subject clear. The card's width is fixed by the shape; placement moves it, and at the foot holds it to at most two fifths of the frame's height
36
36
  - **src** `string` · required — Always. The photograph the scene is set in
37
37
  - never: A data URI holding a photograph. A scene's photograph is the heaviest thing on its page and belongs in a file the browser can cache
38
38
  - **alt** `string` · default "" — 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
39
39
  - never: Repeating the card's label. A screen reader would hear the picture described twice
40
+ - **shade** `boolean` · default false — 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. …
41
+ - never: A photograph already dark where the card sits, or darkening the whole photograph. The shade is for the card's type, and on a dark photograph it only takes light out of the scene
40
42
 
41
43
  ## Inside it
42
44
 
43
45
  - Takes only IllustrationCard.
44
46
  - At least 1, at most 1 — fewer is not this component and more is a different one.
45
47
  - 2 components are refused inside it; the list and the reasons are in the long document.
46
- - Renders 2 parts: root, image.
48
+ - Renders 3 parts: root, image, shade.
47
49
 
48
50
  ---
49
51
 
@@ -29,12 +29,12 @@ A dark card pairing a headline and one action with a photograph
29
29
  - **ground** `enum` · default "page" — Which of the page's three grounds the band around the card paints. The card is dark whatever this says — that is what the block is — so this is about the rhythm of the page, white, grey or dark, and never about the card. …
30
30
  - `page` — The default, and the page's own white, with the dark card set into it. Most of the time: the card is already the break
31
31
  - `subtle` — The grey band, for a card that follows a white section the page wants told apart from this one. …
32
- - `strong` — `color.bg.brand-strong`, the dark band, with the card a step lighter at color.bg.surface-card-strong so it still reads as a card. …
32
+ - `strong` — `color.bg.brand-strong`, the dark band, with the card a step lighter at color.bg.surface-card-strong-on-brand-strong so it still reads as a card. …
33
33
  - never: Making the card darker. The card is dark on every ground; painting the band dark too spends the page's one dark band on a section that was already one
34
34
  - **variant** `enum` · default "split" — What the photograph does: beside the words, or behind them. Both carry one action — two of the reference design's layouts
35
35
  - `split` — The default. The words in one half and the photograph filling the other, edge to edge, with one action under the words. …
36
- - `cover` — The photograph fills the whole card, with the words over it behind a scrim that darkens the side they are on and leaves the photograph clear on the other. …
37
- - never: Choosing by how busy the page looks. Cover hides part of the photograph under the scrim; it is a decision about the photograph, not decoration
36
+ - `cover` — The photograph fills the whole card, with the words over it on a shade that darkens the words' own column and fades out just past it, leaving the rest of the photograph clear. …
37
+ - never: Choosing by how busy the page looks. Cover lays the words on part of the photograph behind a shade; it is a decision about the photograph, not decoration
38
38
  - **mediaPosition** `enum` · default "end" — Which side the photograph takes, and in cover, which side it shows clear on with the words on the other. Alternating it with the section above is the page's decision, not this one's
39
39
  - `end` — The default. The words lead and the photograph follows, which is the order the card argues in
40
40
  - `start` — The photograph leads — the second of two cards on a page, or a photograph whose subject faces the words. A split card puts it above the words on a phone as well, as the reference design does
@@ -53,6 +53,12 @@ A dark card pairing a headline and one action with a photograph
53
53
  - never: Artwork with words in it. The cover photograph sits under a scrim and the text, and the split crops to fill
54
54
  - **parallax** `boolean` · default true — The photograph drifts against the scroll as the card passes through the view, the drift every block's picture shares — drawn at motion.scale.parallax and moved from motion.translate.parallax-from to motion.translate.parallax-to over the whole pass — so it reads as further away than the card — the reference design's ParallaxBanner, which this replaces. …
55
55
  - never: Holding still for a reader who asked for less motion — it already holds still for them, and in a browser that cannot drive it from the scroll
56
+ - **stackOnPhone** `boolean` · default false — A cover photograph whose subject a phone's crop would put under the words or cut off — a person, a face, hands. …
57
+ - never: A split card, which stacks on a phone already, or a photograph that is setting rather than subject. Stacked, the phone loses the cover look, so keep it for the photograph that would otherwise lose its subject
58
+
59
+ ## The type refuses
60
+
61
+ - variant="split" with stackOnPhone=true — A split card already stacks its words and its photograph on a phone; there is nothing for this to change
56
62
 
57
63
  ## Inside it
58
64
 
@@ -28,7 +28,7 @@ Backs a claim with two columns of logos that scroll in opposite directions
28
28
  - **ground** `enum` · default "strong" — Which of the page's grounds the section paints, and with it the tiles' fill: the recessed surface on the page, the raised white on the grey band, and the strong card on the dark band. …
29
29
  - `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
30
30
  - `subtle` — The grey band, with white tiles on it. For full-colour logos, where the section needs setting apart from the ones around it. …
31
- - `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong — gray.900 in both themes, so the wall is a set of tiles a step lighter than the band. …
31
+ - `strong` — The default. …
32
32
  - never: Marking importance. Every section on a page painted dark is a page with no emphasis left, and a reader stops reading the grounds as meaning anything. Alternating for its own sake is the same mistake more slowly. And never the brand's own coral, `color.bg.brand`, which is not offered here. …
33
33
  - **mediaPosition** `enum` · default "start" — Which side the wall takes at full width. Never a promise about a phone: below the fold the words are always first, because a reader on a phone came for them
34
34
  - `start` — The default, the reference design's: the wall at the start, the claim beside it at the end
@@ -27,8 +27,15 @@ Backs a claim with two rows of logos that slide in opposite directions
27
27
  - **ground** `enum` · default "strong" — Which of the page's grounds the section paints, and with it the tiles' fill: the recessed surface on the page, the raised white on the grey band, and the strong card on the dark band. …
28
28
  - `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
29
29
  - `subtle` — The grey band, with white tiles on it. For full-colour logos, where the section needs setting apart from the ones around it. …
30
- - `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong — gray.900 in both themes, so the row is a set of tiles a step lighter than the band. …
30
+ - `strong` — The default. …
31
31
  - never: Marking importance. Every section on a page painted dark is a page with no emphasis left, and a reader stops reading the grounds as meaning anything. Alternating for its own sake is the same mistake more slowly. And never the brand's own coral, `color.bg.brand`, which is not offered here. …
32
+ - **background** `enum` · optional — The page's one patterned band, between its hero and its closing call to action — a band a reader should stop at. …
33
+ - `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
34
+ - `aurora` — Curtains of the brand's light rising from the band's foot and swaying slowly
35
+ - `mesh` — The band in the brand's reds folded into one another like a liquid — the loudest of the five, for a dark band
36
+ - `grid` — Hairlines a pitch apart rising from a soft bloom at the band's foot — the quietest, and the one to reach for first
37
+ - `rings` — Hairline circles spreading out from the middle of the band's foot
38
+ - never: More than one band on a page, or a band that is already the hero or the call to action — those carry their own patterns. One pattern is what makes a band the one a reader remembers; two make neither, and a page of them is noise. …
32
39
  - **title** `string` · required — Always. The one claim the logos back, in the fewest words that say it — "Trusted by leading platforms worldwide"
33
40
  - never: A list of the names. The logos are the names; the heading says what they prove
34
41
  - **description** `string` · optional — The line under the heading: what the logos mean for the reader — which payment methods they can use, which platforms they can trade on
@@ -42,8 +42,14 @@ Opens a product or market page with a centred headline over a dark background
42
42
  - never: The background — that is `backgroundImage`. And beside `media`: one product, one picture. Given both, `image` is drawn and `media` ignored
43
43
  - **media** `node` · optional — A product picture in a shape the page fixes on purpose — an AspectRatio box, which keeps its ratio across the column. Prefer `image`, which keeps the picture's own shape and adapts to it
44
44
  - never: The background. A photograph filling the band is `backgroundImage`; this sits in front of it, in the column, and is never cropped
45
- - **backgroundImage** `string` · optional — A photograph filling the whole band. It is shown as it is — nothing is painted over it, so choose one already dark enough that the title reads on it
46
- - never: A flat colour, or a bright photograph. The band already paints its ground, and nothing here darkens an image on the page's behalf — a pale one leaves the claim unreadable
45
+ - **backgroundImage** `string` · optional — A photograph filling the whole band. It is shown as it is — nothing is painted over it unless `shade` asks for a shade behind the words, so choose one dark enough where the words sit, or turn `shade` on for a bright one
46
+ - never: A flat colour, or a bright photograph left without `shade`. The band already paints its ground, and a pale photograph with nothing behind the words leaves the claim unreadable
47
+ - **shade** `boolean` · default false — Under `backgroundImage`, when the photograph is bright where the words sit — a daylight sky — and the description or the actions would fall below AA on it. …
48
+ - never: A band with no photograph, or darkening the whole photograph. The band's own ground already carries the words, and a shade over all of it is the gloom a bright photograph was chosen to avoid
49
+
50
+ ## The type refuses
51
+
52
+ - shade=true with backgroundImage=null — A shade is drawn between a photograph and the words; with no photograph it darkens the band's own ground, which the words were already set to read on
47
53
 
48
54
  ## Inside it
49
55
 
@@ -0,0 +1,56 @@
1
+ <!-- GENERATED from progressbar.contract.json. Do not edit. -->
2
+
3
+ # ProgressBar
4
+
5
+ Shows how much of a task is done
6
+
7
+ `import { ProgressBar } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A task has measurable completion and the user needs to see how much is done
12
+ - A longer operation — uploads, setup, or processing — needs progress feedback to reassure the user
13
+
14
+ ## Something else, when
15
+
16
+ - The work has no measurable end — connecting, waiting on a system that reports nothing → **Spinner**
17
+ - The task finishes as fast as a reader can notice → **nothing in this system does this**
18
+
19
+ ## Never
20
+
21
+ - Placing icons or labels inside the bar. The fill is a measurement: it is the width that carries the meaning, so anything sitting in it is clipped at one value and swimming at another, and the reader is left judging a number against a moving edge. Put them beside the bar, where they hold still
22
+ - Stacking several bars for one operation. A reader sums what they see, and three bars at a third each read as three tasks rather than one — the one number that matters, how much of the whole is done, is the one nobody can work out. One bar, one task, and the value label says the rest
23
+ - Standing in for a result. A bar at full says the work finished, not that it succeeded, and a failed upload that ends at 100% tells the reader the opposite of what happened. What came of it is a message, not a measurement
24
+
25
+ ## Props
26
+
27
+ - **size** `enum` · default "md"
28
+ - `sm` — Dense layouts or inline indicators where vertical space is limited
29
+ - `md` — Default for standalone progress indicators in forms or dialogs
30
+ - **variant** `enum` · default "default"
31
+ - `default` — The default, and neutral: no status and no brand. …
32
+ - `accent` — Brand-coloured, and asked for rather than arrived at. Reach for it where the page is drawing attention to this progress — the one thing on screen a reader is waiting on. …
33
+ - `success` — Indicating completion or a successful process
34
+ - `warning` — Progress that needs attention, such as approaching a limit
35
+ - `error` — Progress of a process that has encountered a problem
36
+ - `info` — Informational progress such as downloads, syncing, or data loading
37
+ - **value** `number` · default 0 — The amount of work completed — a number between 0 and max. Defaults to 0, which is the honest rendering of nothing started
38
+ - never: A number outside the range this bar declares. It is held between nought and max before anything is drawn or announced, so a value past the end reads as full to the eye and to the ear alike — the clamp used to be on the width only, and a bar given 150 of 100 was drawn full while announcing 150 of 100
39
+ - **max** `number` · default 100 — The total amount of work differs from the default of 100
40
+ - never: Nought or less. Nothing can be a fraction of nothing, so there is no percentage to state and the bar reads as empty rather than complete — which is the one answer that is certainly wrong. A task whose size is unknown is ProgressBarIndeterminate
41
+ - **label** `string` · optional — Naming what is in progress, when the bar is not already named by what surrounds it. Omit it for a bar that is part of a labelled flow — an onboarding stepper under its own heading — and name the bar with aria-labelledby instead
42
+ - never: Displaying the numeric value, which belongs in the value label. And never leave the bar with no name at all: a progressbar announced without one is announced as nothing
43
+ - **showLabel** `boolean` · default true — The label is visible. When false, the label is visually hidden but remains accessible to screen readers
44
+ - **showValueLabel** `boolean` · default true — The numeric progress value is visible alongside the bar
45
+ - **description** `string` · optional — Freeform context below the bar, such as a step count, status message, or time remaining
46
+ - **motion** `enum` · optional — The bar moves once, on arrival — in an IllustrationCard when the pane has landed, otherwise when it is well into view. For a bar shown as a picture of progress. …
47
+ - `fill` — The bar fills from empty to its value once, on arrival, over motion.duration.dramatic — an account set-up three steps in, shown in a pane
48
+ - never: A bar reporting real, changing progress — an upload, a form being filled. That bar moves because the task does; filling it on arrival as well would show progress that did not happen
49
+
50
+ ## Inside it
51
+
52
+ - Renders 6 parts: root, track, fill, label, value-label, description-text.
53
+
54
+ ---
55
+
56
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/progressbar.md`.
@@ -14,6 +14,7 @@ Two full-screen photo scenes that cross-fade as the reader scrolls
14
14
 
15
15
  ## Something else, when
16
16
 
17
+ - The two scenes are one claim with one word changed — "Trade all day", "Trade all night" → **SceneScrollWord**
17
18
  - There is one photograph, not two states of something → **ImageBanner**
18
19
  - Three or more things to show, each with a picture → **FeatureScroll**
19
20
  - The page's opening band, with an action to take → **LandingHero**
@@ -23,8 +24,8 @@ Two full-screen photo scenes that cross-fade as the reader scrolls
23
24
 
24
25
  - Words a reader must not miss — a price, a disclaimer, a legal line. Each scene's words are on screen for only part of the pass
25
26
  - Two of these on one page, or one beside another pinned section. Each holds the screen for a screen and a half of scrolling, and two make the page feel stuck
26
- - Photographs with words in them. The words are the headings and the lines, where a screen reader and a translation reach them; a photograph saying them is under a scrim and cropped to fill
27
- - An action. There is no slot for one: a button that dissolves away as the reader scrolls is one they cannot rely on, so the page's next section carries it
27
+ - Photographs with words in them. The words are the headings and the lines, where a screen reader and a translation reach them; a photograph saying them is cropped to fill and has the scene's words set over it
28
+ - Words over a busy or mid-toned stretch of photograph. Nothing lies between the words and the photograph, so the photograph has to leave the words a calm, light or dark stretch to sit on, and the scene's ink has to name which
28
29
 
29
30
  ## Props
30
31
 
@@ -36,13 +37,13 @@ Two full-screen photo scenes that cross-fade as the reader scrolls
36
37
  - never: A scene that says the same as the second with a different picture. The change-over is the argument; two scenes that agree have nothing to change between
37
38
  - **second** `data` · required — Always. The scene the section changes over to, in the same shape as the first. …
38
39
  - never: A continuation of the first scene's sentence. A reader who arrives by heading, or who scrolls past fast, reads each title on its own
39
- - **link** `node` · optional — A way on for the reader who wants more — "See trading hours", "Learn more". …
40
- - never: A button, or a different link per scene. One way on for the section; something to press that changed under the pointer would be the one thing a reader could not rely on
40
+ - **action** `node` · optional — One thing for the reader to do or a way on — "Trade now", "See trading hours" — under the words. …
41
+ - never: Two actions, or a different one per scene. One thing to do for the section; something to press that changed under the pointer would be the one thing a reader could not rely on
41
42
 
42
43
  ## Inside it
43
44
 
44
45
  - 7 components are refused inside it; the list and the reasons are in the long document.
45
- - Renders 9 parts: root, stage, scene, media, image, content, title, description, link.
46
+ - Renders 9 parts: root, stage, scene, media, image, content, title, description, action.
46
47
 
47
48
  ---
48
49