@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,133 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from 'react';
4
+ import { CircleCheckSolidIcon, CircleExclamationSolidIcon, CircleInfoRegularIcon, TriangleExclamationSolidIcon, } from '@deriv-com/quill-icons-web';
5
+ import './TextArea.css';
6
+ import './text-area-impl.css';
7
+ import { Icon } from '../icon/Icon.js';
8
+ import { TooltipAnchor } from '../tooltip/TooltipAnchor.js';
9
+ import { given } from '../../given.js';
10
+ import { textAreaDefaults, textAreaParts } from './TextArea.types.js';
11
+ /**
12
+ * What each reported status looks like.
13
+ *
14
+ * Circle for error, triangle for warning: the two colours are close enough that a red-green
15
+ * deficiency can converge them, so the shape is what separates the pair at a glance.
16
+ *
17
+ * No entry for `pending`. Product turns a Spinner in this slot and marketing has none — which
18
+ * is why the contract refuses a pending status with no message: the words are the only thing
19
+ * left that can say a check is running.
20
+ */
21
+ const statusGlyph = {
22
+ error: _jsx(CircleExclamationSolidIcon, {}),
23
+ warning: _jsx(TriangleExclamationSolidIcon, {}),
24
+ success: _jsx(CircleCheckSolidIcon, {}),
25
+ };
26
+ /** The step the two marks this component draws itself take, against the text beside them. */
27
+ const fieldGlyphStep = { sm: 'xs', md: 'xs', lg: 'sm' };
28
+ /**
29
+ * How many lines the box is, given how much text is in it.
30
+ *
31
+ * Exported because it is the whole of the growing rule and it is worth testing without a DOM:
32
+ * never fewer than `rows`, never more than `maxRows`, and `maxRows` below `rows` is read as
33
+ * `rows` rather than inverting the two.
34
+ */
35
+ export function linesFor(content, line, rows, maxRows) {
36
+ return Math.min(Math.max(Math.ceil(content / line), rows), Math.max(maxRows, rows));
37
+ }
38
+ export function TextArea({ size = textAreaDefaults.size, status = textAreaDefaults.status, label, labelTooltip, placeholder, helperText, rows = textAreaDefaults.rows, maxRows = textAreaDefaults.maxRows, maxLength, statusMessage, required = textAreaDefaults.required, requiredMark = textAreaDefaults.requiredMark, optional = textAreaDefaults.optional, ...rest }) {
39
+ /**
40
+ * One id for the field, and one for whichever line is describing it.
41
+ *
42
+ * `useId` rather than a prop, because a marketing page renders the same form in a hero and
43
+ * again in the footer, and two fields sharing a `for` means clicking the second label
44
+ * focuses the first.
45
+ */
46
+ const base = useId();
47
+ const fieldId = `${base}-field`;
48
+ const field = useRef(null);
49
+ /**
50
+ * The height, and the count, both read off the element rather than mirrored into state.
51
+ *
52
+ * Product declares `value` and `defaultValue` as props and keeps a copy; this does not, so
53
+ * neither is declared here — both arrive through `TextareaHTMLAttributes` and belong to the
54
+ * element. Reading `element.value` is the one source that is right whether a consumer
55
+ * controls the field or leaves it to the DOM, and it cannot disagree with what was typed.
56
+ */
57
+ const [count, setCount] = useState(0);
58
+ const sync = useCallback(() => {
59
+ const element = field.current;
60
+ if (element === null)
61
+ return;
62
+ setCount((held) => (held === element.value.length ? held : element.value.length));
63
+ // Read from a computed style rather than a token: line-height varies by size, and the
64
+ // element already knows which size it is. A second copy of that mapping here would be a
65
+ // second place for it to be wrong.
66
+ const style = window.getComputedStyle(element);
67
+ const px = (measure) => {
68
+ const n = Number.parseFloat(measure);
69
+ return Number.isFinite(n) ? n : 0;
70
+ };
71
+ const line = Number.parseFloat(style.lineHeight);
72
+ if (!Number.isFinite(line))
73
+ return;
74
+ const inset = px(style.paddingBlockStart) +
75
+ px(style.paddingBlockEnd) +
76
+ px(style.borderBlockStartWidth) +
77
+ px(style.borderBlockEndWidth);
78
+ element.style.height = 'auto';
79
+ const lines = linesFor(element.scrollHeight - inset, line, rows, maxRows);
80
+ element.style.height = `${lines * line + inset}px`;
81
+ }, [rows, maxRows]);
82
+ // Mount, a size change, and a controlled consumer setting the value from outside.
83
+ useLayoutEffect(sync, [sync, rest.value, size]);
84
+ // And typing, which a controlled consumer's re-render covers but an uncontrolled one does
85
+ // not — the DOM holds the value there, so the element's own event is what says it moved.
86
+ useEffect(() => {
87
+ const element = field.current;
88
+ if (element === null)
89
+ return undefined;
90
+ element.addEventListener('input', sync);
91
+ return () => element.removeEventListener('input', sync);
92
+ }, [sync]);
93
+ // Width changes re-wrap the text, which changes how many lines it takes.
94
+ // Absent in jsdom, so nothing in this effect is exercised by a test in this repository.
95
+ useEffect(() => {
96
+ const element = field.current;
97
+ if (element === null || typeof ResizeObserver === 'undefined')
98
+ return undefined;
99
+ let width = element.clientWidth;
100
+ const observer = new ResizeObserver(() => {
101
+ if (element.clientWidth === width)
102
+ return;
103
+ width = element.clientWidth;
104
+ sync();
105
+ });
106
+ observer.observe(element);
107
+ return () => observer.disconnect();
108
+ }, [sync]);
109
+ /**
110
+ * The message replaces the helper rather than joining it, and the counter sits beside
111
+ * whichever is showing.
112
+ *
113
+ * Gated on the status rather than on the message existing: a form library may hold a message
114
+ * for a field that is not currently reporting anything, and rendering it then shows a verdict
115
+ * to people reading the form while nothing is announced to people hearing it.
116
+ */
117
+ const reporting = status !== 'none';
118
+ const showsMessage = reporting && given(statusMessage);
119
+ const showsHelper = given(helperText) && !reporting;
120
+ const counting = maxLength !== undefined;
121
+ const mark = status === 'error' || status === 'warning' || status === 'success';
122
+ const describedId = showsMessage ? `${base}-message` : showsHelper ? `${base}-helper` : undefined;
123
+ const counterId = `${base}-count`;
124
+ return (_jsxs("div", { className: textAreaParts.root, "data-size": size, "data-status": status, children: [_jsxs("div", { className: textAreaParts['label-row'], children: [_jsxs("label", { className: textAreaParts.label, htmlFor: fieldId, children: [label, required ? (_jsx("span", { className: textAreaParts['required-mark'], "aria-hidden": "true", children: requiredMark === 'asterisk' ? '*' : 'required' })) : null, optional ? _jsx("span", { className: textAreaParts['optional-mark'], children: "optional" }) : null] }), given(labelTooltip) ? (_jsx(TooltipAnchor, { content: labelTooltip, placement: "top", children: _jsx("button", { type: "button", className: textAreaParts['label-tooltip'], "aria-label": `About ${label}`, children: _jsx(Icon, { size: fieldGlyphStep[size], children: _jsx(CircleInfoRegularIcon, {}) }) }) })) : null] }), _jsx("div", { className: textAreaParts.control, children: _jsx("textarea", { ref: field, className: textAreaParts.field, id: fieldId, rows: rows, placeholder: placeholder, maxLength: maxLength, ...rest,
125
+ /* After the spread, which is the whole point of it being here. `wrap="hard"` inserts
126
+ real newlines into the submitted value wherever the text happened to wrap on
127
+ screen, so what a person wrote and what a server receives differ and nothing warns
128
+ anybody. This component reports what was typed and never rewrites it, and an
129
+ attribute that breaks that promise is refused where the promise lives. */
130
+ wrap: "soft", "aria-invalid": status === 'error' || undefined, "aria-required": required || undefined, "aria-busy": status === 'pending' || undefined, "aria-describedby": [describedId, counting ? counterId : undefined, rest['aria-describedby']]
131
+ .filter(Boolean)
132
+ .join(' ') || undefined }) }), showsHelper || showsMessage || counting ? (_jsxs("div", { className: textAreaParts.footer, children: [showsHelper ? (_jsx("span", { className: textAreaParts.helper, id: describedId, children: helperText })) : null, showsMessage ? (_jsxs("span", { className: textAreaParts.message, id: describedId, children: [mark ? (_jsx("span", { className: textAreaParts['message-icon'], children: _jsx(Icon, { size: "xs", children: statusGlyph[status] }) })) : null, statusMessage] })) : null, counting ? (_jsxs("span", { className: textAreaParts.counter, id: counterId, children: [count, "/", maxLength] })) : null] })) : null] }));
133
+ }
@@ -0,0 +1,67 @@
1
+ import type { TextareaHTMLAttributes } from 'react';
2
+ export interface TextAreaOwnProps {
3
+ /**
4
+ * `sm` — A note field in a dense form, where the box sits among other controls rather than being what the section is for. The height is unchanged — only the corner tightens
5
+ * `md` — The default, and nearly every form on a page — a contact form in a section, an enquiry beside the copy that prompted it
6
+ * `lg` — A form that is the reason the section exists, matched to the fields around it
7
+ */
8
+ size?: 'sm' | 'md' | 'lg';
9
+ /** Always — an input without a label is unusable by screen readers. A noun phrase naming the value, in sentence case: "Email address", not "Enter your email address" */
10
+ label: string;
11
+ /** A short explanation the label has no room for and the field does not always need on screen — why a description is asked for, what a reviewer will do with it, what counts as enough detail. Revealed on hover and on focus, so it costs no vertical space above a field that is already the tallest thing on the form */
12
+ labelTooltip?: string;
13
+ /** Showing an example of the value's shape, alongside helperText that states the rule */
14
+ placeholder?: string;
15
+ /** The user needs to know something before they type — a format, a limit, or why this is being asked */
16
+ helperText?: string;
17
+ /** The height the field starts at, in lines, which is also the shortest it ever gets. Three says a sentence or two is expected; ten asks for an essay before anybody has read the label, so the number is a statement about the answer wanted */
18
+ rows?: number;
19
+ /** Where the growing stops and the scrolling starts. Needed rather than optional: a field that grows without limit pushes whatever follows it off the screen, and a submit button nobody can reach is worse than a paragraph nobody can see all of. This and rows are the whole of the height decision, and it is made per placement rather than per person: a reply box a support agent lives in gets a larger number than a one-line-or-two field on a sign-up form. There is deliberately no prop offering the browser’s drag handle as an alternative. A handle is reachable by mouse and by nothing else, so choosing it for a placement hands touch and keyboard users a fixed box with no way past it — and whoever picked it, on a desktop, never feels that. A number here works for everyone */
20
+ maxRows?: number;
21
+ /** The most the field will accept, which also brings the count that shows it. Give it where the limit is real — a message a system will truncate, a field a database will refuse — and leave it out where prose is simply prose */
22
+ maxLength?: number;
23
+ /**
24
+ * `text` — Short forms, public ones, and anywhere the label row has room. The safer default: it needs nothing looked up, it still means something read out of context, and the asterisk convention is learned rather than obvious — which a sign-up or a verification flow cannot assume of everyone using it
25
+ * `asterisk` — Long or dense forms, where the word repeats down the page and one legend can say it once instead — and forms whose labels are too tight for a translated word, since "Required" becomes "Erforderlich" and an asterisk is the same width in every language. Only where a legend is visible from the fields it governs: across steps or a long scroll it is not, and the glyph then says nothing
26
+ */
27
+ requiredMark?: 'text' | 'asterisk';
28
+ }
29
+ export type TextAreaProps = TextAreaOwnProps & Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'className' | 'size' | 'status' | 'label' | 'labelTooltip' | 'placeholder' | 'helperText' | 'rows' | 'maxRows' | 'maxLength' | 'statusMessage' | 'required' | 'requiredMark' | 'optional'> & ({
30
+ required?: boolean;
31
+ optional?: false;
32
+ } | {
33
+ required?: false;
34
+ optional?: boolean;
35
+ }) & ({
36
+ status?: 'none' | 'error' | 'warning' | 'success' | 'pending';
37
+ statusMessage: string;
38
+ } | {
39
+ status?: Exclude<'none' | 'error' | 'warning' | 'success' | 'pending', 'error' | 'warning' | 'pending'>;
40
+ statusMessage?: string;
41
+ });
42
+ /** The class each part carries. Apply these — do not retype them. */
43
+ export declare const textAreaParts: {
44
+ readonly root: "dds-textarea";
45
+ readonly 'label-row': "dds-textarea__label-row";
46
+ readonly label: "dds-textarea__label";
47
+ readonly 'required-mark': "dds-textarea__required-mark";
48
+ readonly 'optional-mark': "dds-textarea__optional-mark";
49
+ readonly 'label-tooltip': "dds-textarea__label-tooltip";
50
+ readonly control: "dds-textarea__control";
51
+ readonly field: "dds-textarea__field";
52
+ readonly footer: "dds-textarea__footer";
53
+ readonly helper: "dds-textarea__helper";
54
+ readonly message: "dds-textarea__message";
55
+ readonly 'message-icon': "dds-textarea__message-icon";
56
+ readonly counter: "dds-textarea__counter";
57
+ };
58
+ /** Generated so defaults cannot drift from the contract. */
59
+ export declare const textAreaDefaults: {
60
+ readonly size: "md";
61
+ readonly status: "none";
62
+ readonly rows: 3;
63
+ readonly maxRows: 10;
64
+ readonly required: false;
65
+ readonly requiredMark: "text";
66
+ readonly optional: false;
67
+ };
@@ -0,0 +1,19 @@
1
+ // GENERATED from text-area.contract.json. Do not edit.
2
+ /** The class each part carries. Apply these — do not retype them. */
3
+ export const textAreaParts = {
4
+ root: 'dds-textarea',
5
+ 'label-row': 'dds-textarea__label-row',
6
+ label: 'dds-textarea__label',
7
+ 'required-mark': 'dds-textarea__required-mark',
8
+ 'optional-mark': 'dds-textarea__optional-mark',
9
+ 'label-tooltip': 'dds-textarea__label-tooltip',
10
+ control: 'dds-textarea__control',
11
+ field: 'dds-textarea__field',
12
+ footer: 'dds-textarea__footer',
13
+ helper: 'dds-textarea__helper',
14
+ message: 'dds-textarea__message',
15
+ 'message-icon': 'dds-textarea__message-icon',
16
+ counter: 'dds-textarea__counter',
17
+ };
18
+ /** Generated so defaults cannot drift from the contract. */
19
+ export const textAreaDefaults = { size: 'md', status: 'none', rows: 3, maxRows: 10, required: false, requiredMark: 'text', optional: false };
@@ -0,0 +1,36 @@
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 each still ties or beats exactly what it did before.
6
+ */
7
+
8
+ /*
9
+ * The box scrolls once it has stopped growing.
10
+ *
11
+ * Past `maxRows` the height is fixed by the component, and a textarea whose content exceeds its
12
+ * height with no overflow rule hides the end of what somebody just typed. Not a token: a
13
+ * keyword, and one that never varies by brand or mode.
14
+ */
15
+ :where([data-dds-context="marketing"]) .dds-textarea__field {
16
+ overflow-y: auto;
17
+ }
18
+
19
+ /*
20
+ * The status glyph's box is one line of the message tall.
21
+ *
22
+ * The contract binds the font size and the line height on this part, which is what makes it one
23
+ * line — but a line's height is those two multiplied, and a binding carries one token, not an
24
+ * expression over two. So the multiplication happens here, over the same variables the contract
25
+ * bound: no measure is declared, and retuning either token moves this with it.
26
+ *
27
+ * Why a height at all: aligned to the start of the block axis a glyph is as tall as itself, so
28
+ * its middle sits above the first line's and the words beside it read as pushed down. A box one
29
+ * line tall with the glyph centred in it puts the two middles on each other.
30
+ *
31
+ * One rule rather than one per size, because the message is font.body.sm at every step — the same
32
+ * answer, and the same argument, as text-input-impl.css.
33
+ */
34
+ :where([data-dds-context="marketing"]) .dds-textarea__message-icon {
35
+ block-size: calc(var(--font-body-sm-size) * var(--font-body-sm-line-height));
36
+ }
@@ -0,0 +1,400 @@
1
+ /* GENERATED from textinput.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-textinput {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--space-gap-xs);
7
+ }
8
+
9
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label-row {
10
+ align-items: center;
11
+ display: flex;
12
+ gap: var(--space-gap-xs);
13
+ }
14
+
15
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label {
16
+ transition-property: color;
17
+ align-items: center;
18
+ display: flex;
19
+ color: var(--color-fg-default);
20
+ gap: var(--space-gap-xs);
21
+ min-block-size: var(--size-target-min);
22
+ }
23
+
24
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label-tooltip {
25
+ transition-property: background-color, color, outline-color, outline-width;
26
+ align-items: center;
27
+ appearance: none;
28
+ background-color: transparent;
29
+ border-style: none;
30
+ cursor: pointer;
31
+ display: flex;
32
+ flex: none;
33
+ justify-content: center;
34
+ outline-style: solid;
35
+ padding: unset;
36
+ border-radius: var(--radius-pill);
37
+ color: var(--color-fg-muted);
38
+ min-block-size: var(--size-target-min);
39
+ min-inline-size: var(--size-target-min);
40
+ outline-width: var(--border-width-none);
41
+ transition-duration: var(--motion-duration-fast);
42
+ transition-timing-function: var(--motion-easing-standard);
43
+ }
44
+
45
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__control {
46
+ transition-property: background-color, border-color, box-shadow, opacity, outline-color, outline-width;
47
+ align-items: center;
48
+ border-style: solid;
49
+ box-sizing: border-box;
50
+ display: flex;
51
+ inline-size: 100%;
52
+ outline-style: solid;
53
+ background-color: var(--color-bg-field);
54
+ border-color: var(--color-border-default);
55
+ border-width: var(--border-width-default);
56
+ gap: var(--space-gap-sm);
57
+ outline-width: var(--border-width-none);
58
+ transition-duration: var(--motion-duration-fast);
59
+ transition-timing-function: var(--motion-easing-standard);
60
+ }
61
+
62
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__leading-icon {
63
+ align-items: center;
64
+ display: flex;
65
+ flex: none;
66
+ color: var(--color-fg-muted);
67
+ }
68
+
69
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__field {
70
+ background-color: transparent;
71
+ block-size: 100%;
72
+ border-style: none;
73
+ box-sizing: border-box;
74
+ flex: auto;
75
+ min-inline-size: 0;
76
+ outline-style: none;
77
+ padding: unset;
78
+ color: var(--color-fg-default);
79
+ }
80
+
81
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__clear {
82
+ transition-property: background-color, color, outline-color, outline-width;
83
+ align-items: center;
84
+ appearance: none;
85
+ background-color: transparent;
86
+ border-style: none;
87
+ cursor: pointer;
88
+ display: flex;
89
+ flex: none;
90
+ justify-content: center;
91
+ outline-style: solid;
92
+ padding: unset;
93
+ border-radius: var(--radius-pill);
94
+ color: var(--color-fg-muted);
95
+ min-block-size: var(--size-target-min);
96
+ min-inline-size: var(--size-target-min);
97
+ outline-width: var(--border-width-none);
98
+ transition-duration: var(--motion-duration-fast);
99
+ transition-timing-function: var(--motion-easing-standard);
100
+ }
101
+
102
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__trailing-icon {
103
+ align-items: center;
104
+ display: flex;
105
+ flex: none;
106
+ color: var(--color-fg-muted);
107
+ }
108
+
109
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__message {
110
+ transition-property: color;
111
+ align-items: flex-start;
112
+ display: flex;
113
+ overflow-wrap: anywhere;
114
+ color: var(--color-fg-muted);
115
+ font-family: var(--font-body-sm-family);
116
+ font-size: var(--font-body-sm-size);
117
+ font-weight: var(--font-body-sm-weight);
118
+ gap: var(--space-gap-xs);
119
+ letter-spacing: var(--font-body-sm-letter-spacing);
120
+ line-height: var(--font-body-sm-line-height);
121
+ }
122
+
123
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__message-icon {
124
+ align-items: center;
125
+ display: flex;
126
+ flex-shrink: 0;
127
+ font-size: var(--font-body-sm-size);
128
+ line-height: var(--font-body-sm-line-height);
129
+ }
130
+
131
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__field::placeholder {
132
+ color: var(--color-fg-tertiary);
133
+ }
134
+
135
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__helper {
136
+ transition-property: color;
137
+ color: var(--color-fg-muted);
138
+ font-family: var(--font-body-sm-family);
139
+ font-size: var(--font-body-sm-size);
140
+ font-weight: var(--font-body-sm-weight);
141
+ letter-spacing: var(--font-body-sm-letter-spacing);
142
+ line-height: var(--font-body-sm-line-height);
143
+ }
144
+
145
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__optional-mark {
146
+ transition-property: color;
147
+ color: var(--color-fg-muted);
148
+ font-family: var(--font-body-sm-family);
149
+ font-size: var(--font-body-sm-size);
150
+ font-weight: var(--font-body-sm-weight);
151
+ line-height: var(--font-body-sm-line-height);
152
+ }
153
+
154
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__prefix {
155
+ color: var(--color-fg-muted);
156
+ }
157
+
158
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__required-mark {
159
+ transition-property: color;
160
+ color: var(--color-fg-required);
161
+ }
162
+
163
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__suffix {
164
+ color: var(--color-fg-muted);
165
+ }
166
+
167
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__clear:hover:where(:not(:disabled)) {
168
+ background-color: var(--color-bg-hover);
169
+ color: var(--color-fg-default);
170
+ }
171
+
172
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__control:hover:where(:not(:has(.dds-textinput__field:disabled), :has(.dds-textinput__field[readonly]))) {
173
+ box-shadow: var(--elevation-ring-hover);
174
+ }
175
+
176
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label-tooltip:hover:where(:not(:disabled)) {
177
+ background-color: var(--color-bg-hover);
178
+ color: var(--color-fg-default);
179
+ }
180
+
181
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__clear:active {
182
+ background-color: var(--color-bg-active);
183
+ }
184
+
185
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label-tooltip:active {
186
+ background-color: var(--color-bg-active);
187
+ }
188
+
189
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__clear:focus-visible {
190
+ outline-color: var(--color-border-focus);
191
+ outline-width: var(--border-width-focus);
192
+ }
193
+
194
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label-tooltip:focus-visible {
195
+ outline-color: var(--color-border-focus);
196
+ outline-width: var(--border-width-focus);
197
+ }
198
+
199
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:focus-visible) .dds-textinput__control {
200
+ border-color: var(--color-border-focus);
201
+ outline-color: var(--color-border-focus);
202
+ outline-width: var(--border-width-hairline);
203
+ }
204
+
205
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field[readonly]) .dds-textinput__control {
206
+ background-color: var(--color-bg-readonly);
207
+ }
208
+
209
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:disabled:not(:where(:disabled *))) .dds-textinput__control {
210
+ opacity: var(--opacity-disabled);
211
+ }
212
+
213
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:disabled) .dds-textinput__helper {
214
+ color: var(--color-fg-disabled);
215
+ }
216
+
217
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:disabled) .dds-textinput__label {
218
+ color: var(--color-fg-disabled);
219
+ }
220
+
221
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:disabled) .dds-textinput__message {
222
+ color: var(--color-fg-disabled);
223
+ }
224
+
225
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:disabled) .dds-textinput__optional-mark {
226
+ color: var(--color-fg-disabled);
227
+ }
228
+
229
+ :where([data-dds-context="marketing"]) .dds-textinput:has(.dds-textinput__field:disabled) .dds-textinput__required-mark {
230
+ color: var(--color-fg-disabled);
231
+ }
232
+
233
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="lg"] .dds-textinput__control {
234
+ block-size: var(--size-control-lg);
235
+ border-radius: var(--radius-control-lg);
236
+ padding-inline: var(--space-inset-md);
237
+ }
238
+
239
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="lg"] .dds-textinput__field {
240
+ font-family: var(--font-body-lg-family);
241
+ font-size: var(--font-body-lg-size);
242
+ font-weight: var(--font-body-lg-weight);
243
+ letter-spacing: var(--font-body-lg-letter-spacing);
244
+ line-height: var(--font-body-lg-line-height);
245
+ }
246
+
247
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="lg"] .dds-textinput__label {
248
+ font-family: var(--font-field-label-lg-family);
249
+ font-size: var(--font-field-label-lg-size);
250
+ font-weight: var(--font-field-label-lg-weight);
251
+ letter-spacing: var(--font-field-label-lg-letter-spacing);
252
+ line-height: var(--font-field-label-lg-line-height);
253
+ }
254
+
255
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="lg"] .dds-textinput__prefix {
256
+ font-family: var(--font-body-lg-family);
257
+ font-size: var(--font-body-lg-size);
258
+ font-weight: var(--font-body-lg-weight);
259
+ line-height: var(--font-body-lg-line-height);
260
+ }
261
+
262
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="lg"] .dds-textinput__suffix {
263
+ font-family: var(--font-body-lg-family);
264
+ font-size: var(--font-body-lg-size);
265
+ font-weight: var(--font-body-lg-weight);
266
+ line-height: var(--font-body-lg-line-height);
267
+ }
268
+
269
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="md"] .dds-textinput__control {
270
+ block-size: var(--size-control-md);
271
+ border-radius: var(--radius-control-md);
272
+ padding-inline: var(--space-inset-sm);
273
+ }
274
+
275
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="md"] .dds-textinput__field {
276
+ font-family: var(--font-body-md-family);
277
+ font-size: var(--font-body-md-size);
278
+ font-weight: var(--font-body-md-weight);
279
+ letter-spacing: var(--font-body-md-letter-spacing);
280
+ line-height: var(--font-body-md-line-height);
281
+ }
282
+
283
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="md"] .dds-textinput__label {
284
+ font-family: var(--font-field-label-md-family);
285
+ font-size: var(--font-field-label-md-size);
286
+ font-weight: var(--font-field-label-md-weight);
287
+ letter-spacing: var(--font-field-label-md-letter-spacing);
288
+ line-height: var(--font-field-label-md-line-height);
289
+ }
290
+
291
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="md"] .dds-textinput__prefix {
292
+ font-family: var(--font-body-md-family);
293
+ font-size: var(--font-body-md-size);
294
+ font-weight: var(--font-body-md-weight);
295
+ line-height: var(--font-body-md-line-height);
296
+ }
297
+
298
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="md"] .dds-textinput__suffix {
299
+ font-family: var(--font-body-md-family);
300
+ font-size: var(--font-body-md-size);
301
+ font-weight: var(--font-body-md-weight);
302
+ line-height: var(--font-body-md-line-height);
303
+ }
304
+
305
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="sm"] .dds-textinput__control {
306
+ block-size: var(--size-control-sm);
307
+ border-radius: var(--radius-control-sm);
308
+ padding-inline: var(--space-inset-sm);
309
+ }
310
+
311
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="sm"] .dds-textinput__field {
312
+ font-family: var(--font-body-md-family);
313
+ font-size: var(--font-body-md-size);
314
+ font-weight: var(--font-body-md-weight);
315
+ letter-spacing: var(--font-body-md-letter-spacing);
316
+ line-height: var(--font-body-md-line-height);
317
+ }
318
+
319
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="sm"] .dds-textinput__label {
320
+ font-family: var(--font-field-label-md-family);
321
+ font-size: var(--font-field-label-md-size);
322
+ font-weight: var(--font-field-label-md-weight);
323
+ letter-spacing: var(--font-field-label-md-letter-spacing);
324
+ line-height: var(--font-field-label-md-line-height);
325
+ }
326
+
327
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="sm"] .dds-textinput__prefix {
328
+ font-family: var(--font-body-md-family);
329
+ font-size: var(--font-body-md-size);
330
+ font-weight: var(--font-body-md-weight);
331
+ line-height: var(--font-body-md-line-height);
332
+ }
333
+
334
+ :where([data-dds-context="marketing"]) .dds-textinput[data-size="sm"] .dds-textinput__suffix {
335
+ font-family: var(--font-body-md-family);
336
+ font-size: var(--font-body-md-size);
337
+ font-weight: var(--font-body-md-weight);
338
+ line-height: var(--font-body-md-line-height);
339
+ }
340
+
341
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="error"] .dds-textinput__control {
342
+ border-color: var(--color-border-danger);
343
+ }
344
+
345
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="error"] .dds-textinput__message {
346
+ color: var(--color-fg-danger);
347
+ }
348
+
349
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="pending"] .dds-textinput__message {
350
+ color: var(--color-fg-muted);
351
+ }
352
+
353
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="success"] .dds-textinput__control {
354
+ border-color: var(--color-border-success);
355
+ }
356
+
357
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="success"] .dds-textinput__message {
358
+ color: var(--color-fg-success);
359
+ }
360
+
361
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="warning"] .dds-textinput__control {
362
+ border-color: var(--color-border-warning);
363
+ }
364
+
365
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="warning"] .dds-textinput__message {
366
+ color: var(--color-fg-warning);
367
+ }
368
+
369
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="error"]:has(.dds-textinput__field:focus-visible) .dds-textinput__control {
370
+ border-color: var(--color-border-danger);
371
+ outline-color: var(--color-border-danger);
372
+ }
373
+
374
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="success"]:has(.dds-textinput__field:focus-visible) .dds-textinput__control {
375
+ border-color: var(--color-border-success);
376
+ outline-color: var(--color-border-success);
377
+ }
378
+
379
+ :where([data-dds-context="marketing"]) .dds-textinput[data-status="warning"]:has(.dds-textinput__field:focus-visible) .dds-textinput__control {
380
+ border-color: var(--color-border-warning);
381
+ outline-color: var(--color-border-warning);
382
+ }
383
+
384
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__label-tooltip:disabled {
385
+ cursor: not-allowed;
386
+ }
387
+
388
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__field:disabled {
389
+ cursor: not-allowed;
390
+ }
391
+
392
+ :where([data-dds-context="marketing"]) .dds-textinput .dds-textinput__field[readonly] {
393
+ cursor: default;
394
+ }
395
+
396
+ @media (prefers-reduced-motion: reduce) {
397
+ :where([data-dds-context="marketing"]) .dds-textinput,
398
+ :where([data-dds-context="marketing"]) .dds-textinput * { transition: none; }
399
+ }
400
+
@@ -0,0 +1,5 @@
1
+ import './TextInput.css';
2
+ import './text-input-impl.css';
3
+ import { type TextInputProps } from './TextInput.types.js';
4
+ export type { TextInputProps };
5
+ export declare function TextInput({ size, status, type, label, labelTooltip, placeholder, helperText, statusMessage, leadingIcon, prefix, suffix, trailingIcon, clearable, clearLabel, required, requiredMark, optional, ...rest }: TextInputProps): import("react").JSX.Element;