@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
package/.llm/tokens.md ADDED
@@ -0,0 +1,341 @@
1
+ <!-- GENERATED from tokens/semantic/**. Do not edit. -->
2
+
3
+ # Tokens
4
+
5
+ Write the CSS variable, never the value it resolves to. Resolved values are
6
+ deliberately not published here — copying one is the hardcoding this system rejects.
7
+
8
+ Some roles below are marked **adapts**. Those already change at 768px on their own —
9
+ write the variable once and do not add a media query for it. Every other role holds
10
+ one value at every width.
11
+
12
+ ## color
13
+
14
+ - `--color-bg-active` — Pressed state for interactive elements. Alpha-based like the hover and one step heavier, so it tints whatever surface it lands on — ink on light and paper on dark.
15
+ - `--color-bg-active-inverse` — Pressed state for an interactive element on a surface that runs against the mode, one step heavier than color.bg.hover-inverse. The mirror of color.bg.active, and paired with it on the same reasoning.
16
+ - `--color-bg-brand` — Primary action surface, e.g. sign-up button, hero CTA, promotional banner. Pair with color.fg.on-solid for text.
17
+ - `--color-bg-brand-active` — Pressed state for color.bg.brand. One step further along the ramp than the hover, in the same direction, so a press reads as more of what the hover began.
18
+ - `--color-bg-brand-hover` — Hover state for color.bg.brand.
19
+ - `--color-bg-brand-strong` — A dark brand surface, for a band breaking a long page or a card carrying more weight than its neighbours. brand.1000 in light and brand.900 in dark, where a near-black band would disappear into the page rather than break it.
20
+ - `--color-bg-brand-subtle` — A brand ground quiet enough to read dark ink on. The solid coral takes white at 3.39:1 and is waived for a word; this pairs with color.fg.brand well past the bar, so a mark can be brand-coloured without spending the waiver.
21
+ - `--color-bg-danger` — Destructive action surface, e.g. cancel subscription, delete account. Pair with color.fg.on-solid for text.
22
+ - `--color-bg-danger-subtle` — Lightweight danger fill, e.g. error banners, danger badges. Pair with color.fg.danger for text.
23
+ - `--color-bg-field` — The ground of a control a reader types into or picks from — a text field, a select, an upload zone. An alpha, so it can never come out the same colour as the container holding it, which a solid can. For the container itself use color.bg.surface.
24
+ - `--color-bg-hover` — Hover state for interactive elements. Alpha-based, so it tints whatever surface it lands on rather than replacing it — ink on light and paper on dark, because a black alpha on a dark surface darkens what is already dark and reads as nothing at all.
25
+ - `--color-bg-hover-inverse` — Hover for an interactive element on a surface that runs against the mode — a dark chip in light. The mirror of color.bg.hover, which tints with the mode and so shows nothing on a ground the mode did not paint. Use color.bg.hover where the mode paints the ground.
26
+ - `--color-bg-info` — Informational surface, e.g. info banners, tips. Pair with color.fg.on-solid for text.
27
+ - `--color-bg-info-subtle` — Lightweight info fill, e.g. info badges, inline notices. Pair with color.fg.info for text.
28
+ - `--color-bg-overlay` — Scrim behind modal dialogs and drawers. Blocks interaction with content beneath.
29
+ - `--color-bg-overlay-subtle` — Light scrim for loading states and image overlays.
30
+ - `--color-bg-page` — The website's ground. A section that needs separating from it takes color.bg.subtle, color.bg.brand-strong or color.bg.brand, rather than the page carrying a tint of its own.
31
+ - `--color-bg-readonly` — A field whose value is fixed but still worth reading. Lighter than the disabled ground and at full contrast, which is the distinction: readonly is legible and settled, disabled recedes because it is not actionable.
32
+ - `--color-bg-selected` — The active or current item in a set of choices, e.g. selected nav item, current tab, highlighted row. Not for recessive areas — use color.bg.subtle.
33
+ - `--color-bg-strong` — Inverted neutral fill for an action that has to outrank everything around it — near-black in light and pure white in dark, the highest contrast the page can carry. Not a section ground: a band takes bg.subtle, bg.brand-strong or bg.brand. Pair with color.fg.on-strong.
34
+ - `--color-bg-subtle` — A recessive fill within a section, e.g. alternating content bands, highlighted feature areas. Not for active items — use color.bg.selected.
35
+ - `--color-bg-success` — Confirmation surface, e.g. sign-up complete, payment confirmed. Pair with color.fg.on-solid for text.
36
+ - `--color-bg-success-subtle` — Lightweight success fill, e.g. success banners, success badges. Pair with color.fg.success for text.
37
+ - `--color-bg-surface` — A card on the page: one step from the ground, so it reads as recessed against the page and raised on a subtle band. For a card that floats above the page, color.bg.surface-raised.
38
+ - `--color-bg-surface-inverse` — The quieter of the two surfaces on a dark ground, for a panel rather than a pill. color.bg.surface-raised-inverse is the stronger lift and is right on a control the size of a navbar's; at that weight a card-sized box reads as a pale patch rather than a surface.
39
+ - `--color-bg-surface-modal` — A surface that covers the page behind a scrim — dialogs, drawers, bottom sheets. The topmost plane there is, so it stays white in light where color.bg.surface is recessed. For one that floats without dimming what is under it use color.bg.surface-raised.
40
+ - `--color-bg-surface-raised` — A surface that lifts off the one behind it, e.g. a dropdown, a popover, a card on a color.bg.subtle band. A card on the page itself takes color.bg.surface, which reads as recessed against it instead.
41
+ - `--color-bg-surface-raised-inverse` — A raised surface on a ground that runs against the mode — a navigation bar's pill on a dark hero. An alpha rather than a grey step: a hero is often a photograph or a brand colour, which a solid surface would clash with.
42
+ - `--color-bg-track` — The channel a thing travels or fills along — a grab handle on a sheet, a rail. An alpha rather than a ramp step, so it darkens whatever is behind it and stays a groove on a raised panel, where a fixed grey would stop matching the moment the surface changed.
43
+ - `--color-bg-track-active` — Pressed state for the same mark. One step further than the hover, in the same direction, so a press always reads as more than a hover.
44
+ - `--color-bg-track-hover` — Hover state for a mark drawn in color.bg.track, which is the only thing in this colour that hovers — a track itself never does. One step more ink, so a pointer over the mark reads as more, never less. An alpha like the track, so it keeps tinting what is behind it.
45
+ - `--color-bg-transparent` — A fill that is declared and not seen, for an element whose own surface must show through rather than whatever a page happens to sit it on. Needed because omitting the background would leave that surface showing instead.
46
+ - `--color-bg-warning` — Caution surface, e.g. limited offer, expiring promotion. Pair with color.fg.on-solid for text.
47
+ - `--color-bg-warning-subtle` — Lightweight warning fill, e.g. warning banners, warning badges. Pair with color.fg.warning for text.
48
+ - `--color-border-danger` — Error validation border, e.g. input with failed validation, error banner edge.
49
+ - `--color-border-default` — Standard border for containers and controls, e.g. input outlines, grouped sections.
50
+ - `--color-border-focus` — The keyboard focus indicator — a border on some controls, a ring on others. Never remove: required for accessibility. Neutral rather than blue, so it is never mistaken for the danger a control is also able to show. Inverts by mode.
51
+ - `--color-border-focus-inverse` — The focus ring on a ground that runs against the mode. color.border.focus is near-black, which is invisible on a dark bar — and a focus ring that cannot be seen is the one affordance a keyboard reader has nothing to fall back on.
52
+ - `--color-border-info` — Informational accent border, e.g. info banner edge, highlighted section.
53
+ - `--color-border-strong` — Emphasised border for active or prominent elements, e.g. active input, selected card edge.
54
+ - `--color-border-subtle` — A quiet separator, e.g. dividers, table rules. Alpha-based — works on any surface.
55
+ - `--color-border-subtle-inverse` — A quiet rule on a dark ground. The counterpart to color.border.subtle, which is black at 5% and invisible on one.
56
+ - `--color-border-success` — Success validation border, e.g. confirmed input, success banner edge.
57
+ - `--color-border-warning` — Warning validation border, e.g. approaching-limit input, warning banner edge.
58
+ - `--color-fg-brand` — Brand-coloured text, for a mark or a line on color.bg.brand-subtle. Not for text on the page: the brand is a colour a page uses to point at something, and copy set in it is a page pointing at all of itself.
59
+ - `--color-fg-brand-accent` — The brand label at full saturation — the brand fill's own red, the same in both modes, so a label and a fill agree. For the one row a reader is already on. Only on the bare page, never a tint. 3.11:1 as text, under AA: never the only thing saying it.
60
+ - `--color-fg-danger` — Error and destructive text on neutral surfaces, e.g. validation messages, negative values.
61
+ - `--color-fg-default` — Headings and body copy — the default for any readable content.
62
+ - `--color-fg-disabled` — Text on disabled controls. Intentionally low contrast — the control is not actionable.
63
+ - `--color-fg-info` — Informational text on neutral surfaces, e.g. links, tips, contextual help.
64
+ - `--color-fg-muted` — Supporting copy, e.g. subheadings, feature descriptions, form labels. Not for content the user must read to act.
65
+ - `--color-fg-muted-inverse` — Supporting copy on a dark ground, e.g. a footer's group labels. White at sixty-four, so it takes the hue of whatever the band is painted rather than sitting cool against a warm one — and so it stays muted on any dark ground instead of on one.
66
+ - `--color-fg-on-brand-strong` — Text and glyphs on color.bg.brand-strong. White in both modes, that surface being dark in both — unlike color.fg.on-solid, which follows the theme.
67
+ - `--color-fg-on-solid` — Text on solid coloured surfaces, e.g. brand, danger, success, warning buttons. Not for text on neutral surfaces — use color.fg.default.
68
+ - `--color-fg-on-strong` — Text on color.bg.strong. The opposite extreme from the fill, so the pair is always near-black on white or white on near-black.
69
+ - `--color-fg-on-warning` — Text on a warning surface. Always dark because the warning background is bright in both modes.
70
+ - `--color-fg-required` — The mark that says a field must be filled. The same red as fg.danger and a role of its own, because required is not a verdict — a field carrying an asterisk has not failed anything yet.
71
+ - `--color-fg-success` — Positive text on neutral surfaces, e.g. profit values, confirmation messages.
72
+ - `--color-fg-tertiary` — De-emphasised text, e.g. fine print, legal disclaimers, footnotes.
73
+ - `--color-fg-warning` — Caution text on neutral surfaces, e.g. approaching limits, expiring sessions.
74
+
75
+ ## space
76
+
77
+ - `--space-actions-gap` **adapts** — Between two actions side by side. Narrower than any gap around the pair, so they read as one set offering a choice rather than two separate offers.
78
+ - `--space-control-lg` — Side padding inside a large pill control. Half of size.control.lg, on the same reasoning as the default step. It coincides with space.inset.lg today and is still its own role: one follows a control's height, the other a section's rhythm, and they are free to move apart.
79
+ - `--space-control-md` — Side padding inside a default-size pill control. Half of size.control.md, so the corner radius and the padding are one measure and a label starts where the curve stops. The inset scale has no step here — its steps answer to sections, not to a control's geometry.
80
+ - `--space-control-sm` — Side padding inside a small pill control. Half of size.control.sm, on the same reasoning as the default step — the corner radius and the padding are one measure, so a label starts where the curve stops.
81
+ - `--space-gap-2xl` **adapts** — Between one section of a page and the next.
82
+ - `--space-gap-3xl` **adapts** — The largest gap, for separating whole movements of a long page.
83
+ - `--space-gap-lg` — Gap between content groups, e.g. feature cards in a grid, footer columns, pricing plans.
84
+ - `--space-gap-md` — Default gap between stacked items, e.g. form fields, feature list items, pricing features.
85
+ - `--space-gap-none` — No gap at all, for a row whose marks are meant to read as one object rather than as a list of controls. The only step here that is a decision rather than a measure.
86
+ - `--space-gap-sm` — Gap between sibling controls, e.g. buttons in a row, form label to input.
87
+ - `--space-gap-xl` **adapts** — Between the parts of a card, or between a heading and the block it introduces.
88
+ - `--space-gap-xs` — Tightest gap between related elements, e.g. icon and label, inline text pairs.
89
+ - `--space-grid-gutter` **adapts** — The space between two cards, across and down. One value on both axes, so a grid reads as an even field rather than as rows with a seam between them.
90
+ - `--space-heading-content` **adapts** — Between a heading group and the content it introduces, stacked or side by side. Measured from the last part the group actually shows, so a section opens the same way whether or not every part is present.
91
+ - `--space-heading-description-actions` **adapts** — Between a description and the actions under it. The widest step inside the group: the gap is what says the reading has finished and something is being asked.
92
+ - `--space-heading-eyebrow-title` **adapts** — Between an eyebrow and the title under it. The tightest step in the group, because an eyebrow reads as the title's first line rather than as a line of its own.
93
+ - `--space-heading-title-description` — Between a display title and the description under it. Smaller than it looks: a title's leading and descender depth sit inside the gap, and both scale with the type, so a smaller title takes the compact step instead.
94
+ - `--space-heading-title-description-compact` — The same step under a title that is not a display size — a card's, a panel's. Half the measure because the leading above it is half as deep, and what the eye reads is this plus that leading.
95
+ - `--space-inset-2xl` **adapts** — The page's horizontal gutter, and the inset of a band that runs its full width.
96
+ - `--space-inset-2xs` — Tight padding inside compact elements, e.g. badges, pills, tags.
97
+ - `--space-inset-3xl` **adapts** — The vertical air around a hero or a full-bleed breaker. For the air a full-width section keeps above and below its own content use space.inset.4xl.
98
+ - `--space-inset-4xl` **adapts** — The vertical air a full-width section keeps above and below its content. Two sections on the same ground share one step between them rather than each taking its own; a section with a fill of its own keeps the full step, its edge being what needs the air.
99
+ - `--space-inset-card` **adapts** — The space between a card's edge and its contents. The one inset a page does not choose — a row of cards padded differently is a row of different cards.
100
+ - `--space-inset-lg` — Padding inside content containers, e.g. feature cards, pricing cards, form containers.
101
+ - `--space-inset-md` — Padding inside a row of a list — an accordion's heading, a table's cell, anything read by running an eye down a column. Between a control's inset and a container's, because a row is neither. The step the gap ramp already had here, so the two now agree.
102
+ - `--space-inset-page` **adapts** — What holds a page's content off the edge of the window. Thirty-two on a desktop, sixteen below 768px — a phone has a third of the width and cannot spend that much of it on air. The tablet step sits between them and is the layout primitive's to hold.
103
+ - `--space-inset-sm` — Default padding inside controls, e.g. form inputs, dropdowns, sign-up fields.
104
+ - `--space-inset-xl` **adapts** — Padding inside a card or a panel — the step most cards want, between the tight lg and the page's own gutter.
105
+ - `--space-inset-xs` — Padding inside compact controls, e.g. buttons, nav items, form chips.
106
+ - `--space-section-compact` **adapts** — The air above and below a section of supporting content, or one closely related to the section before it. Where the default step would read as a break rather than a step.
107
+ - `--space-section-default` **adapts** — The air above and below a section, and the step most take. Adjacent sections each contribute their own; nothing adds a gap between them on top of it.
108
+
109
+ ## size
110
+
111
+ - `--size-bar-height` — The height of a collapsed navigation bar, which both bars here take. Declared rather than left to what a page hands the bar: an action beside the mark would otherwise set it.
112
+ - `--size-breakpoint-lg` — Where a bar has room for its destinations. A value to read, not a condition to write: `var()` is not allowed in a query, so the seven stylesheets that bend here still carry 64rem themselves.
113
+ - `--size-breakpoint-md` — Where the phone's type layer stops — the mobile overrides resolve below it, so 767 is the last width that reads as a phone. A value to read, not a condition to write: `var()` is not allowed in a media query.
114
+ - `--size-checkbox-box` — The square a checkbox ticks. Twenty, which is the mark's own size rather than the line's: the line is twenty-four here and a square that filled it read as a panel. What puts it on the line is an offset, not the measure.
115
+ - `--size-content-max` — The widest the page's content runs, whatever the window does. Beyond it a line of body copy is longer than an eye tracks comfortably, so the content stops and the ground either side of it keeps going.
116
+ - `--size-control-lg` — Height of a large control, for a hero or a conversion band. Twice space.control.lg, on the same reasoning as the default step.
117
+ - `--size-control-md` — Height of a default-size control, the same measure product gives its own default. Twice space.control.md, so on a pill the corner radius and the side padding are one measure and a label starts where the curve stops.
118
+ - `--size-control-sm` — Height of a small control — a picker in a navigation bar, a field in a filter row. Half of it is space.control.sm and a quarter is radius.control.sm, the ratio every step of this ramp holds. Desktop only: below what a finger reliably hits.
119
+ - `--size-dot-diameter` — The mark standing in for one page of a short sequence, or for a status beside a name. Eight: small enough that a row of ten reads as a row rather than as ten controls, and large enough to find at arm's length.
120
+ - `--size-grid-track-lg` — 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, which is what makes this the floor for a grid meant to read as three across.
121
+ - `--size-grid-track-md` — The default track floor, for a feature card: a heading and a line or two beneath it. Four of these fit the page's measure, so a grid asking for three has room to spare and drops to two on a tablet rather than at the first sign of pressure.
122
+ - `--size-grid-track-sm` — The narrowest a grid track goes before the grid drops a column. For a cell holding a logo, an icon and a word, or one short claim — six of them clear the page's measure with the page gutter still on both sides.
123
+ - `--size-heading-group-max` — How wide an eyebrow, a title and a description may run as a block. Independent or centred groups take this; one that has to sit on the grid takes eight columns instead, which is a span rather than a measure.
124
+ - `--size-measure-description` — How wide a supporting description runs. Wider than a title because it is read rather than taken in, and narrower than long-form because it sits under something.
125
+ - `--size-measure-long-form` — How wide running text runs. Past this the eye loses the line it was on when it returns to the left edge, which is the whole reason a measure exists.
126
+ - `--size-measure-title` — How wide a title runs before it wraps. A starting point — eighteen to twenty-four after a look. `ch` is the width of the font's zero, so it is a measure rather than a letter count, and typed string because a Figma variable carries a number.
127
+ - `--size-menu-panel-max` — The widest a section's menu panel gets. Narrower than the page's own measure on purpose: a panel is scanned across with a pointer already on it, and one as wide as the page leaves its last column a long way from the name that opened it.
128
+ - `--size-menu-panel-min` — The shortest a section's menu panel gets, whatever it holds. A bar's sections rarely have the same number of destinations, and panels that each took their own height would change size as the reader moved along the row.
129
+ - `--size-menu-max` — The tallest a menu's surface gets before its commands scroll. Product's measure, and counted in rows: five whole and part of a sixth at either size. Neither lands on a row boundary — a ceiling cutting clean at the last full row looks like the whole set.
130
+ - `--size-sheet-handle-height` — The thickness of that handle. At the smallest step the scale has, because a grab bar is a hint that the sheet moves rather than a part of what it holds.
131
+ - `--size-sheet-handle-width` — The width of the grab handle at the top of a BottomSheet. Wide enough to take hold of, narrow enough to read as a grip rather than as a rule across the sheet.
132
+ - `--size-sheet-max` — The widest a BottomSheet gets before it stops growing and centres. A sheet is a small-screen pattern, and one running the width of a desktop is a dialog that arrived from the wrong edge.
133
+ - `--size-sheet-peek` — How much of the page a tall BottomSheet leaves showing above it — enough to read as a layer over something rather than as a screen of its own.
134
+ - `--size-spinner-stroke-lg` — Ring thickness at size lg. Slightly finer than the eighth the smaller steps take — at forty pixels the proportion that reads as solid at sixteen reads as a band, and the ring is the shape rather than the weight.
135
+ - `--size-spinner-stroke-md` — Ring thickness at size md. Holds the same eighth as sm: a ring that kept one thickness across the sizes would look heavy at sixteen and drawn in hairline at forty.
136
+ - `--size-spinner-stroke-sm` — Ring thickness at size sm. An eighth of the diameter, which is what keeps the arc reading as a stroke travelling rather than as a wedge turning.
137
+ - `--size-spinner-lg` — Spinner diameter at size lg. For a section holding space for content that has not arrived — an embed, a demo, a band of live figures. Its job there is to be visible from where the reader is looking, which is the whole section rather than one control in it.
138
+ - `--size-spinner-md` — Spinner diameter at size md. The default: large enough to be the one thing happening in a form or a card, small enough that it does not become the card's subject.
139
+ - `--size-spinner-sm` — Spinner diameter at size sm. Sixteen, which is the size of the body copy it sits beside — an indicator in a line of text reads as part of the line rather than as something dropped into it.
140
+ - `--size-switcher-panel-width` — The width of a switcher's floating panel. Stated because the panel is out of flow and would otherwise shrink to the trigger it hangs from, wrapping every choice and running the set down the page.
141
+ - `--size-target-min` — The smallest a thing a pointer has to hit may be. Bind it as a minimum on any control whose size would otherwise come from its contents — a pressable card is as big as its words, and one holding a single short line is smaller than a fingertip.
142
+ - `--size-tooltip-max` — The widest a tooltip gets before its text wraps. Short enough that the eye finds the start of the next line without hunting for it, which is the whole job of a measure — and a tooltip that needs more than two lines is a tooltip carrying something that belongs on the page.
143
+
144
+ ## radius
145
+
146
+ - `--radius-container` — Large rounding for promotional containers — hero cards, callout sections. For standard content sections, use radius.surface.
147
+ - `--radius-container-item` — The corner of a row inside a radius.container surface — the container's radius less the inset the row sits in, so the two curves are concentric rather than merely matched. Thirty-two less sixteen is sixteen, as radius.menu-item is twelve one step down.
148
+ - `--radius-control-lg` — The corner of a large control. Twelve on forty-eight, the same quarter as the steps below it, so the curve reads the same at every size.
149
+ - `--radius-control-md` — The corner of a default control: ten on a forty-pixel height, a quarter of it — the same corner Product draws. Marketing rounded these harder for a while, at sixteen; the surfaces still carry that softer reading, the controls no longer do.
150
+ - `--radius-control-sm` — The corner of a small control. A quarter of its height, which is the ratio every step of this ramp holds.
151
+ - `--radius-expressive` — The most rounding before full — for high-impact visual sections such as feature showcases and banners.
152
+ - `--radius-menu` — The corner of a floating menu's panel. Tighter than radius.surface, which answers to a card sitting in the page: a menu is a control surface that has to nest a row, and its corner less the panel's inset is exactly radius.menu-item.
153
+ - `--radius-menu-item` — The corner of a row inside a menu — radius.menu less the inset the row sits in, so the two curves are concentric and the first and last rows land on the panel's inside edge. Sixteen less four is twelve, which is product's own measure for the same row.
154
+ - `--radius-none` — No rounding — sharp corners for editorial and structured layouts such as grids and dividers.
155
+ - `--radius-pill` — Fully rounded ends for pill shapes and circular elements — buttons, chips, badges, toggles, CTAs.
156
+ - `--radius-subtle` — Subtle rounding for small elements — tags, tooltips, notifications. Twelve rather than Product's eight, the same step up the rest of this ramp already takes: control 16 against 10, surface 24 against 16. This was the one step still matching Product's.
157
+ - `--radius-surface` — A generous radius for content sections — feature cards, testimonial blocks, pricing cards. For larger promotional containers, use radius.container.
158
+ - `--radius-surface-compact` — The corner of a surface too small for radius.surface's twenty-four — a card in a footer's rail. Not radius.container-item, which is sixteen for another reason: a container's corner less its inset.
159
+
160
+ ## border
161
+
162
+ - `--border-style-decorative` — A dashed border for drag targets, upload zones, and placeholder areas.
163
+ - `--border-style-default` — The standard border style. Use for all component outlines unless a dashed treatment is explicitly required.
164
+ - `--border-width-default` — The standard border width for inputs, cards, and secondary buttons.
165
+ - `--border-width-emphasis` — A rule one step heavier than the resting default, for an edge holding its own beside a filled neighbour. Between default and strong because the jump between those is a doubling: 1px disappears, 2px draws a box.
166
+ - `--border-width-focus` — The width of a focus ring. Kept separate from strong so accessibility requirements can adjust it independently.
167
+ - `--border-width-hairline` — The thinnest rule the system draws, for an outline that has to register without reading as a box — the ring a field puts outside its own border on focus. For an ordinary outline use border.width.default; a rule this thin disappears on anything larger than a control.
168
+ - `--border-width-none` — Removes a border entirely. Use to reset a border in a variant without adding a layout shift.
169
+ - `--border-width-strong` — A heavier border for selected and active states. Never use for ordinary outlines.
170
+ - `--border-width-thick` — A bold border for progress bars, active tab indicators, and high-emphasis decorative treatments.
171
+
172
+ ## font
173
+
174
+ - `font.body.lg` — The largest body step: an introductory paragraph under a headline, a hero description, a section intro. The same regular weight and line height as the rest of the ramp — body text set larger, rather than a different kind of text.
175
+ - `--font-body-lg-family`
176
+ - `--font-body-lg-letter-spacing`
177
+ - `--font-body-lg-line-height`
178
+ - `--font-body-lg-size`
179
+ - `--font-body-lg-weight`
180
+ - `font.body.md` — Marketing body text, and the default: feature descriptions, article content, footer links. Sixteen pixels because that is what a browser sets before anybody asks.
181
+ - `--font-body-md-family`
182
+ - `--font-body-md-letter-spacing`
183
+ - `--font-body-md-line-height`
184
+ - `--font-body-md-size`
185
+ - `--font-body-md-weight`
186
+ - `font.body.sm` — De-emphasised text: legal disclaimers, copyright lines, help text. Fourteen rather than twelve, marketing copy being read on a phone as often as not.
187
+ - `--font-body-sm-family`
188
+ - `--font-body-sm-letter-spacing`
189
+ - `--font-body-sm-line-height`
190
+ - `--font-body-sm-size`
191
+ - `--font-body-sm-weight`
192
+ - `font.eyebrow` — Uppercase category labels above a headline — section tags, plan badges, feature categories. Carries the size, weight and wide tracking that setting needs; the capitals are the component's, through text-transform, which leaves the accessible name in the case it was written.
193
+ - `--font-eyebrow-family`
194
+ - `--font-eyebrow-letter-spacing`
195
+ - `--font-eyebrow-line-height`
196
+ - `--font-eyebrow-size`
197
+ - `--font-eyebrow-weight`
198
+ - `font.field-label.lg` — The words naming a field in a large form, the step that pairs with a large control. Sized with the field it sits above, weighted like every other step of this role.
199
+ - `--font-field-label-lg-family`
200
+ - `--font-field-label-lg-letter-spacing`
201
+ - `--font-field-label-lg-line-height`
202
+ - `--font-field-label-lg-size`
203
+ - `--font-field-label-lg-weight`
204
+ - `font.field-label.md` — The words naming a form field, sat above it — 'Email', 'Work address'. Medium where font.label is semibold: that role is text inside a control, and a field's name set at a button's weight competes with the button that submits the form.
205
+ - `--font-field-label-md-family`
206
+ - `--font-field-label-md-letter-spacing`
207
+ - `--font-field-label-md-line-height`
208
+ - `--font-field-label-md-size`
209
+ - `--font-field-label-md-weight`
210
+ - `font.figure` — A number read as a fact rather than as a heading. It takes a heading's size, because a figure has to hold a row on its own, and semibold rather than extrabold: the weight a title needs makes a number look like a claim.
211
+ - `--font-figure-family`
212
+ - `--font-figure-letter-spacing`
213
+ - `--font-figure-line-height` **adapts**
214
+ - `--font-figure-size` **adapts**
215
+ - `--font-figure-weight`
216
+ - `font.h1` — The largest heading marketing draws, for the line a landing page is built around. A size, not an instruction: heading level is document structure and this is scale.
217
+ - `--font-h1-family`
218
+ - `--font-h1-letter-spacing` **adapts**
219
+ - `--font-h1-line-height`
220
+ - `--font-h1-size` **adapts**
221
+ - `--font-h1-weight`
222
+ - `font.h2` — A headline opening a major section of a long page. A size, not an instruction: heading level is document structure and this is scale.
223
+ - `--font-h2-family`
224
+ - `--font-h2-letter-spacing`
225
+ - `--font-h2-line-height` **adapts**
226
+ - `--font-h2-size` **adapts**
227
+ - `--font-h2-weight`
228
+ - `font.h3` — A section heading under an h1 and h2. A size, not an instruction: heading level is document structure and this is scale.
229
+ - `--font-h3-family`
230
+ - `--font-h3-letter-spacing` **adapts**
231
+ - `--font-h3-line-height` **adapts**
232
+ - `--font-h3-size` **adapts**
233
+ - `--font-h3-weight`
234
+ - `font.h4` — A subsection heading, and the first step down from the extrabold the larger headings carry. A size, not an instruction: heading level is document structure and this is scale.
235
+ - `--font-h4-family`
236
+ - `--font-h4-letter-spacing` **adapts**
237
+ - `--font-h4-line-height`
238
+ - `--font-h4-size` **adapts**
239
+ - `--font-h4-weight`
240
+ - `font.h5` — The smallest heading marketing draws, for a label over a group of cards, a list or a short block of copy. A size, not an instruction: heading level is document structure and this is scale.
241
+ - `--font-h5-family`
242
+ - `--font-h5-letter-spacing`
243
+ - `--font-h5-line-height` **adapts**
244
+ - `--font-h5-size` **adapts**
245
+ - `--font-h5-weight`
246
+ - `font.label-medium.sm` — Interactive text at the small step, set a weight lighter than font.label.sm. For a mark rather than a control — a badge is read as a word beside something, and semibold at fourteen reads as a button that has lost its ground.
247
+ - `--font-label-medium-sm-family`
248
+ - `--font-label-medium-sm-letter-spacing`
249
+ - `--font-label-medium-sm-line-height`
250
+ - `--font-label-medium-sm-size`
251
+ - `--font-label-medium-sm-weight`
252
+ - `font.label.lg` — Interactive text given prominence: the call to action in a hero, the primary button on a landing page. The step above the default, and the only one worth reaching for when a control is the point of the section.
253
+ - `--font-label-lg-family`
254
+ - `--font-label-lg-letter-spacing`
255
+ - `--font-label-lg-line-height`
256
+ - `--font-label-lg-size`
257
+ - `--font-label-lg-weight`
258
+ - `font.label.md` — Interactive text, and the default: navigation links, form labels, the call to action in a hero. One size for every control, large or small.
259
+ - `--font-label-md-family`
260
+ - `--font-label-md-letter-spacing`
261
+ - `--font-label-md-line-height`
262
+ - `--font-label-md-size`
263
+ - `--font-label-md-weight`
264
+ - `font.label.sm` — Interactive text in a supporting position: footer links, a secondary action beside a primary one, a form's helper link. Small enough to sit under the default without competing with it.
265
+ - `--font-label-sm-family`
266
+ - `--font-label-sm-letter-spacing`
267
+ - `--font-label-sm-line-height`
268
+ - `--font-label-sm-size`
269
+ - `--font-label-sm-weight`
270
+ - `font.subtitle` — Sub-section headers and secondary titles, e.g. pricing plan names, sub-feature group headers.
271
+ - `--font-subtitle-family`
272
+ - `--font-subtitle-letter-spacing`
273
+ - `--font-subtitle-line-height`
274
+ - `--font-subtitle-size`
275
+ - `--font-subtitle-weight`
276
+ - `font.title` — The name of a thing the reader is inside rather than a section of a page — a sheet, a panel, whatever arrives over what they were doing. Bold at the smallest heading step, so it holds its own against content without competing with the page behind it.
277
+ - `--font-title-family`
278
+ - `--font-title-letter-spacing`
279
+ - `--font-title-line-height`
280
+ - `--font-title-size`
281
+ - `--font-title-weight`
282
+
283
+ ## icon
284
+
285
+ - `--icon-control-lg` — The mark inside a large control. Four above font.label.md, on the same reasoning as the default step.
286
+ - `--icon-control-md` — The mark inside a default-size control. Four above font.label.sm, so it clears the label's line box and reads at the label's weight rather than under it.
287
+ - `--icon-control-sm` — The mark inside a small control. Two above font.label.sm rather than four: the label ramp stops at fourteen, so at this step the mark answers to the box instead of the type. Held at eighteen it would fill a thirty-two control rather than sit in it.
288
+ - `--icon-size-2xs` — A mark inside a box that states its own size rather than beside text — a checkbox's tick in its twenty-pixel square, four pixels clear either side. Too small to carry meaning alone; the control around it is what is read.
289
+ - `--icon-size-lg` — A larger icon for cards and content sections.
290
+ - `--icon-size-md` — The default icon size for body content and lists.
291
+ - `--icon-size-sm` — A mark beside text that must not outweigh it — the chevron on a list row, an affordance next to a label. Between the inline step and the default because sixteen goes unnoticed against anything larger than body copy, and twenty-four reads as bigger than the words it belongs to.
292
+ - `--icon-size-xl` — The largest a system glyph is drawn here, for a callout or a highlighted block where the mark does as much work as the copy. The ramp stops rather than continuing: past this a 24-grid glyph is a diagram of itself, and what a page wants at that scale is an illustration.
293
+ - `--icon-size-xs` — The smallest icon size for inline and supporting content.
294
+
295
+ ## elevation
296
+
297
+ - `--elevation-edge-bottom` — A thin shadow cast downward from a top-anchored surface — top navigation, app bars. Indicates the surface sits above scrolling content.
298
+ - `--elevation-edge-top` — A thin shadow cast upward from a bottom-anchored surface — bottom navigation, bottom sheets. Indicates the surface sits above scrolling content.
299
+ - `--elevation-ring-hover` — The tint a field carries while the pointer is over it, drawn as a ring just inside its border. Bound to box-shadow rather than border-color so a hover does not overwrite what focus and the error status both put on that border.
300
+ - `--elevation-surface-floating` — A surface floating above page content — dropdowns, tooltips, autocomplete lists. For surfaces that block interaction beneath them, use elevation.surface.overlay.
301
+ - `--elevation-surface-modal` — The highest surface — modals, dialogs, full-screen drawers. Typically paired with a backdrop that dims the page beneath.
302
+ - `--elevation-surface-overlay` — A surface floating above the page and blocking interaction beneath it — popovers, action sheets, menus. For full-screen takeovers with a backdrop, use elevation.surface.modal.
303
+ - `--elevation-surface-raised` — A surface lifted just off the page — cards, list items. For sticky elements that persist while content scrolls beneath, use elevation.surface.sticky.
304
+ - `--elevation-surface-sticky` — A surface pinned in place while content scrolls beneath it — sticky headers, sticky footers. Visually stronger than raised because it persists and must stay distinct from scrolling content.
305
+
306
+ ## layer
307
+
308
+ - `--layer-overlay` — Something that interrupts the reader and takes the page with it — a bottom sheet, and whatever else arrives over everything rather than beside something. Above the popup role rather than level with it, so a menu opened inside one belongs over it.
309
+ - `--layer-popup` — What a thing lifts to when it leaves the flow and floats over the page — a tooltip, and whatever menu or panel this package grows next. Above everything the page lays out, below anything that interrupts the reader.
310
+
311
+ ## motion
312
+
313
+ - `--motion-duration-dramatic` — Editorial hero entrances for visual impact, e.g. hero headline revealing, landing page title appearing. Not for scroll reveals — use motion.duration.reveal.
314
+ - `--motion-duration-fast` — Direct user actions that should feel instant, e.g. hover, press, toggle.
315
+ - `--motion-duration-instant` — A change the reader has already moved past — a tooltip leaving once the pointer is elsewhere. Not a short duration but no duration: animating a dismissal keeps a thing on screen after the reason for it has gone.
316
+ - `--motion-duration-media-hover` — How long art takes to settle inside a frame that holds still. Longer than duration.normal, which suits a card that lifts and is over; a picture that zooms is still on screen when it stops and the eye follows it the whole way.
317
+ - `--motion-duration-normal` — UI elements entering or leaving, e.g. dropdowns, tooltips, tab switches, card hover.
318
+ - `--motion-duration-pulse` — One full pulse cycle for a status indicator. Slow enough to be subtle, fast enough to notice — and long enough that a row of them does not read as flicker.
319
+ - `--motion-duration-reveal` — Content appearing on scroll, e.g. section reveals, feature items fading in, trust stats appearing. Not for hero text — use motion.duration.dramatic.
320
+ - `--motion-duration-shift` — A surface rearranging itself between two resting states on the reader's scroll — a navigation bar gathering, and ungathering on the way back. Longer than a UI element entering, because nobody asked for it.
321
+ - `--motion-duration-slow` — Large UI transitions, e.g. accordions expanding, page transitions, interactive demos.
322
+ - `--motion-duration-spinner` — One full rotation of a spinner. Fast enough to read as working, slow enough that the stroke does not blur into a solid ring.
323
+ - `--motion-easing-enter` — UI elements arriving on screen — decelerates into place, e.g. dropdown opening, tooltip appearing.
324
+ - `--motion-easing-exit` — UI elements leaving the screen — accelerates away, e.g. menu closing, notification dismissing.
325
+ - `--motion-easing-media-hover` — Art moving inside a frame that holds still. Symmetric, unlike easing.standard: a hover runs forward on enter and backward on leave, so a one-way curve that settles hard reads as a snap going one way and a drift the other.
326
+ - `--motion-easing-reveal` — Scroll reveals and hero entrances — arrives fast then settles slowly. Stronger deceleration than easing.enter for dramatic effect.
327
+ - `--motion-easing-shift` — Symmetric, for a change that runs both ways: a bar gathering on scroll and ungathering on the way back should read the same in each direction, which easing.standard cannot do.
328
+ - `--motion-easing-spinner` — Constant-speed rotation for a spinner. Linear because a loop is the one case with no arrival to ease into — any acceleration lands a seam at the point the animation restarts, and the eye finds it on the second turn.
329
+ - `--motion-easing-standard` — Default easing for anything moving within the viewport. Use this unless the element is specifically entering, exiting, or revealing.
330
+ - `--motion-scale-enter` — What a component scales from when something reveals it — a tooltip appearing. Needs a transform origin on the edge nearest its anchor, or it grows out of its own middle. The counterpart to scale.hover, which is a response rather than an entrance.
331
+ - `--motion-scale-hover` — How much a control grows under the cursor on hover. Deliberately small — a control that grows past the pointer fires its own mouse-out.
332
+ - `--motion-scale-media-hover` — How much art grows inside a frame that holds still — an editorial card's picture under the cursor. Twice motion.scale.hover, which stays smaller because a control can outrun its own pointer and a framed picture cannot.
333
+ - `--motion-translate-enter` — Where a surface waits before something reveals it: level on the inline axis, its own full height down the block one. A share of the element rather than of the page, so a sheet travels exactly its own height whatever that turns out to be.
334
+ - `--motion-translate-hover` — How far a pressable surface rises under the cursor. A fixed distance rather than a share of the element, so a tall card and a short one lift by the same amount and a row of them stays level. Small enough that nothing it sits beside looks disturbed.
335
+
336
+ ## opacity
337
+
338
+ - `--opacity-disabled` — How far a control recedes when it is unavailable. Applied to the control as a whole rather than re-colouring its parts, so what is inside keeps its relationships and the whole thing reads as one unavailable object.
339
+ - `--opacity-hidden` — What a component fades from when something reveals it. Not a dimming treatment — something unavailable or quiet says so in its own colour role, where the contrast checker can see it. The first entry in a group this package had left empty.
340
+ - `--opacity-muted` — A mark at rest, before a pointer reaches it. For artwork that carries its own colours and so cannot be quietened by an ink role — a brand logo, a partner mark — where every other quiet thing in this system says so in colour.
341
+ - `--opacity-track` — How far a track recedes behind the thing travelling over it. Both are drawn in one colour, so this alpha is the only thing separating them — which is why it is a ratio and not a colour role.
package/AGENTS.md ADDED
@@ -0,0 +1,164 @@
1
+ <!-- GENERATED from components/**/*.contract.json and rules/*.rule.json. Do not edit. -->
2
+
3
+ # @deriv-com/dds-marketing for agents
4
+
5
+ Read this first. It is the cheap read: everything below is the whole of what you need to
6
+ place a component correctly, and the files it points at are opened only when you need them.
7
+
8
+ ## Three things, or nothing renders
9
+
10
+ ```tsx
11
+ import '@deriv-com/dds-marketing/fonts.css' // the faces the tokens name, self-hosted
12
+ import '@deriv-com/dds-marketing/marketing.css' // once, at the root of the app
13
+ ```
14
+ ```html
15
+ <div data-dds-context="marketing"> <!-- around everything this package renders -->
16
+ ```
17
+
18
+ Without the second import every component renders unstyled: the stylesheet carries the
19
+ tokens they bind to. Component CSS travels with each component, so nothing else is imported.
20
+
21
+ Without the attribute every component renders unstyled too, and this one is easy to miss
22
+ because the tokens do not need it — they are published to `:root` as well. Component rules
23
+ are published only inside the scope, and they have to be: every class is `dds-<name>` with
24
+ no package in it, so Product and Marketing both emit `.dds-button`. An app installing both
25
+ would otherwise have one package painting the other, with bundler order picking the winner.
26
+ Put it on whatever wraps this package — the app root, or the section, if the two live on one
27
+ page. It costs nothing in specificity: the scope is a `:where()`, so your own overrides beat
28
+ the components exactly as they did before.
29
+
30
+ Without the first, text silently falls back to the system typeface — the tokens name Inter
31
+ and Red Hat Mono but cannot carry the files. An app that already self-hosts the fonts
32
+ (next/font, Fontsource) skips `fonts.css` and sets `--font-family-sans` /
33
+ `--font-family-mono` instead; the README covers that path.
34
+
35
+ One theme. The stylesheet has no `[data-theme="dark"]` block, so setting that attribute —
36
+ anywhere, including on `<html>` for the rest of your app — leaves these components light.
37
+ Nothing to configure and nothing to guard against.
38
+
39
+ ## Server Components
40
+
41
+ Every module that needs the browser carries `"use client"`, so importing from this package
42
+ in an App Router application works without a wrapper. Components that hold no state — `Badge`,
43
+ `Divider`, `Card` — have no directive and render on the server.
44
+
45
+ What that leaves you: a Server Component still cannot pass a function across the boundary, so
46
+ a component you give `onChange` or `onClick` to goes in a file of your own that says
47
+ `"use client"`. That is React's rule rather than this package's, and the error names your file.
48
+
49
+ ## Rules that span components
50
+
51
+ - **A section that paints a ground sets the ink to go with it**
52
+ - **A section's title is centred over stacked content, starts beside content in columns, and starts on a phone**
53
+ - **Anything a pointer has to hit is at least 24px in both directions**
54
+ - **At most one primary button per view**
55
+ - **Destructive actions require a confirmation step**
56
+ - **Every gap inside a section names the relationship it expresses, and the same relationship keeps its measure when it turns on its side**
57
+ - **Never nest one interactive element inside another**
58
+ - **On a phone a section's actions stack and each fills the width, including when there is only one**
59
+ - **Match the glyph weight to the icon size** *(guidance)*
60
+ - **Solid weight means selected** *(guidance)*
61
+
62
+ Reasons and the cases each one turns on: `.llm/rules.md`.
63
+
64
+ ## What is here
65
+
66
+ One line each — the case the component was written for. Where two look alike, the
67
+ component documents say which to reach for and why, and that is what they are for.
68
+
69
+ Grouped by where each sits in the system, because that is the first thing that rules a
70
+ component in or out: a view has no use for another area’s components, and the frame a
71
+ screen is built in is not something to reach for while building a control.
72
+
73
+ ### Core — domain-neutral building blocks
74
+
75
+ - **Accordion** — Questions a reader asks near a decision
76
+ - **AccordionItem** — One row inside an Accordion
77
+ - **Badge** — One of a set is the one the page wants read first
78
+ - **BottomSheet** — A task needs the screen's full width and the reader's undivided attention
79
+ - **Breadcrumb** — The page sits inside a section hierarchy, and the levels above it are places the visitor can navigate to
80
+ - **BreadcrumbItem** — Rendering one level of a Breadcrumb
81
+ - **Button** — The call to action on a marketing page
82
+ - **ButtonIcon** — One press with no room for words
83
+ - **Card** — Content that is read as one thing
84
+ - **CardBody** — Words, a picture, or both inside a Card
85
+ - **CardButton** — The whole card is the target rather than a link buried in it
86
+ - **Checkbox** — A choice the user makes now and confirms later
87
+ - **Divider** — Two groups inside one container that nothing else is separating
88
+ - **DropdownMenu** — A set of destinations too long for the navigation bar and too short to be a page of its own
89
+ - **FilterChip** — An index is long enough to be worth cutting down and its categories are few enough to show in full
90
+ - **Footer** — A marketing page needs its closing band
91
+ - **FooterGroup** — A set of a footer's destinations belong under one word
92
+ - **Icon** — A glyph stands beside words to speed recognition
93
+ - **Link** — A term inside running copy has a page of its own
94
+ - **MenuItem** — A row in a menu of destinations
95
+ - **Navbar** — A marketing page needs its top-level navigation
96
+ - **NavbarItem** — A section of the site, in a Navbar
97
+ - **NavbarMenu** — A section of the site has enough inside it that naming the section is not enough
98
+ - **NavbarMenuGroup** — A section's panel holds more destinations than a reader takes in at once, and they fall into sets
99
+ - **NavbarPanel** — Navbar is collapsing and its destinations have to go somewhere
100
+ - **NavbarSwitcher** — A bar needs a language or region switcher
101
+ - **NavbarSwitcherOption** — A NavbarSwitcher needs its choices
102
+ - **Option** — An answer inside a control that opens a list
103
+ - **Pagination** — An index or archive has been split across pages and the reader needs to move through it
104
+ - **RemovableChip** — An index shows the narrowings currently applied above its results, and each has to come off on its own without clearing the rest
105
+ - **SearchInput** — A help centre, a knowledge base, or documentation
106
+ - **SegmentedControl** — Two to four alternatives that exclude one another, where the whole set is worth showing at once and the reader decides by weighing them side by side rather than recalling which exist
107
+ - **SegmentedControlItem** — One option in a SegmentedControl
108
+ - **Select** — A form asks for one answer out of a set the visitor recognises
109
+ - **SelectChip** — A row narrows an index by one value out of a set, and has to keep showing which value that is
110
+ - **Spinner** — The reader has just submitted something
111
+ - **StatusDot** — Marking something the page is pointing at
112
+ - **SubdomainNavbar** — A subdomain needs its top-level navigation
113
+ - **Tab** — One of a small set of comparable versions of the same offer
114
+ - **Table** — Data with a uniform structure, where the same fields exist on every row and a reader compares one row against another down a column
115
+ - **TableBody** — The data itself
116
+ - **TableCell** — A value in a data row
117
+ - **TableHead** — Naming the columns
118
+ - **TableHeaderCell** — Naming a column
119
+ - **TableRow** — A record, with one cell per column
120
+ - **TabList** — Two or three versions of one offer differ in a way a reader wants to compare
121
+ - **TextArea** — A contact form asks what the reader actually wants
122
+ - **TextInput** — A page asks for an email
123
+ - **Tooltip** — Naming a control whose icon or abbreviation cannot say what it does
124
+ - **Typography** — A heading, a paragraph, or a caption on a marketing page
125
+
126
+ ### Layout — arrange other components, decide no appearance of their own
127
+
128
+ - **AspectRatio** — A picture whose proportions have to match the ones beside it
129
+ - **Grid** — Several things of the same kind are read across and down, and a cell has to line up with the cell above it
130
+ - **Row** — Two or more things are read across rather than down, and the space between them is the same all the way along
131
+ - **Scroller** — A set is longer than the space and its order is worth keeping
132
+ - **Stack** — Two or more things are read down the page in order and the space between them is the same the whole way down
133
+
134
+ ## Components that need mounting
135
+
136
+ These do not work from the import alone. Each has a Behaviour section in its own document
137
+ saying what to mount and where.
138
+
139
+ - **NavbarPanel** — useNavbarPanel
140
+ - **Table** — useTableSort
141
+ - **Tooltip** — useTooltip, useTooltipDefaults, TooltipAnchor
142
+
143
+ ## Reading order
144
+
145
+ 1. This file.
146
+ 2. `.llm/rules.md` before writing anything — 1,500 tokens, and it is where the constraints
147
+ that no single component can state live.
148
+ 3. `.llm/digest/<name>.md` for every component you are using — **all of it, not the part
149
+ you were looking for**. Around 1,400 tokens each: what it is for, what to reach for
150
+ instead, what it must never do, every prop with the case it is for, the combinations
151
+ the type refuses, and what may go inside it. Reading it whole is the point. Searching
152
+ finds only what you already know to name, and the facts most often got wrong here are
153
+ the ones nobody knew to look for.
154
+ 4. `.llm/tokens.md` only if you are writing CSS of your own. It is the token vocabulary,
155
+ and it opens by saying the thing that matters: write the variable, never the value.
156
+ 5. `.llm/components/<name>.md` once you are working on one component and want the
157
+ reasoning: the parts it renders, its states, the argument behind each decision, and
158
+ snippets that compile. Around 5,900 tokens each, so reach for it by the component
159
+ rather than by the screen.
160
+ 6. `.llm/index.md` when the one-line list above is not enough to choose — the same
161
+ question, with every component's full guidance and what to use instead.
162
+
163
+ Props carry their own guidance in the types as well, so an editor or a language server
164
+ shows the case for a prop and its values without opening a file.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Deriv
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.