@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,141 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ArrowRightRegularIcon, ArrowRightSolidIcon, ArrowUpRightRegularIcon, ArrowUpRightSolidIcon, } from '@deriv-com/quill-icons-web';
4
+ import './Link.css';
5
+ import './link-impl.css';
6
+ import { Icon } from '../icon/Icon.js';
7
+ import { linkDefaults, linkParts } from './Link.types.js';
8
+ /**
9
+ * Words in a sentence that go somewhere.
10
+ *
11
+ * An anchor with a real href, which is the whole component: cmd-click opens a
12
+ * tab, the status bar shows the destination before the press, the address can be
13
+ * copied, and a screen reader announces a link. `href` is required in the
14
+ * generated type for that reason — an anchor without one takes no focus and is
15
+ * announced as plain text, so the destination disappears for anyone not using a
16
+ * mouse.
17
+ *
18
+ * `display: inline`, unlike everything else pressable in this package. A link is
19
+ * part of a line and has to wrap with it; Button is `inline-flex` because it is
20
+ * a box the copy flows around, and a link behaving that way would leave a hole
21
+ * at the end of a line rather than breaking across two.
22
+ *
23
+ * The type is inherited rather than set, in the inline variant. A link in a body
24
+ * paragraph is body copy and a link in a caption is caption, which is the whole
25
+ * idea — only `standalone` binds a step, because a link on its own line has no
26
+ * sentence to take one from.
27
+ *
28
+ * `external` carries three things that belong together: the target, the rel, and
29
+ * the mark. The rel is not optional and not the consumer's job — leaving it to
30
+ * the call site is how a page hands `window.opener` to a site it does not
31
+ * control — and putting the glyph here is what makes every external link on the
32
+ * site carry the same one.
33
+ *
34
+ * There is no `loading` and no `disabled`, which is where this parts company
35
+ * with Product's Link and follows Marketing's Button instead. The browser owns a
36
+ * navigation in flight and shows it in the chrome; and an anchor cannot be
37
+ * honestly disabled, since dropping the href is the only thing that truly stops
38
+ * it and that costs the link role and the focus with it.
39
+ */
40
+ export function Link({ variant = linkDefaults.variant, tone = linkDefaults.tone, href, external = linkDefaults.external, showIcon, iconLeading, children, ...rest }) {
41
+ /*
42
+ The trailing mark, and the component owns it. Which arrow it is follows the
43
+ destination rather than the call site: right for somewhere on this site,
44
+ up-right for somewhere off it. A page cannot pass one, because an external
45
+ link wearing a plain right arrow would be telling the reader their tab is
46
+ about to stay put — and that is the one thing this mark exists to say.
47
+
48
+ An external link is always marked — leaving the site is a fact about the
49
+ destination, not a flourish a page may decline. Everything else follows
50
+ `showIcon`, which reaches both variants and defaults to neither: unset, it
51
+ takes the answer the variant implies.
52
+
53
+ The weight follows the words the mark sits beside, which is the only place
54
+ an inline link and a standalone one disagree about a glyph.
55
+
56
+ A standalone link sets its label at font.label.md — semibold — and beside
57
+ that the regular cut's strokes read as a smudge rather than a direction, so
58
+ the arrow is solid. That is a deliberate exception to
59
+ `icon-solid-marks-selection`, which reserves the weight for a selected item:
60
+ this is not selection, and what earns it is legibility at sixteen pixels
61
+ against a heavier neighbour.
62
+
63
+ An inline link has no label of its own — it takes the paragraph's type, which
64
+ is body copy at the regular weight. A solid arrow there is heavier than every
65
+ word around it, so the exception does not apply and the regular cut is right.
66
+ The mark matches its neighbours either way; only the neighbours change.
67
+ */
68
+ const inline = variant === 'inline';
69
+ /*
70
+ Unset follows the variant, which is the only sensible default and not one the
71
+ contract can hold: a contract declares one default per prop and this prop
72
+ wants three. Only a standalone link is marked unasked — it is alone on its
73
+ line with nothing else saying it goes anywhere. An inline one would put an
74
+ arrow after every linked word in a paragraph, and a list one would put a
75
+ column of them down a footer, where a mark on every row marks nothing.
76
+ */
77
+ const marked = showIcon ?? variant !== 'inline';
78
+ /*
79
+ A list link's mark waits for the pointer. In a column, a mark on every row
80
+ marks nothing — but a column with no marks at all has no way of saying which
81
+ row is live, and its ink cannot change because the ink is the column's. So
82
+ the arrow is drawn and held at zero, and the pointer brings it in.
83
+
84
+ Not the external one, which stays. That mark is a fact about the destination
85
+ rather than an affordance, and it is what makes one row in a list of fifty
86
+ say something before anybody has touched it.
87
+ */
88
+ const revealOnHover = variant === 'list' && !external;
89
+ /*
90
+ The mark takes the weight of the words beside it, which is a question only two
91
+ of the three variants can answer.
92
+
93
+ A standalone label is semibold, so its arrow is the solid cut — a regular one
94
+ beside it reads as a lighter object that happens to be nearby. An inline link
95
+ is body copy at the regular weight, where solid outweighs every word around
96
+ it. Both are decided here because both know their own type: the variant sets
97
+ it.
98
+
99
+ A list link does not. Its whole point is that it takes the ink and the
100
+ measure of the column it sits in — a footer sets one thing, a navigation
101
+ panel another — so this component cannot know whether the words beside the
102
+ mark are semibold or regular, and solid is the wrong guess in every column
103
+ that is not. Regular is the resting weight the package's own rule names from
104
+ sm through lg, and the one that costs nothing when it is wrong: it under-
105
+ rather than over-states, where the solid cut spends a weight that is supposed
106
+ to mean a selected item and nothing else.
107
+ */
108
+ const light = inline || variant === 'list';
109
+ const trailing = external ? (light ? (_jsx(ArrowUpRightRegularIcon, {})) : (_jsx(ArrowUpRightSolidIcon, {}))) : marked ? (light ? (_jsx(ArrowRightRegularIcon, {})) : (_jsx(ArrowRightSolidIcon, {}))) : null;
110
+ return (_jsxs("a", { ...rest, className: linkParts.root, href: href, "data-variant": variant, "data-tone": tone,
111
+ // Together, always. The rel is what stops the opened page reaching back
112
+ // through window.opener to this one.
113
+ target: external ? '_blank' : undefined, rel: external ? 'noopener noreferrer' : undefined, children: [inline || iconLeading === undefined || iconLeading === null ? null : (_jsx("span", { className: linkParts['icon-leading'], children: _jsx(Icon, { size: "xs", children: iconLeading }) })), children, trailing === null ? null : (_jsx("span", { className: linkParts['icon-trailing'],
114
+ /*
115
+ Where the mark travels, handed to the stylesheet because the path is
116
+ the only thing that differs and it turns on `external`, which is not
117
+ a styling axis and cannot honestly become one.
118
+
119
+ 25% of the sixteen-pixel glyph is the four pixels `motion.translate.hover`
120
+ already moves anything else that shifts under a pointer. The external
121
+ arrow points up and to the right, so it goes that way rather than
122
+ sliding across its own direction — 18% on each axis, which is the
123
+ same distance measured along the diagonal rather than four pixels twice.
124
+ */
125
+ style: {
126
+ ...(external
127
+ ? { '--dds-link-arrow-travel': '18% -18%' }
128
+ : { '--dds-link-arrow-travel': '25% 0' }),
129
+ /*
130
+ A list link's mark rests displaced and at zero, and the pointer
131
+ brings it to where it belongs — the arrival and the nudge are the
132
+ same two declarations read in opposite directions. Leftward, along
133
+ the reading direction and along the arrow, so it reads as the mark
134
+ catching up with the words rather than as something dropped beside
135
+ them.
136
+ */
137
+ ...(revealOnHover
138
+ ? { '--dds-link-arrow-rest-travel': '-60% 0', '--dds-link-arrow-rest': '0' }
139
+ : {}),
140
+ }, children: _jsx(Icon, { size: "xs", children: trailing }) }))] }));
141
+ }
@@ -0,0 +1,41 @@
1
+ import type { AnchorHTMLAttributes, ReactNode } from 'react';
2
+ export interface LinkOwnProps {
3
+ /**
4
+ * `brand` — The default. The brand primary — the same coral the buttons are filled with — so a standalone link and a call to action are recognisably the same colour of intent, and a reader scanning for the way onward finds both.
5
+
6
+ It is 3.39:1 against the page, below the 4.5:1 that normal text is held to. This package already carries an unsigned waiver for that pairing on a button's label, and this is the second thing leaning on it. What makes it survivable is that it is never the only signal — a standalone link sits on its own line beside a mark — but the ink alone does not carry it, and if the waiver is ever refused this is the binding that moves. color.bg.brand-active is the same hue at 5.56:1 and is what it would move to.
7
+ * `inherit` — A standalone link on a ground that has already set its ink — a brand card, a dark band, a scrim over an image. There the brand ink is either invisible or wrong, and the mark is left to carry the link alone. It is the same argument CardBody makes for setting no colour in its regions.
8
+ */
9
+ tone?: 'brand' | 'inherit';
10
+ /** 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. It also fills the trailing slot with the box-and-arrow, so every external link on the site is marked the same way */
11
+ external?: boolean;
12
+ /** Always. An anchor without one is not a link: it takes no focus, is announced as plain text, and none of the browser's navigation affordances work — so there is no default that could stand in for one, and it is required for exactly that reason */
13
+ href: string;
14
+ /** 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.
15
+
16
+ Left unset it follows the variant, which is the only sensible default and is not one a contract can write: a standalone link is marked, because it is alone on its line with nothing else saying it goes anywhere, and an inline link is not, because an arrow after every linked word would interrupt every sentence carrying one. Set it either way to override that — false for a footer column, where a column of arrows is a column of noise; true for a sentence whose link is the thing being pointed at.
17
+
18
+ An external link draws its mark whether or not this is set, and draws a different one. */
19
+ showIcon?: boolean;
20
+ /** Allowed: text */
21
+ children: ReactNode;
22
+ }
23
+ export type LinkProps = LinkOwnProps & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'variant' | 'tone' | 'external' | 'href' | 'iconLeading' | 'showIcon'> & ({
24
+ variant?: 'standalone' | 'list' | 'inline';
25
+ iconLeading?: undefined;
26
+ } | {
27
+ variant?: Exclude<'standalone' | 'list' | 'inline', 'inline'>;
28
+ iconLeading?: ReactNode;
29
+ });
30
+ /** The class each part carries. Apply these — do not retype them. */
31
+ export declare const linkParts: {
32
+ readonly root: "dds-link";
33
+ readonly 'icon-leading': "dds-link__icon-leading";
34
+ readonly 'icon-trailing': "dds-link__icon-trailing";
35
+ };
36
+ /** Generated so defaults cannot drift from the contract. */
37
+ export declare const linkDefaults: {
38
+ readonly variant: "standalone";
39
+ readonly tone: "brand";
40
+ readonly external: false;
41
+ };
@@ -0,0 +1,9 @@
1
+ // GENERATED from link.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const linkParts = {
4
+ root: 'dds-link',
5
+ 'icon-leading': 'dds-link__icon-leading',
6
+ 'icon-trailing': 'dds-link__icon-trailing',
7
+ };
8
+ /** Generated so defaults cannot drift from the contract. */
9
+ export const linkDefaults = { variant: 'standalone', tone: 'brand', external: false };
@@ -0,0 +1,168 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * `:where([data-dds-context="marketing"])` confines these rules without contributing
5
+ * specificity, so every override below still ties or beats exactly what it did
6
+ * before — several here are written a class deeper than they look in order to
7
+ * match generated CSS, and a scope that carried weight would break all of them.
8
+ */
9
+
10
+ /* Implementation CSS that the contract's staticCss cannot express. */
11
+
12
+ /*
13
+ * An inline link's mark scales with the sentence, and sits on its optical centre.
14
+ *
15
+ * Two problems with one cause. A standalone link sets its own type, so a sixteen-pixel glyph
16
+ * beside a sixteen-pixel label is right by construction — and it can be a flex line, which
17
+ * centres the mark exactly. An inline link can be neither: it takes whatever type the
18
+ * paragraph is, and it has to stay `display: inline` so it breaks across lines with the
19
+ * sentence it belongs to. A flex box does not wrap.
20
+ *
21
+ * So the glyph was a fixed sixteen inside copy of any size, which is undersized in a
22
+ * twenty-pixel line and oversized in a fourteen-pixel one — and `vertical-align` could not
23
+ * correct for it, because the error changed with the ratio between the two. Measured: the
24
+ * ink sat 1.36px low at fourteen, 1.41px at sixteen and 2.02px at twenty, and no single
25
+ * offset fixes three different ratios.
26
+ *
27
+ * An em-based box makes the mark track the copy the way everything else about this variant
28
+ * does. Once it does, one offset works everywhere, because everything is proportional.
29
+ *
30
+ * `1.1em` rather than `1em`, and the extra tenth is not padding. A Quill glyph fills about
31
+ * six tenths of its own box, so a one-em box put 9.60px of ink beside text whose capitals are
32
+ * 10.59px — a mark a tenth smaller than the letters it sits among, which is what reads as
33
+ * undersized. At 1.1em the ink is 10.56px against 10.59, and 13.20 against 13.23 at twenty:
34
+ * the arrow is the size of the capitals either side of it, which is the thing being matched.
35
+ *
36
+ * `-0.225em` is measured rather than reasoned. `middle` aligns a box to the baseline plus
37
+ * half the x-height, which is below the optical centre of cap-height text; this is the value
38
+ * that brings the ink's centre onto the text's, and it holds to within 0.2px at fourteen,
39
+ * sixteen and twenty. It moved with the box: at 1em the answer was -0.175em, and a taller
40
+ * box has to sit lower to keep the same ink in the same place — so the two numbers here are
41
+ * one decision and changing either alone breaks it.
42
+ */
43
+ :where([data-dds-context="marketing"]) .dds-link[data-variant='inline'] .dds-link__icon-trailing {
44
+ block-size: 1.1em;
45
+ inline-size: 1.1em;
46
+ vertical-align: -0.225em;
47
+ }
48
+
49
+ /*
50
+ * And the glyph fills that box rather than keeping the step Icon set on it. Three classes
51
+ * deep because Icon's own `[data-size]` rule is two, and an override that ties loses.
52
+ */
53
+ :where([data-dds-context="marketing"]) .dds-link[data-variant='inline'] .dds-link__icon-trailing .dds-icon {
54
+ block-size: 100%;
55
+ inline-size: 100%;
56
+ }
57
+
58
+ /*
59
+ * A link whose ink belongs to the ground gets its underline back under the pointer.
60
+ *
61
+ * A standalone link at `tone: inherit` — one on a brand card, a dark band, a scrim. It takes
62
+ * the colour around it, so the colour cannot change under the pointer, and
63
+ * `text-decoration-thickness` thickens a line that is not there. Without this it had no hover
64
+ * affordance at all.
65
+ *
66
+ * The list variant had the same hole and answers it differently, below: it has a mark to
67
+ * bring in, and a column of rows that underline one at a time reads as a table of contents
68
+ * being corrected.
69
+ *
70
+ * Product reaches the same conclusion from the other end: its standalone drops the underline
71
+ * except at `tone: inherit`, "because the link is the same colour as the text around it and
72
+ * the rule is the only thing left saying it is a link". It keeps the line at all times. These
73
+ * designs have no line at rest — a footer of fifty underlined rows is a wall — so it arrives
74
+ * with the pointer instead, which is the same argument applied to a denser page.
75
+ *
76
+ * Here rather than in the contract because `structure` carries no state: it says what a
77
+ * variant looks like, not what it looks like while a pointer is over it.
78
+ */
79
+ :where([data-dds-context="marketing"]) .dds-link[data-variant='standalone'][data-tone='inherit']:hover {
80
+ text-decoration-line: underline;
81
+ }
82
+
83
+ /*
84
+ * The mark moves a little way in the direction it is already pointing, and stays there.
85
+ *
86
+ * A transition rather than a keyframe animation, which is what the rest of this package
87
+ * does for a hover: ButtonIcon transitions its background and its outline over
88
+ * `motion.duration.normal` on `motion.easing.standard`, and there is no reason a mark
89
+ * should reach for a different mechanism to travel four pixels. What was here before was
90
+ * a two-curve `@keyframes` that sent the arrow out of its own box, faded it to nothing,
91
+ * and brought it back from the other side — a gesture with a beginning, a middle and an
92
+ * end, for a link.
93
+ *
94
+ * Losing the keyframes loses three things worth naming, all of them deliberate: the split
95
+ * `exit`/`enter` curves, which only exist because a round trip has two halves; the fade at
96
+ * the edges, which only exists because something was leaving; and the bespoke
97
+ * `prefers-reduced-motion` block, because the generated sheet already sets
98
+ * `transition: none` on `.dds-link *` and a transition is what this now is. The reduce
99
+ * block below is smaller than the one it replaces and covers more: it takes the
100
+ * displacement away as well as the tween, so a reader who asked for less movement gets
101
+ * none rather than an instant four-pixel jump.
102
+ *
103
+ * It travels along the arrow it is carrying. A right arrow goes right; the external one
104
+ * points up and to the right and goes that way, because a mark that slid sideways while
105
+ * pointing diagonally would be moving across its own direction. Both ends of that path
106
+ * arrive as custom properties the component sets — `external` is not a styling axis, and
107
+ * making it one to reach a rule would have the contract declare a difference the component
108
+ * does not have. TabList sets its indicator's travel the same way and for the same reason.
109
+ *
110
+ * Percentages rather than pixels, because the glyph is not always the same size: an inline
111
+ * link's mark is `1.1em` and tracks the paragraph, so a fixed nudge would be proportionally
112
+ * large in fourteen-pixel copy and small in twenty. 25% of a sixteen-pixel mark is 4px,
113
+ * which is the distance `motion.translate.hover` already moves anything else that shifts
114
+ * under a pointer.
115
+ *
116
+ * A list link's mark travels the other way, and that is the whole of its arrival. It rests
117
+ * displaced to the left and at zero opacity, and the pointer carries it to the same place
118
+ * every other hovered mark ends up — thirteen and a half pixels rather than four, because it
119
+ * starts further back. One mechanism, read in two directions, with nothing to keep in step. Opacity rather than rendering it on hover: the box
120
+ * is there either way, so the row does not change width when the pointer arrives and the
121
+ * column does not shift under it.
122
+ */
123
+ /*
124
+ * The box fades; the glyph travels. Two elements because they are two different boxes, and
125
+ * only one of them is square.
126
+ *
127
+ * A percentage in `translate` resolves against the element's own border box — width for the
128
+ * inline axis, height for the block one. The mark's box is not square: it carries the gap
129
+ * between the words and the arrow as padding, so it measures twenty by sixteen around a
130
+ * sixteen-pixel glyph. Measured on that box, `25% 0` moved five pixels rather than four, and
131
+ * the external arrow's `18% -18%` came out as 3.6 across and 2.88 up — a travel at 39 degrees
132
+ * for a mark pointing at 45, which is the one thing the whole direction argument exists to
133
+ * avoid. On the glyph the same two numbers are four pixels, and 2.88 on both axes.
134
+ */
135
+ :where([data-dds-context="marketing"]) .dds-link__icon-trailing {
136
+ opacity: var(--dds-link-arrow-rest, 1);
137
+ transition-property: opacity;
138
+ transition-duration: var(--motion-duration-normal);
139
+ transition-timing-function: var(--motion-easing-standard);
140
+ }
141
+
142
+ :where([data-dds-context="marketing"]) .dds-link:hover .dds-link__icon-trailing {
143
+ opacity: 1;
144
+ }
145
+
146
+ :where([data-dds-context="marketing"]) .dds-link__icon-trailing .dds-icon {
147
+ translate: var(--dds-link-arrow-rest-travel, 0 0);
148
+ transition-property: translate;
149
+ transition-duration: var(--motion-duration-normal);
150
+ transition-timing-function: var(--motion-easing-standard);
151
+ }
152
+
153
+ :where([data-dds-context="marketing"]) .dds-link:hover .dds-link__icon-trailing .dds-icon {
154
+ translate: var(--dds-link-arrow-travel, 0 0);
155
+ }
156
+
157
+ /*
158
+ * Less movement means none of this, not a faster version of it. The generated sheet stops
159
+ * the tween; this stops the displacement, so the mark sits where it belongs at rest and
160
+ * stays there under the pointer. A list link's still appears — that is opacity, and a mark
161
+ * that never shows up is a row with no affordance at all.
162
+ */
163
+ @media (prefers-reduced-motion: reduce) {
164
+ :where([data-dds-context="marketing"]) .dds-link__icon-trailing .dds-icon,
165
+ :where([data-dds-context="marketing"]) .dds-link:hover .dds-link__icon-trailing .dds-icon {
166
+ translate: none;
167
+ }
168
+ }
@@ -0,0 +1,70 @@
1
+ /* GENERATED from menuitem.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-menuitem {
4
+ transition-property: background-color, color, opacity, outline-color, outline-width;
5
+ align-items: center;
6
+ box-sizing: border-box;
7
+ cursor: pointer;
8
+ display: flex;
9
+ inline-size: 100%;
10
+ list-style: none;
11
+ outline-style: solid;
12
+ position: relative;
13
+ user-select: none;
14
+ border-radius: var(--radius-menu-item);
15
+ color: var(--color-fg-default);
16
+ gap: var(--space-gap-sm);
17
+ min-block-size: var(--size-target-min);
18
+ outline-width: var(--border-width-none);
19
+ padding-block: var(--space-inset-xs);
20
+ padding-inline: var(--space-inset-xs);
21
+ transition-duration: var(--motion-duration-fast);
22
+ transition-timing-function: var(--motion-easing-standard);
23
+ }
24
+
25
+ :where([data-dds-context="marketing"]) .dds-menuitem .dds-menuitem__icon {
26
+ display: flex;
27
+ flex: none;
28
+ }
29
+
30
+ :where([data-dds-context="marketing"]) .dds-menuitem .dds-menuitem__label {
31
+ flex: auto;
32
+ overflow: hidden;
33
+ text-overflow: ellipsis;
34
+ white-space: nowrap;
35
+ font-family: var(--font-body-md-family);
36
+ font-size: var(--font-body-md-size);
37
+ font-weight: var(--font-body-md-weight);
38
+ line-height: var(--font-body-md-line-height);
39
+ }
40
+
41
+ :where([data-dds-context="marketing"]) .dds-menuitem:hover {
42
+ background-color: var(--color-bg-hover);
43
+ }
44
+
45
+ :where([data-dds-context="marketing"]) .dds-menuitem:active {
46
+ background-color: var(--color-bg-active);
47
+ }
48
+
49
+ :where([data-dds-context="marketing"]) .dds-menuitem:focus-visible {
50
+ outline-color: var(--color-border-focus);
51
+ outline-width: var(--border-width-focus);
52
+ }
53
+
54
+ :where([data-dds-context="marketing"]) .dds-menuitem[data-disabled="true"] {
55
+ color: var(--color-fg-disabled);
56
+ opacity: var(--opacity-disabled);
57
+ }
58
+
59
+ :where([data-dds-context="marketing"]) .dds-menuitem[data-size="sm"] .dds-menuitem__label {
60
+ font-family: var(--font-body-sm-family);
61
+ font-size: var(--font-body-sm-size);
62
+ font-weight: var(--font-body-sm-weight);
63
+ line-height: var(--font-body-sm-line-height);
64
+ }
65
+
66
+ @media (prefers-reduced-motion: reduce) {
67
+ :where([data-dds-context="marketing"]) .dds-menuitem,
68
+ :where([data-dds-context="marketing"]) .dds-menuitem * { transition: none; }
69
+ }
70
+
@@ -0,0 +1,11 @@
1
+ import './MenuItem.css';
2
+ import { type MenuItemProps } from './MenuItem.types.js';
3
+ export type { MenuItemProps };
4
+ /**
5
+ * One command in a menu.
6
+ *
7
+ * It renders the row and nothing around it. Focus, the arrow keys and shutting the menu are the
8
+ * menu's, and there is no menu here yet — so what this ships as is a row that looks right and,
9
+ * outside an element whose role is `menu`, announces wrong. DropdownMenu is what finishes it.
10
+ */
11
+ export declare function MenuItem({ size, disabled, icon, onSelect, children, ...rest }: MenuItemProps): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import './MenuItem.css';
4
+ import { Icon } from '../icon/Icon.js';
5
+ import { menuItemDefaults, menuItemParts } from './MenuItem.types.js';
6
+ /**
7
+ * One command in a menu.
8
+ *
9
+ * It renders the row and nothing around it. Focus, the arrow keys and shutting the menu are the
10
+ * menu's, and there is no menu here yet — so what this ships as is a row that looks right and,
11
+ * outside an element whose role is `menu`, announces wrong. DropdownMenu is what finishes it.
12
+ */
13
+ export function MenuItem({ size = menuItemDefaults.size, disabled = menuItemDefaults.disabled, icon, onSelect, children, ...rest }) {
14
+ return (_jsxs("li", { className: menuItemParts.root, "data-size": size, "data-disabled": String(disabled), role: "menuitem", "aria-disabled": disabled || undefined,
15
+ // Focus is the menu's to move, and it moves it here: every row is reachable by arrow key and
16
+ // none of them is a tab stop, which is what the menu role promises.
17
+ tabIndex: -1, ...rest, onClick: (event) => {
18
+ rest.onClick?.(event);
19
+ if (disabled)
20
+ return;
21
+ onSelect?.();
22
+ }, children: [icon === undefined || icon === null ? null : (
23
+ // Decorative: the words beside it say the same thing, and a mark that had to be read would
24
+ // be a command whose name was a picture.
25
+ _jsx("span", { className: menuItemParts.icon, "aria-hidden": "true", children: _jsx(Icon, { size: size === 'sm' ? 'xs' : 'sm', children: icon }) })), _jsx("span", { className: menuItemParts.label, children: children })] }));
26
+ }
@@ -0,0 +1,28 @@
1
+ import type { LiHTMLAttributes, ReactNode } from 'react';
2
+ export interface MenuItemOwnProps {
3
+ /**
4
+ * `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
5
+ * `md` — The default, and the row of every other menu
6
+ */
7
+ size?: 'sm' | 'md';
8
+ /** 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 */
9
+ disabled?: boolean;
10
+ /** 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 */
11
+ icon?: ReactNode;
12
+ /** 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 */
13
+ onSelect: () => void;
14
+ /** Allowed: text */
15
+ children: ReactNode;
16
+ }
17
+ export type MenuItemProps = MenuItemOwnProps & Omit<LiHTMLAttributes<HTMLLIElement>, 'className' | 'size' | 'disabled' | 'icon' | 'onSelect'>;
18
+ /** The class each part carries. Apply these — do not retype them. */
19
+ export declare const menuItemParts: {
20
+ readonly root: "dds-menuitem";
21
+ readonly icon: "dds-menuitem__icon";
22
+ readonly label: "dds-menuitem__label";
23
+ };
24
+ /** Generated so defaults cannot drift from the contract. */
25
+ export declare const menuItemDefaults: {
26
+ readonly size: "md";
27
+ readonly disabled: false;
28
+ };
@@ -0,0 +1,9 @@
1
+ // GENERATED from menu-item.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const menuItemParts = {
4
+ root: 'dds-menuitem',
5
+ icon: 'dds-menuitem__icon',
6
+ label: 'dds-menuitem__label',
7
+ };
8
+ /** Generated so defaults cannot drift from the contract. */
9
+ export const menuItemDefaults = { size: 'md', disabled: false };
@@ -0,0 +1,135 @@
1
+ /* GENERATED from navbar.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-navbar {
4
+ align-items: center;
5
+ box-sizing: border-box;
6
+ display: flex;
7
+ inline-size: 100%;
8
+ inset-block-start: 0;
9
+ justify-content: center;
10
+ position: sticky;
11
+ background-color: var(--color-bg-transparent);
12
+ color: var(--color-fg-default);
13
+ }
14
+
15
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__inner {
16
+ align-items: center;
17
+ box-sizing: border-box;
18
+ container-type: inline-size;
19
+ display: flex;
20
+ inline-size: 100%;
21
+ justify-content: space-between;
22
+ min-inline-size: 0;
23
+ position: relative;
24
+ gap: var(--space-gap-md);
25
+ min-block-size: var(--size-bar-height);
26
+ padding-block: var(--space-inset-xs);
27
+ }
28
+
29
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__ground {
30
+ inset: 0;
31
+ position: absolute;
32
+ background-color: var(--color-bg-page);
33
+ }
34
+
35
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__brand {
36
+ align-items: center;
37
+ box-sizing: border-box;
38
+ display: flex;
39
+ flex-shrink: 0;
40
+ block-size: var(--icon-size-md);
41
+ border-radius: var(--radius-pill);
42
+ gap: var(--space-gap-sm);
43
+ }
44
+
45
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__nav {
46
+ align-items: center;
47
+ display: flex;
48
+ position: relative;
49
+ gap: var(--space-gap-none);
50
+ }
51
+
52
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__preferences {
53
+ align-items: center;
54
+ display: flex;
55
+ flex-shrink: 0;
56
+ gap: var(--space-gap-xs);
57
+ }
58
+
59
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__utilities {
60
+ align-items: center;
61
+ box-sizing: border-box;
62
+ display: flex;
63
+ flex-shrink: 0;
64
+ border-radius: var(--radius-pill);
65
+ gap: var(--space-gap-sm);
66
+ }
67
+
68
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__compact-action {
69
+ align-items: center;
70
+ display: flex;
71
+ flex-shrink: 0;
72
+ gap: var(--space-gap-sm);
73
+ }
74
+
75
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__trigger {
76
+ align-items: center;
77
+ appearance: none;
78
+ border-style: none;
79
+ color: inherit;
80
+ cursor: pointer;
81
+ display: inline-flex;
82
+ flex-shrink: 0;
83
+ justify-content: center;
84
+ outline-style: solid;
85
+ padding: 0;
86
+ background-color: var(--color-bg-transparent);
87
+ border-radius: var(--radius-control-sm);
88
+ min-block-size: var(--size-target-min);
89
+ min-inline-size: var(--size-target-min);
90
+ outline-width: var(--border-width-none);
91
+ }
92
+
93
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__panel-host {
94
+ display: contents;
95
+ color: var(--color-fg-default);
96
+ }
97
+
98
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__cluster {
99
+ align-items: center;
100
+ display: flex;
101
+ position: relative;
102
+ background-color: var(--color-bg-surface-raised);
103
+ border-radius: var(--radius-pill);
104
+ box-shadow: var(--elevation-surface-floating);
105
+ gap: var(--space-gap-md);
106
+ min-block-size: var(--size-control-lg);
107
+ padding-block: var(--space-inset-2xs);
108
+ padding-inline: var(--space-inset-2xs);
109
+ }
110
+
111
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__trigger:focus-visible {
112
+ outline-color: var(--color-border-focus);
113
+ outline-width: var(--border-width-focus);
114
+ }
115
+
116
+ :where([data-dds-context="marketing"]) .dds-navbar .dds-navbar__ground[data-condensed="true"] {
117
+ box-shadow: var(--elevation-surface-sticky);
118
+ }
119
+
120
+ :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] {
121
+ color: var(--color-fg-on-strong);
122
+ }
123
+
124
+ :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] .dds-navbar__cluster {
125
+ background-color: var(--color-bg-surface-raised-inverse);
126
+ }
127
+
128
+ :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] .dds-navbar__ground {
129
+ background-color: var(--color-bg-strong);
130
+ }
131
+
132
+ :where([data-dds-context="marketing"]) .dds-navbar[data-tone="inverse"] .dds-navbar__trigger:focus-visible {
133
+ outline-color: var(--color-border-focus-inverse);
134
+ }
135
+