@deriv-com/dds-marketing 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/.llm/components/accordion.md +193 -0
  2. package/.llm/components/accordionitem.md +236 -0
  3. package/.llm/components/aspectratio.md +212 -0
  4. package/.llm/components/badge.md +231 -0
  5. package/.llm/components/bottomsheet.md +404 -0
  6. package/.llm/components/breadcrumb.md +197 -0
  7. package/.llm/components/breadcrumbitem.md +178 -0
  8. package/.llm/components/button.md +271 -0
  9. package/.llm/components/buttonicon.md +313 -0
  10. package/.llm/components/card.md +313 -0
  11. package/.llm/components/cardbody.md +409 -0
  12. package/.llm/components/cardbutton.md +259 -0
  13. package/.llm/components/checkbox.md +285 -0
  14. package/.llm/components/divider.md +230 -0
  15. package/.llm/components/dropdownmenu.md +453 -0
  16. package/.llm/components/filterchip.md +314 -0
  17. package/.llm/components/footer.md +408 -0
  18. package/.llm/components/footergroup.md +241 -0
  19. package/.llm/components/grid.md +659 -0
  20. package/.llm/components/icon.md +194 -0
  21. package/.llm/components/link.md +354 -0
  22. package/.llm/components/menuitem.md +218 -0
  23. package/.llm/components/navbar.md +458 -0
  24. package/.llm/components/navbaritem.md +238 -0
  25. package/.llm/components/navbarmenu.md +319 -0
  26. package/.llm/components/navbarmenugroup.md +184 -0
  27. package/.llm/components/navbarpanel.md +255 -0
  28. package/.llm/components/navbarswitcher.md +343 -0
  29. package/.llm/components/navbarswitcheroption.md +156 -0
  30. package/.llm/components/option.md +268 -0
  31. package/.llm/components/pagination.md +361 -0
  32. package/.llm/components/removablechip.md +247 -0
  33. package/.llm/components/row.md +381 -0
  34. package/.llm/components/scroller.md +470 -0
  35. package/.llm/components/searchinput.md +279 -0
  36. package/.llm/components/segmentedcontrol.md +358 -0
  37. package/.llm/components/segmentedcontrolitem.md +272 -0
  38. package/.llm/components/select.md +509 -0
  39. package/.llm/components/selectchip.md +334 -0
  40. package/.llm/components/spinner.md +222 -0
  41. package/.llm/components/stack.md +334 -0
  42. package/.llm/components/statusdot.md +205 -0
  43. package/.llm/components/subdomainnavbar.md +327 -0
  44. package/.llm/components/tab.md +291 -0
  45. package/.llm/components/table.md +660 -0
  46. package/.llm/components/tablebody.md +258 -0
  47. package/.llm/components/tablecell.md +248 -0
  48. package/.llm/components/tablehead.md +248 -0
  49. package/.llm/components/tableheadercell.md +298 -0
  50. package/.llm/components/tablerow.md +285 -0
  51. package/.llm/components/tablist.md +210 -0
  52. package/.llm/components/textarea.md +362 -0
  53. package/.llm/components/textinput.md +467 -0
  54. package/.llm/components/tooltip.md +267 -0
  55. package/.llm/components/typography.md +245 -0
  56. package/.llm/digest/accordion.md +43 -0
  57. package/.llm/digest/accordionitem.md +47 -0
  58. package/.llm/digest/aspectratio.md +47 -0
  59. package/.llm/digest/badge.md +45 -0
  60. package/.llm/digest/bottomsheet.md +69 -0
  61. package/.llm/digest/breadcrumb.md +38 -0
  62. package/.llm/digest/breadcrumbitem.md +43 -0
  63. package/.llm/digest/button.md +48 -0
  64. package/.llm/digest/buttonicon.md +61 -0
  65. package/.llm/digest/card.md +50 -0
  66. package/.llm/digest/cardbody.md +68 -0
  67. package/.llm/digest/cardbutton.md +49 -0
  68. package/.llm/digest/checkbox.md +63 -0
  69. package/.llm/digest/divider.md +52 -0
  70. package/.llm/digest/dropdownmenu.md +67 -0
  71. package/.llm/digest/filterchip.md +68 -0
  72. package/.llm/digest/footer.md +57 -0
  73. package/.llm/digest/footergroup.md +42 -0
  74. package/.llm/digest/grid.md +62 -0
  75. package/.llm/digest/icon.md +45 -0
  76. package/.llm/digest/link.md +59 -0
  77. package/.llm/digest/menuitem.md +46 -0
  78. package/.llm/digest/navbar.md +60 -0
  79. package/.llm/digest/navbaritem.md +54 -0
  80. package/.llm/digest/navbarmenu.md +54 -0
  81. package/.llm/digest/navbarmenugroup.md +40 -0
  82. package/.llm/digest/navbarpanel.md +53 -0
  83. package/.llm/digest/navbarswitcher.md +51 -0
  84. package/.llm/digest/navbarswitcheroption.md +37 -0
  85. package/.llm/digest/option.md +54 -0
  86. package/.llm/digest/pagination.md +71 -0
  87. package/.llm/digest/removablechip.md +51 -0
  88. package/.llm/digest/row.md +60 -0
  89. package/.llm/digest/scroller.md +59 -0
  90. package/.llm/digest/searchinput.md +56 -0
  91. package/.llm/digest/segmentedcontrol.md +59 -0
  92. package/.llm/digest/segmentedcontrolitem.md +59 -0
  93. package/.llm/digest/select.md +92 -0
  94. package/.llm/digest/selectchip.md +68 -0
  95. package/.llm/digest/spinner.md +52 -0
  96. package/.llm/digest/stack.md +56 -0
  97. package/.llm/digest/statusdot.md +46 -0
  98. package/.llm/digest/subdomainnavbar.md +54 -0
  99. package/.llm/digest/tab.md +60 -0
  100. package/.llm/digest/table.md +71 -0
  101. package/.llm/digest/tablebody.md +49 -0
  102. package/.llm/digest/tablecell.md +55 -0
  103. package/.llm/digest/tablehead.md +50 -0
  104. package/.llm/digest/tableheadercell.md +65 -0
  105. package/.llm/digest/tablerow.md +56 -0
  106. package/.llm/digest/tablist.md +46 -0
  107. package/.llm/digest/textarea.md +78 -0
  108. package/.llm/digest/textinput.md +95 -0
  109. package/.llm/digest/tooltip.md +58 -0
  110. package/.llm/digest/typography.md +59 -0
  111. package/.llm/index.md +86 -0
  112. package/.llm/rules.md +122 -0
  113. package/.llm/tokens.md +341 -0
  114. package/AGENTS.md +164 -0
  115. package/LICENSE +21 -0
  116. package/README.md +63 -15
  117. package/dist/components/core/accordion/Accordion.css +10 -0
  118. package/dist/components/core/accordion/Accordion.d.ts +20 -0
  119. package/dist/components/core/accordion/Accordion.js +69 -0
  120. package/dist/components/core/accordion/Accordion.types.d.ts +20 -0
  121. package/dist/components/core/accordion/Accordion.types.js +7 -0
  122. package/dist/components/core/accordion-item/AccordionItem.css +98 -0
  123. package/dist/components/core/accordion-item/AccordionItem.d.ts +44 -0
  124. package/dist/components/core/accordion-item/AccordionItem.js +63 -0
  125. package/dist/components/core/accordion-item/AccordionItem.types.d.ts +32 -0
  126. package/dist/components/core/accordion-item/AccordionItem.types.js +13 -0
  127. package/dist/components/core/accordion-item/accordion-item-impl.css +107 -0
  128. package/dist/components/core/badge/Badge.css +37 -0
  129. package/dist/components/core/badge/Badge.d.ts +37 -0
  130. package/dist/components/core/badge/Badge.js +40 -0
  131. package/dist/components/core/badge/Badge.types.d.ts +24 -0
  132. package/dist/components/core/badge/Badge.types.js +8 -0
  133. package/dist/components/core/badge/badge-impl.css +32 -0
  134. package/dist/components/core/bottom-sheet/BottomSheet.css +178 -0
  135. package/dist/components/core/bottom-sheet/BottomSheet.d.ts +22 -0
  136. package/dist/components/core/bottom-sheet/BottomSheet.js +359 -0
  137. package/dist/components/core/bottom-sheet/BottomSheet.types.d.ts +67 -0
  138. package/dist/components/core/bottom-sheet/BottomSheet.types.js +18 -0
  139. package/dist/components/core/bottom-sheet/bottom-sheet-impl.css +57 -0
  140. package/dist/components/core/breadcrumb/Breadcrumb.css +19 -0
  141. package/dist/components/core/breadcrumb/Breadcrumb.d.ts +16 -0
  142. package/dist/components/core/breadcrumb/Breadcrumb.js +22 -0
  143. package/dist/components/core/breadcrumb/Breadcrumb.types.d.ts +18 -0
  144. package/dist/components/core/breadcrumb/Breadcrumb.types.js +9 -0
  145. package/dist/components/core/breadcrumb-item/BreadcrumbItem.css +34 -0
  146. package/dist/components/core/breadcrumb-item/BreadcrumbItem.d.ts +12 -0
  147. package/dist/components/core/breadcrumb-item/BreadcrumbItem.js +15 -0
  148. package/dist/components/core/breadcrumb-item/BreadcrumbItem.types.d.ts +22 -0
  149. package/dist/components/core/breadcrumb-item/BreadcrumbItem.types.js +9 -0
  150. package/dist/components/core/button/Button.css +141 -0
  151. package/dist/components/core/button/Button.d.ts +25 -0
  152. package/dist/components/core/button/Button.js +28 -0
  153. package/dist/components/core/button/Button.types.d.ts +40 -0
  154. package/dist/components/core/button/Button.types.js +9 -0
  155. package/dist/components/core/button/button-impl.css +46 -0
  156. package/dist/components/core/button-icon/ButtonIcon.css +135 -0
  157. package/dist/components/core/button-icon/ButtonIcon.d.ts +34 -0
  158. package/dist/components/core/button-icon/ButtonIcon.js +117 -0
  159. package/dist/components/core/button-icon/ButtonIcon.types.d.ts +41 -0
  160. package/dist/components/core/button-icon/ButtonIcon.types.js +8 -0
  161. package/dist/components/core/card/Card.css +65 -0
  162. package/dist/components/core/card/Card.d.ts +24 -0
  163. package/dist/components/core/card/Card.js +26 -0
  164. package/dist/components/core/card/Card.types.d.ts +33 -0
  165. package/dist/components/core/card/Card.types.js +7 -0
  166. package/dist/components/core/card-body/CardBody.css +139 -0
  167. package/dist/components/core/card-body/CardBody.d.ts +62 -0
  168. package/dist/components/core/card-body/CardBody.js +97 -0
  169. package/dist/components/core/card-body/CardBody.types.d.ts +61 -0
  170. package/dist/components/core/card-body/CardBody.types.js +15 -0
  171. package/dist/components/core/card-body/card-body-impl.css +87 -0
  172. package/dist/components/core/card-button/CardButton.css +73 -0
  173. package/dist/components/core/card-button/CardButton.d.ts +27 -0
  174. package/dist/components/core/card-button/CardButton.js +37 -0
  175. package/dist/components/core/card-button/CardButton.types.d.ts +24 -0
  176. package/dist/components/core/card-button/CardButton.types.js +7 -0
  177. package/dist/components/core/card-button/card-button-impl.css +39 -0
  178. package/dist/components/core/checkbox/Checkbox.css +149 -0
  179. package/dist/components/core/checkbox/Checkbox.d.ts +21 -0
  180. package/dist/components/core/checkbox/Checkbox.js +97 -0
  181. package/dist/components/core/checkbox/Checkbox.types.d.ts +46 -0
  182. package/dist/components/core/checkbox/Checkbox.types.js +15 -0
  183. package/dist/components/core/checkbox/checkbox-impl.css +90 -0
  184. package/dist/components/core/divider/Divider.css +41 -0
  185. package/dist/components/core/divider/Divider.d.ts +46 -0
  186. package/dist/components/core/divider/Divider.js +51 -0
  187. package/dist/components/core/divider/Divider.types.d.ts +25 -0
  188. package/dist/components/core/divider/Divider.types.js +9 -0
  189. package/dist/components/core/dropdown-menu/DropdownMenu.css +146 -0
  190. package/dist/components/core/dropdown-menu/DropdownMenu.d.ts +22 -0
  191. package/dist/components/core/dropdown-menu/DropdownMenu.js +309 -0
  192. package/dist/components/core/dropdown-menu/DropdownMenu.types.d.ts +62 -0
  193. package/dist/components/core/dropdown-menu/DropdownMenu.types.js +12 -0
  194. package/dist/components/core/dropdown-menu/dropdown-menu-impl.css +70 -0
  195. package/dist/components/core/filter-chip/FilterChip.css +149 -0
  196. package/dist/components/core/filter-chip/FilterChip.d.ts +23 -0
  197. package/dist/components/core/filter-chip/FilterChip.js +37 -0
  198. package/dist/components/core/filter-chip/FilterChip.types.d.ts +53 -0
  199. package/dist/components/core/filter-chip/FilterChip.types.js +12 -0
  200. package/dist/components/core/footer/Footer.css +104 -0
  201. package/dist/components/core/footer/Footer.d.ts +43 -0
  202. package/dist/components/core/footer/Footer.js +53 -0
  203. package/dist/components/core/footer/Footer.types.d.ts +47 -0
  204. package/dist/components/core/footer/Footer.types.js +18 -0
  205. package/dist/components/core/footer/footer-impl.css +218 -0
  206. package/dist/components/core/footer-group/FooterGroup.css +90 -0
  207. package/dist/components/core/footer-group/FooterGroup.d.ts +32 -0
  208. package/dist/components/core/footer-group/FooterGroup.js +64 -0
  209. package/dist/components/core/footer-group/FooterGroup.types.d.ts +25 -0
  210. package/dist/components/core/footer-group/FooterGroup.types.js +12 -0
  211. package/dist/components/core/footer-group/footer-group-impl.css +78 -0
  212. package/dist/components/core/icon/Icon.css +40 -0
  213. package/dist/components/core/icon/Icon.d.ts +23 -0
  214. package/dist/components/core/icon/Icon.js +79 -0
  215. package/dist/components/core/icon/Icon.types.d.ts +24 -0
  216. package/dist/components/core/icon/Icon.types.js +7 -0
  217. package/dist/components/core/link/Link.css +89 -0
  218. package/dist/components/core/link/Link.d.ts +37 -0
  219. package/dist/components/core/link/Link.js +141 -0
  220. package/dist/components/core/link/Link.types.d.ts +41 -0
  221. package/dist/components/core/link/Link.types.js +9 -0
  222. package/dist/components/core/link/link-impl.css +168 -0
  223. package/dist/components/core/menu-item/MenuItem.css +70 -0
  224. package/dist/components/core/menu-item/MenuItem.d.ts +11 -0
  225. package/dist/components/core/menu-item/MenuItem.js +26 -0
  226. package/dist/components/core/menu-item/MenuItem.types.d.ts +28 -0
  227. package/dist/components/core/menu-item/MenuItem.types.js +9 -0
  228. package/dist/components/core/navbar/Navbar.css +135 -0
  229. package/dist/components/core/navbar/Navbar.d.ts +36 -0
  230. package/dist/components/core/navbar/Navbar.js +371 -0
  231. package/dist/components/core/navbar/Navbar.types.d.ts +49 -0
  232. package/dist/components/core/navbar/Navbar.types.js +17 -0
  233. package/dist/components/core/navbar/navbar-impl.css +590 -0
  234. package/dist/components/core/navbar-item/NavbarItem.css +75 -0
  235. package/dist/components/core/navbar-item/NavbarItem.d.ts +22 -0
  236. package/dist/components/core/navbar-item/NavbarItem.js +40 -0
  237. package/dist/components/core/navbar-item/NavbarItem.types.d.ts +34 -0
  238. package/dist/components/core/navbar-item/NavbarItem.types.js +10 -0
  239. package/dist/components/core/navbar-menu/NavbarMenu.css +128 -0
  240. package/dist/components/core/navbar-menu/NavbarMenu.d.ts +5 -0
  241. package/dist/components/core/navbar-menu/NavbarMenu.js +186 -0
  242. package/dist/components/core/navbar-menu/NavbarMenu.types.d.ts +45 -0
  243. package/dist/components/core/navbar-menu/NavbarMenu.types.js +12 -0
  244. package/dist/components/core/navbar-menu/navbar-menu-impl.css +186 -0
  245. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.css +26 -0
  246. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.d.ts +17 -0
  247. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.js +22 -0
  248. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.types.d.ts +14 -0
  249. package/dist/components/core/navbar-menu-group/NavbarMenuGroup.types.js +7 -0
  250. package/dist/components/core/navbar-panel/NavbarPanel.css +87 -0
  251. package/dist/components/core/navbar-panel/NavbarPanel.d.ts +34 -0
  252. package/dist/components/core/navbar-panel/NavbarPanel.js +46 -0
  253. package/dist/components/core/navbar-panel/NavbarPanel.types.d.ts +29 -0
  254. package/dist/components/core/navbar-panel/NavbarPanel.types.js +12 -0
  255. package/dist/components/core/navbar-panel/navbar-panel-impl.css +104 -0
  256. package/dist/components/core/navbar-panel/use-navbar-panel.d.ts +26 -0
  257. package/dist/components/core/navbar-panel/use-navbar-panel.js +135 -0
  258. package/dist/components/core/navbar-switcher/NavbarSwitcher.css +117 -0
  259. package/dist/components/core/navbar-switcher/NavbarSwitcher.d.ts +20 -0
  260. package/dist/components/core/navbar-switcher/NavbarSwitcher.js +90 -0
  261. package/dist/components/core/navbar-switcher/NavbarSwitcher.types.d.ts +46 -0
  262. package/dist/components/core/navbar-switcher/NavbarSwitcher.types.js +13 -0
  263. package/dist/components/core/navbar-switcher/navbar-switcher-impl.css +179 -0
  264. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.css +39 -0
  265. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.d.ts +16 -0
  266. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.js +19 -0
  267. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.types.d.ts +18 -0
  268. package/dist/components/core/navbar-switcher-option/NavbarSwitcherOption.types.js +7 -0
  269. package/dist/components/core/option/Option.css +133 -0
  270. package/dist/components/core/option/Option.d.ts +25 -0
  271. package/dist/components/core/option/Option.js +31 -0
  272. package/dist/components/core/option/Option.types.d.ts +44 -0
  273. package/dist/components/core/option/Option.types.js +14 -0
  274. package/dist/components/core/pagination/Pagination.css +237 -0
  275. package/dist/components/core/pagination/Pagination.d.ts +30 -0
  276. package/dist/components/core/pagination/Pagination.js +406 -0
  277. package/dist/components/core/pagination/Pagination.types.d.ts +59 -0
  278. package/dist/components/core/pagination/Pagination.types.js +14 -0
  279. package/dist/components/core/pagination/pagination-impl.css +17 -0
  280. package/dist/components/core/removable-chip/RemovableChip.css +125 -0
  281. package/dist/components/core/removable-chip/RemovableChip.d.ts +25 -0
  282. package/dist/components/core/removable-chip/RemovableChip.js +36 -0
  283. package/dist/components/core/removable-chip/RemovableChip.types.d.ts +38 -0
  284. package/dist/components/core/removable-chip/RemovableChip.types.js +13 -0
  285. package/dist/components/core/search-input/SearchInput.css +205 -0
  286. package/dist/components/core/search-input/SearchInput.d.ts +5 -0
  287. package/dist/components/core/search-input/SearchInput.js +81 -0
  288. package/dist/components/core/search-input/SearchInput.types.d.ts +43 -0
  289. package/dist/components/core/search-input/SearchInput.types.js +13 -0
  290. package/dist/components/core/search-input/search-input-impl.css +20 -0
  291. package/dist/components/core/segmented-control/SegmentedControl.css +57 -0
  292. package/dist/components/core/segmented-control/SegmentedControl.d.ts +37 -0
  293. package/dist/components/core/segmented-control/SegmentedControl.js +269 -0
  294. package/dist/components/core/segmented-control/SegmentedControl.types.d.ts +38 -0
  295. package/dist/components/core/segmented-control/SegmentedControl.types.js +8 -0
  296. package/dist/components/core/segmented-control/segmented-control-impl.css +57 -0
  297. package/dist/components/core/segmented-control-item/SegmentedControlItem.css +151 -0
  298. package/dist/components/core/segmented-control-item/SegmentedControlItem.d.ts +50 -0
  299. package/dist/components/core/segmented-control-item/SegmentedControlItem.js +101 -0
  300. package/dist/components/core/segmented-control-item/SegmentedControlItem.types.d.ts +37 -0
  301. package/dist/components/core/segmented-control-item/SegmentedControlItem.types.js +10 -0
  302. package/dist/components/core/segmented-control-item/segmented-control-item-impl.css +69 -0
  303. package/dist/components/core/select/Select.css +400 -0
  304. package/dist/components/core/select/Select.d.ts +29 -0
  305. package/dist/components/core/select/Select.js +524 -0
  306. package/dist/components/core/select/Select.types.d.ts +96 -0
  307. package/dist/components/core/select/Select.types.js +26 -0
  308. package/dist/components/core/select/select-impl.css +114 -0
  309. package/dist/components/core/select-chip/SelectChip.css +155 -0
  310. package/dist/components/core/select-chip/SelectChip.d.ts +20 -0
  311. package/dist/components/core/select-chip/SelectChip.js +273 -0
  312. package/dist/components/core/select-chip/SelectChip.types.d.ts +56 -0
  313. package/dist/components/core/select-chip/SelectChip.types.js +14 -0
  314. package/dist/components/core/select-chip/select-chip-impl.css +38 -0
  315. package/dist/components/core/spinner/Spinner.css +76 -0
  316. package/dist/components/core/spinner/Spinner.d.ts +5 -0
  317. package/dist/components/core/spinner/Spinner.js +29 -0
  318. package/dist/components/core/spinner/Spinner.types.d.ts +37 -0
  319. package/dist/components/core/spinner/Spinner.types.js +10 -0
  320. package/dist/components/core/spinner/spinner-impl.css +27 -0
  321. package/dist/components/core/status-dot/StatusDot.css +43 -0
  322. package/dist/components/core/status-dot/StatusDot.d.ts +35 -0
  323. package/dist/components/core/status-dot/StatusDot.js +46 -0
  324. package/dist/components/core/status-dot/StatusDot.types.d.ts +29 -0
  325. package/dist/components/core/status-dot/StatusDot.types.js +7 -0
  326. package/dist/components/core/status-dot/status-dot-impl.css +42 -0
  327. package/dist/components/core/subdomain-navbar/SubdomainNavbar.css +89 -0
  328. package/dist/components/core/subdomain-navbar/SubdomainNavbar.d.ts +21 -0
  329. package/dist/components/core/subdomain-navbar/SubdomainNavbar.js +127 -0
  330. package/dist/components/core/subdomain-navbar/SubdomainNavbar.types.d.ts +43 -0
  331. package/dist/components/core/subdomain-navbar/SubdomainNavbar.types.js +13 -0
  332. package/dist/components/core/subdomain-navbar/subdomain-navbar-impl.css +147 -0
  333. package/dist/components/core/tab/Tab.css +113 -0
  334. package/dist/components/core/tab/Tab.d.ts +36 -0
  335. package/dist/components/core/tab/Tab.js +53 -0
  336. package/dist/components/core/tab/Tab.types.d.ts +42 -0
  337. package/dist/components/core/tab/Tab.types.js +13 -0
  338. package/dist/components/core/tab/tab-impl.css +49 -0
  339. package/dist/components/core/tab-list/TabList.css +40 -0
  340. package/dist/components/core/tab-list/TabList.d.ts +26 -0
  341. package/dist/components/core/tab-list/TabList.js +124 -0
  342. package/dist/components/core/tab-list/TabList.types.d.ts +20 -0
  343. package/dist/components/core/tab-list/TabList.types.js +7 -0
  344. package/dist/components/core/tab-list/tab-list-impl.css +56 -0
  345. package/dist/components/core/table/Table.css +40 -0
  346. package/dist/components/core/table/Table.d.ts +19 -0
  347. package/dist/components/core/table/Table.js +55 -0
  348. package/dist/components/core/table/Table.types.d.ts +59 -0
  349. package/dist/components/core/table/Table.types.js +9 -0
  350. package/dist/components/core/table/table-impl.css +75 -0
  351. package/dist/components/core/table/use-table-sort.d.ts +43 -0
  352. package/dist/components/core/table/use-table-sort.js +51 -0
  353. package/dist/components/core/table-body/TableBody.css +6 -0
  354. package/dist/components/core/table-body/TableBody.d.ts +12 -0
  355. package/dist/components/core/table-body/TableBody.js +26 -0
  356. package/dist/components/core/table-body/TableBody.types.d.ts +36 -0
  357. package/dist/components/core/table-body/TableBody.types.js +7 -0
  358. package/dist/components/core/table-cell/TableCell.css +76 -0
  359. package/dist/components/core/table-cell/TableCell.d.ts +21 -0
  360. package/dist/components/core/table-cell/TableCell.js +31 -0
  361. package/dist/components/core/table-cell/TableCell.types.d.ts +43 -0
  362. package/dist/components/core/table-cell/TableCell.types.js +7 -0
  363. package/dist/components/core/table-head/TableHead.css +6 -0
  364. package/dist/components/core/table-head/TableHead.d.ts +22 -0
  365. package/dist/components/core/table-head/TableHead.js +52 -0
  366. package/dist/components/core/table-head/TableHead.types.d.ts +39 -0
  367. package/dist/components/core/table-head/TableHead.types.js +7 -0
  368. package/dist/components/core/table-head/table-head-impl.css +51 -0
  369. package/dist/components/core/table-header-cell/TableHeaderCell.css +126 -0
  370. package/dist/components/core/table-header-cell/TableHeaderCell.d.ts +21 -0
  371. package/dist/components/core/table-header-cell/TableHeaderCell.js +34 -0
  372. package/dist/components/core/table-header-cell/TableHeaderCell.types.d.ts +56 -0
  373. package/dist/components/core/table-header-cell/TableHeaderCell.types.js +9 -0
  374. package/dist/components/core/table-header-cell/table-header-cell-impl.css +74 -0
  375. package/dist/components/core/table-row/TableRow.css +18 -0
  376. package/dist/components/core/table-row/TableRow.d.ts +17 -0
  377. package/dist/components/core/table-row/TableRow.js +32 -0
  378. package/dist/components/core/table-row/TableRow.types.d.ts +45 -0
  379. package/dist/components/core/table-row/TableRow.types.js +7 -0
  380. package/dist/components/core/table-row/table-row-impl.css +31 -0
  381. package/dist/components/core/text-area/TextArea.css +325 -0
  382. package/dist/components/core/text-area/TextArea.d.ts +13 -0
  383. package/dist/components/core/text-area/TextArea.js +133 -0
  384. package/dist/components/core/text-area/TextArea.types.d.ts +67 -0
  385. package/dist/components/core/text-area/TextArea.types.js +19 -0
  386. package/dist/components/core/text-area/text-area-impl.css +36 -0
  387. package/dist/components/core/text-input/TextInput.css +400 -0
  388. package/dist/components/core/text-input/TextInput.d.ts +5 -0
  389. package/dist/components/core/text-input/TextInput.js +130 -0
  390. package/dist/components/core/text-input/TextInput.types.d.ts +96 -0
  391. package/dist/components/core/text-input/TextInput.types.js +24 -0
  392. package/dist/components/core/text-input/text-input-impl.css +36 -0
  393. package/dist/components/core/tooltip/Tooltip.css +101 -0
  394. package/dist/components/core/tooltip/Tooltip.d.ts +51 -0
  395. package/dist/components/core/tooltip/Tooltip.js +87 -0
  396. package/dist/components/core/tooltip/Tooltip.types.d.ts +38 -0
  397. package/dist/components/core/tooltip/Tooltip.types.js +9 -0
  398. package/dist/components/core/tooltip/TooltipAnchor.d.ts +52 -0
  399. package/dist/components/core/tooltip/TooltipAnchor.js +69 -0
  400. package/dist/components/core/tooltip/tooltip-anchor.css +145 -0
  401. package/dist/components/core/tooltip/tooltip-impl.css +54 -0
  402. package/dist/components/core/tooltip/use-tooltip.d.ts +111 -0
  403. package/dist/components/core/tooltip/use-tooltip.js +189 -0
  404. package/dist/components/core/typography/Typography.css +96 -0
  405. package/dist/components/core/typography/Typography.d.ts +297 -0
  406. package/dist/components/core/typography/Typography.js +28 -0
  407. package/dist/components/core/typography/Typography.types.d.ts +40 -0
  408. package/dist/components/core/typography/Typography.types.js +7 -0
  409. package/dist/components/css-time.d.ts +20 -0
  410. package/dist/components/css-time.js +30 -0
  411. package/dist/components/given.d.ts +7 -0
  412. package/dist/components/given.js +9 -0
  413. package/dist/components/hover-open.d.ts +34 -0
  414. package/dist/components/hover-open.js +90 -0
  415. package/dist/components/index.d.ts +114 -1
  416. package/dist/components/index.js +115 -2
  417. package/dist/components/layout/aspect-ratio/AspectRatio.css +29 -0
  418. package/dist/components/layout/aspect-ratio/AspectRatio.d.ts +24 -0
  419. package/dist/components/layout/aspect-ratio/AspectRatio.js +26 -0
  420. package/dist/components/layout/aspect-ratio/AspectRatio.types.d.ts +22 -0
  421. package/dist/components/layout/aspect-ratio/AspectRatio.types.js +7 -0
  422. package/dist/components/layout/aspect-ratio/aspect-ratio-impl.css +44 -0
  423. package/dist/components/layout/grid/Grid.css +76 -0
  424. package/dist/components/layout/grid/Grid.d.ts +31 -0
  425. package/dist/components/layout/grid/Grid.js +33 -0
  426. package/dist/components/layout/grid/Grid.types.d.ts +48 -0
  427. package/dist/components/layout/grid/Grid.types.js +7 -0
  428. package/dist/components/layout/grid/grid-impl.css +62 -0
  429. package/dist/components/layout/row/Row.css +85 -0
  430. package/dist/components/layout/row/Row.d.ts +32 -0
  431. package/dist/components/layout/row/Row.js +34 -0
  432. package/dist/components/layout/row/Row.types.d.ts +45 -0
  433. package/dist/components/layout/row/Row.types.js +7 -0
  434. package/dist/components/layout/scroller/Scroller.css +59 -0
  435. package/dist/components/layout/scroller/Scroller.d.ts +34 -0
  436. package/dist/components/layout/scroller/Scroller.js +36 -0
  437. package/dist/components/layout/scroller/Scroller.types.d.ts +38 -0
  438. package/dist/components/layout/scroller/Scroller.types.js +7 -0
  439. package/dist/components/layout/scroller/scroller-impl.css +45 -0
  440. package/dist/components/layout/stack/Stack.css +73 -0
  441. package/dist/components/layout/stack/Stack.d.ts +28 -0
  442. package/dist/components/layout/stack/Stack.js +30 -0
  443. package/dist/components/layout/stack/Stack.types.d.ts +41 -0
  444. package/dist/components/layout/stack/Stack.types.js +7 -0
  445. package/dist/components/visually-hidden.d.ts +22 -0
  446. package/dist/components/visually-hidden.js +31 -0
  447. package/dist/fonts/LICENSE-inter.txt +93 -0
  448. package/dist/fonts/LICENSE-red-hat-mono.txt +93 -0
  449. package/dist/fonts/fonts.css +111 -0
  450. package/dist/fonts/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  451. package/dist/fonts/inter-cyrillic-wght-normal.woff2 +0 -0
  452. package/dist/fonts/inter-greek-ext-wght-normal.woff2 +0 -0
  453. package/dist/fonts/inter-greek-wght-normal.woff2 +0 -0
  454. package/dist/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  455. package/dist/fonts/inter-latin-wght-normal.woff2 +0 -0
  456. package/dist/fonts/inter-vietnamese-wght-normal.woff2 +0 -0
  457. package/dist/fonts/red-hat-mono-latin-ext-wght-normal.woff2 +0 -0
  458. package/dist/fonts/red-hat-mono-latin-wght-normal.woff2 +0 -0
  459. package/dist/marketing.css +289 -241
  460. package/package.json +18 -4
@@ -0,0 +1,52 @@
1
+ <!-- GENERATED from divider.contract.json. Do not edit. -->
2
+
3
+ # Divider
4
+
5
+ A rule between things, and the quietest way to say that what is on one side of it belongs to a different group from what is on the other. …
6
+
7
+ `import { Divider } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - Two groups inside one container that nothing else is separating — a footer's link columns, the tiers inside a pricing card, a card's summary above its detail. …
12
+ - A row of items holding one that belongs to a different set from its neighbours — the vertical case. …
13
+ - A word between two rules, where that word is the entire content of the divide: OR between two ways of signing up, and little else. …
14
+
15
+ ## Something else, when
16
+
17
+ - The groups have names → **Typography**
18
+ - The space between the groups already separates them → **nothing in this system does this**
19
+ - The line wanted is the edge of a surface → **Card**
20
+ - The line wanted is the rail under a tab strip → **TabList**
21
+
22
+ ## Never
23
+
24
+ - Room. It draws a line and owns no space around it, so the air either side is the layout's — only the thing holding the groups knows how much air they deserve. A rule that carried margins of its own would be a rule nobody could put anywhere, because every place it went would need them different
25
+ - A line under every heading. A page ruled off at each of its headings reads as a form to be filled rather than as prose to be read, and the rules stop meaning anything once they are everywhere — which is the state a divider cannot recover from, since it has only one thing to say. …
26
+ - Two rules with nothing between them, or a rule at the start or end of a set. A separator separates, so one with a group on only one side of it is a line drawn around nothing — and at the edge of a container it is the container's own border, moved inward by a pixel and drawn in the wrong ink
27
+ - Structure a reader navigates by. A screen reader announces a separator where it helps and skips it where it does not; what makes a group findable is a heading or a list, and a rule is neither. If a group has to be reachable, give it something with a name
28
+ - Carrying a status, a warning, or any other meaning through colour. There is one ink here and it is the quietest one this package has, deliberately: a red rule is a message nobody can read, and the message belongs in words on the surface the rule divides
29
+
30
+ ## Props
31
+
32
+ - **orientation** `enum` · default "horizontal" — The axis the groups are arranged on. A rule across a stack is horizontal; a rule down a row is vertical
33
+ - `horizontal` — The default, and nearly every divider: a rule across a stack, separating what is above it from what is below. …
34
+ - `vertical` — A rule down a row, separating items beside one another. …
35
+ - never: Turning a rule to fit a layout that has not decided what it is. The orientation follows the axis the groups are arranged on — a vertical rule between two stacked groups says they sit side by side, which is a claim about the layout that the layout will contradict. …
36
+ - **label** `string` · optional — The divide has a word, and the word is short: OR between two ways of signing up, and very little else. …
37
+ - never: A sentence, or a heading. The word sits between two rules in the width of a container, so anything longer takes the rules with it: at a phrase there is little line left on either side, and at a sentence the divider has become a caption drawn in the wrong ink. …
38
+ - **decorative** `boolean` · default false — The grouping this rule draws is already announced some other way — the rows either side are list items, the sections either side have headings of their own. …
39
+ - never: A rule that is the only thing saying the groups are different. That is the ordinary case, which is why it is the default: where the line carries the grouping for the reader who can see it, the separator role is what carries the same grouping for the reader who cannot, and hiding it takes the structure away from exactly one audience
40
+
41
+ ## The type refuses
42
+
43
+ - decorative=true with label="*" — A labelled divider is not a separator — the word is content, and content is why the role is given up. …
44
+
45
+ ## Inside it
46
+
47
+ - 7 components are refused inside it; the list and the reasons are in the long document.
48
+ - Renders 3 parts: root, line, label.
49
+
50
+ ---
51
+
52
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/divider.md`.
@@ -0,0 +1,67 @@
1
+ <!-- GENERATED from dropdownmenu.contract.json. Do not edit. -->
2
+
3
+ # DropdownMenu
4
+
5
+ A button that opens a short set of destinations. Pressing one goes somewhere and the menu shuts — it holds no value and reports no answer, so there is nothing about it to find on reopening. …
6
+
7
+ `import { DropdownMenu } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A set of destinations too long for the navigation bar and too short to be a page of its own — languages, regions, the parts of a long index
12
+ - The set is short enough to read at a glance, where a visitor is choosing rather than searching
13
+
14
+ ## Something else, when
15
+
16
+ - The set reports a choice the visitor should find marked when they return → **nothing in this system does this**
17
+ - The destinations belong in the page's navigation → **nothing in this system does this**
18
+ - It is one destination rather than one of a set → **nothing in this system does this**
19
+ - The set is long enough that a visitor would rather type than read → **nothing in this system does this**
20
+
21
+ ## Never
22
+
23
+ - Anything that destroys. Marketing has no destructive tone by decision — a page navigates a visitor toward a conversion and never deletes on their behalf
24
+ - The page's main action. A menu is a set of supporting destinations, and the one step a page was built to produce is a Button in the open where it can be seen without a press
25
+ - Carrying the words a visitor 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
26
+
27
+ ## Props
28
+
29
+ - **variant** `enum` · default "outlined"
30
+ - `outlined` — The control stands on its own — a switcher in a toolbar, a filter above a table, anywhere a reader has to find it before they can use it. The edge is what says there is something here to press
31
+ - `plain` — The control sits among others that have already said what they are — a locale beside a row of sections in a navigation bar, where every neighbour is words and a mark and an edge around one of them would make it the loudest thing in the set. …
32
+ - **size** `enum` · default "md" — Match it to the controls it stands beside. Two steps and no third: this package's control ramp runs sm then md, and the step above them is being retired rather than offered here
33
+ - `sm` — Beside body copy rather than above it — a language picker in a navigation bar or a footer, where the trigger is one item in a row of links and should not outweigh them
34
+ - `md` — The default, and nearly every other page. The same height as a default Button, so the two line up when they sit in the same band
35
+ - never: Making the menu itself bigger. This sizes the trigger and the rows in it; how wide the panel runs is its longest destination's business, and how tall it gets before scrolling is size.menu.max at either step
36
+ - **alignment** `enum` · default "start"
37
+ - `start` — The menu's leading edge lines up with the trigger's. The default, because a visitor reads from that edge and the destinations begin where the button's own words began
38
+ - `end` — Its trailing edge lines up instead, which is what a trigger near the end of a row needs — a footer's language picker aligned to the start would run off the screen
39
+ - **tone** `enum` · default "default"
40
+ - `default` — The control is on a light ground, which is every surface this package paints by default
41
+ - `inverse` — The control is on a ground that runs against the mode — a navigation bar standing on a dark hero. …
42
+ - **label** `string` · required — Always — the words on the trigger, and the whole of what a visitor has to go on before they press it. "Language", "Region", "More pages". …
43
+ - never: A sentence. This sits in a row of other things and does not wrap — words long enough to need the room are words that belong on the page
44
+ - **icon** `node` · optional — A mark before the trigger's words, where the set is read by shape as much as by reading — a globe beside "Language", a flag beside the region a visitor is already in
45
+ - never: The chevron, which this component draws itself and is not a slot. And saying what the menu holds when the words already do: a mark beside "Language" is recognised faster, a mark beside "Choose where you are reading from" is decoration in front of a sentence
46
+ - **chevron** `boolean` · default true — A chevron in the trigger, pointing down while the menu is shut and up while it is open. …
47
+ - never: A trigger standing on its own. Without an edge or a chevron there is nothing left saying the control opens anything, and a reader finds out by pressing it. Turn it off only where the neighbours say it — a locale in a row of sections that each carry one, where a third chevron is the repetition rather than the signal
48
+ - **openOnHover** `boolean` · default false — The menu is one of several things on a bar that open, and the others open on hover — a switcher beside a row of navigation sections, where a reader who has learned that the sections open under the pointer meets one control that does not and reads it as broken. …
49
+ - never: A menu whose rows do something on the spot rather than go somewhere. Hover is an accident as often as it is an intention, and a set opened by accident is one a reader can act on by accident
50
+ - **trigger** `node` · optional — A control this component should open rather than draw — one whose mark is the whole of it, with no words to read. …
51
+ - never: Anything that is not a button. A menu opened by a div is a menu a keyboard cannot reach, and one opened by this package's Button is a link that does not navigate — Button is an anchor here, which is the reason this component drew its own trigger to begin with. …
52
+ - **open** `boolean` · optional — The page holds whether the menu is open, and this component stops holding it. For the case where something outside has to shut it — a navigation bar that closes its menu when another one opens. …
53
+ - never: Opening it on arrival. A menu that opens itself is a panel the visitor did not ask for, over content they came to read — and the browser scrolls whatever takes focus into view, so it moves the page as well
54
+ - **defaultOpen** `boolean` · optional — A specimen — a documentation page, the preview's own stage — where the menu has to be on screen to be looked at. This component still holds the state afterwards
55
+ - never: A real page. It is the same objection as open's, without even a prop the page could use to close it again
56
+ - **onOpenChange** `callback` · optional — Something outside has to know — a navigation bar shutting its other menus, a page that dims behind an open one. Required in practice alongside open, which is the only way a driven menu ever closes
57
+ - never: Running what the row does. That is the row's own onSelect, and a menu cannot tell you which one was pressed — it only knows that it shut
58
+
59
+ ## Inside it
60
+
61
+ - Takes only MenuItem.
62
+ - 6 components are refused inside it; the list and the reasons are in the long document.
63
+ - Renders 6 parts: root, trigger, icon, label, chevron, surface.
64
+
65
+ ---
66
+
67
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/dropdownmenu.md`.
@@ -0,0 +1,68 @@
1
+ <!-- GENERATED from filterchip.contract.json. Do not edit. -->
2
+
3
+ # FilterChip
4
+
5
+ A token the reader turns on and off in place, standing for one narrowing of the set shown beside it. …
6
+
7
+ `import { FilterChip } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - An index is long enough to be worth cutting down and its categories are few enough to show in full — a blog filtered by topic, a help centre filtered by product, a market list filtered by asset class …
12
+ - The choice is small enough that a form control would be more machinery than it deserves — turning one topic on is not a question worth a checkbox and a label
13
+ - What is chosen has to stay visible while the reader reads what it did, so the narrowing and the list it produced can be read together
14
+
15
+ ## Something else, when
16
+
17
+ - The token stands for a narrowing already applied, which the reader drops rather than turns off → **RemovableChip**
18
+ - The thing named cannot be acted on and is there to be read — a tag on an article, a status on a card → **Badge**
19
+ - The chips are really the navigation of the page, and pressing one changes what the page is → **Tab**
20
+ - Pressing it goes somewhere — a category page with its own address → **Link**
21
+
22
+ ## Never
23
+
24
+ - An action. It is pressed to say a thing applies, and nothing else — one that submits or navigates is a button wearing a token's shape, and a reader cannot tell which they have until they press it
25
+ - A set so long it wraps into several rows. Chips are read as a group at a glance, and past a handful the reading costs more than a list would
26
+ - Carrying the chosen state in hue alone. Two colours of the same lightness are no difference to a reader who cannot separate them, which is why the chosen ground travels the whole way from the page's ground to the darkest one this package has rather than to a tint of the same weight
27
+
28
+ ## Props
29
+
30
+ - **selected** `boolean` · default false — The narrowing currently applies. It is the consumer's to hold, because the list and the chip are one fact — a chip keeping its own copy is how the two come to disagree
31
+ - never: Marking something as important, or as the default. Chosen means the reader chose it, and one that arrives already on implies an act nobody took
32
+ - **size** `enum` · default "sm" — How dense the row is, matched to whatever it sits beside. …
33
+ - `sm` — The default. A step under the button or field it stands beside rather than level with it, which is what keeps a row of narrowings from reading as a row of calls to action
34
+ - `md` — A touch-first layout, or a filter row in a hero band where the chips carry more weight. …
35
+ - never: Marking one chip in a row as more important. They are a set of equals and a row of mismatched heights reads as a mistake before it reads as emphasis
36
+ - **content** `enum` · default "none" — What the chip carries after its words, where it carries anything. It names the kind rather than being inferred from which node arrived, so exactly one thing can be in the slot and a leftover prop is inert rather than fighting for the space
37
+ - `none` — Nothing after the words. Most chips, and the one to reach for unless something earns the space in a row read at a glance
38
+ - `icon` — A glyph qualifying the narrowing rather than naming it — a mark that a topic is new, or that it came from somewhere else. …
39
+ - `badge` — How many entries the narrowing would leave, which is the fact a reader wants before they press. …
40
+ - `custom` — The row needs a mark neither of the named kinds is. …
41
+ - never: Repeating the label, or naming the narrowing twice. The slot qualifies what the words already said; a chip whose trailing mark restates them has spent the space for nothing
42
+ - **label** `string` · required — Always, and required on that account — it is the whole of what the chip says. Short enough to read at a glance: a token carrying a sentence has stopped being one
43
+ - never: Describing what pressing it does. The chip names the narrowing, and what happens is that the narrowing applies
44
+ - **leadingIcon** `node` · optional — A glyph makes the kind of narrowing faster to recognise than its name alone. It sits before the words and never replaces them. …
45
+ - never: Decoration, or a second copy of what the word says. A row where every chip carries a mark that adds nothing reads more slowly than plain words would
46
+ - **trailingIcon** `node` · optional — The glyph shown when content is icon. Sized and coloured with the chip rather than on its own terms, so a row of them reads as one set
47
+ - never: Filling the slot on its own. `content` decides what is shown, so this is inert until it names icon — which is what stops two marks arriving at once when a chip changes its mind about what it carries
48
+ - **badge** `node` · optional — The count shown when content is badge. A Badge rather than bare type, so the number reads as a fact of its own rather than as part of the label — and so it carries its own colour, which the chip does not decide
49
+ - never: Filling the slot on its own. `content` decides what is shown, so this is inert until it names badge
50
+ - **custom** `node` · optional — Whatever is shown when content is custom. Nothing here is described by the documentation or the library, which is the cost of the escape hatch
51
+ - never: Filling the slot on its own. `content` decides what is shown, so this is inert until it names custom
52
+ - **onSelect** `callback` · optional — What hears the press. It reports what the chip is about to become rather than that it was pressed, so a consumer writes the value back without working out which way it went
53
+ - never: Reading the event. The signature is the new state because that is the decision the reader made; a handler reaching for the event recomputes what it was handed
54
+
55
+ ## The type refuses
56
+
57
+ - content="icon" with trailingIcon=null — content is icon and there is nothing to show, which renders a gap where something was promised
58
+ - content="badge" with badge=null — content is badge and there is nothing to show, which renders a gap where something was promised
59
+ - content="custom" with custom=null — content is custom and there is nothing to show, which renders a gap where something was promised
60
+
61
+ ## Inside it
62
+
63
+ - 5 components are refused inside it; the list and the reasons are in the long document.
64
+ - Renders 4 parts: root, icon, label, trailing.
65
+
66
+ ---
67
+
68
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/filterchip.md`.
@@ -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,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,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,60 @@
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 something in it — a language switcher, a theme switcher, a conversion action, or some combination. …
42
+ - never: Destinations. Anything that goes to a section of the site belongs in the children, where the navigation landmark announces it as one. The trailing end is for what a reader reaches for, not for the places the bar ran out of room for
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
+ - **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. …
48
+ - 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
49
+ - **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
50
+ - 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
51
+
52
+ ## Inside it
53
+
54
+ - Takes only NavbarItem, NavbarMenu.
55
+ - 10 components are refused inside it; the list and the reasons are in the long document.
56
+ - Renders 11 parts: root, inner, ground, brand, nav, preferences, utilities, compact-action, trigger, panel-host, cluster.
57
+
58
+ ---
59
+
60
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/navbar.md`.