@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,43 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface SubdomainNavbarOwnProps {
3
+ /**
4
+ * `default` — The subdomain's chrome is light, which is the page's decision rather than this bar's
5
+ * `inverse` — The subdomain's chrome is dark, which is the usual case for a tool and is why nearly every page using this bar will pass it. It is not the default all the same: a default is what the component does when nobody says, and a bar that painted itself black unasked would be a component with an opinion about a page it has not seen. The bar paints `color.bg.strong`, its ink runs light, and the destinations and the far end are told the same so nothing in the row is dressed twice
6
+ */
7
+ tone?: 'default' | 'inverse';
8
+ /** Always — it names the navigation landmark, and a page with an unnamed one tells a screen-reader user there is navigation here without saying which navigation. Name the set rather than the act: 'Main', not 'Main navigation' — the role already supplies the word, and a name carrying it is announced as 'main navigation navigation' */
9
+ label: string;
10
+ /** Always — the trigger is an icon-only button and this is the only name it has, at the width where it is the only way through the site. Name what it reveals rather than its state: 'Menu', not 'Open menu', because aria-expanded already says which way it is and a name that also said so would contradict itself every other press */
11
+ menuLabel: string;
12
+ /** Always — it names the panel's close button, which is the only visible way out of a surface covering the whole page. 'Close' is enough; the panel it closes is the only thing open */
13
+ closeLabel: string;
14
+ /** Effectively always on a real site — the mark, and usually an anchor to the home page wrapped around it. It is drawn twice: in the bar, and again in the panel's header, where it is the only thing left saying whose site this is */
15
+ brand?: ReactNode;
16
+ /** The bar's trailing end has something in it — a language switcher, a theme switcher, what the subdomain wants pressed, or some combination. All three sit together at the far end, which is the whole of the trailing group: this bar has no second home for what a reader sets, because it has no pill for them to live in the way the marketing bar does.
17
+
18
+ A switcher with a set of choices is a NavbarSwitcher, which the panel turns into a page of its own when the bar collapses. A switcher that draws a mark and no words is a DropdownMenu given a ButtonIcon as its `trigger` — DropdownMenu keeps the menu, the keys and the `aria-expanded`, and the ButtonIcon is what is drawn. A theme toggle that flips rather than opens is a ButtonIcon on its own. Both take `variant="plain"`, which gives up the edge so they sit beside the action without competing with it, and both are told the bar's tone. */
19
+ utilities?: ReactNode;
20
+ /** The page is holding whether the panel is open, because something else depends on it — a route change that should close it, a surface of its own that must not open at the same time. Passing it makes the bar controlled: it shows what it is told and reports presses through onMenuOpenChange.
21
+
22
+ Leave it off and the bar holds its own answer, which is the ordinary case: a narrow-width navigation panel is opened and closed by the reader and by nothing else */
23
+ menuOpen?: boolean;
24
+ /** Whenever menuOpen is — together they are how a page holds the panel. It is called with the state being moved to, by the trigger, by the close button and by Escape, so a page listening to it hears every way the panel can change */
25
+ onMenuOpenChange?: (open: boolean) => void;
26
+ /** Allowed: NavbarItem, NavbarMenu */
27
+ children: ReactNode;
28
+ }
29
+ export type SubdomainNavbarProps = SubdomainNavbarOwnProps;
30
+ /** The class each part carries. Apply these — do not retype them. */
31
+ export declare const subdomainNavbarParts: {
32
+ readonly root: "dds-subdomainnavbar";
33
+ readonly inner: "dds-subdomainnavbar__inner";
34
+ readonly brand: "dds-subdomainnavbar__brand";
35
+ readonly nav: "dds-subdomainnavbar__nav";
36
+ readonly utilities: "dds-subdomainnavbar__utilities";
37
+ readonly trigger: "dds-subdomainnavbar__trigger";
38
+ readonly 'panel-host': "dds-subdomainnavbar__panel-host";
39
+ };
40
+ /** Generated so defaults cannot drift from the contract. */
41
+ export declare const subdomainNavbarDefaults: {
42
+ readonly tone: "default";
43
+ };
@@ -0,0 +1,13 @@
1
+ // GENERATED from subdomain-navbar.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const subdomainNavbarParts = {
4
+ root: 'dds-subdomainnavbar',
5
+ inner: 'dds-subdomainnavbar__inner',
6
+ brand: 'dds-subdomainnavbar__brand',
7
+ nav: 'dds-subdomainnavbar__nav',
8
+ utilities: 'dds-subdomainnavbar__utilities',
9
+ trigger: 'dds-subdomainnavbar__trigger',
10
+ 'panel-host': 'dds-subdomainnavbar__panel-host',
11
+ };
12
+ /** Generated so defaults cannot drift from the contract. */
13
+ export const subdomainNavbarDefaults = { tone: 'default' };
@@ -0,0 +1,147 @@
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 every override below still ties or beats exactly what it did before.
6
+ */
7
+
8
+ /* Implementation CSS that the contract's staticCss cannot express. */
9
+
10
+ /*
11
+ * Above the page it sticks over, which a contract cannot hold: an integer with no unit.
12
+ *
13
+ * `position: sticky` alone is not enough, and the way it fails is quiet. A sticky box at
14
+ * `z-index: auto` paints above the in-flow content it passes and below the first positioned
15
+ * element further down the document — so this looks correct until a page puts a positioned section
16
+ * under it, which then paints straight through the bar.
17
+ *
18
+ * `layer.popup` rather than a number: the role for what floats over what the page lays out. It sits
19
+ * below anything that interrupts the reader, so the panel at `layer.overlay` still covers the bar
20
+ * it came out of.
21
+ */
22
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar {
23
+ z-index: var(--layer-popup);
24
+ }
25
+
26
+ /*
27
+ * The mark holds one end; everything else holds the other.
28
+ *
29
+ * The row is `flex-start`, and the auto margin is on the destinations rather than on the far end —
30
+ * so the two travel together at the trailing edge with the row's own gap between them, and the gap
31
+ * left in the middle is what says they are two groups rather than one long row.
32
+ *
33
+ * On the destinations and not on the utilities, which was the first arrangement and put the
34
+ * destinations against the mark. Either one produces a bar; they say different things about what
35
+ * the bar is for.
36
+ *
37
+ * `space-between` would do it with two children and stops working with three — the destinations
38
+ * would land in the middle of the bar, which is the marketing arrangement and the one thing this
39
+ * component exists not to be.
40
+ *
41
+ * Not expressible in the contract: `auto` means "whatever is left", which is a different kind of
42
+ * value from every step on the spacing ramp.
43
+ */
44
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__nav {
45
+ margin-inline-start: auto;
46
+ }
47
+
48
+ /*
49
+ * Which regions are drawn, and the one size query in this component.
50
+ *
51
+ * What changes at the threshold is not how big a thing is but which things exist — the destinations
52
+ * and the far end become a panel — and no token can say "this element is not drawn". A contract
53
+ * cannot say it either: `presentWhen` names a prop and a width is not one, and gating the parts on
54
+ * a width measured in script would mean a bar that renders one arrangement on the server and
55
+ * another on the client.
56
+ *
57
+ * `@container` rather than `@media`, and the difference is not a refinement. What decides whether
58
+ * the destinations fit is the room the bar has, which is the window's width only where the bar is
59
+ * full-bleed. A media query is right about the page and wrong about the component, and it is wrong
60
+ * silently — a bar in a column gets the collapsed arrangement at every size.
61
+ *
62
+ * In rem rather than px: a threshold in rem answers to the reader's own root size, so a bar gives
63
+ * way when its destinations actually stop fitting rather than at a width chosen for 16px text. It
64
+ * duplicates VIEWPORT_BREAKPOINT in src/tokens/emit-css.ts, which is worth flagging rather than
65
+ * hiding — CSS does not accept `var()` in a query prelude, so no token can be used here.
66
+ *
67
+ * `64rem`, matching the marketing bar. That one was moved up from 48 after a full row — a mark,
68
+ * five destinations, a switcher and two buttons — was found drawing over itself at around a
69
+ * thousand pixels. This bar holds the same kinds of things in the same quantity, so it would have
70
+ * met the same wall a little later; the two giving way at different widths would be a difference a
71
+ * reader moving between the sites has no way to explain.
72
+ *
73
+ * Narrow first, so the fallback where the query never matches is the arrangement that fits in less
74
+ * room.
75
+ */
76
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__nav,
77
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__utilities {
78
+ display: none;
79
+ }
80
+
81
+ @container (min-width: 64rem) {
82
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__nav,
83
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__utilities {
84
+ display: flex;
85
+ }
86
+
87
+ /*
88
+ * The control the bar keeps only while it is collapsed. It opens the panel holding what the other
89
+ * two regions were showing, and has nothing to answer for once both are drawn in full.
90
+ */
91
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__trigger {
92
+ display: none;
93
+ }
94
+
95
+ /*
96
+ * And the panel cannot be open at a width with nowhere to put it. A reader who opens it on a
97
+ * phone and then rotates would otherwise be left under a surface covering the page with the bar
98
+ * behind it already showing every destination that surface was drawn to offer.
99
+ *
100
+ * On the host, which is `display: contents` — a place in the tree rather than a box. `display:
101
+ * none` on a box that has none is still what takes its subtree off the page.
102
+ */
103
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__panel-host {
104
+ display: none;
105
+ }
106
+ }
107
+
108
+ /*
109
+ * The trigger sits at the end while it is the only thing there.
110
+ *
111
+ * Collapsed, the row holds the mark and this. The mark is at the leading edge and the auto margin
112
+ * that puts the utilities at the trailing one is on a box that is not drawn — so without this the
113
+ * control sits against the mark instead of opposite it.
114
+ */
115
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__trigger {
116
+ margin-inline-start: auto;
117
+ }
118
+
119
+ @container (min-width: 64rem) {
120
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__trigger {
121
+ margin-inline-start: 0;
122
+ }
123
+ }
124
+
125
+ /*
126
+ * Whatever the slot was given fills the height the bar set, and keeps its own shape doing it.
127
+ *
128
+ * The height is bound on the part, and the part is a wrapper — so alone it would constrain a box
129
+ * around a mark that went on drawing itself at whatever size it arrived at. Quill's marks carry
130
+ * `width` and `height` attributes, and a presentation attribute is exactly what a CSS declaration
131
+ * outranks.
132
+ *
133
+ * Two levels, because the shape the guidance describes is an anchor around a logo and a word. A
134
+ * link is `display: inline`, where `block-size` does not apply at all, so the wrapper is made a
135
+ * flex box and the mark inside it takes the measure. Navbar records the same finding.
136
+ */
137
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__brand > * {
138
+ align-items: center;
139
+ block-size: 100%;
140
+ display: flex;
141
+ inline-size: auto;
142
+ }
143
+
144
+ :where([data-dds-context="marketing"]) .dds-subdomainnavbar .dds-subdomainnavbar__brand > * > * {
145
+ block-size: 100%;
146
+ inline-size: auto;
147
+ }
@@ -0,0 +1,113 @@
1
+ /* GENERATED from tab.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-tab {
4
+ transition-property: outline-color, outline-width;
5
+ align-items: stretch;
6
+ appearance: none;
7
+ background-color: transparent;
8
+ border-style: none;
9
+ box-sizing: border-box;
10
+ cursor: pointer;
11
+ display: inline-flex;
12
+ flex-direction: column;
13
+ outline-style: solid;
14
+ padding: 0;
15
+ text-decoration: none;
16
+ white-space: nowrap;
17
+ outline-width: var(--border-width-none);
18
+ transition-duration: var(--motion-duration-fast);
19
+ transition-timing-function: var(--motion-easing-standard);
20
+ }
21
+
22
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__surface {
23
+ transition-property: background-color;
24
+ display: flex;
25
+ flex-direction: column;
26
+ block-size: var(--size-control-md);
27
+ border-radius: var(--radius-control-md);
28
+ padding-inline: var(--space-inset-md);
29
+ transition-duration: var(--motion-duration-fast);
30
+ transition-timing-function: var(--motion-easing-standard);
31
+ }
32
+
33
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__content {
34
+ align-items: center;
35
+ display: flex;
36
+ flex: auto;
37
+ justify-content: center;
38
+ gap: var(--space-gap-xs);
39
+ }
40
+
41
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__icon {
42
+ transition-property: color;
43
+ align-items: center;
44
+ display: flex;
45
+ flex: none;
46
+ }
47
+
48
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__sizer {
49
+ block-size: 0;
50
+ display: block;
51
+ overflow: hidden;
52
+ pointer-events: none;
53
+ visibility: hidden;
54
+ font-weight: var(--font-label-md-weight);
55
+ }
56
+
57
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__trailing-icon {
58
+ transition-property: color;
59
+ align-items: center;
60
+ display: flex;
61
+ flex: none;
62
+ }
63
+
64
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__label {
65
+ transition-property: color, font-weight;
66
+ font-family: var(--font-label-md-family);
67
+ font-size: var(--font-label-md-size);
68
+ letter-spacing: var(--font-label-md-letter-spacing);
69
+ line-height: var(--font-label-md-line-height);
70
+ transition-duration: var(--motion-duration-fast);
71
+ transition-timing-function: var(--motion-easing-standard);
72
+ }
73
+
74
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__surface:hover:where(:not(:has(.dds-tab:disabled))) {
75
+ background-color: var(--color-bg-hover);
76
+ }
77
+
78
+ :where([data-dds-context="marketing"]) .dds-tab:focus-visible {
79
+ outline-color: var(--color-border-focus);
80
+ outline-width: var(--border-width-focus);
81
+ }
82
+
83
+ :where([data-dds-context="marketing"]) .dds-tab[data-selected="false"] .dds-tab__icon {
84
+ color: var(--color-fg-muted);
85
+ }
86
+
87
+ :where([data-dds-context="marketing"]) .dds-tab[data-selected="false"] .dds-tab__label {
88
+ color: var(--color-fg-muted);
89
+ font-weight: var(--font-body-md-weight);
90
+ }
91
+
92
+ :where([data-dds-context="marketing"]) .dds-tab[data-selected="false"] .dds-tab__trailing-icon {
93
+ color: var(--color-fg-muted);
94
+ }
95
+
96
+ :where([data-dds-context="marketing"]) .dds-tab[data-selected="true"] .dds-tab__icon {
97
+ color: var(--color-fg-default);
98
+ }
99
+
100
+ :where([data-dds-context="marketing"]) .dds-tab[data-selected="true"] .dds-tab__label {
101
+ color: var(--color-fg-default);
102
+ font-weight: var(--font-label-md-weight);
103
+ }
104
+
105
+ :where([data-dds-context="marketing"]) .dds-tab[data-selected="true"] .dds-tab__trailing-icon {
106
+ color: var(--color-fg-default);
107
+ }
108
+
109
+ @media (prefers-reduced-motion: reduce) {
110
+ :where([data-dds-context="marketing"]) .dds-tab,
111
+ :where([data-dds-context="marketing"]) .dds-tab * { transition: none; }
112
+ }
113
+
@@ -0,0 +1,36 @@
1
+ import './Tab.css';
2
+ import './tab-impl.css';
3
+ import { type TabProps } from './Tab.types.js';
4
+ export type { TabProps };
5
+ /**
6
+ * A pill with the words in it, and the strip's bar underneath.
7
+ *
8
+ * Built as Product's Tab is built, deliberately: a column whose surface is the
9
+ * pill the pointer lands on, and whose content is the row the strip measures its
10
+ * bar against. Only the values are Marketing's — and there is one size rather
11
+ * than three, so nothing here picks a height or a radius.
12
+ *
13
+ * `type="button"`, set here rather than left to the browser. A bare button inside
14
+ * a form submits it, and a comparison strip inside a signup form is an ordinary
15
+ * place for this to be.
16
+ *
17
+ * Not an anchor, which is the whole difference from Product's. Pressing this
18
+ * changes which slice of the page is showing; there is no route behind it, so an
19
+ * anchor would offer a destination in the status bar and open a duplicate of the
20
+ * page already open.
21
+ *
22
+ * `selected` arrives from TabList. A tab cannot see its siblings, so a set each
23
+ * holding their own answer would show every one of them as current.
24
+ *
25
+ * `aria-current="true"` rather than `aria-pressed`. This is not a toggle the
26
+ * reader turns on and off; it is the one of a set they are looking at.
27
+ *
28
+ * The trailing slot follows Product's: `content` names what is in it rather than
29
+ * the component inferring it from which node arrived. One thing at most, and a
30
+ * node left behind after a switch renders nothing instead of doubling the mark.
31
+ *
32
+ * The badge inside it is rendered bare, again as Product's is. It arrives as a
33
+ * complete box that paints and sizes itself, so a wrapper would be a part the
34
+ * stylesheet never had a reason to name — the content row's own gap places it.
35
+ */
36
+ export declare function Tab({ selected, onSelect, value, label, icon, content, badge, trailingIcon, onClick, ...rest }: TabProps): import("react").JSX.Element;
@@ -0,0 +1,53 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import './Tab.css';
4
+ import './tab-impl.css';
5
+ import { Icon } from '../icon/Icon.js';
6
+ import { tabDefaults, tabParts } from './Tab.types.js';
7
+ /**
8
+ * A pill with the words in it, and the strip's bar underneath.
9
+ *
10
+ * Built as Product's Tab is built, deliberately: a column whose surface is the
11
+ * pill the pointer lands on, and whose content is the row the strip measures its
12
+ * bar against. Only the values are Marketing's — and there is one size rather
13
+ * than three, so nothing here picks a height or a radius.
14
+ *
15
+ * `type="button"`, set here rather than left to the browser. A bare button inside
16
+ * a form submits it, and a comparison strip inside a signup form is an ordinary
17
+ * place for this to be.
18
+ *
19
+ * Not an anchor, which is the whole difference from Product's. Pressing this
20
+ * changes which slice of the page is showing; there is no route behind it, so an
21
+ * anchor would offer a destination in the status bar and open a duplicate of the
22
+ * page already open.
23
+ *
24
+ * `selected` arrives from TabList. A tab cannot see its siblings, so a set each
25
+ * holding their own answer would show every one of them as current.
26
+ *
27
+ * `aria-current="true"` rather than `aria-pressed`. This is not a toggle the
28
+ * reader turns on and off; it is the one of a set they are looking at.
29
+ *
30
+ * The trailing slot follows Product's: `content` names what is in it rather than
31
+ * the component inferring it from which node arrived. One thing at most, and a
32
+ * node left behind after a switch renders nothing instead of doubling the mark.
33
+ *
34
+ * The badge inside it is rendered bare, again as Product's is. It arrives as a
35
+ * complete box that paints and sizes itself, so a wrapper would be a part the
36
+ * stylesheet never had a reason to name — the content row's own gap places it.
37
+ */
38
+ export function Tab({ selected, onSelect, value, label, icon, content = tabDefaults.content, badge, trailingIcon, onClick, ...rest }) {
39
+ return (_jsx("button", { ...rest,
40
+ // Never a submit button. A tab inside a form would post it, which is a
41
+ // navigation the reader did not ask for and the one default worth overriding.
42
+ type: "button", className: tabParts.root, "data-selected": selected === true, "aria-current": selected === true ? 'true' : undefined,
43
+ /*
44
+ Both handlers, the consumer's first — the same chaining TabList does for
45
+ `onSelect`. A page's own `onClick` used to replace this one wholesale, so
46
+ a tab that logged its own press stopped telling the strip it had been
47
+ pressed and the selection silently stopped moving.
48
+ */
49
+ onClick: (event) => {
50
+ onClick?.(event);
51
+ onSelect?.(value);
52
+ }, children: _jsx("span", { className: tabParts.surface, children: _jsxs("span", { className: tabParts.content, children: [icon === undefined || icon === null ? null : (_jsx("span", { className: tabParts.icon, children: _jsx(Icon, { size: "sm", children: icon }) })), _jsxs("span", { className: tabParts.label, children: [label, _jsx("span", { className: tabParts.sizer, "aria-hidden": "true", children: label })] }), content === 'icon' && (_jsx("span", { className: tabParts['trailing-icon'], children: _jsx(Icon, { size: "sm", children: trailingIcon }) })), content === 'badge' && badge] }) }) }));
53
+ }
@@ -0,0 +1,42 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ export interface TabOwnProps {
3
+ /** Injected by TabList, which is the only thing that can know. A tab cannot see its siblings, so a set of tabs each deciding for itself would show every one of them selected — the same reason Accordion holds which row is open. Passing it directly is how a strip says which tab it opens on */
4
+ selected?: boolean;
5
+ /** Learning which tab was pressed, when the page wants to know as well as the strip. TabList calls it after its own handler, so a page's handler is not replaced by being inside a set */
6
+ onSelect?: (value: string) => void;
7
+ /** Always — it is how the page says which slice to show. It is what reaches onSelect and what TabList compares its own value against, so it is required rather than defaulted: a tab identified by its position would renumber every time the set changes */
8
+ value: string;
9
+ /** Always — it is what the reader presses. One or two words, and a noun rather than an instruction: 'Yearly', not 'Switch to yearly'. A string rather than a node, for the reason CardBody's title is one — a node prop cannot be given text in an examples row */
10
+ label: string;
11
+ /** The tabs are things a mark tells apart faster than a word does — a platform, a market class. Pass the glyph; the tab draws it at its own step.
12
+
13
+ Solid when the tab is current and regular otherwise, which is the package's `icon-solid-marks-selection` rule. Nothing here can enforce it: a Quill glyph's weight is chosen at the import, so a page that wants the swap passes a different glyph per state */
14
+ icon?: ReactNode;
15
+ }
16
+ export type TabProps = TabOwnProps & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'selected' | 'onSelect' | 'value' | 'label' | 'icon' | 'badge' | 'content' | 'trailingIcon'> & ({
17
+ content?: 'none' | 'icon' | 'badge';
18
+ trailingIcon: ReactNode;
19
+ } | {
20
+ content?: Exclude<'none' | 'icon' | 'badge', 'icon'>;
21
+ trailingIcon?: ReactNode;
22
+ }) & ({
23
+ content?: 'none' | 'icon' | 'badge';
24
+ badge: ReactNode;
25
+ } | {
26
+ content?: Exclude<'none' | 'icon' | 'badge', 'badge'>;
27
+ badge?: ReactNode;
28
+ });
29
+ /** The class each part carries. Apply these — do not retype them. */
30
+ export declare const tabParts: {
31
+ readonly root: "dds-tab";
32
+ readonly surface: "dds-tab__surface";
33
+ readonly content: "dds-tab__content";
34
+ readonly icon: "dds-tab__icon";
35
+ readonly label: "dds-tab__label";
36
+ readonly sizer: "dds-tab__sizer";
37
+ readonly 'trailing-icon': "dds-tab__trailing-icon";
38
+ };
39
+ /** Generated so defaults cannot drift from the contract. */
40
+ export declare const tabDefaults: {
41
+ readonly content: "none";
42
+ };
@@ -0,0 +1,13 @@
1
+ // GENERATED from tab.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const tabParts = {
4
+ root: 'dds-tab',
5
+ surface: 'dds-tab__surface',
6
+ content: 'dds-tab__content',
7
+ icon: 'dds-tab__icon',
8
+ label: 'dds-tab__label',
9
+ sizer: 'dds-tab__sizer',
10
+ 'trailing-icon': 'dds-tab__trailing-icon',
11
+ };
12
+ /** Generated so defaults cannot drift from the contract. */
13
+ export const tabDefaults = { content: 'none' };
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * `:where([data-dds-context="marketing"])` confines these rules without contributing
5
+ * specificity, so every override below still ties or beats exactly what it did
6
+ * before — several here are written a class deeper than they look in order to
7
+ * match generated CSS, and a scope that carried weight would break all of them.
8
+ */
9
+
10
+ /* Implementation CSS that the contract's staticCss cannot express. */
11
+
12
+ /*
13
+ * The pointer belongs to the tab, not to what is drawn inside it.
14
+ *
15
+ * A glyph and a label are both hit targets of their own as far as pointer events are
16
+ * concerned, and a click landing on the label reports the label as its target. The tab is
17
+ * one control and its parts are not, so saying so is cheaper than the bug that finds it
18
+ * later.
19
+ *
20
+ * The surface is deliberately absent from this list. Its ground is bound on `:hover`, and a
21
+ * box that refuses the pointer is never hovered — which would make the tint dead CSS. Its
22
+ * children being inert is what keeps the pointer over the label reporting the surface
23
+ * underneath it.
24
+ */
25
+ :where([data-dds-context="marketing"]) .dds-tab__content,
26
+ :where([data-dds-context="marketing"]) .dds-tab__icon,
27
+ :where([data-dds-context="marketing"]) .dds-tab__label {
28
+ pointer-events: none;
29
+ }
30
+
31
+ /*
32
+ * The label fades its colour and does not animate its weight.
33
+ *
34
+ * The generated `transition-property` lists everything that varies, and weight varies by
35
+ * selection — so with a duration bound on this part, weight would animate too. The face
36
+ * ships as separate cuts rather than a variable one, so an interpolated weight lands
37
+ * between two of them and snaps anyway; and it is the property that changes the label's
38
+ * width, so animating it drags the tab's neighbours along for a tenth of a second.
39
+ *
40
+ * Written here because the list is computed: a contract can say how long a change takes and
41
+ * on what curve, and cannot say which of the changes it applies to.
42
+ *
43
+ * Two classes deep to match what it overrides. The generated rule is `.dds-tab
44
+ * .dds-tab__label`, so a bare `.dds-tab__label` would lose on specificity however late it
45
+ * loaded — which is the quiet way an override of generated CSS fails.
46
+ */
47
+ :where([data-dds-context="marketing"]) .dds-tab .dds-tab__label {
48
+ transition-property: color;
49
+ }
@@ -0,0 +1,40 @@
1
+ /* GENERATED from tablist.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-tablist {
4
+ align-items: stretch;
5
+ border-block-end-style: solid;
6
+ border-block-start-style: none;
7
+ border-inline-style: none;
8
+ box-sizing: border-box;
9
+ display: flex;
10
+ border-color: var(--color-border-subtle);
11
+ border-width: var(--border-width-default);
12
+ }
13
+
14
+ :where([data-dds-context="marketing"]) .dds-tablist .dds-tablist__list {
15
+ align-items: stretch;
16
+ display: flex;
17
+ flex: auto;
18
+ min-inline-size: 0;
19
+ overflow-x: auto;
20
+ position: relative;
21
+ padding-block-end: var(--border-width-thick);
22
+ }
23
+
24
+ :where([data-dds-context="marketing"]) .dds-tablist .dds-tablist__indicator {
25
+ inset-block-end: 0;
26
+ inset-inline-start: 0;
27
+ pointer-events: none;
28
+ position: absolute;
29
+ background-color: var(--color-bg-brand);
30
+ block-size: var(--border-width-thick);
31
+ border-radius: var(--radius-pill);
32
+ transition-duration: var(--motion-duration-normal);
33
+ transition-timing-function: var(--motion-easing-standard);
34
+ }
35
+
36
+ @media (prefers-reduced-motion: reduce) {
37
+ :where([data-dds-context="marketing"]) .dds-tablist,
38
+ :where([data-dds-context="marketing"]) .dds-tablist * { transition: none; }
39
+ }
40
+
@@ -0,0 +1,26 @@
1
+ import './TabList.css';
2
+ import './tab-list-impl.css';
3
+ import { type TabListProps } from './TabList.types.js';
4
+ export type { TabListProps };
5
+ /**
6
+ * A strip of comparable versions of one thing, and the two things that belong to
7
+ * the set rather than to any tab: which is current, and where the bar sits.
8
+ *
9
+ * Controlled, and only controlled. The strip holds no selection state because the
10
+ * choice is not its to hold — the page renders whichever slice matches, so the
11
+ * page is where the answer lives. A private copy would be a second source of
12
+ * truth for the same question, and the two would disagree the first time the page
13
+ * set it from anywhere else. Product's keeps an uncontrolled mode because an app
14
+ * tab strip often has nothing else holding the view; here there always is.
15
+ *
16
+ * A `value` naming no tab selects none of them. Falling back to the first would
17
+ * tell the reader they are looking at a version they did not ask for, while the
18
+ * page beneath showed something else.
19
+ *
20
+ * `role="group"` with a name. Not `role="tablist"` — that names a widget whose
21
+ * tabs own panels through `aria-controls`, and the panels here belong to the
22
+ * page, so it is a promise this component cannot keep. Not `role="navigation"`
23
+ * either: a landmark says the items go places, and these change what is showing
24
+ * on the page the reader is already on.
25
+ */
26
+ export declare function TabList({ label, value, onChange, children, ...rest }: TabListProps): import("react").JSX.Element;