@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,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './FilterChip.css';
3
+ import { Icon } from '../icon/Icon.js';
4
+ import { filterChipDefaults, filterChipGlyphStep, filterChipParts, } from './FilterChip.types.js';
5
+ /**
6
+ * A token turned on and off in place.
7
+ *
8
+ * The chip is the button. That is the whole reason this is its own component rather
9
+ * than a mode of a shared one: a token pressed to toggle should be the thing that is
10
+ * pressed, so the state it reports sits on the element carrying the role instead of
11
+ * on a child of it. A wrapper that was not a control would put `aria-pressed`
12
+ * somewhere no check could reach.
13
+ *
14
+ * Unlike product's, this one has no `dot` content. That slot held a StatusDot, and
15
+ * this package has no StatusDot to put in it — a marketing index does not accumulate
16
+ * unread changes behind a filter the way an app view does. The escape hatch covers
17
+ * anyone who disagrees.
18
+ *
19
+ * It takes this package's control ramp rather than a chip scale of its own. There is
20
+ * one ramp here, its small step was written for a field in a filter row, and a second
21
+ * scale existing only for chips would be a distinction no marketing page is dense
22
+ * enough to need.
23
+ */
24
+ export function FilterChip({ selected = filterChipDefaults.selected, size = filterChipDefaults.size, content = filterChipDefaults.content, label, leadingIcon, trailingIcon, badge, custom, onSelect, onClick, ...rest }) {
25
+ return (_jsxs("button", { type: "button", className: filterChipParts.root, ...rest, "data-selected": String(selected), "data-size": size, "data-content": content, "aria-pressed": selected,
26
+ /*
27
+ Both, and the consumer's first. `onSelect` reports what the chip is about to
28
+ become rather than that it was pressed, so a consumer writes the value back
29
+ without working out which way it went; `onClick` is the one every button has,
30
+ and swallowing it would leave anything listening the ordinary way with a chip
31
+ that answered nothing.
32
+ */
33
+ onClick: (event) => {
34
+ onClick?.(event);
35
+ onSelect?.(!selected);
36
+ }, children: [leadingIcon !== undefined && (_jsx("span", { className: filterChipParts.icon, children: _jsx(Icon, { size: filterChipGlyphStep[size], children: leadingIcon }) })), _jsx("span", { className: filterChipParts.label, children: label }), content !== 'none' && (_jsx("span", { className: filterChipParts.trailing, children: content === 'icon' ? (_jsx(Icon, { size: filterChipGlyphStep[size], children: trailingIcon })) : content === 'badge' ? (badge) : (custom) }))] }));
37
+ }
@@ -0,0 +1,53 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ export interface FilterChipOwnProps {
3
+ /** The narrowing currently applies. It is the consumer's to hold, because the list and the chip are one fact — a chip keeping its own copy is how the two come to disagree */
4
+ selected?: boolean;
5
+ /**
6
+ * `sm` — The default. A step under the button or field it stands beside rather than level with it, which is what keeps a row of narrowings from reading as a row of calls to action
7
+ * `md` — A touch-first layout, or a filter row in a hero band where the chips carry more weight. It still sits a step under a large button, which is the cost of a chip that cannot be mistaken for one — where the target matters more than the distinction, the control wanted is a button
8
+ */
9
+ size?: 'sm' | 'md';
10
+ /** Always, and required on that account — it is the whole of what the chip says. Short enough to read at a glance: a token carrying a sentence has stopped being one */
11
+ label: string;
12
+ /** A glyph makes the kind of narrowing faster to recognise than its name alone. It sits before the words and never replaces them. Pass the glyph itself rather than one already wrapped in an Icon: the chip wraps it at icon.size.xs at sm and icon.size.sm at md. */
13
+ leadingIcon?: ReactNode;
14
+ /** What hears the press. It reports what the chip is about to become rather than that it was pressed, so a consumer writes the value back without working out which way it went */
15
+ onSelect?: (selected: boolean) => void;
16
+ }
17
+ export type FilterChipProps = FilterChipOwnProps & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'selected' | 'size' | 'content' | 'label' | 'leadingIcon' | 'trailingIcon' | 'badge' | 'custom' | 'onSelect'> & ({
18
+ content?: 'none' | 'icon' | 'badge' | 'custom';
19
+ trailingIcon: ReactNode;
20
+ } | {
21
+ content?: Exclude<'none' | 'icon' | 'badge' | 'custom', 'icon'>;
22
+ trailingIcon?: ReactNode;
23
+ }) & ({
24
+ content?: 'none' | 'icon' | 'badge' | 'custom';
25
+ badge: ReactNode;
26
+ } | {
27
+ content?: Exclude<'none' | 'icon' | 'badge' | 'custom', 'badge'>;
28
+ badge?: ReactNode;
29
+ }) & ({
30
+ content?: 'none' | 'icon' | 'badge' | 'custom';
31
+ custom: ReactNode;
32
+ } | {
33
+ content?: Exclude<'none' | 'icon' | 'badge' | 'custom', 'custom'>;
34
+ custom?: ReactNode;
35
+ });
36
+ /** The class each part carries. Apply these — do not retype them. */
37
+ export declare const filterChipParts: {
38
+ readonly root: "dds-filterchip";
39
+ readonly icon: "dds-filterchip__icon";
40
+ readonly label: "dds-filterchip__label";
41
+ readonly trailing: "dds-filterchip__trailing";
42
+ };
43
+ /** Generated so defaults cannot drift from the contract. */
44
+ export declare const filterChipDefaults: {
45
+ readonly selected: false;
46
+ readonly size: "sm";
47
+ readonly content: "none";
48
+ };
49
+ /** The step this component draws a glyph slot at. Generated — do not retype. */
50
+ export declare const filterChipGlyphStep: {
51
+ readonly sm: "xs";
52
+ readonly md: "sm";
53
+ };
@@ -0,0 +1,12 @@
1
+ // GENERATED from filter-chip.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const filterChipParts = {
4
+ root: 'dds-filterchip',
5
+ icon: 'dds-filterchip__icon',
6
+ label: 'dds-filterchip__label',
7
+ trailing: 'dds-filterchip__trailing',
8
+ };
9
+ /** Generated so defaults cannot drift from the contract. */
10
+ export const filterChipDefaults = { selected: false, size: 'sm', content: 'none' };
11
+ /** The step this component draws a glyph slot at. Generated — do not retype. */
12
+ export const filterChipGlyphStep = { sm: 'xs', md: 'sm' };
@@ -0,0 +1,104 @@
1
+ /* GENERATED from footer.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-footer {
4
+ box-sizing: border-box;
5
+ container-type: inline-size;
6
+ display: flex;
7
+ inline-size: 100%;
8
+ justify-content: center;
9
+ background-color: var(--color-bg-brand-strong);
10
+ color: var(--color-fg-on-brand-strong);
11
+ padding-block: var(--space-section-compact);
12
+ }
13
+
14
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner {
15
+ box-sizing: border-box;
16
+ display: flex;
17
+ flex-direction: column;
18
+ inline-size: 100%;
19
+ min-inline-size: 0;
20
+ gap: var(--space-heading-content);
21
+ max-inline-size: var(--size-content-max);
22
+ padding-inline: var(--space-inset-page);
23
+ }
24
+
25
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__masthead {
26
+ align-items: flex-start;
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: var(--space-gap-lg);
30
+ }
31
+
32
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__brand {
33
+ align-items: flex-start;
34
+ display: flex;
35
+ flex-direction: column;
36
+ gap: var(--space-gap-sm);
37
+ }
38
+
39
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__social {
40
+ align-items: center;
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ gap: var(--space-gap-lg);
44
+ }
45
+
46
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__endorsement {
47
+ align-items: center;
48
+ display: flex;
49
+ flex: none;
50
+ gap: var(--space-gap-sm);
51
+ }
52
+
53
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__body {
54
+ align-items: stretch;
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: var(--space-gap-xl);
58
+ }
59
+
60
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__nav {
61
+ display: flex;
62
+ flex: auto;
63
+ flex-direction: column;
64
+ min-inline-size: 0;
65
+ }
66
+
67
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__aside {
68
+ display: flex;
69
+ flex: none;
70
+ flex-direction: column;
71
+ gap: var(--space-gap-md);
72
+ }
73
+
74
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__bottom {
75
+ border-block-start-style: solid;
76
+ box-sizing: border-box;
77
+ display: flex;
78
+ flex-direction: column;
79
+ border-block-start-width: var(--border-width-hairline);
80
+ border-color: var(--color-border-subtle-inverse);
81
+ gap: var(--space-gap-lg);
82
+ padding-block-start: var(--space-inset-xl);
83
+ }
84
+
85
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__disclaimer {
86
+ display: flex;
87
+ flex-direction: column;
88
+ font-family: var(--font-body-sm-family);
89
+ font-size: var(--font-body-sm-size);
90
+ font-weight: var(--font-body-sm-weight);
91
+ gap: var(--space-gap-lg);
92
+ letter-spacing: var(--font-body-sm-letter-spacing);
93
+ line-height: var(--font-body-sm-line-height);
94
+ }
95
+
96
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__copyright {
97
+ margin: 0;
98
+ font-family: var(--font-body-sm-family);
99
+ font-size: var(--font-body-sm-size);
100
+ font-weight: var(--font-body-sm-weight);
101
+ letter-spacing: var(--font-body-sm-letter-spacing);
102
+ line-height: var(--font-body-sm-line-height);
103
+ }
104
+
@@ -0,0 +1,43 @@
1
+ import './Footer.css';
2
+ import './footer-impl.css';
3
+ import { type FooterProps } from './Footer.types.js';
4
+ export type { FooterProps };
5
+ /**
6
+ * The band that closes a marketing page.
7
+ *
8
+ * Three blocks, in the order they are read: the masthead, the destinations, and the record that
9
+ * ends the document. What goes in them is what the page composes — the links, the groups they fall
10
+ * into, the disclaimer's paragraphs — because the foot of a marketing site is written by the site.
11
+ * What is owned here is the band itself: the ground, the measure, the order, and the space between.
12
+ *
13
+ * `root` spans the full width and `inner` holds the measure. The two are separate elements for one
14
+ * reason: a ground that stopped at the measure would read as a wide card sitting at the foot of the
15
+ * page rather than as the page ending. The centring is on the outer element, the cap on the inner.
16
+ *
17
+ * The ground is dark, and the ink is set once on the root and inherited by everything inside it. A
18
+ * link, a group label and a line of small print are one decision rather than three, which is the
19
+ * package's rule about a section that paints a ground — set the ground without the ink and the text
20
+ * keeps whatever the page was using and disappears.
21
+ *
22
+ * `nav` is a landmark rather than a div, and it is the part that carries the name. A page has two
23
+ * sets of destinations — the bar at the top and this — and a reader moving between landmarks is
24
+ * told which is which only if both are named. The name goes here rather than on the `<footer>`,
25
+ * which is already the contentinfo landmark and needs nothing said about it.
26
+ *
27
+ * `aside` sits outside that landmark deliberately. The rail holds an offer rather than a way
28
+ * onward, and announcing an app card as part of the navigation is telling a reader it is somewhere
29
+ * they can go.
30
+ *
31
+ * The columns are laid out by a `Grid` this renders, not by one the page supplies. The count is the
32
+ * footer's and arrives as `columns`; the arithmetic that turns a count into tracks which fold as the
33
+ * region narrows is Grid's, and reimplementing it here would be a second copy of a calculation that
34
+ * is hard to get right once. Composing it is how the family stays closed — `<Footer>` takes
35
+ * `FooterGroup`s and `Link`s directly, the way Table takes rows and Navbar takes items, rather than
36
+ * asking every caller to wrap them in something first.
37
+ *
38
+ * Every region is optional, the closing line included. It was required once, on the reading that a
39
+ * marketing page always carries a notice — true of most and not of all, and a required prop is the
40
+ * component insisting on a sentence it cannot write. Absence is the switch and an empty string is
41
+ * absence, which is what `given` is for.
42
+ */
43
+ export declare function Footer({ label, columns, copyright, brand, social, endorsement, aside, disclaimer, children, }: FooterProps): import("react").JSX.Element;
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Children, cloneElement, isValidElement } from 'react';
3
+ import './Footer.css';
4
+ import './footer-impl.css';
5
+ import { given } from '../../given.js';
6
+ import { Grid } from '../../layout/grid/Grid.js';
7
+ import { Link } from '../link/Link.js';
8
+ import { footerDefaults, footerParts } from './Footer.types.js';
9
+ /**
10
+ * The band that closes a marketing page.
11
+ *
12
+ * Three blocks, in the order they are read: the masthead, the destinations, and the record that
13
+ * ends the document. What goes in them is what the page composes — the links, the groups they fall
14
+ * into, the disclaimer's paragraphs — because the foot of a marketing site is written by the site.
15
+ * What is owned here is the band itself: the ground, the measure, the order, and the space between.
16
+ *
17
+ * `root` spans the full width and `inner` holds the measure. The two are separate elements for one
18
+ * reason: a ground that stopped at the measure would read as a wide card sitting at the foot of the
19
+ * page rather than as the page ending. The centring is on the outer element, the cap on the inner.
20
+ *
21
+ * The ground is dark, and the ink is set once on the root and inherited by everything inside it. A
22
+ * link, a group label and a line of small print are one decision rather than three, which is the
23
+ * package's rule about a section that paints a ground — set the ground without the ink and the text
24
+ * keeps whatever the page was using and disappears.
25
+ *
26
+ * `nav` is a landmark rather than a div, and it is the part that carries the name. A page has two
27
+ * sets of destinations — the bar at the top and this — and a reader moving between landmarks is
28
+ * told which is which only if both are named. The name goes here rather than on the `<footer>`,
29
+ * which is already the contentinfo landmark and needs nothing said about it.
30
+ *
31
+ * `aside` sits outside that landmark deliberately. The rail holds an offer rather than a way
32
+ * onward, and announcing an app card as part of the navigation is telling a reader it is somewhere
33
+ * they can go.
34
+ *
35
+ * The columns are laid out by a `Grid` this renders, not by one the page supplies. The count is the
36
+ * footer's and arrives as `columns`; the arithmetic that turns a count into tracks which fold as the
37
+ * region narrows is Grid's, and reimplementing it here would be a second copy of a calculation that
38
+ * is hard to get right once. Composing it is how the family stays closed — `<Footer>` takes
39
+ * `FooterGroup`s and `Link`s directly, the way Table takes rows and Navbar takes items, rather than
40
+ * asking every caller to wrap them in something first.
41
+ *
42
+ * Every region is optional, the closing line included. It was required once, on the reading that a
43
+ * marketing page always carries a notice — true of most and not of all, and a required prop is the
44
+ * component insisting on a sentence it cannot write. Absence is the switch and an empty string is
45
+ * absence, which is what `given` is for.
46
+ */
47
+ export function Footer({ label, columns = footerDefaults.columns, copyright, brand, social, endorsement, aside, disclaimer, children, }) {
48
+ return (_jsx("footer", { className: footerParts.root, children: _jsxs("div", { className: footerParts.inner, children: [_jsxs("div", { className: footerParts.masthead, children: [brand ? _jsx("div", { className: footerParts.brand, children: brand }) : null, social ? _jsx("div", { className: footerParts.social, children: social }) : null, endorsement ? _jsx("div", { className: footerParts.endorsement, children: endorsement }) : null] }), _jsxs("div", { className: footerParts.body, children: [_jsx("nav", { className: footerParts.nav, "aria-label": label, children: _jsx(Grid, { columns: columns, min: "sm", align: "start", gap: "xl", children: Children.map(children, (child) => isValidElement(child) && child.type === Link
49
+ ? cloneElement(child, {
50
+ variant: child.props.variant ?? 'list',
51
+ })
52
+ : child) }) }), aside ? _jsx("div", { className: footerParts.aside, children: aside }) : null] }), _jsxs("div", { className: footerParts.bottom, children: [disclaimer ? _jsx("div", { className: footerParts.disclaimer, children: disclaimer }) : null, given(copyright) ? _jsx("p", { className: footerParts.copyright, children: copyright }) : null] })] }) }));
53
+ }
@@ -0,0 +1,47 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface FooterOwnProps {
3
+ /** Always — it names the navigation landmark, and a page with two unnamed ones tells a screen-reader user there is navigation in both places without saying how they differ. Name the set rather than the act: 'Footer', not 'Footer navigation' — the role already supplies the word, and a name carrying it is announced twice */
4
+ label: string;
5
+ /**
6
+ * `2` — A short footer, or one whose sets run long
7
+ * `3` — The middle case, and the one a site with a rail beside its columns often wants
8
+ * `4` — The default, and the widest the band goes. With the rail beside them that is five regions across
9
+ */
10
+ columns?: '2' | '3' | '4';
11
+ /** The line the band closes on, where the site carries one. Pass the sentence the site uses, the year included: this formats nothing and computes nothing.
12
+
13
+ Optional, which it did not used to be. The argument for requiring it was that a marketing page has one whether or not anyone remembered to pass it, and a footer that rendered without it looks finished while missing the one sentence it exists to carry. That holds for a page that has a notice to give — it does not hold for a site that puts its ownership somewhere else, and a required prop is the component insisting on a sentence it cannot write. */
14
+ copyright?: string;
15
+ /** The footer opens with the site's mark, which is the common case — usually the logo, often with a line about the company under it */
16
+ brand?: ReactNode;
17
+ /** The accounts the company keeps elsewhere, at the head of the band beside the mark. They are about the company rather than about the site, which is why they sit with the mark and not among the destinations */
18
+ social?: ReactNode;
19
+ /** A mark somebody else awarded — an accreditation, a standard the company holds. At the far end of the masthead, away from the company's own mark, because a badge beside a logo reads as part of the logo */
20
+ endorsement?: ReactNode;
21
+ /** The rail beside the destinations: the app cards, a download, a partner mark. The one part of the band that is an offer rather than a way onward, which is why it is kept out of the columns instead of being a set among them */
22
+ aside?: ReactNode;
23
+ /** The site is obliged to carry regulatory or legal wording — the risk warning, the licensing statement, the entity that holds the licence. Passed as nodes rather than a string because it runs to paragraphs and usually carries links */
24
+ disclaimer?: ReactNode;
25
+ /** Allowed: FooterGroup, Stack, Link */
26
+ children: ReactNode;
27
+ }
28
+ export type FooterProps = FooterOwnProps;
29
+ /** The class each part carries. Apply these — do not retype them. */
30
+ export declare const footerParts: {
31
+ readonly root: "dds-footer";
32
+ readonly inner: "dds-footer__inner";
33
+ readonly masthead: "dds-footer__masthead";
34
+ readonly brand: "dds-footer__brand";
35
+ readonly social: "dds-footer__social";
36
+ readonly endorsement: "dds-footer__endorsement";
37
+ readonly body: "dds-footer__body";
38
+ readonly nav: "dds-footer__nav";
39
+ readonly aside: "dds-footer__aside";
40
+ readonly bottom: "dds-footer__bottom";
41
+ readonly disclaimer: "dds-footer__disclaimer";
42
+ readonly copyright: "dds-footer__copyright";
43
+ };
44
+ /** Generated so defaults cannot drift from the contract. */
45
+ export declare const footerDefaults: {
46
+ readonly columns: "4";
47
+ };
@@ -0,0 +1,18 @@
1
+ // GENERATED from footer.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const footerParts = {
4
+ root: 'dds-footer',
5
+ inner: 'dds-footer__inner',
6
+ masthead: 'dds-footer__masthead',
7
+ brand: 'dds-footer__brand',
8
+ social: 'dds-footer__social',
9
+ endorsement: 'dds-footer__endorsement',
10
+ body: 'dds-footer__body',
11
+ nav: 'dds-footer__nav',
12
+ aside: 'dds-footer__aside',
13
+ bottom: 'dds-footer__bottom',
14
+ disclaimer: 'dds-footer__disclaimer',
15
+ copyright: 'dds-footer__copyright',
16
+ };
17
+ /** Generated so defaults cannot drift from the contract. */
18
+ export const footerDefaults = { columns: '4' };
@@ -0,0 +1,218 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * `:where([data-dds-context="marketing"])` confines these rules without contributing specificity,
5
+ * so each is decided against the generated rule on its own terms.
6
+ */
7
+
8
+ @container (min-width: 48rem) {
9
+ /*
10
+ * Wide enough for rows.
11
+ *
12
+ * The band declares `container-type`, so this asks the footer's own width rather than the
13
+ * window's — a footer placed in a narrow region of a wide page stays stacked, which a media
14
+ * query could not tell. `48rem` longhand because `var()` is not allowed in a container query
15
+ * condition, and it is the same width the groups stop collapsing at: one fold for the whole
16
+ * band rather than two that can drift apart.
17
+ *
18
+ * Written a class deeper than they look, which is what bottom-sheet-impl.css does and for the
19
+ * same reason: three classes against the generated rules' two, so these win on weight rather
20
+ * than on which sheet the bundler happened to write last. The extra class is `inner`, which is
21
+ * genuinely the parent of both — it narrows nothing and selects nothing new.
22
+ *
23
+ * An attribute would have been shorter and was wrong: `columns` is a prop the footer hands to
24
+ * Grid, not a styling axis, so no `data-columns` reaches the root and a selector naming one
25
+ * matches nothing at all.
26
+ */
27
+ /*
28
+ * Three cells, and the middle one is centred on the band.
29
+ *
30
+ * `space-between` was the first answer and only looks centred when the two outer regions happen
31
+ * to be the same width. They are not: a wordmark is fifty-nine pixels and the badge beside it is
32
+ * a card, so the marks sat left of centre by half the difference — off by enough to read as a
33
+ * mistake and not by enough to read as a decision.
34
+ *
35
+ * `1fr auto 1fr` makes the outer cells equal whatever is in them, so the middle is centred on the
36
+ * band rather than on the space the other two leave. Each region names its own column, which is
37
+ * what keeps it true when one of them is absent — both ends are optional, and with auto-placement
38
+ * a missing mark would slide the social row into the first cell.
39
+ */
40
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__masthead {
41
+ align-items: center;
42
+ display: grid;
43
+ grid-template-columns: 1fr auto 1fr;
44
+ }
45
+
46
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__brand {
47
+ grid-column: 1;
48
+ justify-self: start;
49
+ }
50
+
51
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__social {
52
+ grid-column: 2;
53
+ justify-self: center;
54
+ }
55
+
56
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__endorsement {
57
+ grid-column: 3;
58
+ justify-self: end;
59
+ }
60
+
61
+ /*
62
+ * Five equal cells, four for the sets and one for the rail.
63
+ *
64
+ * A flex row gave the rail whatever width it was told to take and let the sets divide the rest,
65
+ * so the band had two rhythms: link columns at 195 and a rail at 320. As a grid of `1fr` the
66
+ * fifth cell is the same width as the other four, and the only thing holding that true is that
67
+ * `body` steps by the same `space.gap.xl` the grid inside `nav` uses — at a narrower step the
68
+ * rail's cell comes out nine pixels wider than a column.
69
+ *
70
+ * `nav` spans the first four rather than the rail being placed last, because the rail is the
71
+ * optional one: with it absent the sets should still have the whole band, which a span gives and
72
+ * an explicit fifth column would not.
73
+ */
74
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__body {
75
+ align-items: start;
76
+ display: grid;
77
+ grid-template-columns: repeat(5, 1fr);
78
+ }
79
+
80
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__nav {
81
+ grid-column: span 4;
82
+ }
83
+
84
+ /*
85
+ * And the whole band when there is no rail.
86
+ *
87
+ * A span of four in a five-track grid leaves the fifth track sitting there at its equal share:
88
+ * with `aside` absent the sets took four fifths of the band and a fifth of it was nothing, plus
89
+ * the gap. The span was chosen precisely so the sets would spread — it does not, and the comment
90
+ * above claiming it did was wrong until this rule existed.
91
+ *
92
+ * `:not(:has())` asks the question the DOM can answer: this body, holding no rail.
93
+ */
94
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__inner .dds-footer__body:not(:has(.dds-footer__aside)) {
95
+ grid-template-columns: repeat(4, 1fr);
96
+ }
97
+ }
98
+
99
+ @container (max-width: 47.9375rem) {
100
+ /*
101
+ * The sets close up against each other once they are a single column.
102
+ *
103
+ * Stacked, each set is one row a reader scans down — and the grid's own step between groups is
104
+ * sized for the space beside a column, not the space under a row. Twenty-four of it beneath a
105
+ * thirty-six-pixel row put sixty pixels between one word and the next, which is six sets that no
106
+ * longer read as a list. Eight was the correction and went too far the other way, closing the
107
+ * rows up until the column read as one block; sixteen is the step between, and it is the same
108
+ * one the open list uses between its own destinations.
109
+ *
110
+ * This reaches into `.dds-grid`, which is a component styling another component's root, and it is
111
+ * the one rule here that should not have to exist. Grid takes a single `gap` that sets both axes,
112
+ * so a footer that wants columns held apart and rows held together has no prop to say it with.
113
+ * The proper fix is a `rowGap` on Grid; until that exists this is the honest version of the
114
+ * workaround, named rather than hidden behind a `> *` that would depend on the same thing while
115
+ * looking like it did not.
116
+ *
117
+ * `.dds-stack` for the same reason and the same cost. A column of this footer holds two or three
118
+ * sets grouped in a Stack — that is what the contract allows and what the real arrangement needs
119
+ * — and a Stack has one `gap` for an axis that only ever runs one way. Without this the sets
120
+ * inside a column kept twenty-four on a phone while the sets between columns took sixteen, which
121
+ * is one list at two rhythms.
122
+ */
123
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__nav .dds-grid,
124
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__nav .dds-stack {
125
+ /*
126
+ * One column, said rather than arrived at.
127
+ *
128
+ * The grid would drop to one on its own only if its track floor happened to be wider than half
129
+ * the screen, which is a layout holding because of a sum nobody wrote down — and it broke the
130
+ * moment the floor had to come down so four columns and the rail could fit at full width. A
131
+ * stacked band is one column because that is the design, not because of an inequality.
132
+ */
133
+ grid-template-columns: 1fr;
134
+ row-gap: var(--space-gap-md);
135
+ }
136
+ }
137
+
138
+ /*
139
+ * The marks in the social row rest a little back, and come forward under the pointer.
140
+ *
141
+ * Opacity rather than ink, which is the one case this package's own guidance does not cover: a
142
+ * quiet thing is supposed to say so in a colour role, and these cannot. A brand mark is somebody
143
+ * else's artwork with its own colours fixed into it — there is no ink to quieten — so the only
144
+ * lever left is how much of the band shows through it.
145
+ *
146
+ * Solid is written as `1` rather than a role. There is no `--opacity-100` custom property — only
147
+ * the semantic roles are emitted, and `opacity.100` is a primitive — so naming one would have been
148
+ * an undefined variable quietly falling back to the initial value, which is the same number by
149
+ * accident. One is the absence of transparency, the way `0` is the absence of a length.
150
+ *
151
+ * On the row's children rather than on the row, because what is hovered is one mark and not the
152
+ * set. They are nodes the page passes rather than parts this contract declares, which is why the
153
+ * rule reaches for `> *` instead of a class: whatever a page puts in this slot, the treatment is
154
+ * the slot's.
155
+ */
156
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__social > * {
157
+ opacity: var(--opacity-muted);
158
+ transition-property: opacity;
159
+ transition-duration: var(--motion-duration-fast);
160
+ transition-timing-function: var(--motion-easing-standard);
161
+ }
162
+
163
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__social > *:hover {
164
+ opacity: 1;
165
+ }
166
+
167
+ /*
168
+ * A touch screen reports a hover that never ends, so the last mark tapped would stay solid while
169
+ * the rest sat back — a row saying a reader is somewhere they left. Where there is no pointer the
170
+ * marks are simply all solid, which is the honest reading of a set nobody is pointing at.
171
+ */
172
+ @media (hover: none) {
173
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__social > * {
174
+ opacity: 1;
175
+ }
176
+ }
177
+
178
+ /* The transition above is hand-written, so the reduced-motion block the generated stylesheet
179
+ writes from its bindings does not cover it. A reader who asked for less movement asked for this
180
+ too — the opacity still changes, it simply arrives rather than travels. */
181
+ @media (prefers-reduced-motion: reduce) {
182
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__social > * {
183
+ transition: none;
184
+ }
185
+ }
186
+
187
+ /*
188
+ * A region with nothing in it takes no room.
189
+ *
190
+ * `masthead` and `bottom` are always in the markup, because every region inside them is optional
191
+ * and `presentWhen` names a single prop — the contract has no way to say "present when any of
192
+ * these", and an implementation that conditioned them anyway would be markup disagreeing with its
193
+ * own contract, which the generated behaviour test refuses outright.
194
+ *
195
+ * So the folding happens here. `:not(:has(*))` is "holds no element", which is exactly the case:
196
+ * both are containers of other parts and never of bare text. Left drawn, an empty `bottom` is the
197
+ * band's only hairline rule with nothing above or below it, and an empty `masthead` is the inner
198
+ * column's own step of air at the top of the band.
199
+ */
200
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__masthead:not(:has(*)),
201
+ :where([data-dds-context="marketing"]) .dds-footer .dds-footer__bottom:not(:has(*)) {
202
+ display: none;
203
+ }
204
+
205
+ /*
206
+ * A focus ring the band cannot show.
207
+ *
208
+ * Link draws its ring in `color.border.focus`, which is #0C0C0C — near-black, chosen against a
209
+ * white page. On this band that is 1.05:1, which is not a faint ring but no ring at all, and a
210
+ * keyboard reader loses their place the moment they enter the footer. FooterGroup's trigger binds
211
+ * the inverse role already; the destinations were reached through Link and so were missed.
212
+ *
213
+ * Here rather than in either contract because neither can say it: Link cannot know what it has
214
+ * been put on, and Footer cannot bind a property of a component it does not declare.
215
+ */
216
+ :where([data-dds-context="marketing"]) .dds-footer .dds-link:focus-visible {
217
+ outline-color: var(--color-border-focus-inverse);
218
+ }