@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,87 @@
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 rule below ties or beats exactly what it would have without it.
6
+ * Imported after the generated sheet, which is what lets the ties fall this way.
7
+ */
8
+
9
+ /* Implementation CSS that the contract's staticCss cannot express. */
10
+
11
+ /*
12
+ * The picture answers a pointer that is anywhere on the card.
13
+ *
14
+ * Here because of the shape of the selector rather than the value in it. A state bound on a
15
+ * part emits hover on that part — `.dds-cardbody__media:hover` — so the picture would grow
16
+ * while the pointer was on the picture and sit still while it was on the headline of the
17
+ * very same card. What an editorial card wants is the root's hover reaching one of its own
18
+ * children, and the generator has no vocabulary for that.
19
+ *
20
+ * The body is the card's only child and takes its full height, so hovering the card is
21
+ * hovering the body. That is what keeps this inside one component: both halves of the
22
+ * selector are CardBody's own, and nothing here reaches into a part someone else owns.
23
+ *
24
+ * What stops this from growing the card is `media-frame`, not anything in this rule. A
25
+ * transform never reflows, so the layout was never going to move — but an <img> cannot clip
26
+ * itself, and before the frame existed the nearest clip was the Card's, one level up and
27
+ * around the copy as well. The picture grew past its own box and painted over the eyebrow
28
+ * and the headline, and in a body with no card around it, over whatever came next. The
29
+ * frame holds the box; this moves the art inside it.
30
+ *
31
+ * The step is `motion.scale.media-hover` rather than `motion.scale.hover`. The latter is held to two
32
+ * per cent because a control that grows past the pointer fires its own mouse-out; a picture in a frame
33
+ * that never moves cannot do that, so it takes twice the step.
34
+ *
35
+ * `scale` rather than `transform: scale()`, matching the `translate` CardButton binds for
36
+ * its lift. They are independent properties, so neither needs the other's matrix — which is
37
+ * what would let one card do both. None does: the lift is bound to the four variants with a
38
+ * fill, and this is for the one without.
39
+ *
40
+ * Two classes deep to match the generated rule it sits against, which is
41
+ * `.dds-cardbody .dds-cardbody__media`. A bare `.dds-cardbody__media` would lose on
42
+ * specificity however late it loaded, which is the quiet way an override fails.
43
+ */
44
+ :where([data-dds-context="marketing"]) .dds-cardbody[data-zoom-on-hover="true"]:hover .dds-cardbody__media {
45
+ scale: var(--motion-scale-media-hover);
46
+ }
47
+
48
+ /*
49
+ * Only the property list. The duration and the curve are bound in the contract, on this
50
+ * same part and under this same axis, so the generated sheet already carries them — and
51
+ * binding them is also what tells the generator this component has motion at all, which is
52
+ * what makes it emit the reduced-motion block below this one.
53
+ *
54
+ * The list itself cannot be bound, because the generator computes it from the properties a
55
+ * contract binds on a state, and the only thing that moves here is bound in no state.
56
+ *
57
+ * Those two are `motion.duration.media-hover` and `motion.easing.media-hover`, which together
58
+ * with `motion.scale.media-hover` are the three roles this one effect owns. `duration.normal`
59
+ * is the role whose description names card hover, and 200ms is right for a card that lifts:
60
+ * the movement is small and over. A picture that zooms is still on screen when it stops and
61
+ * the eye follows it the whole way, so the same 200ms reads as a snap. 400ms is the step that
62
+ * follows without lagging the pointer.
63
+ *
64
+ * The curve matters more than the duration. `easing.standard` is `emphasized`, which is
65
+ * 87 per cent travelled by its halfway point — a one-way shape, for something arriving
66
+ * somewhere. A hover is the one transition that runs backwards as often as forwards, and an
67
+ * asymmetric curve played in reverse is a different animation: a snap going in, a drift coming
68
+ * out. `media-hover` is `in-out-soft`, which is the same shape both ways.
69
+ */
70
+ :where([data-dds-context="marketing"]) .dds-cardbody[data-zoom-on-hover="true"] .dds-cardbody__media {
71
+ transition-property: scale;
72
+ }
73
+
74
+ /*
75
+ * The generated reduced-motion block turns the transition off and stops there, which is
76
+ * right for every other component in the package: with nothing to interpolate, a colour
77
+ * simply arrives. Here it would leave the picture jumping between two sizes on hover — more
78
+ * motion in less time, which is the opposite of what the reader asked for.
79
+ *
80
+ * So the scale goes too. Written here because the generated block is generated: it knows a
81
+ * component has transitions, not that one of them was a size.
82
+ */
83
+ @media (prefers-reduced-motion: reduce) {
84
+ :where([data-dds-context="marketing"]) .dds-cardbody[data-zoom-on-hover="true"]:hover .dds-cardbody__media {
85
+ scale: none;
86
+ }
87
+ }
@@ -0,0 +1,73 @@
1
+ /* GENERATED from cardbutton.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-cardbutton {
4
+ transition-property: outline-color, outline-width, translate;
5
+ border-style: none;
6
+ box-sizing: border-box;
7
+ cursor: pointer;
8
+ display: flex;
9
+ flex-direction: column;
10
+ font-family: inherit;
11
+ outline-style: solid;
12
+ overflow: hidden;
13
+ padding: 0;
14
+ text-align: start;
15
+ text-decoration: none;
16
+ border-radius: var(--radius-surface);
17
+ min-block-size: var(--size-target-min);
18
+ min-inline-size: var(--size-target-min);
19
+ outline-width: var(--border-width-none);
20
+ transition-duration: var(--motion-duration-normal);
21
+ transition-timing-function: var(--motion-easing-standard);
22
+ }
23
+
24
+ :where([data-dds-context="marketing"]) .dds-cardbutton:focus-visible {
25
+ outline-color: var(--color-border-focus);
26
+ outline-width: var(--border-width-focus);
27
+ }
28
+
29
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="accent-strong"] {
30
+ background-color: var(--color-bg-brand-strong);
31
+ color: var(--color-fg-on-brand-strong);
32
+ }
33
+
34
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="accent"] {
35
+ background-color: var(--color-bg-brand);
36
+ color: var(--color-fg-on-solid);
37
+ }
38
+
39
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="plain"] {
40
+ border-radius: var(--radius-none);
41
+ color: var(--color-fg-default);
42
+ }
43
+
44
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="surface-raised"] {
45
+ background-color: var(--color-bg-surface-raised);
46
+ color: var(--color-fg-default);
47
+ }
48
+
49
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="surface"] {
50
+ background-color: var(--color-bg-surface);
51
+ color: var(--color-fg-default);
52
+ }
53
+
54
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="accent-strong"]:hover:where(:not(:disabled)) {
55
+ translate: var(--motion-translate-hover);
56
+ }
57
+
58
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="accent"]:hover:where(:not(:disabled)) {
59
+ translate: var(--motion-translate-hover);
60
+ }
61
+
62
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="surface-raised"]:hover:where(:not(:disabled)) {
63
+ translate: var(--motion-translate-hover);
64
+ }
65
+
66
+ :where([data-dds-context="marketing"]) .dds-cardbutton[data-variant="surface"]:hover:where(:not(:disabled)) {
67
+ translate: var(--motion-translate-hover);
68
+ }
69
+
70
+ @media (prefers-reduced-motion: reduce) {
71
+ :where([data-dds-context="marketing"]) .dds-cardbutton { transition: none; }
72
+ }
73
+
@@ -0,0 +1,27 @@
1
+ import './CardButton.css';
2
+ import './card-button-impl.css';
3
+ import { type CardButtonProps } from './CardButton.types.js';
4
+ export type { CardButtonProps };
5
+ /**
6
+ * A card that responds to a press.
7
+ *
8
+ * Which element it renders is decided by `href` and nothing else. A card that goes to a
9
+ * page and a card that opens a dialog are the same gesture with different destinations,
10
+ * and the element is what tells a browser which: a `<button>` answers Space and does what
11
+ * the page says, an `<a>` gives cmd-click, a visible destination and a copyable link. Two
12
+ * components for that would be two names for one gesture.
13
+ *
14
+ * Everything Card's surface does, this does — the four grounds, the corner, the clip, no
15
+ * inset of its own. What it adds is that the whole surface is one target, and what it gives
16
+ * up is holding a control: a button inside a button is unreachable, which is why
17
+ * `forbiddenChildren` names every one of them.
18
+ *
19
+ * `color` is bound per ground rather than inherited, which the anchor makes necessary — a
20
+ * `<button>` takes the text colour around it and an `<a>` does not, so without it every
21
+ * word in the card would come out the browser's link blue.
22
+ *
23
+ * `type="button"` on the button branch, because a card inside a form would otherwise submit
24
+ * it: the default for a `<button>` is `submit`, and a promotional card that reloaded the
25
+ * page is the kind of fault nobody looks for in a card.
26
+ */
27
+ export declare function CardButton({ variant, href, children, ...rest }: CardButtonProps): import("react").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import './CardButton.css';
3
+ import './card-button-impl.css';
4
+ import { cardButtonDefaults, cardButtonParts } from './CardButton.types.js';
5
+ /**
6
+ * A card that responds to a press.
7
+ *
8
+ * Which element it renders is decided by `href` and nothing else. A card that goes to a
9
+ * page and a card that opens a dialog are the same gesture with different destinations,
10
+ * and the element is what tells a browser which: a `<button>` answers Space and does what
11
+ * the page says, an `<a>` gives cmd-click, a visible destination and a copyable link. Two
12
+ * components for that would be two names for one gesture.
13
+ *
14
+ * Everything Card's surface does, this does — the four grounds, the corner, the clip, no
15
+ * inset of its own. What it adds is that the whole surface is one target, and what it gives
16
+ * up is holding a control: a button inside a button is unreachable, which is why
17
+ * `forbiddenChildren` names every one of them.
18
+ *
19
+ * `color` is bound per ground rather than inherited, which the anchor makes necessary — a
20
+ * `<button>` takes the text colour around it and an `<a>` does not, so without it every
21
+ * word in the card would come out the browser's link blue.
22
+ *
23
+ * `type="button"` on the button branch, because a card inside a form would otherwise submit
24
+ * it: the default for a `<button>` is `submit`, and a promotional card that reloaded the
25
+ * page is the kind of fault nobody looks for in a card.
26
+ */
27
+ export function CardButton({ variant = cardButtonDefaults.variant, href, children, ...rest }) {
28
+ const shared = {
29
+ className: cardButtonParts.root,
30
+ // Read from `data-variant` rather than folded into the class, the same way Card reads it.
31
+ 'data-variant': variant,
32
+ };
33
+ if (href !== undefined) {
34
+ return (_jsx("a", { ...rest, ...shared, href: href, children: children }));
35
+ }
36
+ return (_jsx("button", { ...rest, ...shared, type: "button", children: children }));
37
+ }
@@ -0,0 +1,24 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ export interface CardButtonOwnProps {
3
+ /**
4
+ * `surface` — The default, and right for a pressable card on the page. The same recessed step off the white page that Card takes, so a row mixing pressable and plain cards reads as one row
5
+ * `surface-raised` — The card sits on a color.bg.subtle band rather than on the page, where the recessed fill all but disappears and this one lifts off the band instead
6
+ * `accent` — One card in a set is the promotional one and the page has already earned the colour
7
+ * `accent-strong` — A card carrying more weight than its neighbours. The darkest of the four, and the one that takes white at 20.55:1 — the most legible ground a marketing card has
8
+ * `plain` — An editorial card that goes somewhere — an article, a post, a release note. No fill, no corner and no lift: what marks it out is its picture and the gap to the next one, the way a column of articles is told apart on a page rather than the way a row of tiles is. The same ground Card's own plain variant takes, so a pressable article card and a static one sit in one column without a seam
9
+ */
10
+ variant?: 'surface' | 'surface-raised' | 'accent' | 'accent-strong' | 'plain';
11
+ /** The press goes somewhere with a URL of its own. It makes this an anchor rather than a button, which is what gives a reader cmd-click, a visible destination and a copyable link — none of which mean anything for a press that opens a dialog. This is the ordinary case on a marketing page, where most cards point at a page */
12
+ href?: string;
13
+ /** Allowed: any content */
14
+ children: ReactNode;
15
+ }
16
+ export type CardButtonProps = CardButtonOwnProps & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'variant' | 'href'>;
17
+ /** The class each part carries. Apply these — do not retype them. */
18
+ export declare const cardButtonParts: {
19
+ readonly root: "dds-cardbutton";
20
+ };
21
+ /** Generated so defaults cannot drift from the contract. */
22
+ export declare const cardButtonDefaults: {
23
+ readonly variant: "surface";
24
+ };
@@ -0,0 +1,7 @@
1
+ // GENERATED from card-button.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const cardButtonParts = {
4
+ root: 'dds-cardbutton',
5
+ };
6
+ /** Generated so defaults cannot drift from the contract. */
7
+ export const cardButtonDefaults = { variant: 'surface' };
@@ -0,0 +1,39 @@
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 the rule below beats exactly what it needs to and nothing else.
6
+ */
7
+
8
+ /* Implementation CSS that the contract's staticCss cannot express. */
9
+
10
+ /*
11
+ * One motion per gesture: a card whose picture zooms does not also lift.
12
+ *
13
+ * Two motions answering one hover reads as a glitch rather than as emphasis — the frame
14
+ * slides up while the art inside it grows, and neither movement is legible because the
15
+ * other is happening. Which one to keep is decided by what the card is: an editorial card
16
+ * is recognised by its picture, so the picture is what should answer the pointer.
17
+ *
18
+ * This is a separate rule from `plain` having no lift, and the two are independent. That one
19
+ * is about the ground: with no fill, what would rise is a picture and some loose text, which
20
+ * reads as the words sliding. This one is about the motion already present, and it holds on
21
+ * every variant — an editorial card on a surface fill has a ground to lift and still should
22
+ * not, because its picture is already moving.
23
+ *
24
+ * Written here because the condition is a fact about this component's child. A contract binds
25
+ * a property under a styling axis of its own, and "the body inside me zooms" is neither — it
26
+ * is CardBody's prop, one level down. `:has()` is what lets this stay a rule about the
27
+ * CardButton: the selector is on this component's own root, and the child is only read.
28
+ *
29
+ * `>` rather than a descendant, because a CardButton holds exactly one child. A loose
30
+ * descendant would also match a zooming body nested somewhere deeper, which is a shape
31
+ * childCount already forbids and this need not restate.
32
+ *
33
+ * Specificity: the generated lift is `.dds-cardbutton[data-variant="…"]:hover:where(…)`, at
34
+ * three classes. This reads four — the class, the two inside `:has()`, and `:hover` — so it
35
+ * wins on weight rather than on load order, and would still win if the sheets were reordered.
36
+ */
37
+ :where([data-dds-context="marketing"]) .dds-cardbutton:has(> .dds-cardbody[data-zoom-on-hover="true"]):hover {
38
+ translate: none;
39
+ }
@@ -0,0 +1,149 @@
1
+ /* GENERATED from checkbox.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-checkbox {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--space-gap-xs);
7
+ }
8
+
9
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__control {
10
+ align-items: flex-start;
11
+ display: flex;
12
+ gap: var(--space-gap-sm);
13
+ }
14
+
15
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__box {
16
+ align-items: center;
17
+ border-style: solid;
18
+ box-sizing: border-box;
19
+ display: flex;
20
+ flex: none;
21
+ justify-content: center;
22
+ outline-style: solid;
23
+ position: relative;
24
+ background-color: var(--color-bg-surface-raised);
25
+ block-size: var(--size-checkbox-box);
26
+ border-color: var(--color-border-default);
27
+ border-radius: var(--radius-control-sm);
28
+ border-width: var(--border-width-default);
29
+ inline-size: var(--size-checkbox-box);
30
+ outline-width: var(--border-width-none);
31
+ }
32
+
33
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__field {
34
+ appearance: none;
35
+ cursor: pointer;
36
+ inset-block-start: 0;
37
+ inset-inline-start: 0;
38
+ margin: 0;
39
+ opacity: 0;
40
+ position: absolute;
41
+ block-size: var(--size-checkbox-box);
42
+ inline-size: var(--size-checkbox-box);
43
+ }
44
+
45
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__indicator {
46
+ align-items: center;
47
+ display: flex;
48
+ justify-content: center;
49
+ pointer-events: none;
50
+ block-size: var(--icon-size-2xs);
51
+ color: var(--color-fg-on-solid);
52
+ inline-size: var(--icon-size-2xs);
53
+ }
54
+
55
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__text {
56
+ display: flex;
57
+ flex-direction: column;
58
+ min-inline-size: 0;
59
+ }
60
+
61
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__label {
62
+ cursor: pointer;
63
+ color: var(--color-fg-default);
64
+ font-family: var(--font-body-md-family);
65
+ font-size: var(--font-body-md-size);
66
+ font-weight: var(--font-body-md-weight);
67
+ line-height: var(--font-body-md-line-height);
68
+ }
69
+
70
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__message {
71
+ align-items: flex-start;
72
+ display: flex;
73
+ overflow-wrap: anywhere;
74
+ font-family: var(--font-body-sm-family);
75
+ font-size: var(--font-body-sm-size);
76
+ font-weight: var(--font-body-sm-weight);
77
+ gap: var(--space-gap-xs);
78
+ line-height: var(--font-body-sm-line-height);
79
+ }
80
+
81
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__description-text {
82
+ color: var(--color-fg-muted);
83
+ font-family: var(--font-body-sm-family);
84
+ font-size: var(--font-body-sm-size);
85
+ font-weight: var(--font-body-sm-weight);
86
+ line-height: var(--font-body-sm-line-height);
87
+ }
88
+
89
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__box:hover:where(:not(:has(.dds-checkbox__field:disabled))) {
90
+ box-shadow: var(--elevation-ring-hover);
91
+ }
92
+
93
+ :where([data-dds-context="marketing"]) .dds-checkbox:has(.dds-checkbox__field:focus-visible) .dds-checkbox__box {
94
+ outline-color: var(--color-border-focus);
95
+ outline-width: var(--border-width-focus);
96
+ }
97
+
98
+ :where([data-dds-context="marketing"]) .dds-checkbox:has(.dds-checkbox__field:disabled:not(:where(:disabled *))) {
99
+ opacity: var(--opacity-disabled);
100
+ }
101
+
102
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-status="error"] .dds-checkbox__message {
103
+ color: var(--color-fg-danger);
104
+ }
105
+
106
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-status="success"] .dds-checkbox__message {
107
+ color: var(--color-fg-success);
108
+ }
109
+
110
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-status="warning"] .dds-checkbox__message {
111
+ color: var(--color-fg-warning);
112
+ }
113
+
114
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-checked="unchecked"][data-status="error"] .dds-checkbox__box {
115
+ border-color: var(--color-border-danger);
116
+ }
117
+
118
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-checked="unchecked"][data-status="success"] .dds-checkbox__box {
119
+ border-color: var(--color-border-success);
120
+ }
121
+
122
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-checked="unchecked"][data-status="warning"] .dds-checkbox__box {
123
+ border-color: var(--color-border-warning);
124
+ }
125
+
126
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-tone="accent"][data-checked="checked"] .dds-checkbox__box {
127
+ background-color: var(--color-bg-brand);
128
+ border-color: var(--color-bg-brand);
129
+ }
130
+
131
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-tone="accent"][data-checked="indeterminate"] .dds-checkbox__box {
132
+ background-color: var(--color-bg-brand);
133
+ border-color: var(--color-bg-brand);
134
+ }
135
+
136
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-tone="standard"][data-checked="checked"] .dds-checkbox__box {
137
+ background-color: var(--color-bg-strong);
138
+ border-color: var(--color-bg-strong);
139
+ }
140
+
141
+ :where([data-dds-context="marketing"]) .dds-checkbox[data-tone="standard"][data-checked="indeterminate"] .dds-checkbox__box {
142
+ background-color: var(--color-bg-strong);
143
+ border-color: var(--color-bg-strong);
144
+ }
145
+
146
+ :where([data-dds-context="marketing"]) .dds-checkbox .dds-checkbox__field:disabled {
147
+ cursor: not-allowed;
148
+ }
149
+
@@ -0,0 +1,21 @@
1
+ import './Checkbox.css';
2
+ import './checkbox-impl.css';
3
+ import { type CheckboxProps } from './Checkbox.types.js';
4
+ export type { CheckboxProps };
5
+ /**
6
+ * A real `<input type="checkbox">`, invisible, with the box the user sees drawn as
7
+ * its sibling.
8
+ *
9
+ * The tick lives inside `box`, which is a `<span>`, and the input covers the box rather
10
+ * than containing anything. So every part here is a real element the generator can name,
11
+ * *and* the control is native: it submits with a form, it takes the keyboard for free,
12
+ * and it carries the mixed state properly.
13
+ *
14
+ * That is why nothing below writes `role` or `aria-checked` by hand. The element is
15
+ * already a checkbox and already announces its state.
16
+ *
17
+ * It carries its own status and its own description. A lone consent is the case with
18
+ * nothing above it to hold either, and one that cannot show its own error is a form the
19
+ * reader cannot be told they failed.
20
+ */
21
+ export declare function Checkbox({ tone, checked, status, label, showLabel, description, statusMessage, id, onChange, ...rest }: CheckboxProps): import("react").JSX.Element;
@@ -0,0 +1,97 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useId } from 'react';
4
+ import { CircleCheckSolidIcon, CircleExclamationSolidIcon, TriangleExclamationSolidIcon, } from '@deriv-com/quill-icons-web';
5
+ import './Checkbox.css';
6
+ import './checkbox-impl.css';
7
+ import { given } from '../../given.js';
8
+ import { visuallyHidden } from '../../visually-hidden.js';
9
+ import { Icon } from '../icon/Icon.js';
10
+ import { checkboxDefaults, checkboxParts } from './Checkbox.types.js';
11
+ /**
12
+ * What each reported status looks like.
13
+ *
14
+ * Circle for error, triangle for warning: the two colours are close enough that a
15
+ * red-green deficiency can converge them, so the shape is what separates the pair at a
16
+ * glance and neither should be varied to match the other.
17
+ *
18
+ * Declared here rather than imported, which is this package's shape — marketing has no
19
+ * shared glyph module and TextInput states the same three the same way. A fourth copy
20
+ * would be the point at which one is worth making; three is not it yet.
21
+ */
22
+ const statusGlyph = {
23
+ error: _jsx(CircleExclamationSolidIcon, {}),
24
+ warning: _jsx(TriangleExclamationSolidIcon, {}),
25
+ success: _jsx(CircleCheckSolidIcon, {}),
26
+ };
27
+ /**
28
+ * A real `<input type="checkbox">`, invisible, with the box the user sees drawn as
29
+ * its sibling.
30
+ *
31
+ * The tick lives inside `box`, which is a `<span>`, and the input covers the box rather
32
+ * than containing anything. So every part here is a real element the generator can name,
33
+ * *and* the control is native: it submits with a form, it takes the keyboard for free,
34
+ * and it carries the mixed state properly.
35
+ *
36
+ * That is why nothing below writes `role` or `aria-checked` by hand. The element is
37
+ * already a checkbox and already announces its state.
38
+ *
39
+ * It carries its own status and its own description. A lone consent is the case with
40
+ * nothing above it to hold either, and one that cannot show its own error is a form the
41
+ * reader cannot be told they failed.
42
+ */
43
+ export function Checkbox({ tone = checkboxDefaults.tone, checked = checkboxDefaults.checked, status = checkboxDefaults.status, label, showLabel = checkboxDefaults.showLabel, description, statusMessage, id, onChange, ...rest }) {
44
+ const generatedId = useId();
45
+ // The label is a sibling rather than a wrapper, so the two need an id to be tied
46
+ // together. A consumer's own id wins — theirs may be what a form's error summary
47
+ // links to.
48
+ const fieldId = id ?? generatedId;
49
+ // Gated on the status rather than on the message having text. A box reporting an error
50
+ // with an empty message is a state the contract forbids, and empty is the honest
51
+ // rendering of a broken state.
52
+ const reporting = status !== 'none';
53
+ const showsMessage = reporting && given(statusMessage);
54
+ /*
55
+ * `given` rather than `!== undefined`, and the shared one rather than a fourth copy:
56
+ * absence is the switch for these props, so an empty or whitespace string has to count
57
+ * as absent. The preview's controls set '' when a designer clears a field rather than
58
+ * dropping the prop, which is how an empty line and the gap above it get left behind.
59
+ */
60
+ const describes = given(description);
61
+ /*
62
+ * Both, and in the order they are read on screen. A description says what ticking the
63
+ * box commits you to; a message says what is wrong with the answer — different things,
64
+ * so they stack rather than replace one another.
65
+ *
66
+ * A consumer's own reference is merged in rather than overwritten, so one they added
67
+ * cannot be dropped by this component having something to say.
68
+ */
69
+ const describedBy = [
70
+ describes ? `${fieldId}-description` : null,
71
+ showsMessage ? `${fieldId}-message` : null,
72
+ rest['aria-describedby'],
73
+ ]
74
+ .filter(Boolean)
75
+ .join(' ') || undefined;
76
+ /*
77
+ * `indeterminate` is a DOM property with no HTML attribute, so JSX cannot set it and
78
+ * this callback is the only way in.
79
+ *
80
+ * Deliberately not `aria-checked="mixed"` alongside it: a native checkbox already
81
+ * announces mixed from this property, and the explicit attribute would both repeat it
82
+ * and be free to contradict it — it does not clear itself when the property does.
83
+ */
84
+ const fieldRef = useCallback((node) => {
85
+ if (node !== null)
86
+ node.indeterminate = checked === 'indeterminate';
87
+ }, [checked]);
88
+ return (_jsxs("div", { className: checkboxParts.root, "data-tone": tone, "data-checked": checked, "data-status": status, children: [_jsxs("div", { className: checkboxParts.control, children: [_jsxs("span", { className: checkboxParts.box, children: [_jsx("input", { ...rest, ref: fieldRef, id: fieldId, type: "checkbox", className: checkboxParts.field, checked: checked === 'checked', onChange: onChange,
89
+ // React warns that a checked field without a handler is read-only, and it is
90
+ // right: the state is the consumer's, and one that passes no handler has built
91
+ // a checkbox nobody can change. Saying so is better than the warning.
92
+ readOnly: onChange === undefined ? true : undefined, "aria-invalid": status === 'error' || undefined, "aria-describedby": describedBy }), _jsx("span", { className: checkboxParts.indicator, "aria-hidden": "true", children: checked === 'unchecked' ? null : (_jsx("svg", { viewBox: "0 0 24 24", width: "100%", height: "100%", fill: "none", focusable: "false", children: _jsx("path", {
93
+ // A tick when chosen; a dash when the boxes this one summarises disagree.
94
+ // One horizontal stroke rather than a smaller square, because a filled box
95
+ // with something smaller inside it reads as a radio button gone wrong.
96
+ d: checked === 'checked' ? 'M5 12.5 10 17.5 19 7' : 'M6 12h12', stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }) })) })] }), _jsxs("div", { className: checkboxParts.text, children: [_jsx("label", { className: checkboxParts.label, htmlFor: fieldId, style: showLabel ? undefined : visuallyHidden, children: label }), describes ? (_jsx("span", { id: `${fieldId}-description`, className: checkboxParts['description-text'], children: description })) : null] })] }), showsMessage ? (_jsxs("span", { id: `${fieldId}-message`, className: checkboxParts.message, children: [_jsx(Icon, { size: "xs", children: statusGlyph[status] }), statusMessage] })) : null] }));
97
+ }
@@ -0,0 +1,46 @@
1
+ import type { InputHTMLAttributes } from 'react';
2
+ export interface CheckboxOwnProps {
3
+ /**
4
+ * `standard` — The default, and almost always right — the ticked box fills with the neutral that outranks everything around it, so the choice is legible before any colour is read and it is the fill every other chosen control in this package takes, which is what lets a form of them read as one set of answers
5
+ * `accent` — The checkbox is the brand moment of the view — a single consent the design is deliberately drawing the eye to — and the surrounding design already carries brand red
6
+ */
7
+ tone?: 'standard' | 'accent';
8
+ /**
9
+ * `unchecked` — The default — the choice has not been made, or has been made against
10
+ * `checked` — The user has made this choice, or it arrives pre-made and they may change it
11
+ * `indeterminate` — A box that summarises others, where some but not all of them are ticked — a Select all above a partly selected list
12
+ */
13
+ checked?: 'unchecked' | 'checked' | 'indeterminate';
14
+ /** Always — it states what ticking the box agrees to, and the box shows nothing on its own. A phrase the user can read as a claim they are agreeing with: "Send me trade confirmations", not "Confirmations". Sentence case, and no full stop — a label is a phrase rather than a sentence, and a stop at the end of one reads as the start of prose. In a set, phrase every box the same way, so a reader compares the answers rather than the grammar */
15
+ label: string;
16
+ /** Drawing the words, which is nearly always. A checkbox on its own is a question, and a question with no words is not one */
17
+ showLabel?: boolean;
18
+ /** Ticking the box commits the user to something the label cannot carry without becoming a sentence — what it costs, how often it happens, what it applies to. On a box that summarises others it is where the summary belongs: "Four of six are on" says what an indeterminate tick cannot */
19
+ description?: string;
20
+ }
21
+ export type CheckboxProps = CheckboxOwnProps & Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'tone' | 'checked' | 'status' | 'label' | 'showLabel' | 'description' | 'statusMessage'> & ({
22
+ status?: 'none' | 'error' | 'warning' | 'success';
23
+ statusMessage: string;
24
+ } | {
25
+ status?: Exclude<'none' | 'error' | 'warning' | 'success', 'error' | 'warning'>;
26
+ statusMessage?: string;
27
+ });
28
+ /** The class each part carries. Apply these — do not retype them. */
29
+ export declare const checkboxParts: {
30
+ readonly root: "dds-checkbox";
31
+ readonly control: "dds-checkbox__control";
32
+ readonly box: "dds-checkbox__box";
33
+ readonly field: "dds-checkbox__field";
34
+ readonly indicator: "dds-checkbox__indicator";
35
+ readonly text: "dds-checkbox__text";
36
+ readonly label: "dds-checkbox__label";
37
+ readonly 'description-text': "dds-checkbox__description-text";
38
+ readonly message: "dds-checkbox__message";
39
+ };
40
+ /** Generated so defaults cannot drift from the contract. */
41
+ export declare const checkboxDefaults: {
42
+ readonly tone: "standard";
43
+ readonly checked: "unchecked";
44
+ readonly status: "none";
45
+ readonly showLabel: true;
46
+ };
@@ -0,0 +1,15 @@
1
+ // GENERATED from checkbox.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const checkboxParts = {
4
+ root: 'dds-checkbox',
5
+ control: 'dds-checkbox__control',
6
+ box: 'dds-checkbox__box',
7
+ field: 'dds-checkbox__field',
8
+ indicator: 'dds-checkbox__indicator',
9
+ text: 'dds-checkbox__text',
10
+ label: 'dds-checkbox__label',
11
+ 'description-text': 'dds-checkbox__description-text',
12
+ message: 'dds-checkbox__message',
13
+ };
14
+ /** Generated so defaults cannot drift from the contract. */
15
+ export const checkboxDefaults = { tone: 'standard', checked: 'unchecked', status: 'none', showLabel: true };