@deriv-com/dds-marketing 0.1.0 → 1.0.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 (595) hide show
  1. package/.llm/components/accordion.md +201 -0
  2. package/.llm/components/accordionitem.md +244 -0
  3. package/.llm/components/aspectratio.md +220 -0
  4. package/.llm/components/badge.md +239 -0
  5. package/.llm/components/bottomsheet.md +412 -0
  6. package/.llm/components/breadcrumb.md +205 -0
  7. package/.llm/components/breadcrumbitem.md +186 -0
  8. package/.llm/components/button.md +295 -0
  9. package/.llm/components/buttonicon.md +321 -0
  10. package/.llm/components/card.md +327 -0
  11. package/.llm/components/cardbody.md +435 -0
  12. package/.llm/components/cardbutton.md +273 -0
  13. package/.llm/components/checkbox.md +293 -0
  14. package/.llm/components/ctabanner.md +186 -0
  15. package/.llm/components/ctabannerslider.md +204 -0
  16. package/.llm/components/divider.md +238 -0
  17. package/.llm/components/dropdownmenu.md +461 -0
  18. package/.llm/components/faqaccordion.md +217 -0
  19. package/.llm/components/featurebullets.md +254 -0
  20. package/.llm/components/featurecards.md +313 -0
  21. package/.llm/components/featurescroll.md +284 -0
  22. package/.llm/components/featuresplit.md +249 -0
  23. package/.llm/components/filterchip.md +322 -0
  24. package/.llm/components/footer.md +416 -0
  25. package/.llm/components/footergroup.md +249 -0
  26. package/.llm/components/grid.md +667 -0
  27. package/.llm/components/icon.md +202 -0
  28. package/.llm/components/landinghero.md +254 -0
  29. package/.llm/components/link.md +362 -0
  30. package/.llm/components/logocolumns.md +235 -0
  31. package/.llm/components/logorows.md +212 -0
  32. package/.llm/components/menuitem.md +226 -0
  33. package/.llm/components/navbar.md +522 -0
  34. package/.llm/components/navbaritem.md +246 -0
  35. package/.llm/components/navbarmenu.md +327 -0
  36. package/.llm/components/navbarmenugroup.md +192 -0
  37. package/.llm/components/navbarpanel.md +263 -0
  38. package/.llm/components/navbarswitcher.md +351 -0
  39. package/.llm/components/navbarswitcheroption.md +164 -0
  40. package/.llm/components/option.md +276 -0
  41. package/.llm/components/pageheader.md +231 -0
  42. package/.llm/components/pagination.md +298 -0
  43. package/.llm/components/paginationdots.md +215 -0
  44. package/.llm/components/producthero.md +248 -0
  45. package/.llm/components/removablechip.md +255 -0
  46. package/.llm/components/row.md +389 -0
  47. package/.llm/components/scroller.md +478 -0
  48. package/.llm/components/searchinput.md +287 -0
  49. package/.llm/components/segmentedcontrol.md +366 -0
  50. package/.llm/components/segmentedcontrolitem.md +280 -0
  51. package/.llm/components/select.md +517 -0
  52. package/.llm/components/selectchip.md +375 -0
  53. package/.llm/components/spinner.md +230 -0
  54. package/.llm/components/stack.md +342 -0
  55. package/.llm/components/statusdot.md +213 -0
  56. package/.llm/components/subdomainnavbar.md +335 -0
  57. package/.llm/components/tab.md +299 -0
  58. package/.llm/components/table.md +668 -0
  59. package/.llm/components/tablebody.md +266 -0
  60. package/.llm/components/tablecell.md +256 -0
  61. package/.llm/components/tablehead.md +256 -0
  62. package/.llm/components/tableheadercell.md +306 -0
  63. package/.llm/components/tablerow.md +293 -0
  64. package/.llm/components/tablist.md +218 -0
  65. package/.llm/components/testimonialrow.md +235 -0
  66. package/.llm/components/testimonialslider.md +254 -0
  67. package/.llm/components/textarea.md +370 -0
  68. package/.llm/components/textinput.md +475 -0
  69. package/.llm/components/tooltip.md +275 -0
  70. package/.llm/components/typography.md +253 -0
  71. package/.llm/digest/accordion.md +43 -0
  72. package/.llm/digest/accordionitem.md +47 -0
  73. package/.llm/digest/aspectratio.md +47 -0
  74. package/.llm/digest/badge.md +45 -0
  75. package/.llm/digest/bottomsheet.md +69 -0
  76. package/.llm/digest/breadcrumb.md +38 -0
  77. package/.llm/digest/breadcrumbitem.md +43 -0
  78. package/.llm/digest/button.md +53 -0
  79. package/.llm/digest/buttonicon.md +61 -0
  80. package/.llm/digest/card.md +51 -0
  81. package/.llm/digest/cardbody.md +70 -0
  82. package/.llm/digest/cardbutton.md +50 -0
  83. package/.llm/digest/checkbox.md +63 -0
  84. package/.llm/digest/ctabanner.md +44 -0
  85. package/.llm/digest/ctabannerslider.md +45 -0
  86. package/.llm/digest/divider.md +52 -0
  87. package/.llm/digest/dropdownmenu.md +67 -0
  88. package/.llm/digest/faqaccordion.md +43 -0
  89. package/.llm/digest/featurebullets.md +52 -0
  90. package/.llm/digest/featurecards.md +49 -0
  91. package/.llm/digest/featurescroll.md +52 -0
  92. package/.llm/digest/featuresplit.md +54 -0
  93. package/.llm/digest/filterchip.md +68 -0
  94. package/.llm/digest/footer.md +57 -0
  95. package/.llm/digest/footergroup.md +42 -0
  96. package/.llm/digest/grid.md +62 -0
  97. package/.llm/digest/icon.md +45 -0
  98. package/.llm/digest/landinghero.md +53 -0
  99. package/.llm/digest/link.md +59 -0
  100. package/.llm/digest/logocolumns.md +55 -0
  101. package/.llm/digest/logorows.md +48 -0
  102. package/.llm/digest/menuitem.md +46 -0
  103. package/.llm/digest/navbar.md +75 -0
  104. package/.llm/digest/navbaritem.md +54 -0
  105. package/.llm/digest/navbarmenu.md +54 -0
  106. package/.llm/digest/navbarmenugroup.md +40 -0
  107. package/.llm/digest/navbarpanel.md +53 -0
  108. package/.llm/digest/navbarswitcher.md +51 -0
  109. package/.llm/digest/navbarswitcheroption.md +37 -0
  110. package/.llm/digest/option.md +54 -0
  111. package/.llm/digest/pageheader.md +49 -0
  112. package/.llm/digest/pagination.md +60 -0
  113. package/.llm/digest/paginationdots.md +43 -0
  114. package/.llm/digest/producthero.md +53 -0
  115. package/.llm/digest/removablechip.md +51 -0
  116. package/.llm/digest/row.md +60 -0
  117. package/.llm/digest/scroller.md +59 -0
  118. package/.llm/digest/searchinput.md +56 -0
  119. package/.llm/digest/segmentedcontrol.md +59 -0
  120. package/.llm/digest/segmentedcontrolitem.md +59 -0
  121. package/.llm/digest/select.md +92 -0
  122. package/.llm/digest/selectchip.md +73 -0
  123. package/.llm/digest/spinner.md +52 -0
  124. package/.llm/digest/stack.md +56 -0
  125. package/.llm/digest/statusdot.md +46 -0
  126. package/.llm/digest/subdomainnavbar.md +54 -0
  127. package/.llm/digest/tab.md +60 -0
  128. package/.llm/digest/table.md +71 -0
  129. package/.llm/digest/tablebody.md +49 -0
  130. package/.llm/digest/tablecell.md +55 -0
  131. package/.llm/digest/tablehead.md +50 -0
  132. package/.llm/digest/tableheadercell.md +65 -0
  133. package/.llm/digest/tablerow.md +56 -0
  134. package/.llm/digest/tablist.md +46 -0
  135. package/.llm/digest/testimonialrow.md +51 -0
  136. package/.llm/digest/testimonialslider.md +51 -0
  137. package/.llm/digest/textarea.md +78 -0
  138. package/.llm/digest/textinput.md +95 -0
  139. package/.llm/digest/tooltip.md +58 -0
  140. package/.llm/digest/typography.md +59 -0
  141. package/.llm/index.md +107 -0
  142. package/.llm/rules.md +146 -0
  143. package/.llm/tokens.md +385 -0
  144. package/AGENTS.md +189 -0
  145. package/LICENSE +21 -0
  146. package/README.md +78 -10
  147. package/dist/components/banner-data.d.ts +38 -0
  148. package/dist/components/banner-data.js +15 -0
  149. package/dist/components/blocks/block-reveal.css +90 -0
  150. package/dist/components/blocks/cta-banner/CtaBanner.css +66 -0
  151. package/dist/components/blocks/cta-banner/CtaBanner.d.ts +22 -0
  152. package/dist/components/blocks/cta-banner/CtaBanner.js +31 -0
  153. package/dist/components/blocks/cta-banner/CtaBanner.types.d.ts +29 -0
  154. package/dist/components/blocks/cta-banner/CtaBanner.types.js +13 -0
  155. package/dist/components/blocks/cta-banner/cta-banner-impl.css +29 -0
  156. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.css +90 -0
  157. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.d.ts +39 -0
  158. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.js +60 -0
  159. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.d.ts +41 -0
  160. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.js +15 -0
  161. package/dist/components/blocks/cta-banner-slider/cta-banner-slider-impl.css +73 -0
  162. package/dist/components/blocks/faq-accordion/FaqAccordion.css +54 -0
  163. package/dist/components/blocks/faq-accordion/FaqAccordion.d.ts +20 -0
  164. package/dist/components/blocks/faq-accordion/FaqAccordion.js +28 -0
  165. package/dist/components/blocks/faq-accordion/FaqAccordion.types.d.ts +25 -0
  166. package/dist/components/blocks/faq-accordion/FaqAccordion.types.js +10 -0
  167. package/dist/components/blocks/faq-accordion/faq-accordion-impl.css +54 -0
  168. package/dist/components/blocks/feature-bullets/FeatureBullets.css +139 -0
  169. package/dist/components/blocks/feature-bullets/FeatureBullets.d.ts +31 -0
  170. package/dist/components/blocks/feature-bullets/FeatureBullets.js +55 -0
  171. package/dist/components/blocks/feature-bullets/FeatureBullets.types.d.ts +39 -0
  172. package/dist/components/blocks/feature-bullets/FeatureBullets.types.js +16 -0
  173. package/dist/components/blocks/feature-bullets/feature-bullets-impl.css +104 -0
  174. package/dist/components/blocks/feature-cards/FeatureCards.css +84 -0
  175. package/dist/components/blocks/feature-cards/FeatureCards.d.ts +24 -0
  176. package/dist/components/blocks/feature-cards/FeatureCards.js +66 -0
  177. package/dist/components/blocks/feature-cards/FeatureCards.types.d.ts +33 -0
  178. package/dist/components/blocks/feature-cards/FeatureCards.types.js +14 -0
  179. package/dist/components/blocks/feature-cards/feature-cards-impl.css +245 -0
  180. package/dist/components/blocks/feature-scroll/FeatureScroll.css +137 -0
  181. package/dist/components/blocks/feature-scroll/FeatureScroll.d.ts +39 -0
  182. package/dist/components/blocks/feature-scroll/FeatureScroll.js +167 -0
  183. package/dist/components/blocks/feature-scroll/FeatureScroll.types.d.ts +40 -0
  184. package/dist/components/blocks/feature-scroll/FeatureScroll.types.js +17 -0
  185. package/dist/components/blocks/feature-scroll/feature-scroll-impl.css +292 -0
  186. package/dist/components/blocks/feature-split/FeatureSplit.css +95 -0
  187. package/dist/components/blocks/feature-split/FeatureSplit.d.ts +30 -0
  188. package/dist/components/blocks/feature-split/FeatureSplit.js +38 -0
  189. package/dist/components/blocks/feature-split/FeatureSplit.types.d.ts +39 -0
  190. package/dist/components/blocks/feature-split/FeatureSplit.types.js +14 -0
  191. package/dist/components/blocks/feature-split/feature-split-impl.css +83 -0
  192. package/dist/components/blocks/landing-hero/LandingHero.css +85 -0
  193. package/dist/components/blocks/landing-hero/LandingHero.d.ts +41 -0
  194. package/dist/components/blocks/landing-hero/LandingHero.js +54 -0
  195. package/dist/components/blocks/landing-hero/LandingHero.types.d.ts +37 -0
  196. package/dist/components/blocks/landing-hero/LandingHero.types.js +15 -0
  197. package/dist/components/blocks/landing-hero/landing-hero-impl.css +355 -0
  198. package/dist/components/blocks/logo-columns/LogoColumns.css +161 -0
  199. package/dist/components/blocks/logo-columns/LogoColumns.d.ts +23 -0
  200. package/dist/components/blocks/logo-columns/LogoColumns.js +46 -0
  201. package/dist/components/blocks/logo-columns/LogoColumns.types.d.ts +46 -0
  202. package/dist/components/blocks/logo-columns/LogoColumns.types.js +18 -0
  203. package/dist/components/blocks/logo-columns/logo-columns-impl.css +188 -0
  204. package/dist/components/blocks/logo-rows/LogoRows.css +122 -0
  205. package/dist/components/blocks/logo-rows/LogoRows.d.ts +20 -0
  206. package/dist/components/blocks/logo-rows/LogoRows.js +43 -0
  207. package/dist/components/blocks/logo-rows/LogoRows.types.d.ts +36 -0
  208. package/dist/components/blocks/logo-rows/LogoRows.types.js +16 -0
  209. package/dist/components/blocks/logo-rows/logo-rows-impl.css +179 -0
  210. package/dist/components/blocks/page-header/PageHeader.css +79 -0
  211. package/dist/components/blocks/page-header/PageHeader.d.ts +34 -0
  212. package/dist/components/blocks/page-header/PageHeader.js +43 -0
  213. package/dist/components/blocks/page-header/PageHeader.types.d.ts +32 -0
  214. package/dist/components/blocks/page-header/PageHeader.types.js +14 -0
  215. package/dist/components/blocks/page-header/page-header-impl.css +176 -0
  216. package/dist/components/blocks/product-hero/ProductHero.css +86 -0
  217. package/dist/components/blocks/product-hero/ProductHero.d.ts +35 -0
  218. package/dist/components/blocks/product-hero/ProductHero.js +48 -0
  219. package/dist/components/blocks/product-hero/ProductHero.types.d.ts +37 -0
  220. package/dist/components/blocks/product-hero/ProductHero.types.js +15 -0
  221. package/dist/components/blocks/product-hero/product-hero-impl.css +354 -0
  222. package/dist/components/blocks/testimonial-row/TestimonialRow.css +245 -0
  223. package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +20 -0
  224. package/dist/components/blocks/testimonial-row/TestimonialRow.js +128 -0
  225. package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +54 -0
  226. package/dist/components/blocks/testimonial-row/TestimonialRow.types.js +26 -0
  227. package/dist/components/blocks/testimonial-row/testimonial-row-impl.css +195 -0
  228. package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +181 -0
  229. package/dist/components/blocks/testimonial-slider/TestimonialSlider.d.ts +22 -0
  230. package/dist/components/blocks/testimonial-slider/TestimonialSlider.js +36 -0
  231. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +49 -0
  232. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.js +21 -0
  233. package/dist/components/blocks/testimonial-slider/testimonial-slider-impl.css +202 -0
  234. package/dist/components/blocks/use-reveal.d.ts +46 -0
  235. package/dist/components/blocks/use-reveal.js +120 -0
  236. package/dist/components/blocks/use-rotation.d.ts +62 -0
  237. package/dist/components/blocks/use-rotation.js +176 -0
  238. package/dist/components/core/accordion/Accordion.css +10 -0
  239. package/dist/components/core/accordion/Accordion.d.ts +20 -0
  240. package/dist/components/core/accordion/Accordion.js +69 -0
  241. package/dist/components/core/accordion/Accordion.types.d.ts +20 -0
  242. package/dist/components/core/accordion/Accordion.types.js +7 -0
  243. package/dist/components/core/accordion-item/AccordionItem.css +99 -0
  244. package/dist/components/core/accordion-item/AccordionItem.d.ts +44 -0
  245. package/dist/components/core/accordion-item/AccordionItem.js +63 -0
  246. package/dist/components/core/accordion-item/AccordionItem.types.d.ts +32 -0
  247. package/dist/components/core/accordion-item/AccordionItem.types.js +13 -0
  248. package/dist/components/core/accordion-item/accordion-item-impl.css +107 -0
  249. package/dist/components/core/badge/Badge.css +37 -0
  250. package/dist/components/core/badge/Badge.d.ts +37 -0
  251. package/dist/components/core/badge/Badge.js +40 -0
  252. package/dist/components/core/badge/Badge.types.d.ts +24 -0
  253. package/dist/components/core/badge/Badge.types.js +8 -0
  254. package/dist/components/core/badge/badge-impl.css +32 -0
  255. package/dist/components/core/bottom-sheet/BottomSheet.css +178 -0
  256. package/dist/components/core/bottom-sheet/BottomSheet.d.ts +22 -0
  257. package/dist/components/core/bottom-sheet/BottomSheet.js +359 -0
  258. package/dist/components/core/bottom-sheet/BottomSheet.types.d.ts +67 -0
  259. package/dist/components/core/bottom-sheet/BottomSheet.types.js +18 -0
  260. package/dist/components/core/bottom-sheet/bottom-sheet-impl.css +57 -0
  261. package/dist/components/core/breadcrumb/Breadcrumb.css +19 -0
  262. package/dist/components/core/breadcrumb/Breadcrumb.d.ts +16 -0
  263. package/dist/components/core/breadcrumb/Breadcrumb.js +22 -0
  264. package/dist/components/core/breadcrumb/Breadcrumb.types.d.ts +18 -0
  265. package/dist/components/core/breadcrumb/Breadcrumb.types.js +9 -0
  266. package/dist/components/core/breadcrumb-item/BreadcrumbItem.css +34 -0
  267. package/dist/components/core/breadcrumb-item/BreadcrumbItem.d.ts +12 -0
  268. package/dist/components/core/breadcrumb-item/BreadcrumbItem.js +15 -0
  269. package/dist/components/core/breadcrumb-item/BreadcrumbItem.types.d.ts +22 -0
  270. package/dist/components/core/breadcrumb-item/BreadcrumbItem.types.js +9 -0
  271. package/dist/components/core/button/Button.css +188 -0
  272. package/dist/components/core/button/Button.d.ts +27 -0
  273. package/dist/components/core/button/Button.js +57 -0
  274. package/dist/components/core/button/Button.types.d.ts +35 -0
  275. package/dist/components/core/button/Button.types.js +9 -0
  276. package/dist/components/core/button/button-impl.css +71 -0
  277. package/dist/components/core/button-icon/ButtonIcon.css +151 -0
  278. package/dist/components/core/button-icon/ButtonIcon.d.ts +34 -0
  279. package/dist/components/core/button-icon/ButtonIcon.js +117 -0
  280. package/dist/components/core/button-icon/ButtonIcon.types.d.ts +41 -0
  281. package/dist/components/core/button-icon/ButtonIcon.types.js +8 -0
  282. package/dist/components/core/card/Card.css +74 -0
  283. package/dist/components/core/card/Card.d.ts +24 -0
  284. package/dist/components/core/card/Card.js +26 -0
  285. package/dist/components/core/card/Card.types.d.ts +34 -0
  286. package/dist/components/core/card/Card.types.js +7 -0
  287. package/dist/components/core/card-body/CardBody.css +144 -0
  288. package/dist/components/core/card-body/CardBody.d.ts +62 -0
  289. package/dist/components/core/card-body/CardBody.js +97 -0
  290. package/dist/components/core/card-body/CardBody.types.d.ts +64 -0
  291. package/dist/components/core/card-body/CardBody.types.js +16 -0
  292. package/dist/components/core/card-body/card-body-impl.css +87 -0
  293. package/dist/components/core/card-button/CardButton.css +82 -0
  294. package/dist/components/core/card-button/CardButton.d.ts +27 -0
  295. package/dist/components/core/card-button/CardButton.js +37 -0
  296. package/dist/components/core/card-button/CardButton.types.d.ts +25 -0
  297. package/dist/components/core/card-button/CardButton.types.js +7 -0
  298. package/dist/components/core/card-button/card-button-impl.css +39 -0
  299. package/dist/components/core/checkbox/Checkbox.css +156 -0
  300. package/dist/components/core/checkbox/Checkbox.d.ts +21 -0
  301. package/dist/components/core/checkbox/Checkbox.js +97 -0
  302. package/dist/components/core/checkbox/Checkbox.types.d.ts +46 -0
  303. package/dist/components/core/checkbox/Checkbox.types.js +15 -0
  304. package/dist/components/core/checkbox/checkbox-impl.css +90 -0
  305. package/dist/components/core/divider/Divider.css +41 -0
  306. package/dist/components/core/divider/Divider.d.ts +46 -0
  307. package/dist/components/core/divider/Divider.js +51 -0
  308. package/dist/components/core/divider/Divider.types.d.ts +25 -0
  309. package/dist/components/core/divider/Divider.types.js +9 -0
  310. package/dist/components/core/dropdown-menu/DropdownMenu.css +147 -0
  311. package/dist/components/core/dropdown-menu/DropdownMenu.d.ts +24 -0
  312. package/dist/components/core/dropdown-menu/DropdownMenu.js +311 -0
  313. package/dist/components/core/dropdown-menu/DropdownMenu.types.d.ts +62 -0
  314. package/dist/components/core/dropdown-menu/DropdownMenu.types.js +12 -0
  315. package/dist/components/core/dropdown-menu/dropdown-menu-impl.css +70 -0
  316. package/dist/components/core/filter-chip/FilterChip.css +150 -0
  317. package/dist/components/core/filter-chip/FilterChip.d.ts +23 -0
  318. package/dist/components/core/filter-chip/FilterChip.js +37 -0
  319. package/dist/components/core/filter-chip/FilterChip.types.d.ts +53 -0
  320. package/dist/components/core/filter-chip/FilterChip.types.js +12 -0
  321. package/dist/components/core/footer/Footer.css +104 -0
  322. package/dist/components/core/footer/Footer.d.ts +43 -0
  323. package/dist/components/core/footer/Footer.js +53 -0
  324. package/dist/components/core/footer/Footer.types.d.ts +47 -0
  325. package/dist/components/core/footer/Footer.types.js +18 -0
  326. package/dist/components/core/footer/footer-impl.css +218 -0
  327. package/dist/components/core/footer-group/FooterGroup.css +91 -0
  328. package/dist/components/core/footer-group/FooterGroup.d.ts +32 -0
  329. package/dist/components/core/footer-group/FooterGroup.js +64 -0
  330. package/dist/components/core/footer-group/FooterGroup.types.d.ts +25 -0
  331. package/dist/components/core/footer-group/FooterGroup.types.js +12 -0
  332. package/dist/components/core/footer-group/footer-group-impl.css +78 -0
  333. package/dist/components/core/icon/Icon.css +40 -0
  334. package/dist/components/core/icon/Icon.d.ts +23 -0
  335. package/dist/components/core/icon/Icon.js +79 -0
  336. package/dist/components/core/icon/Icon.types.d.ts +24 -0
  337. package/dist/components/core/icon/Icon.types.js +7 -0
  338. package/dist/components/core/link/Link.css +89 -0
  339. package/dist/components/core/link/Link.d.ts +37 -0
  340. package/dist/components/core/link/Link.js +141 -0
  341. package/dist/components/core/link/Link.types.d.ts +41 -0
  342. package/dist/components/core/link/Link.types.js +9 -0
  343. package/dist/components/core/link/link-impl.css +168 -0
  344. package/dist/components/core/menu-item/MenuItem.css +70 -0
  345. package/dist/components/core/menu-item/MenuItem.d.ts +11 -0
  346. package/dist/components/core/menu-item/MenuItem.js +26 -0
  347. package/dist/components/core/menu-item/MenuItem.types.d.ts +28 -0
  348. package/dist/components/core/menu-item/MenuItem.types.js +9 -0
  349. package/dist/components/core/navbar/Navbar.css +134 -0
  350. package/dist/components/core/navbar/Navbar.d.ts +52 -0
  351. package/dist/components/core/navbar/Navbar.js +498 -0
  352. package/dist/components/core/navbar/Navbar.types.d.ts +68 -0
  353. package/dist/components/core/navbar/Navbar.types.js +17 -0
  354. package/dist/components/core/navbar/navbar-impl.css +597 -0
  355. package/dist/components/core/navbar/navbar-material.css +96 -0
  356. package/dist/components/core/navbar-item/NavbarItem.css +75 -0
  357. package/dist/components/core/navbar-item/NavbarItem.d.ts +22 -0
  358. package/dist/components/core/navbar-item/NavbarItem.js +40 -0
  359. package/dist/components/core/navbar-item/NavbarItem.types.d.ts +34 -0
  360. package/dist/components/core/navbar-item/NavbarItem.types.js +10 -0
  361. package/dist/components/core/navbar-menu/NavbarMenu.css +130 -0
  362. package/dist/components/core/navbar-menu/NavbarMenu.d.ts +6 -0
  363. package/dist/components/core/navbar-menu/NavbarMenu.js +187 -0
  364. package/dist/components/core/navbar-menu/NavbarMenu.types.d.ts +45 -0
  365. package/dist/components/core/navbar-menu/NavbarMenu.types.js +12 -0
  366. package/dist/components/core/navbar-menu/navbar-menu-impl.css +186 -0
  367. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.css +26 -0
  368. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.d.ts +17 -0
  369. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.js +22 -0
  370. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.types.d.ts +14 -0
  371. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.types.js +7 -0
  372. package/dist/components/core/navbar-panel/NavbarPanel.css +87 -0
  373. package/dist/components/core/navbar-panel/NavbarPanel.d.ts +34 -0
  374. package/dist/components/core/navbar-panel/NavbarPanel.js +46 -0
  375. package/dist/components/core/navbar-panel/NavbarPanel.types.d.ts +29 -0
  376. package/dist/components/core/navbar-panel/NavbarPanel.types.js +12 -0
  377. package/dist/components/core/navbar-panel/navbar-panel-impl.css +104 -0
  378. package/dist/components/core/navbar-panel/use-navbar-panel.d.ts +26 -0
  379. package/dist/components/core/navbar-panel/use-navbar-panel.js +135 -0
  380. package/dist/components/core/navbar-switcher/NavbarSwitcher.css +118 -0
  381. package/dist/components/core/navbar-switcher/NavbarSwitcher.d.ts +21 -0
  382. package/dist/components/core/navbar-switcher/NavbarSwitcher.js +91 -0
  383. package/dist/components/core/navbar-switcher/NavbarSwitcher.types.d.ts +46 -0
  384. package/dist/components/core/navbar-switcher/NavbarSwitcher.types.js +13 -0
  385. package/dist/components/core/navbar-switcher/navbar-switcher-impl.css +179 -0
  386. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.css +39 -0
  387. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.d.ts +16 -0
  388. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.js +19 -0
  389. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.types.d.ts +18 -0
  390. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.types.js +7 -0
  391. package/dist/components/core/option/Option.css +133 -0
  392. package/dist/components/core/option/Option.d.ts +25 -0
  393. package/dist/components/core/option/Option.js +31 -0
  394. package/dist/components/core/option/Option.types.d.ts +44 -0
  395. package/dist/components/core/option/Option.types.js +14 -0
  396. package/dist/components/core/pagination/Pagination.css +163 -0
  397. package/dist/components/core/pagination/Pagination.d.ts +30 -0
  398. package/dist/components/core/pagination/Pagination.js +366 -0
  399. package/dist/components/core/pagination/Pagination.types.d.ts +47 -0
  400. package/dist/components/core/pagination/Pagination.types.js +12 -0
  401. package/dist/components/core/pagination/pagination-impl.css +17 -0
  402. package/dist/components/core/pagination-dots/PaginationDots.css +60 -0
  403. package/dist/components/core/pagination-dots/PaginationDots.d.ts +25 -0
  404. package/dist/components/core/pagination-dots/PaginationDots.js +104 -0
  405. package/dist/components/core/pagination-dots/PaginationDots.types.d.ts +38 -0
  406. package/dist/components/core/pagination-dots/PaginationDots.types.js +9 -0
  407. package/dist/components/core/removable-chip/RemovableChip.css +125 -0
  408. package/dist/components/core/removable-chip/RemovableChip.d.ts +25 -0
  409. package/dist/components/core/removable-chip/RemovableChip.js +36 -0
  410. package/dist/components/core/removable-chip/RemovableChip.types.d.ts +38 -0
  411. package/dist/components/core/removable-chip/RemovableChip.types.js +13 -0
  412. package/dist/components/core/search-input/SearchInput.css +205 -0
  413. package/dist/components/core/search-input/SearchInput.d.ts +5 -0
  414. package/dist/components/core/search-input/SearchInput.js +81 -0
  415. package/dist/components/core/search-input/SearchInput.types.d.ts +43 -0
  416. package/dist/components/core/search-input/SearchInput.types.js +13 -0
  417. package/dist/components/core/search-input/search-input-impl.css +20 -0
  418. package/dist/components/core/segmented-control/SegmentedControl.css +57 -0
  419. package/dist/components/core/segmented-control/SegmentedControl.d.ts +37 -0
  420. package/dist/components/core/segmented-control/SegmentedControl.js +269 -0
  421. package/dist/components/core/segmented-control/SegmentedControl.types.d.ts +38 -0
  422. package/dist/components/core/segmented-control/SegmentedControl.types.js +8 -0
  423. package/dist/components/core/segmented-control/segmented-control-impl.css +57 -0
  424. package/dist/components/core/segmented-control-item/SegmentedControlItem.css +151 -0
  425. package/dist/components/core/segmented-control-item/SegmentedControlItem.d.ts +50 -0
  426. package/dist/components/core/segmented-control-item/SegmentedControlItem.js +101 -0
  427. package/dist/components/core/segmented-control-item/SegmentedControlItem.types.d.ts +37 -0
  428. package/dist/components/core/segmented-control-item/SegmentedControlItem.types.js +10 -0
  429. package/dist/components/core/segmented-control-item/segmented-control-item-impl.css +69 -0
  430. package/dist/components/core/select/Select.css +401 -0
  431. package/dist/components/core/select/Select.d.ts +29 -0
  432. package/dist/components/core/select/Select.js +524 -0
  433. package/dist/components/core/select/Select.types.d.ts +96 -0
  434. package/dist/components/core/select/Select.types.js +26 -0
  435. package/dist/components/core/select/select-impl.css +114 -0
  436. package/dist/components/core/select-chip/SelectChip.css +162 -0
  437. package/dist/components/core/select-chip/SelectChip.d.ts +20 -0
  438. package/dist/components/core/select-chip/SelectChip.js +276 -0
  439. package/dist/components/core/select-chip/SelectChip.types.d.ts +62 -0
  440. package/dist/components/core/select-chip/SelectChip.types.js +14 -0
  441. package/dist/components/core/select-chip/select-chip-impl.css +49 -0
  442. package/dist/components/core/spinner/Spinner.css +76 -0
  443. package/dist/components/core/spinner/Spinner.d.ts +5 -0
  444. package/dist/components/core/spinner/Spinner.js +29 -0
  445. package/dist/components/core/spinner/Spinner.types.d.ts +37 -0
  446. package/dist/components/core/spinner/Spinner.types.js +10 -0
  447. package/dist/components/core/spinner/spinner-impl.css +27 -0
  448. package/dist/components/core/status-dot/StatusDot.css +43 -0
  449. package/dist/components/core/status-dot/StatusDot.d.ts +35 -0
  450. package/dist/components/core/status-dot/StatusDot.js +46 -0
  451. package/dist/components/core/status-dot/StatusDot.types.d.ts +29 -0
  452. package/dist/components/core/status-dot/StatusDot.types.js +7 -0
  453. package/dist/components/core/status-dot/status-dot-impl.css +42 -0
  454. package/dist/components/core/subdomain-navbar/SubdomainNavbar.css +89 -0
  455. package/dist/components/core/subdomain-navbar/SubdomainNavbar.d.ts +21 -0
  456. package/dist/components/core/subdomain-navbar/SubdomainNavbar.js +127 -0
  457. package/dist/components/core/subdomain-navbar/SubdomainNavbar.types.d.ts +43 -0
  458. package/dist/components/core/subdomain-navbar/SubdomainNavbar.types.js +13 -0
  459. package/dist/components/core/subdomain-navbar/subdomain-navbar-impl.css +147 -0
  460. package/dist/components/core/tab/Tab.css +113 -0
  461. package/dist/components/core/tab/Tab.d.ts +36 -0
  462. package/dist/components/core/tab/Tab.js +53 -0
  463. package/dist/components/core/tab/Tab.types.d.ts +42 -0
  464. package/dist/components/core/tab/Tab.types.js +13 -0
  465. package/dist/components/core/tab/tab-impl.css +49 -0
  466. package/dist/components/core/tab-list/TabList.css +40 -0
  467. package/dist/components/core/tab-list/TabList.d.ts +26 -0
  468. package/dist/components/core/tab-list/TabList.js +124 -0
  469. package/dist/components/core/tab-list/TabList.types.d.ts +20 -0
  470. package/dist/components/core/tab-list/TabList.types.js +7 -0
  471. package/dist/components/core/tab-list/tab-list-impl.css +56 -0
  472. package/dist/components/core/table/Table.css +40 -0
  473. package/dist/components/core/table/Table.d.ts +19 -0
  474. package/dist/components/core/table/Table.js +55 -0
  475. package/dist/components/core/table/Table.types.d.ts +59 -0
  476. package/dist/components/core/table/Table.types.js +9 -0
  477. package/dist/components/core/table/table-impl.css +97 -0
  478. package/dist/components/core/table/use-table-sort.d.ts +43 -0
  479. package/dist/components/core/table/use-table-sort.js +51 -0
  480. package/dist/components/core/table-body/TableBody.css +6 -0
  481. package/dist/components/core/table-body/TableBody.d.ts +12 -0
  482. package/dist/components/core/table-body/TableBody.js +26 -0
  483. package/dist/components/core/table-body/TableBody.types.d.ts +36 -0
  484. package/dist/components/core/table-body/TableBody.types.js +7 -0
  485. package/dist/components/core/table-cell/TableCell.css +76 -0
  486. package/dist/components/core/table-cell/TableCell.d.ts +21 -0
  487. package/dist/components/core/table-cell/TableCell.js +31 -0
  488. package/dist/components/core/table-cell/TableCell.types.d.ts +43 -0
  489. package/dist/components/core/table-cell/TableCell.types.js +7 -0
  490. package/dist/components/core/table-head/TableHead.css +6 -0
  491. package/dist/components/core/table-head/TableHead.d.ts +22 -0
  492. package/dist/components/core/table-head/TableHead.js +52 -0
  493. package/dist/components/core/table-head/TableHead.types.d.ts +39 -0
  494. package/dist/components/core/table-head/TableHead.types.js +7 -0
  495. package/dist/components/core/table-head/table-head-impl.css +51 -0
  496. package/dist/components/core/table-header-cell/TableHeaderCell.css +126 -0
  497. package/dist/components/core/table-header-cell/TableHeaderCell.d.ts +21 -0
  498. package/dist/components/core/table-header-cell/TableHeaderCell.js +34 -0
  499. package/dist/components/core/table-header-cell/TableHeaderCell.types.d.ts +56 -0
  500. package/dist/components/core/table-header-cell/TableHeaderCell.types.js +9 -0
  501. package/dist/components/core/table-header-cell/table-header-cell-impl.css +74 -0
  502. package/dist/components/core/table-row/TableRow.css +18 -0
  503. package/dist/components/core/table-row/TableRow.d.ts +17 -0
  504. package/dist/components/core/table-row/TableRow.js +32 -0
  505. package/dist/components/core/table-row/TableRow.types.d.ts +45 -0
  506. package/dist/components/core/table-row/TableRow.types.js +7 -0
  507. package/dist/components/core/table-row/table-row-impl.css +31 -0
  508. package/dist/components/core/text-area/TextArea.css +325 -0
  509. package/dist/components/core/text-area/TextArea.d.ts +13 -0
  510. package/dist/components/core/text-area/TextArea.js +133 -0
  511. package/dist/components/core/text-area/TextArea.types.d.ts +67 -0
  512. package/dist/components/core/text-area/TextArea.types.js +19 -0
  513. package/dist/components/core/text-area/text-area-impl.css +36 -0
  514. package/dist/components/core/text-input/TextInput.css +400 -0
  515. package/dist/components/core/text-input/TextInput.d.ts +5 -0
  516. package/dist/components/core/text-input/TextInput.js +130 -0
  517. package/dist/components/core/text-input/TextInput.types.d.ts +96 -0
  518. package/dist/components/core/text-input/TextInput.types.js +24 -0
  519. package/dist/components/core/text-input/text-input-impl.css +36 -0
  520. package/dist/components/core/tooltip/Tooltip.css +101 -0
  521. package/dist/components/core/tooltip/Tooltip.d.ts +51 -0
  522. package/dist/components/core/tooltip/Tooltip.js +87 -0
  523. package/dist/components/core/tooltip/Tooltip.types.d.ts +38 -0
  524. package/dist/components/core/tooltip/Tooltip.types.js +9 -0
  525. package/dist/components/core/tooltip/TooltipAnchor.d.ts +52 -0
  526. package/dist/components/core/tooltip/TooltipAnchor.js +69 -0
  527. package/dist/components/core/tooltip/tooltip-anchor.css +145 -0
  528. package/dist/components/core/tooltip/tooltip-impl.css +54 -0
  529. package/dist/components/core/tooltip/use-tooltip.d.ts +111 -0
  530. package/dist/components/core/tooltip/use-tooltip.js +189 -0
  531. package/dist/components/core/typography/Typography.css +96 -0
  532. package/dist/components/core/typography/Typography.d.ts +297 -0
  533. package/dist/components/core/typography/Typography.js +28 -0
  534. package/dist/components/core/typography/Typography.types.d.ts +40 -0
  535. package/dist/components/core/typography/Typography.types.js +7 -0
  536. package/dist/components/css-time.d.ts +20 -0
  537. package/dist/components/css-time.js +30 -0
  538. package/dist/components/given.d.ts +7 -0
  539. package/dist/components/given.js +9 -0
  540. package/dist/components/hover-open.d.ts +34 -0
  541. package/dist/components/hover-open.js +90 -0
  542. package/dist/components/index.d.ts +149 -1
  543. package/dist/components/index.js +145 -2
  544. package/dist/components/layout/aspect-ratio/AspectRatio.css +29 -0
  545. package/dist/components/layout/aspect-ratio/AspectRatio.d.ts +24 -0
  546. package/dist/components/layout/aspect-ratio/AspectRatio.js +26 -0
  547. package/dist/components/layout/aspect-ratio/AspectRatio.types.d.ts +22 -0
  548. package/dist/components/layout/aspect-ratio/AspectRatio.types.js +7 -0
  549. package/dist/components/layout/aspect-ratio/aspect-ratio-impl.css +44 -0
  550. package/dist/components/layout/grid/Grid.css +76 -0
  551. package/dist/components/layout/grid/Grid.d.ts +31 -0
  552. package/dist/components/layout/grid/Grid.js +33 -0
  553. package/dist/components/layout/grid/Grid.types.d.ts +48 -0
  554. package/dist/components/layout/grid/Grid.types.js +7 -0
  555. package/dist/components/layout/grid/grid-impl.css +62 -0
  556. package/dist/components/layout/row/Row.css +85 -0
  557. package/dist/components/layout/row/Row.d.ts +32 -0
  558. package/dist/components/layout/row/Row.js +34 -0
  559. package/dist/components/layout/row/Row.types.d.ts +45 -0
  560. package/dist/components/layout/row/Row.types.js +7 -0
  561. package/dist/components/layout/scroller/Scroller.css +59 -0
  562. package/dist/components/layout/scroller/Scroller.d.ts +34 -0
  563. package/dist/components/layout/scroller/Scroller.js +36 -0
  564. package/dist/components/layout/scroller/Scroller.types.d.ts +38 -0
  565. package/dist/components/layout/scroller/Scroller.types.js +7 -0
  566. package/dist/components/layout/scroller/scroller-impl.css +45 -0
  567. package/dist/components/layout/stack/Stack.css +73 -0
  568. package/dist/components/layout/stack/Stack.d.ts +28 -0
  569. package/dist/components/layout/stack/Stack.js +30 -0
  570. package/dist/components/layout/stack/Stack.types.d.ts +41 -0
  571. package/dist/components/layout/stack/Stack.types.js +7 -0
  572. package/dist/components/logo-data.d.ts +24 -0
  573. package/dist/components/logo-data.js +11 -0
  574. package/dist/components/scroll-data.d.ts +64 -0
  575. package/dist/components/scroll-data.js +17 -0
  576. package/dist/components/testimonial-row-data.d.ts +51 -0
  577. package/dist/components/testimonial-row-data.js +11 -0
  578. package/dist/components/testimonial-slider-data.d.ts +26 -0
  579. package/dist/components/testimonial-slider-data.js +10 -0
  580. package/dist/components/visually-hidden.d.ts +22 -0
  581. package/dist/components/visually-hidden.js +31 -0
  582. package/dist/fonts/LICENSE-inter.txt +93 -0
  583. package/dist/fonts/LICENSE-red-hat-mono.txt +93 -0
  584. package/dist/fonts/fonts.css +111 -0
  585. package/dist/fonts/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  586. package/dist/fonts/inter-cyrillic-wght-normal.woff2 +0 -0
  587. package/dist/fonts/inter-greek-ext-wght-normal.woff2 +0 -0
  588. package/dist/fonts/inter-greek-wght-normal.woff2 +0 -0
  589. package/dist/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  590. package/dist/fonts/inter-latin-wght-normal.woff2 +0 -0
  591. package/dist/fonts/inter-vietnamese-wght-normal.woff2 +0 -0
  592. package/dist/fonts/red-hat-mono-latin-ext-wght-normal.woff2 +0 -0
  593. package/dist/fonts/red-hat-mono-latin-wght-normal.woff2 +0 -0
  594. package/dist/marketing.css +581 -162
  595. package/package.json +13 -4
@@ -0,0 +1,57 @@
1
+ <!-- GENERATED from footer.contract.json. Do not edit. -->
2
+
3
+ # Footer
4
+
5
+ The band that closes a marketing page, and the sections every one of them is made of: whose site this is, where else it goes, what the law obliges it to say, and the line that closes it. …
6
+
7
+ `import { Footer } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A marketing page needs its closing band — the mark, the site's other destinations, the regulatory text and the copyright line
12
+ - The same footer has to hold its content to the page's measure and gutter without the page restating either
13
+ - The regulatory or legal wording has to sit in a consistent place across every page of the site
14
+
15
+ ## Something else, when
16
+
17
+ - The content closes a card or a panel rather than the page → **Card**
18
+ - The navigation is the page's primary one, at the top → **Navbar**
19
+ - What is needed is a horizontal rule between two blocks of content → **Divider**
20
+
21
+ ## Never
22
+
23
+ - A sticky bar of actions at the bottom of the viewport. This closes the document and scrolls away with it; an action rail that follows the reader is a different component and a different landmark
24
+ - A second navigation landmark competing with the top bar. The destinations here are the ones a reader looks down for rather than up for — the company, the legal pages, the secondary sections
25
+ - Page content. A band that closes the document is not a section to put a feature list in, and a reader who meets real content below the copyright line has been told the page ended and then found it had not
26
+
27
+ ## Props
28
+
29
+ - **label** `string` · required — Always — it names the navigation landmark, and a page with two unnamed ones tells a screen-reader user there is navigation in both places without saying how they differ. …
30
+ - never: A visible heading. Nothing draws this. The band needs no title, and a page that wants one composes a heading into the section itself
31
+ - **columns** `enum` · default "4" — How many columns the destinations fall into at full width. Four is the ceiling, and with the rail beside them that is five regions across — which is as many as a band can hold before a reader stops scanning columns and starts reading a wall. …
32
+ - `2` — A short footer, or one whose sets run long
33
+ - `3` — The middle case, and the one a site with a rail beside its columns often wants
34
+ - `4` — The default, and the widest the band goes. With the rail beside them that is five regions across
35
+ - never: Forcing a layout on a phone. Nothing here holds at a phone's width — the grid drops to a single column and this value is not read
36
+ - **copyright** `string` · optional — The line the band closes on, where the site carries one. Pass the sentence the site uses, the year included: this formats nothing and computes nothing. Optional, which it did not used to be. …
37
+ - never: The regulatory text. A disclaimer is paragraphs and belongs in `disclaimer`, where it is set at a readable measure; squeezed into the closing line it becomes a wall of small print across the foot of the strip
38
+ - **brand** `node` · optional — The footer opens with the site's mark, which is the common case — usually the logo, often with a line about the company under it
39
+ - never: The page's heading. This is the site's mark, not the page's title
40
+ - **social** `node` · optional — The accounts the company keeps elsewhere, at the head of the band beside the mark. They are about the company rather than about the site, which is why they sit with the mark and not among the destinations
41
+ - never: Destinations. Anything that goes to a section of the site belongs in the children, where the navigation landmark announces it as one
42
+ - **endorsement** `node` · optional — A mark somebody else awarded — an accreditation, a standard the company holds. At the far end of the masthead, away from the company's own mark, because a badge beside a logo reads as part of the logo
43
+ - never: The company's own mark, or anything that links into the site. This end of the row is for what a third party said, and a destination put here is one a reader will not look for
44
+ - **aside** `node` · optional — The rail beside the destinations: the app cards, a download, a partner mark. The one part of the band that is an offer rather than a way onward, which is why it is kept out of the columns instead of being a set among them
45
+ - never: Another set of links. A column of destinations belongs in the navigation landmark, where a screen reader announces it as one — put here it is outside the landmark and outside the order a reader is reading the columns in
46
+ - **disclaimer** `node` · optional — The site is obliged to carry regulatory or legal wording — the risk warning, the licensing statement, the entity that holds the licence. Passed as nodes rather than a string because it runs to paragraphs and usually carries links
47
+ - never: Marketing copy. This section is set muted and small, which is right for text nobody chose to read and wrong for anything the page is trying to say
48
+
49
+ ## Inside it
50
+
51
+ - Takes only FooterGroup, Stack, Link.
52
+ - 7 components are refused inside it; the list and the reasons are in the long document.
53
+ - Renders 12 parts: root, inner, masthead, brand, social, endorsement, body, nav, aside, bottom, disclaimer, copyright.
54
+
55
+ ---
56
+
57
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/footer.md`.
@@ -0,0 +1,42 @@
1
+ <!-- GENERATED from footergroup.contract.json. Do not edit. -->
2
+
3
+ # FooterGroup
4
+
5
+ A named handful of destinations in the footer: a word over a short list. It is the footer's repeating unit and the only thing inside it that repeats — everything else in a footer appears once. …
6
+
7
+ `import { FooterGroup } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A set of a footer's destinations belong under one word — Markets, Support, Legal
12
+ - The footer has enough links that a reader scanning it needs sets rather than a list
13
+
14
+ ## Something else, when
15
+
16
+ - The destinations are the ones a visitor most likely wants → **Navbar**
17
+ - The group is a named set inside a navigation panel → **NavbarMenuGroup**
18
+ - There is one link rather than a set → **Link**
19
+
20
+ ## Never
21
+
22
+ - A heading over prose. The list holds destinations; a paragraph in it is a paragraph a screen reader announces as a list item
23
+ - Nesting. A group inside a group is a second disclosure, and a reader who has opened one thing to find another has been given a menu rather than a footer
24
+ - A set long enough to need scrolling. Eleven destinations under one word is a group that should be two
25
+
26
+ ## Props
27
+
28
+ - **expanded** `boolean` · default false — Whether the set is open, on a page narrow enough for it to close. Left alone the group holds this itself, which is what a footer of eleven groups wants — the page has no reason to know which ones a reader has opened
29
+ - never: Forcing a group open on a wide page. There is nothing to force: above the footer's own breakpoint every list is open and this value is not read
30
+ - **label** `string` · required — Always — it is the word the set is under, and the control that opens it on a narrow page. One or two words naming a kind: 'Markets', 'Partner with us'
31
+ - never: A sentence, or a destination. The label names the set and goes nowhere; a reader who presses it on a phone expects the set, and on a wide page it is not pressable at all
32
+ - **onExpandedChange** `callback` · optional — Told when a set opens or shuts, for a page that drives them from outside — one open at a time, or a set opened by a link somebody followed
33
+
34
+ ## Inside it
35
+
36
+ - Takes only Link.
37
+ - 5 components are refused inside it; the list and the reasons are in the long document.
38
+ - Renders 6 parts: root, heading, trigger, label, marker, list.
39
+
40
+ ---
41
+
42
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/footergroup.md`.
@@ -0,0 +1,62 @@
1
+ <!-- GENERATED from grid.contract.json. Do not edit. -->
2
+
3
+ # Grid
4
+
5
+ A field of equal tracks, and one measure between them. …
6
+
7
+ `import { Grid } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - Several things of the same kind are read across and down, and a cell has to line up with the cell above it — a field of stat cards, a set of tiles, a gallery
12
+ - The count is more than a line holds and the page cannot say what width it will be read at. …
13
+ - The cells must finish level regardless of how much is in each. …
14
+
15
+ ## Something else, when
16
+
17
+ - The things sit on one line and there is no second row to agree with → **Row**
18
+ - The things are read one above the next → **Stack**
19
+ - The set must stay on one line and the reader moves along it → **Scroller**
20
+ - The cells are the fields of one record, repeated down the page → **Table**
21
+
22
+ ## Never
23
+
24
+ - Page layout with named regions — a hero beside a picture, a header above both. Those regions are different things at different widths and a grid here has no way to say so: every track is the same size as every other, which is what this is and is exactly wrong for a page frame
25
+ - Padding. It sets space between its cells and none at all around them, so a grid reached for to inset a region leaves the surface that should have carried the padding with none
26
+ - One child. A field of one is the child, drawn a second time — the tracks are inert, and what is left is an element that renders, costs a node, and explains nothing
27
+ - Reaching a width. It is as wide as whatever holds it and declares no size of its own. The track floor is a floor and not a width: it says when a column drops, never how wide a cell ends up
28
+ - Cells of different kinds. Every track is the same width, so a grid holding a wide thing and a narrow thing gives both the wide one's measure and the narrow one all that space to sit in. Things that differ belong on a Row, which lets each be what it is
29
+
30
+ ## Props
31
+
32
+ - **gap** `enum` · default "lg" — The measure between cells, in both directions. One value rather than two, because a field whose rows and columns are differently spaced reads as rows first and stops being a grid
33
+ - `none` — No gap at all, for a field whose cells are meant to read as one object rather than as a set. The only step here that is a decision rather than a measure
34
+ - `xs` — The tightest gap between related elements, for a field read as one texture rather than as separate cells
35
+ - `sm` — The step the token names for sibling controls — a field of small tiles, where the tightness makes the set read as one block
36
+ - `md` — The step the token names for stacked items, taken as a field: cells close enough to be scanned in one pass rather than weighed one at a time
37
+ - `lg` — The default, and what the token names for feature cards in a grid, footer columns and pricing plans. Reach for this unless the cells are smaller or larger than a card
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
+ - `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
+ - `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
+ - 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
+ - **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
+ - `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
44
+ - `md` — The default floor, for a feature card: a heading and a line or two beneath it. Four fit the page's measure, so a field of three has room to spare
45
+ - `lg` — The wide floor, for a cell holding a picture as well as words, or a pricing plan with a list under it. Three fit the page's measure and four do not
46
+ - never: Setting a cell's width. It is a floor and never a measure: a cell lands as wide as the region and the column count leave it, which is almost always wider than this. A grid whose floor was picked to make a cell a particular size is a width written where a threshold belongs, and it is the wrong width at every other viewport
47
+ - **align** `enum` · default "stretch" — How cells of different heights meet within a row. The default is what makes a field of cards look like a field
48
+ - `start` — Cells keep their own height and sit against the top of their row, so a short cell beside a tall one ends early rather than being drawn out
49
+ - `center` — Cells keep their own height and sit in the middle of their row
50
+ - `end` — Cells keep their own height and sit against the bottom of their row
51
+ - `stretch` — The default. Every cell takes the full height of its row, so a field of cards finishes level however much is in each — which is the reason most fields are a grid rather than a wrapped line
52
+ - never: Giving a row a height. Every value here arranges cells within the height the tallest cell in that row establishes; none adds any
53
+ - **columns** `enum` · default "3" — How many cells sit across at full width. A ceiling rather than a promise: fewer are drawn as the region narrows, which is what makes this responsive without a breakpoint
54
+ - `2` — Two across — cells that hold enough to be read rather than scanned, or a field beside a picture
55
+ - `3` — The default, and what most fields of feature cards want. Three is the most a reader takes in as a set rather than as a list
56
+ - `4` — Four across, for cells holding a claim and a line — a field of benefits, a set of tiles
57
+ - `6` — Six across, for marks rather than cards — partner logos, payment methods, regulator badges. A field this wide is read as a texture
58
+ - never: Guaranteeing a count. A track squeezed below its floor is not drawn, so a field asked for six may hand back three — which is the behaviour, not a failure. Where exactly n must be on screen at every width, no grid can promise it and a Scroller is the honest answer. …
59
+
60
+ ---
61
+
62
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/grid.md`.
@@ -0,0 +1,45 @@
1
+ <!-- GENERATED from icon.contract.json. Do not edit. -->
2
+
3
+ # Icon
4
+
5
+ Renders a Quill system glyph at a token size, taking its colour from the text around it. The glyph is imported from @deriv-com/quill-icons-web and passed as the only child. …
6
+
7
+ `import { Icon } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A glyph stands beside words to speed recognition — a mark on a feature card, a chevron on a row, a separator in a trail
12
+ - A page is composing something a component offers a slot for, and the slot takes a mark rather than a component that draws one
13
+
14
+ ## Something else, when
15
+
16
+ - The mark identifies a company or a product — a payment method, an app store, a social network → **Logo (not built yet)**
17
+ - The artwork is a scene rather than a symbol → **Illustration (not built yet)**
18
+
19
+ ## Never
20
+
21
+ - Flag, market, currency or payment glyphs — they carry fixed brand colour, and tinting them corrupts the mark while still rendering. Render one bare, outside an Icon: it keeps its own colour and its own proportions, which is what a mark is
22
+ - Information that appears nowhere else. A glyph a reader has to interpret unaided is a label the page failed to write, and a marketing page has room for the words
23
+ - The picture in a card. A mark is a symbol at a step on this ramp; a photograph or a render is CardBody's `src`, which reaches the card's edges and is measured by the card rather than by a scale of glyph sizes
24
+
25
+ ## Props
26
+
27
+ - **size** `enum` · default "md" — The step the glyph is drawn at. It is a size and not an instruction: what a mark means comes from where it is, and this decides only how large it is drawn there
28
+ - `xs` — Inline and supporting content — a separator in a trail, a mark against small text
29
+ - `sm` — A mark beside text that must not outweigh it: the chevron on a list row, an affordance next to a label
30
+ - `md` — The default. Body content and lists, where the glyph sits with the words rather than above them
31
+ - `lg` — Cards and content sections — the mark a feature card leads with, read before its title is
32
+ - `xl` — The largest step, for a callout or a highlighted block where the glyph does as much work as the copy
33
+ - never: Setting the step of a glyph you are handing to a component. A slot takes the glyph and its component draws it at the step its own contract names, so an Icon arriving there is a call site written against something else — it is unwrapped and the outer step is what draws. …
34
+ - **label** `string` · optional — The glyph is the only thing naming its control — an icon-only button, a mark with no words beside it
35
+ - never: A glyph beside a label that already says the same thing, which makes a screen reader announce it twice
36
+
37
+ ## Inside it
38
+
39
+ - Takes only QuillSystemIcon.
40
+ - At least 1, at most 1 — fewer is not this component and more is a different one.
41
+ - 5 components are refused inside it; the list and the reasons are in the long document.
42
+
43
+ ---
44
+
45
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/icon.md`.
@@ -0,0 +1,53 @@
1
+ <!-- GENERATED from landinghero.contract.json. Do not edit. -->
2
+
3
+ # LandingHero
4
+
5
+ The band that opens a main landing page: the one thing the page is about, said once, at the top, over a ground dark enough that nothing above it competes. One of three opening bands, and the widest. …
6
+
7
+ `import { LandingHero } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A main landing page needs its opening band — the front page, or a campaign page under it
12
+ - The claim has room to range to the reading edge with a subject beside it, which is what the landing tier is for
13
+ - The steps between an eyebrow, a title, a description and the actions under them have to be the same on every landing page
14
+
15
+ ## Something else, when
16
+
17
+ - The page is a product or a market page → **ProductHero**
18
+ - The page is a company or a legal one — contact, about, terms → **PageHeader**
19
+ - The band closes the page rather than opening it → **Footer**
20
+
21
+ ## Never
22
+
23
+ - A product, market, company or legal page. Each tier has its own band, and the reason they are separate components is so that this cannot be overridden
24
+ - A second band further down the page. This is the page's opening and its `h1`; a page with two is a page that has told a reader twice what it is about
25
+ - The navigation above it or the trail beneath that. The bar is a fixed layer the page mounts once and every band scrolls under; the breadcrumb is the page saying where it sits. Both are the page's and neither is the band's
26
+
27
+ ## Props
28
+
29
+ - **eyebrow** `string` · optional — A word or two placing the page before its title names it — a product family, a market, a campaign
30
+ - never: A second sentence. This is the line a reader takes in without reading; at the length of a clause it is a description in the wrong place and at the wrong weight
31
+ - **title** `string` · required — Always. The one thing the page is about, in the fewest words that still say it. It is the page's leading heading and the band's accessible name
32
+ - never: A sentence with a full stop. A title that reads as prose is a description that has been set at eighty pixels
33
+ - **headingLevel** `enum` · default "h1" — Which heading element the title renders as. The default is right for the band a page opens with, which is the only place this belongs. …
34
+ - `h1` — The default, and correct whenever the hero opens the page — which is what a hero is for
35
+ - `h2` — The rare page that already carries its `h1` elsewhere, and would otherwise have two
36
+ - never: Making the title look smaller. The level is what a screen reader builds its outline from, and nothing about it reaches the type
37
+ - **description** `string` · optional — The sentence under the title that says what the claim above it means, for the reader who is not yet convinced by the claim alone
38
+ - never: A paragraph. It is held to a readable measure and set at body size; past a couple of sentences a reader scrolls rather than reads, and the actions go under the fold
39
+ - **actions** `node` · optional — The one or two things the page wants a reader to do. Composed by the page rather than described to this component, so a call to action is the same Button here as anywhere else on the site
40
+ - never: A row of destinations. Three or more controls under a title is a menu, and a reader who has to choose between five things chooses none
41
+ - **media** `node` · optional — The band's visual — the subject standing beside the claim, cropped by the band's own inline edge rather than floating clear of it
42
+ - never: The background. A photograph filling the band is `backgroundImage`; this sits in front of it and is placed against the band's edge
43
+ - **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
44
+ - 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
+
46
+ ## Inside it
47
+
48
+ - 7 components are refused inside it; the list and the reasons are in the long document.
49
+ - Renders 9 parts: root, inner, content, text, eyebrow, title, description, actions, media.
50
+
51
+ ---
52
+
53
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/landinghero.md`.
@@ -0,0 +1,59 @@
1
+ <!-- GENERATED from link.contract.json. Do not edit. -->
2
+
3
+ # Link
4
+
5
+ A destination named inside a sentence, or standing on its own under one. …
6
+
7
+ `import { Link } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A term inside running copy has a page of its own — a market named in a paragraph, a fee mentioned in a sentence, a product referred to in passing
12
+ - The page must offer a destination without pushing it: terms, a full fee schedule, a regulatory notice. …
13
+ - A second destination beside the call to action, where a second pill would be two things asking to be pressed and a reader would have to choose between them before reading either …
14
+
15
+ ## Something else, when
16
+
17
+ - The destination is the step the page was built to produce → **Button**
18
+ - Pressing it does something on this page rather than going somewhere → **nothing in this system does this**
19
+ - The whole card or panel is the target rather than some words in it → **CardButton**
20
+
21
+ ## Never
22
+
23
+ - The page's main call to action. That is Button, and a page whose primary step is a link in a paragraph has hidden it in the copy
24
+ - Words that do not name the destination — 'click here', 'read more', 'this page'. The words are the link's accessible name, and a screen reader offering a list of links reads that list on its own: a page of 'read more' is a menu of identical entries
25
+ - A disabled or pending state. There is none, for the reason Button has none: the browser owns a navigation in flight, and an anchor cannot be honestly disabled — stripping the href is the only thing that truly stops it, and that costs the link role and the focus with it
26
+ - Opening a new tab because the page would rather keep the reader. `external` exists for a destination that is genuinely elsewhere; taking over tab management for its own sake is a decision that belongs to the reader
27
+
28
+ ## Props
29
+
30
+ - **variant** `enum` · default "standalone"
31
+ - `standalone` — The default, and what a marketing page mostly has: a link on its own line — under a card, at the foot of a section, beside a call to action. …
32
+ - `list` — One of a column of links — a footer sitemap, a navigation menu, a set of related pages under a heading. It takes the ink around it, because a column of coral is a column nobody reads. …
33
+ - `inline` — Inside a sentence, and it takes the sentence's type and the sentence's colour. …
34
+ - never: Making a link louder or quieter. The three are positions rather than volumes: standalone is alone on its line, list is one of a column, and inline is part of a sentence. None of them means important
35
+ - **tone** `enum` · default "brand" — Which ink a standalone link takes. It reaches no other variant: an inline link takes the paragraph's colour and a list link takes the column's, which are decisions those positions have already made — the same shape `showIcon` has here
36
+ - `brand` — The default. …
37
+ - `inherit` — A standalone link on a ground that has already set its ink — a brand card, a dark band, a scrim over an image. …
38
+ - never: Reaching an inline link. One takes the paragraph's colour already and there is nothing here to choose — this prop governs a standalone link and no other
39
+ - **external** `boolean` · default false — The destination is off this site. Sets `target="_blank"` and `rel="noopener noreferrer"` together — the rel is not optional and not the consumer's job, which is how a page ends up handing `window.opener` to a site it does not control. …
40
+ - never: A new tab on a destination that is not external. Taking over tab management is a decision the reader has already made in their own browser, and a page that overrides it has told them their back button is not to be trusted
41
+ - **href** `string` · required — Always. …
42
+ - **iconLeading** `node` · optional — A mark the destination is known by, before its name — a document, a download. Pass the glyph; the link draws it at sixteen, which is icon.size.xs. The solid weight, always: `FileSolidIcon` rather than `FileRegularIcon` or `FileLightIcon`. …
43
+ - never: Naming the destination. The words are the accessible name and the glyph is announced as nothing, so a link whose meaning is its mark is a link with no meaning at all to a screen reader. The regular or light weights. …
44
+ - **showIcon** `boolean` · optional — Whether the link carries a mark after its words. It reaches both variants: a standalone link on its own line, and an inline one that wants the arrow inside a sentence. …
45
+ - never: Suppressing the external mark. Leaving the site is a fact about the destination rather than a flourish, so `external` marks itself whatever this says — a page that could turn it off could hand a reader a new tab with no warning
46
+
47
+ ## The type refuses
48
+
49
+ - variant="inline" with iconLeading="*" — An inline link is part of a sentence and a glyph mid-line breaks the run of words it belongs to. …
50
+
51
+ ## Inside it
52
+
53
+ - Takes only text.
54
+ - 8 components are refused inside it; the list and the reasons are in the long document.
55
+ - Renders 3 parts: root, icon-leading, icon-trailing.
56
+
57
+ ---
58
+
59
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/link.md`.
@@ -0,0 +1,55 @@
1
+ <!-- GENERATED from logocolumns.contract.json. Do not edit. -->
2
+
3
+ # LogoColumns
4
+
5
+ A section that backs one claim with the names behind it: a heading, a line, an optional disclaimer and a way onward, beside a wall of logo tiles in two columns that run in opposite directions as the reader scrolls past — one rising, one falling — fading out at the wall's top and bottom edge so the set reads as longer than the space it is shown in. …
6
+
7
+ `import { LogoColumns } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - Showing the partners, integrations or payment methods behind a claim — the names a reader recognises, as evidence for what the words say
12
+ - Eight or more logos, enough that each column reads as running on past both edges of the wall
13
+
14
+ ## Something else, when
15
+
16
+ - A handful of logos a reader should be able to count and compare → **Grid**
17
+ - One picture beside the claim → **FeatureSplit**
18
+ - Each logo needs to be pressed — a partner directory → **FeatureCards**
19
+
20
+ ## Never
21
+
22
+ - Logos the brand has not been given the right to show. A partner's mark is a claim made in the partner's name
23
+ - A few logos. Three repeated to fill a wall read as three repeated; a short set belongs in a still grid
24
+ - Anything a reader has to press or read in full. Every tile moves with the scroll and is clipped at the wall's edge
25
+
26
+ ## Props
27
+
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
+ - `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
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. …
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
+ - **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
+ - `start` — The default, the reference design's: the wall at the start, the claim beside it at the end
35
+ - `end` — The second of two on a page, or after a FeatureSplit whose picture is at the start, so the two do not read as one column
36
+ - never: Moving the wall on a phone. There is one column there and the words lead it
37
+ - **title** `string` · required — Always. The one claim the logos back, in the fewest words that say it — "Trusted by leading platforms worldwide"
38
+ - never: A list of the names. The logos are the names; the heading says what they prove
39
+ - **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
40
+ - never: A paragraph. Past about two hundred characters the text column runs longer than the wall beside it and the two halves stop lining up, which is the one thing a split has to get right. The reference design caps it at exactly that
41
+ - **disclaimer** `string` · optional — Small print the claim needs — "*Availability varies by region." Under the description, quieter than it
42
+ - never: A second description. Anything a reader should take in belongs in the description; this is the line a regulator asks for
43
+ - **link** `node` · optional — The way onward — a standalone Link, "View all partners", usually. Under the words, never on the wall: the tiles move
44
+ - never: The page's main call to action. This is a way onward from a supporting point, and a primary button here competes with the one the page actually wants pressed
45
+ - **logos** `data` · required — Always. The logos, in the order the wall deals them into its two columns — the first to the first column, the second to the second, and so on. Eight or more, so each column runs on past both edges. …
46
+ - never: A set split by hand into two. The wall deals them; a page that wants a logo in a particular column orders the list
47
+
48
+ ## Inside it
49
+
50
+ - 8 components are refused inside it; the list and the reasons are in the long document.
51
+ - Renders 12 parts: root, inner, split, content, title, description, disclaimer, link, media, column, logo, logo-image.
52
+
53
+ ---
54
+
55
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/logocolumns.md`.
@@ -0,0 +1,48 @@
1
+ <!-- GENERATED from logorows.contract.json. Do not edit. -->
2
+
3
+ # LogoRows
4
+
5
+ A section that backs one claim with the names behind it, stacked: a heading, a line and a way onward, centred, over two rows of logo tiles across the band's full width that slide sideways in opposite directions as the reader scrolls past — fading out at both of their ends, so the set reads as longer than the band. …
6
+
7
+ `import { LogoRows } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - Showing the partners, integrations or payment methods behind a claim under it, where the words lead and the logos follow
12
+ - Eight or more logos, enough that each of the two rows reads as running on past both edges of the band
13
+
14
+ ## Something else, when
15
+
16
+ - The logos should stand beside the claim, as a wall that is half the section → **LogoColumns**
17
+ - A handful of logos a reader should be able to count and compare → **Grid**
18
+
19
+ ## Never
20
+
21
+ - Logos the brand has not been given the right to show. A partner's mark is a claim made in the partner's name
22
+ - A few logos. Three repeated to fill a row read as three repeated; a short set belongs in a still grid
23
+ - Anything a reader has to press or read in full. Every tile moves with the scroll and is clipped at the band's edge
24
+
25
+ ## Props
26
+
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
+ - `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
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. …
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
+ - **title** `string` · required — Always. The one claim the logos back, in the fewest words that say it — "Trusted by leading platforms worldwide"
33
+ - never: A list of the names. The logos are the names; the heading says what they prove
34
+ - **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
35
+ - never: A paragraph. The heading and this line are read on the way to the logos; copy a reader has to work through is copy they scroll past
36
+ - **link** `node` · optional — The way onward — a standalone Link, "View all partners", usually. Under the line, never on the row: the tiles move
37
+ - never: A button. The section's claim is made by the logos; a call to action over them is a second, louder one
38
+ - **logos** `data` · required — Always. The logos, in the order the section deals them into its two rows — the first to the first row, the second to the second, and so on. Eight or more, so each row runs on past both edges of the band. …
39
+ - never: A set split or repeated by hand. The section deals the rows and repeats them; a page passes each logo once, ordering the list to place one in a particular row
40
+
41
+ ## Inside it
42
+
43
+ - 7 components are refused inside it; the list and the reasons are in the long document.
44
+ - Renders 10 parts: root, inner, header, title, description, link, rail, track, logo, logo-image.
45
+
46
+ ---
47
+
48
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/logorows.md`.
@@ -0,0 +1,46 @@
1
+ <!-- GENERATED from menuitem.contract.json. Do not edit. -->
2
+
3
+ # MenuItem
4
+
5
+ One command in a menu. Pressing it does something and the menu shuts — it holds no value and carries no mark, so there is nothing about it to find on reopening. …
6
+
7
+ `import { MenuItem } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A row in a menu of destinations — a language, a region, a page number an index skipped
12
+ - A set short enough to read at a glance, where a reader is choosing rather than searching
13
+
14
+ ## Something else, when
15
+
16
+ - The row reports a choice the reader should find marked when they return → **nothing in this system does this**
17
+ - The destination belongs in the page's navigation → **nothing in this system does this**
18
+ - It is one action rather than one of a set → **nothing in this system does this**
19
+
20
+ ## Never
21
+
22
+ - Anything that destroys. Marketing has no destructive tone by decision — a page navigates a visitor toward a conversion and never deletes on their behalf
23
+ - Carrying the words a reader needs before choosing. A row is a short label; what a choice means belongs on the page, where it can be read without opening anything
24
+
25
+ ## Props
26
+
27
+ - **size** `enum` · default "md" — Set by the menu that holds the row, not by the page. DropdownMenu passes its own size down to every row it renders, which is the only way a set stays one set — this prop exists so that it can, and a row written on its own takes the default
28
+ - `sm` — The row of a small menu — one opened from a navigation bar or a footer, where the trigger sits in a row of links
29
+ - `md` — The default, and the row of every other menu
30
+ - never: Making one row bigger than its neighbours. A menu is read by running an eye down its left edge, and a row at a different measure reads as a heading rather than as one of the set
31
+ - **disabled** `boolean` · default false — The command cannot be used from here — a language not published yet, a page beyond the set. It stays and recedes, because a menu whose rows come and go is a menu a reader cannot learn
32
+ - never: A command that is simply not applicable to this object at all, which belongs in a different menu rather than a dimmed row in this one. …
33
+ - **icon** `node` · optional — A mark before the words, for a set read by shape as much as by reading — a flag beside a language, a glyph beside a region. All of them or none: one row with a mark in a set without them reads as the important one
34
+ - never: Saying what the command does when the words already do. A mark beside "Delete" is recognised faster; a mark beside "Export to CSV as a background job" is decoration in front of a sentence
35
+ - **onSelect** `callback` · required — Always, and it is required for that reason — running something is the whole of what a command is, and this is the only way it does
36
+ - never: Shutting the menu. That happens on its own, before this is called — a command that had to close its own menu would be a command every page closed differently. …
37
+
38
+ ## Inside it
39
+
40
+ - Takes only text.
41
+ - 5 components are refused inside it; the list and the reasons are in the long document.
42
+ - Renders 3 parts: root, icon, label.
43
+
44
+ ---
45
+
46
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/menuitem.md`.
@@ -0,0 +1,75 @@
1
+ <!-- GENERATED from navbar.contract.json. Do not edit. -->
2
+
3
+ # Navbar
4
+
5
+ The bar across the top of a marketing page, and three regions: the mark that says whose site this is, the places the site has, and the things a reader reaches for rather than navigates to — the language, the theme, and what the site wants them to do. …
6
+
7
+ `import { Navbar } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A marketing page needs its top-level navigation — the mark, the sections of the site, and whatever sits at the far end
12
+ - The same bar has to persist while the page scrolls, so a reader deep in a long page can still leave it
13
+ - The navigation has to work at a phone's width without the page writing a second version of it
14
+
15
+ ## Something else, when
16
+
17
+ - The items are versions of one thing rather than places the site has → **TabList**
18
+ - What is wanted is one section's panel rather than the bar it hangs from → **NavbarMenu**
19
+ - The navigation runs down the side of an application rather than across the top of a page → **nothing in this system does this**
20
+
21
+ ## Never
22
+
23
+ - A second bar further down the page. There is one landmark of this kind per page, and a reader who meets two has been told twice where they are and once too often which is authoritative
24
+ - A toolbar. Controls that act on what is below them — a filter row, a sort row, a set of view switches — are not places, and putting them in the site's navigation landmark means a screen reader announces them as somewhere to go
25
+ - A footer. The same links at the bottom of a page are a sitemap a reader reaches at the end, not a frame they navigate from, and they need none of the sticking or collapsing this does
26
+ - An app shell. This sticks to the top of a document that scrolls; an application whose regions scroll independently needs a frame this cannot be, and the product package is where that lives
27
+
28
+ ## Props
29
+
30
+ - **tone** `enum` · default "default"
31
+ - `default` — The page begins on a light ground, which is most marketing pages. The bar paints in ink and the pill is paper
32
+ - `inverse` — The first section of the page paints its own dark ground and the bar stands on it — a dark hero, a photograph, a brand-coloured takeover. …
33
+ - **label** `string` · required — Always — it names the navigation landmark, and a page with an unnamed one tells a screen-reader user there is navigation here without saying which navigation. …
34
+ - never: A visible heading. Nothing draws this. A bar needs no title, and a page that wants one has a heading of its own below the bar
35
+ - **menuLabel** `string` · required — Always — the trigger is an icon-only button and this is the only name it has, at the width where it is the only way through the site. …
36
+ - never: A tooltip or visible text. The trigger draws a glyph and nothing else; this is the name a screen reader reads
37
+ - **closeLabel** `string` · required — Always — it names the panel's close button, which is the only visible way out of a surface covering the whole page. 'Close' is enough; the panel it closes is the only thing open
38
+ - never: The trigger's name. They are two controls in two places — the trigger is in the bar underneath the panel, and a reader cannot reach it while the panel is open
39
+ - **brand** `node` · optional — Effectively always on a real site — the mark, and usually an anchor to the home page wrapped around it. It is drawn twice: in the bar, and again in the panel's header, where it is the only thing left saying whose site this is
40
+ - never: A heading for the page. This is the site's mark, not the page's title, and a reader who meets the page's `<h1>` in the bar has been told the name of somewhere they already are
41
+ - **utilities** `node` · optional — The bar's trailing end has the site's actions in it: one Button, which is primary, or two — one primary and one secondary, the conversion beside the way back in. …
42
+ - never: More than two Buttons, a lone Button that is not primary, or a pair that is not one primary and one secondary — the bar's actions are a conversion and its alternative, and a third pill or a second of either rank makes the reader choose between things the bar should have ranked. A switcher is not a Button and does not count against the two. …
43
+ - **compactAction** `node` · optional — The one thing a reader should still be able to do once the bar has collapsed and everything else has gone into the panel — a sign-up, usually. Drawn beside the control that opens the panel, and only at the widths where that control is drawn. …
44
+ - never: The whole of utilities. A phone has room for one action beside a mark and a menu button, and a bar handed two of them either wraps or pushes the mark off its own edge — the rest belong in utilities, which the panel lays out down its foot where there is room for all of them
45
+ - **preferences** `node` · optional — A switcher that belongs with the destinations rather than with the conversion — a language picker, a theme toggle. It is drawn inside the pill, beside the sections, at every scroll position. …
46
+ - never: A conversion action. Those belong in utilities, at the trailing end of the bar where a reader looks for them, and drawing one inside the pill would put the thing the page most wants pressed in among the places it goes
47
+ - **showThemeToggle** `boolean` · default false — The site offers light and dark and a reader can choose between them. …
48
+ - never: A site that ships one theme. A toggle that changes nothing is a control that lies about the page
49
+ - **theme** `enum` · optional — Whenever showThemeToggle is — the theme in force. The page owns it, because what it switches is the page's data-theme rather than anything inside the bar; the bar only draws the toggle and reports presses
50
+ - `light` — The page is drawn in its light theme, so the toggle offers dark
51
+ - `dark` — The page is drawn in its dark theme, so the toggle offers light
52
+ - **onThemeChange** `callback` · optional — Whenever showThemeToggle is. Called with the theme a press moves to; the page sets its data-theme from it and hands the new value back as theme
53
+ - never: Persisting a preference the page has not decided to keep. Remembering the choice across visits is the site's call, made where it sets data-theme
54
+ - **themeToggleLabel** `string` · optional — Whenever showThemeToggle is — the toggle draws a glyph and no words, and this is the only name it has. …
55
+ - never: Visible text. Nothing is drawn beside the glyph; a toggle with words is a NavbarSwitcher
56
+ - **menuOpen** `boolean` · optional — The page is holding whether the panel is open, because something else depends on it — a route change that should close it, a surface of its own that must not open at the same time. …
57
+ - never: Half of a controlled bar. A menuOpen passed without an onMenuOpenChange to move it is a panel that cannot be closed from its own close button — a trap around the whole page rather than a bar with a bug
58
+ - **onMenuOpenChange** `callback` · optional — Whenever menuOpen is — together they are how a page holds the panel. It is called with the state being moved to, by the trigger, by the close button and by Escape, so a page listening to it hears every way the panel can change
59
+ - never: Navigation. This says whether the panel is showing; a page that also routed on it would close the panel by leaving, and a reader pressing a destination inside it would fire both
60
+
61
+ ## The type refuses
62
+
63
+ - showThemeToggle=true with theme=null — A toggle that does not know which theme is in force cannot say which one a press moves to, and would draw the wrong glyph half the time
64
+ - showThemeToggle=true with onThemeChange=null — A toggle with nothing to call answers the pointer and changes nothing — the one failure the affordance cannot disclose
65
+ - showThemeToggle=true with themeToggleLabel=null — The toggle draws a glyph and no words, so without this it ships unnamed and a screen reader announces a button and nothing else
66
+
67
+ ## Inside it
68
+
69
+ - Takes only NavbarItem, NavbarMenu.
70
+ - 10 components are refused inside it; the list and the reasons are in the long document.
71
+ - Renders 11 parts: root, inner, ground, brand, nav, preferences, utilities, compact-action, trigger, panel-host, cluster.
72
+
73
+ ---
74
+
75
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/navbar.md`.
@@ -0,0 +1,54 @@
1
+ <!-- GENERATED from navbaritem.contract.json. Do not edit. -->
2
+
3
+ # NavbarItem
4
+
5
+ One place the site has, in the bar across the top of it. An anchor with a target around it, a mark for the section the reader is currently in, and nothing else. …
6
+
7
+ `import { NavbarItem } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A section of the site, in a Navbar — the ordinary case and what this is for
12
+ - A destination that leaves the site, which it marks as a change of context rather than leaving the reader to find out
13
+ - The same destination inside the panel a narrow bar collapses into: a page writes its navigation once, and what changes with the width is how it is drawn
14
+
15
+ ## Something else, when
16
+
17
+ - The destination opens a panel of further destinations rather than going somewhere → **NavbarMenu**
18
+ - The destination is a phrase inside a sentence, or a call to action beneath a paragraph → **Link**
19
+ - The item is one of a set of alternatives rather than a place → **Tab**
20
+
21
+ ## Never
22
+
23
+ - A control. This navigates and nothing else — a press that filtered, submitted or opened something would be a button the browser has been told is a link
24
+ - The site's mark. That goes in Navbar's brand slot, where nothing gives it a target or a current state
25
+ - A conversion action. Open an account is not a place the site has, and a reader tabbing the navigation landmark should not meet it there — that is Navbar's utilities slot
26
+ - A list of every page on the site. A bar holds the sections a reader chooses between at a glance; a sitemap is a footer
27
+
28
+ ## Props
29
+
30
+ - **current** `boolean` · default false — The reader is in this section of the site. It fills the item's shape in and sets `aria-current="page"`, so the mark is not the only thing saying it. …
31
+ - never: Emphasis. This is not the important destination or the one the site would rather you took; it is the one the reader is already on, and using it for anything else makes the mark mean nothing on every bar that uses it correctly
32
+ - **tone** `enum` · default "default"
33
+ - `default` — The bar has a light ground under it, which is every bar on a marketing page today. The tints here are ink-based and read against paper
34
+ - `inverse` — The bar sits on a dark ground — a band, or art the page put behind it — and the ink runs light. …
35
+ - **href** `string` · required — Always. This is a place, and a place has an address — an item with no href is a control drawn as a link, which is the one thing its intent says it is not
36
+ - never: A fragment standing in for behaviour. `href="#"` is how a link that does nothing gets written, and it navigates: the reader loses their scroll position and gains a history entry for a press meant to do something else
37
+ - **icon** `node` · optional — The bar's sections are quicker to tell apart by a mark than by reading them, which is rare on a marketing site and usual in an application
38
+ - never: Decoration on every item. A glyph beside each of five destinations costs the width the destinations need and tells a reader nothing they were not already reading
39
+ - **external** `boolean` · default false — The destination leaves the site. It draws the mark, opens in a new context, and the implementation extends the accessible name to say so in words — a glyph alone is a warning only sighted readers get
40
+ - never: A different area of the same site. A subdomain the reader experiences as one place is not a change of context, and marking it as one teaches them to ignore the mark where it matters
41
+
42
+ ## The type refuses
43
+
44
+ - current=true with external=true — The section the reader is in, and a destination that leaves the site. …
45
+
46
+ ## Inside it
47
+
48
+ - Takes only text.
49
+ - 7 components are refused inside it; the list and the reasons are in the long document.
50
+ - Renders 4 parts: root, icon, label, external.
51
+
52
+ ---
53
+
54
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/navbaritem.md`.