@ds-mo/ui 0.3.0 → 0.4.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 (521) hide show
  1. package/dist/components/ds-accordion.d.ts +11 -0
  2. package/dist/components/ds-accordion.js +2 -0
  3. package/dist/components/ds-accordion.js.map +1 -0
  4. package/dist/components/ds-badge.d.ts +11 -0
  5. package/dist/components/ds-badge.js +2 -0
  6. package/dist/components/ds-badge.js.map +1 -0
  7. package/dist/components/ds-banner.d.ts +11 -0
  8. package/dist/components/ds-banner.js +2 -0
  9. package/dist/components/ds-banner.js.map +1 -0
  10. package/dist/components/ds-breadcrumb.d.ts +11 -0
  11. package/dist/components/ds-breadcrumb.js +2 -0
  12. package/dist/components/ds-breadcrumb.js.map +1 -0
  13. package/dist/components/ds-button.d.ts +11 -0
  14. package/dist/components/ds-button.js +2 -0
  15. package/dist/components/ds-button.js.map +1 -0
  16. package/dist/components/ds-card.d.ts +11 -0
  17. package/dist/components/ds-card.js +2 -0
  18. package/dist/components/ds-card.js.map +1 -0
  19. package/dist/components/ds-checkbox.d.ts +11 -0
  20. package/dist/components/ds-checkbox.js +2 -0
  21. package/dist/components/ds-checkbox.js.map +1 -0
  22. package/dist/components/ds-divider.d.ts +11 -0
  23. package/dist/components/ds-divider.js +2 -0
  24. package/dist/components/ds-divider.js.map +1 -0
  25. package/dist/components/ds-empty-state.d.ts +11 -0
  26. package/dist/components/ds-empty-state.js +2 -0
  27. package/dist/components/ds-empty-state.js.map +1 -0
  28. package/dist/components/ds-fade.d.ts +11 -0
  29. package/dist/components/ds-fade.js +2 -0
  30. package/dist/components/ds-fade.js.map +1 -0
  31. package/dist/components/ds-field.d.ts +11 -0
  32. package/dist/components/ds-field.js +2 -0
  33. package/dist/components/ds-field.js.map +1 -0
  34. package/dist/components/ds-header.d.ts +11 -0
  35. package/dist/components/ds-header.js +2 -0
  36. package/dist/components/ds-header.js.map +1 -0
  37. package/dist/components/ds-input.d.ts +11 -0
  38. package/dist/components/ds-input.js +2 -0
  39. package/dist/components/ds-input.js.map +1 -0
  40. package/dist/components/ds-loader.d.ts +11 -0
  41. package/dist/components/ds-loader.js +2 -0
  42. package/dist/components/ds-loader.js.map +1 -0
  43. package/dist/components/ds-menu.d.ts +11 -0
  44. package/dist/components/ds-menu.js +2 -0
  45. package/dist/components/ds-menu.js.map +1 -0
  46. package/dist/components/ds-modal.d.ts +11 -0
  47. package/dist/components/ds-modal.js +2 -0
  48. package/dist/components/ds-modal.js.map +1 -0
  49. package/dist/components/ds-pagination.d.ts +11 -0
  50. package/dist/components/ds-pagination.js +2 -0
  51. package/dist/components/ds-pagination.js.map +1 -0
  52. package/dist/components/ds-radio-group.d.ts +11 -0
  53. package/dist/components/ds-radio-group.js +2 -0
  54. package/dist/components/ds-radio-group.js.map +1 -0
  55. package/dist/components/ds-scrollbar.d.ts +11 -0
  56. package/dist/components/ds-scrollbar.js +2 -0
  57. package/dist/components/ds-scrollbar.js.map +1 -0
  58. package/dist/components/ds-sidebar.d.ts +11 -0
  59. package/dist/components/ds-sidebar.js +2 -0
  60. package/dist/components/ds-sidebar.js.map +1 -0
  61. package/dist/components/ds-skeleton.d.ts +11 -0
  62. package/dist/components/ds-skeleton.js +2 -0
  63. package/dist/components/ds-skeleton.js.map +1 -0
  64. package/dist/components/ds-slider.d.ts +11 -0
  65. package/dist/components/ds-slider.js +2 -0
  66. package/dist/components/ds-slider.js.map +1 -0
  67. package/dist/components/ds-surface.d.ts +11 -0
  68. package/dist/components/ds-surface.js +2 -0
  69. package/dist/components/ds-surface.js.map +1 -0
  70. package/dist/components/ds-tab-group.d.ts +11 -0
  71. package/dist/components/ds-tab-group.js +2 -0
  72. package/dist/components/ds-tab-group.js.map +1 -0
  73. package/dist/components/ds-table.d.ts +11 -0
  74. package/dist/components/ds-table.js +2 -0
  75. package/dist/components/ds-table.js.map +1 -0
  76. package/dist/components/ds-tag.d.ts +11 -0
  77. package/dist/components/ds-tag.js +2 -0
  78. package/dist/components/ds-tag.js.map +1 -0
  79. package/dist/components/ds-text.d.ts +11 -0
  80. package/dist/components/ds-text.js +2 -0
  81. package/dist/components/ds-text.js.map +1 -0
  82. package/dist/components/ds-toast-provider.d.ts +11 -0
  83. package/dist/components/ds-toast-provider.js +2 -0
  84. package/dist/components/ds-toast-provider.js.map +1 -0
  85. package/dist/components/ds-toggle.d.ts +11 -0
  86. package/dist/components/ds-toggle.js +2 -0
  87. package/dist/components/ds-toggle.js.map +1 -0
  88. package/dist/components/ds-tooltip.d.ts +11 -0
  89. package/dist/components/ds-tooltip.js +2 -0
  90. package/dist/components/ds-tooltip.js.map +1 -0
  91. package/dist/components/index.d.ts +33 -0
  92. package/dist/components/index.js +2 -0
  93. package/dist/components/index.js.map +1 -0
  94. package/dist/components/p-BcuUR5Ao.js +2 -0
  95. package/dist/components/p-BcuUR5Ao.js.map +1 -0
  96. package/dist/types/.stencil/Accordion/Accordion.d.ts +28 -0
  97. package/dist/types/.stencil/Badge/Badge.d.ts +8 -0
  98. package/dist/types/.stencil/Badge/index.d.ts +2 -0
  99. package/dist/types/.stencil/Banner/Banner.d.ts +29 -0
  100. package/dist/types/.stencil/Breadcrumb/Breadcrumb.d.ts +16 -0
  101. package/dist/types/.stencil/Button/Button.d.ts +38 -0
  102. package/dist/types/.stencil/Button/index.d.ts +2 -0
  103. package/dist/types/.stencil/Card/Card.d.ts +8 -0
  104. package/dist/types/.stencil/Checkbox/Checkbox.d.ts +13 -0
  105. package/dist/types/.stencil/Checkbox/index.d.ts +2 -0
  106. package/dist/types/.stencil/Divider/Divider.d.ts +7 -0
  107. package/dist/types/.stencil/Divider/index.d.ts +2 -0
  108. package/dist/types/.stencil/EmptyState/EmptyState.d.ts +7 -0
  109. package/dist/types/.stencil/Fade/Fade.d.ts +10 -0
  110. package/dist/types/.stencil/Fade/index.d.ts +2 -0
  111. package/dist/types/.stencil/Field/Field.d.ts +8 -0
  112. package/dist/types/.stencil/Header/Header.d.ts +7 -0
  113. package/dist/types/.stencil/Input/Input.d.ts +26 -0
  114. package/dist/types/.stencil/Input/index.d.ts +2 -0
  115. package/dist/types/.stencil/Loader/Loader.d.ts +12 -0
  116. package/dist/types/.stencil/Loader/index.d.ts +2 -0
  117. package/dist/types/.stencil/Menu/Menu.d.ts +60 -0
  118. package/dist/types/.stencil/Modal/Modal.d.ts +31 -0
  119. package/dist/types/.stencil/Pagination/Pagination.d.ts +11 -0
  120. package/dist/types/.stencil/RadioGroup/RadioGroup.d.ts +21 -0
  121. package/dist/types/.stencil/RadioGroup/index.d.ts +2 -0
  122. package/dist/types/.stencil/Scrollbar/Scrollbar.d.ts +27 -0
  123. package/dist/types/.stencil/Sidebar/Sidebar.d.ts +29 -0
  124. package/dist/types/.stencil/Skeleton/Skeleton.d.ts +16 -0
  125. package/dist/types/.stencil/Skeleton/index.d.ts +2 -0
  126. package/dist/types/.stencil/Slider/Slider.d.ts +18 -0
  127. package/dist/types/.stencil/Slider/index.d.ts +2 -0
  128. package/dist/types/.stencil/Surface/Surface.d.ts +22 -0
  129. package/dist/types/.stencil/TabGroup/TabGroup.d.ts +29 -0
  130. package/dist/types/.stencil/Table/Table.d.ts +50 -0
  131. package/dist/types/.stencil/Tag/Tag.d.ts +32 -0
  132. package/dist/types/.stencil/Tag/index.d.ts +2 -0
  133. package/dist/types/.stencil/Text/Text.d.ts +22 -0
  134. package/dist/types/.stencil/Text/index.d.ts +2 -0
  135. package/dist/types/.stencil/Toast/Toast.d.ts +15 -0
  136. package/dist/types/.stencil/Toast/toast-service.d.ts +24 -0
  137. package/dist/types/.stencil/Toggle/Toggle.d.ts +10 -0
  138. package/dist/types/.stencil/Toggle/index.d.ts +2 -0
  139. package/dist/types/.stencil/Tooltip/Tooltip.d.ts +36 -0
  140. package/dist/types/components.d.ts +2024 -0
  141. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  142. package/package.json +27 -28
  143. package/src/angular/angular-component-lib/utils.ts +65 -0
  144. package/src/angular/index.ts +35 -0
  145. package/src/angular/proxies.ts +819 -0
  146. package/dist/components/Accordion/Accordion.d.ts +0 -29
  147. package/dist/components/Accordion/Accordion.d.ts.map +0 -1
  148. package/dist/components/Accordion/index.d.ts +0 -3
  149. package/dist/components/Accordion/index.d.ts.map +0 -1
  150. package/dist/components/Badge/Badge.d.ts +0 -18
  151. package/dist/components/Badge/Badge.d.ts.map +0 -1
  152. package/dist/components/Badge/index.d.ts +0 -3
  153. package/dist/components/Badge/index.d.ts.map +0 -1
  154. package/dist/components/Banner/Banner.d.ts +0 -16
  155. package/dist/components/Banner/Banner.d.ts.map +0 -1
  156. package/dist/components/Banner/index.d.ts +0 -3
  157. package/dist/components/Banner/index.d.ts.map +0 -1
  158. package/dist/components/Breadcrumb/Breadcrumb.d.ts +0 -15
  159. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +0 -1
  160. package/dist/components/Breadcrumb/index.d.ts +0 -3
  161. package/dist/components/Breadcrumb/index.d.ts.map +0 -1
  162. package/dist/components/Button/Button.d.ts +0 -85
  163. package/dist/components/Button/Button.d.ts.map +0 -1
  164. package/dist/components/Button/index.d.ts +0 -3
  165. package/dist/components/Button/index.d.ts.map +0 -1
  166. package/dist/components/ButtonGroup/ButtonGroup.d.ts +0 -26
  167. package/dist/components/ButtonGroup/ButtonGroup.d.ts.map +0 -1
  168. package/dist/components/ButtonGroup/index.d.ts +0 -3
  169. package/dist/components/ButtonGroup/index.d.ts.map +0 -1
  170. package/dist/components/Card/Card.d.ts +0 -20
  171. package/dist/components/Card/Card.d.ts.map +0 -1
  172. package/dist/components/Card/index.d.ts +0 -3
  173. package/dist/components/Card/index.d.ts.map +0 -1
  174. package/dist/components/Checkbox/Checkbox.d.ts +0 -18
  175. package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
  176. package/dist/components/Checkbox/index.d.ts +0 -3
  177. package/dist/components/Checkbox/index.d.ts.map +0 -1
  178. package/dist/components/Divider/Divider.d.ts +0 -9
  179. package/dist/components/Divider/Divider.d.ts.map +0 -1
  180. package/dist/components/Divider/index.d.ts +0 -3
  181. package/dist/components/Divider/index.d.ts.map +0 -1
  182. package/dist/components/EmptyState/EmptyState.d.ts +0 -9
  183. package/dist/components/EmptyState/EmptyState.d.ts.map +0 -1
  184. package/dist/components/EmptyState/index.d.ts +0 -3
  185. package/dist/components/EmptyState/index.d.ts.map +0 -1
  186. package/dist/components/ErrorBoundary/ErrorBoundary.d.ts +0 -18
  187. package/dist/components/ErrorBoundary/ErrorBoundary.d.ts.map +0 -1
  188. package/dist/components/ErrorBoundary/index.d.ts +0 -3
  189. package/dist/components/ErrorBoundary/index.d.ts.map +0 -1
  190. package/dist/components/Fade/Fade.d.ts +0 -11
  191. package/dist/components/Fade/Fade.d.ts.map +0 -1
  192. package/dist/components/Fade/index.d.ts +0 -3
  193. package/dist/components/Fade/index.d.ts.map +0 -1
  194. package/dist/components/Field/Field.d.ts +0 -9
  195. package/dist/components/Field/Field.d.ts.map +0 -1
  196. package/dist/components/Field/index.d.ts +0 -3
  197. package/dist/components/Field/index.d.ts.map +0 -1
  198. package/dist/components/Header/Header.d.ts +0 -12
  199. package/dist/components/Header/Header.d.ts.map +0 -1
  200. package/dist/components/Header/index.d.ts +0 -3
  201. package/dist/components/Header/index.d.ts.map +0 -1
  202. package/dist/components/Input/Input.d.ts +0 -27
  203. package/dist/components/Input/Input.d.ts.map +0 -1
  204. package/dist/components/Input/index.d.ts +0 -3
  205. package/dist/components/Input/index.d.ts.map +0 -1
  206. package/dist/components/LabelWrap/LabelWrap.d.ts +0 -27
  207. package/dist/components/LabelWrap/LabelWrap.d.ts.map +0 -1
  208. package/dist/components/LabelWrap/index.d.ts +0 -2
  209. package/dist/components/LabelWrap/index.d.ts.map +0 -1
  210. package/dist/components/Loader/Loader.d.ts +0 -33
  211. package/dist/components/Loader/Loader.d.ts.map +0 -1
  212. package/dist/components/Loader/index.d.ts +0 -3
  213. package/dist/components/Loader/index.d.ts.map +0 -1
  214. package/dist/components/Menu/DestructiveMenuItem.d.ts +0 -12
  215. package/dist/components/Menu/DestructiveMenuItem.d.ts.map +0 -1
  216. package/dist/components/Menu/Menu.d.ts +0 -55
  217. package/dist/components/Menu/Menu.d.ts.map +0 -1
  218. package/dist/components/Menu/MenuItem.d.ts +0 -33
  219. package/dist/components/Menu/MenuItem.d.ts.map +0 -1
  220. package/dist/components/Menu/index.d.ts +0 -7
  221. package/dist/components/Menu/index.d.ts.map +0 -1
  222. package/dist/components/Modal/Modal.d.ts +0 -15
  223. package/dist/components/Modal/Modal.d.ts.map +0 -1
  224. package/dist/components/Modal/index.d.ts +0 -3
  225. package/dist/components/Modal/index.d.ts.map +0 -1
  226. package/dist/components/Pagination/Pagination.d.ts +0 -16
  227. package/dist/components/Pagination/Pagination.d.ts.map +0 -1
  228. package/dist/components/Pagination/index.d.ts +0 -3
  229. package/dist/components/Pagination/index.d.ts.map +0 -1
  230. package/dist/components/Radio/Radio.d.ts +0 -35
  231. package/dist/components/Radio/Radio.d.ts.map +0 -1
  232. package/dist/components/Radio/index.d.ts +0 -3
  233. package/dist/components/Radio/index.d.ts.map +0 -1
  234. package/dist/components/Scrollbar/Scrollbar.d.ts +0 -13
  235. package/dist/components/Scrollbar/Scrollbar.d.ts.map +0 -1
  236. package/dist/components/Scrollbar/index.d.ts +0 -3
  237. package/dist/components/Scrollbar/index.d.ts.map +0 -1
  238. package/dist/components/Select/Select.d.ts +0 -22
  239. package/dist/components/Select/Select.d.ts.map +0 -1
  240. package/dist/components/Select/index.d.ts +0 -3
  241. package/dist/components/Select/index.d.ts.map +0 -1
  242. package/dist/components/Sidebar/Sidebar.d.ts +0 -15
  243. package/dist/components/Sidebar/Sidebar.d.ts.map +0 -1
  244. package/dist/components/Sidebar/SidebarItem.d.ts +0 -14
  245. package/dist/components/Sidebar/SidebarItem.d.ts.map +0 -1
  246. package/dist/components/Sidebar/SidebarSection.d.ts +0 -10
  247. package/dist/components/Sidebar/SidebarSection.d.ts.map +0 -1
  248. package/dist/components/Sidebar/index.d.ts +0 -7
  249. package/dist/components/Sidebar/index.d.ts.map +0 -1
  250. package/dist/components/Skeleton/Skeleton.d.ts +0 -17
  251. package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
  252. package/dist/components/Skeleton/index.d.ts +0 -3
  253. package/dist/components/Skeleton/index.d.ts.map +0 -1
  254. package/dist/components/Slider/Slider.d.ts +0 -16
  255. package/dist/components/Slider/Slider.d.ts.map +0 -1
  256. package/dist/components/Slider/index.d.ts +0 -3
  257. package/dist/components/Slider/index.d.ts.map +0 -1
  258. package/dist/components/Surface/Surface.d.ts +0 -59
  259. package/dist/components/Surface/Surface.d.ts.map +0 -1
  260. package/dist/components/Surface/index.d.ts +0 -3
  261. package/dist/components/Surface/index.d.ts.map +0 -1
  262. package/dist/components/Tab/Tab.d.ts +0 -21
  263. package/dist/components/Tab/Tab.d.ts.map +0 -1
  264. package/dist/components/Tab/index.d.ts +0 -3
  265. package/dist/components/Tab/index.d.ts.map +0 -1
  266. package/dist/components/TabGroup/TabGroup.d.ts +0 -26
  267. package/dist/components/TabGroup/TabGroup.d.ts.map +0 -1
  268. package/dist/components/TabGroup/index.d.ts +0 -3
  269. package/dist/components/TabGroup/index.d.ts.map +0 -1
  270. package/dist/components/Table/Table.d.ts +0 -46
  271. package/dist/components/Table/Table.d.ts.map +0 -1
  272. package/dist/components/Table/index.d.ts +0 -3
  273. package/dist/components/Table/index.d.ts.map +0 -1
  274. package/dist/components/Tag/Tag.d.ts +0 -38
  275. package/dist/components/Tag/Tag.d.ts.map +0 -1
  276. package/dist/components/Tag/index.d.ts +0 -3
  277. package/dist/components/Tag/index.d.ts.map +0 -1
  278. package/dist/components/Text/Text.d.ts +0 -41
  279. package/dist/components/Text/Text.d.ts.map +0 -1
  280. package/dist/components/Text/index.d.ts +0 -3
  281. package/dist/components/Text/index.d.ts.map +0 -1
  282. package/dist/components/Toast/Toast.d.ts +0 -33
  283. package/dist/components/Toast/Toast.d.ts.map +0 -1
  284. package/dist/components/Toast/index.d.ts +0 -3
  285. package/dist/components/Toast/index.d.ts.map +0 -1
  286. package/dist/components/Toggle/Toggle.d.ts +0 -17
  287. package/dist/components/Toggle/Toggle.d.ts.map +0 -1
  288. package/dist/components/Toggle/index.d.ts +0 -3
  289. package/dist/components/Toggle/index.d.ts.map +0 -1
  290. package/dist/components/ToggleButton/ToggleButton.d.ts +0 -35
  291. package/dist/components/ToggleButton/ToggleButton.d.ts.map +0 -1
  292. package/dist/components/ToggleButton/index.d.ts +0 -3
  293. package/dist/components/ToggleButton/index.d.ts.map +0 -1
  294. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +0 -24
  295. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.ts.map +0 -1
  296. package/dist/components/ToggleButtonGroup/index.d.ts +0 -3
  297. package/dist/components/ToggleButtonGroup/index.d.ts.map +0 -1
  298. package/dist/components/Tooltip/Tooltip.d.ts +0 -17
  299. package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
  300. package/dist/components/Tooltip/index.d.ts +0 -3
  301. package/dist/components/Tooltip/index.d.ts.map +0 -1
  302. package/dist/index.css +0 -2
  303. package/dist/index.d.ts +0 -82
  304. package/dist/index.d.ts.map +0 -1
  305. package/dist/index.js +0 -2968
  306. package/dist/index.js.map +0 -1
  307. package/dist/r/accordion.json +0 -79
  308. package/dist/r/badge.json +0 -69
  309. package/dist/r/banner.json +0 -90
  310. package/dist/r/breadcrumb.json +0 -70
  311. package/dist/r/button-group.json +0 -65
  312. package/dist/r/button.json +0 -137
  313. package/dist/r/card.json +0 -82
  314. package/dist/r/checkbox.json +0 -91
  315. package/dist/r/divider.json +0 -57
  316. package/dist/r/empty-state.json +0 -69
  317. package/dist/r/error-boundary.json +0 -66
  318. package/dist/r/fade.json +0 -65
  319. package/dist/r/field.json +0 -71
  320. package/dist/r/header.json +0 -67
  321. package/dist/r/input.json +0 -77
  322. package/dist/r/loader.json +0 -54
  323. package/dist/r/menu.json +0 -130
  324. package/dist/r/modal.json +0 -93
  325. package/dist/r/pagination.json +0 -80
  326. package/dist/r/radio.json +0 -85
  327. package/dist/r/registry.json +0 -1600
  328. package/dist/r/scrollbar.json +0 -68
  329. package/dist/r/select.json +0 -93
  330. package/dist/r/sidebar.json +0 -105
  331. package/dist/r/skeleton.json +0 -72
  332. package/dist/r/slider.json +0 -87
  333. package/dist/r/surface.json +0 -97
  334. package/dist/r/tab-group.json +0 -72
  335. package/dist/r/tab.json +0 -71
  336. package/dist/r/table.json +0 -110
  337. package/dist/r/tag.json +0 -110
  338. package/dist/r/text.json +0 -94
  339. package/dist/r/toast.json +0 -77
  340. package/dist/r/toggle-button-group.json +0 -65
  341. package/dist/r/toggle-button.json +0 -94
  342. package/dist/r/toggle.json +0 -65
  343. package/dist/r/tooltip.json +0 -86
  344. package/dist/types/icons.d.ts +0 -14
  345. package/dist/types/icons.d.ts.map +0 -1
  346. package/dist/types/index.d.ts +0 -2
  347. package/dist/types/index.d.ts.map +0 -1
  348. package/dist/utils/cn.d.ts +0 -5
  349. package/dist/utils/cn.d.ts.map +0 -1
  350. package/dist/utils/css-tokens.d.ts +0 -11
  351. package/dist/utils/css-tokens.d.ts.map +0 -1
  352. package/src/components/Accordion/Accordion.module.css +0 -66
  353. package/src/components/Accordion/Accordion.stories.tsx +0 -95
  354. package/src/components/Accordion/Accordion.tsx +0 -131
  355. package/src/components/Accordion/index.ts +0 -2
  356. package/src/components/Badge/Badge.module.css +0 -6
  357. package/src/components/Badge/Badge.stories.tsx +0 -131
  358. package/src/components/Badge/Badge.tsx +0 -40
  359. package/src/components/Badge/index.ts +0 -2
  360. package/src/components/Banner/Banner.module.css +0 -105
  361. package/src/components/Banner/Banner.stories.tsx +0 -81
  362. package/src/components/Banner/Banner.tsx +0 -139
  363. package/src/components/Banner/index.ts +0 -2
  364. package/src/components/Breadcrumb/Breadcrumb.module.css +0 -46
  365. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -72
  366. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -68
  367. package/src/components/Breadcrumb/index.ts +0 -2
  368. package/src/components/Button/Button.mdx +0 -143
  369. package/src/components/Button/Button.module.css +0 -343
  370. package/src/components/Button/Button.stories.tsx +0 -575
  371. package/src/components/Button/Button.tsx +0 -232
  372. package/src/components/Button/index.ts +0 -10
  373. package/src/components/ButtonGroup/ButtonGroup.module.css +0 -157
  374. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -384
  375. package/src/components/ButtonGroup/ButtonGroup.tsx +0 -122
  376. package/src/components/ButtonGroup/index.ts +0 -2
  377. package/src/components/Card/Card.module.css +0 -36
  378. package/src/components/Card/Card.stories.tsx +0 -78
  379. package/src/components/Card/Card.tsx +0 -53
  380. package/src/components/Card/index.ts +0 -2
  381. package/src/components/Checkbox/Checkbox.module.css +0 -47
  382. package/src/components/Checkbox/Checkbox.stories.tsx +0 -129
  383. package/src/components/Checkbox/Checkbox.tsx +0 -71
  384. package/src/components/Checkbox/index.ts +0 -2
  385. package/src/components/Divider/Divider.module.css +0 -19
  386. package/src/components/Divider/Divider.stories.tsx +0 -55
  387. package/src/components/Divider/Divider.tsx +0 -28
  388. package/src/components/Divider/index.ts +0 -2
  389. package/src/components/EmptyState/EmptyState.module.css +0 -8
  390. package/src/components/EmptyState/EmptyState.stories.tsx +0 -53
  391. package/src/components/EmptyState/EmptyState.tsx +0 -31
  392. package/src/components/EmptyState/index.ts +0 -2
  393. package/src/components/ErrorBoundary/ErrorBoundary.module.css +0 -18
  394. package/src/components/ErrorBoundary/ErrorBoundary.stories.tsx +0 -38
  395. package/src/components/ErrorBoundary/ErrorBoundary.tsx +0 -50
  396. package/src/components/ErrorBoundary/index.ts +0 -2
  397. package/src/components/Fade/Fade.module.css +0 -31
  398. package/src/components/Fade/Fade.stories.tsx +0 -35
  399. package/src/components/Fade/Fade.tsx +0 -33
  400. package/src/components/Fade/index.ts +0 -2
  401. package/src/components/Field/Field.module.css +0 -5
  402. package/src/components/Field/Field.stories.tsx +0 -111
  403. package/src/components/Field/Field.tsx +0 -35
  404. package/src/components/Field/index.ts +0 -2
  405. package/src/components/Header/Header.module.css +0 -33
  406. package/src/components/Header/Header.stories.tsx +0 -52
  407. package/src/components/Header/Header.tsx +0 -42
  408. package/src/components/Header/index.ts +0 -2
  409. package/src/components/Input/Input.module.css +0 -92
  410. package/src/components/Input/Input.stories.tsx +0 -135
  411. package/src/components/Input/Input.tsx +0 -117
  412. package/src/components/Input/index.ts +0 -2
  413. package/src/components/LabelWrap/LabelWrap.module.css +0 -34
  414. package/src/components/LabelWrap/LabelWrap.tsx +0 -32
  415. package/src/components/LabelWrap/index.ts +0 -1
  416. package/src/components/Loader/Loader.module.css +0 -26
  417. package/src/components/Loader/Loader.stories.tsx +0 -53
  418. package/src/components/Loader/Loader.tsx +0 -65
  419. package/src/components/Loader/index.ts +0 -2
  420. package/src/components/Menu/DestructiveMenuItem.module.css +0 -57
  421. package/src/components/Menu/DestructiveMenuItem.tsx +0 -117
  422. package/src/components/Menu/Menu.module.css +0 -49
  423. package/src/components/Menu/Menu.stories.tsx +0 -129
  424. package/src/components/Menu/Menu.tsx +0 -418
  425. package/src/components/Menu/MenuItem.module.css +0 -86
  426. package/src/components/Menu/MenuItem.tsx +0 -144
  427. package/src/components/Menu/index.ts +0 -6
  428. package/src/components/Modal/Modal.module.css +0 -67
  429. package/src/components/Modal/Modal.stories.tsx +0 -71
  430. package/src/components/Modal/Modal.tsx +0 -199
  431. package/src/components/Modal/index.ts +0 -2
  432. package/src/components/Pagination/Pagination.module.css +0 -64
  433. package/src/components/Pagination/Pagination.stories.tsx +0 -51
  434. package/src/components/Pagination/Pagination.tsx +0 -103
  435. package/src/components/Pagination/index.ts +0 -2
  436. package/src/components/Radio/Radio.module.css +0 -61
  437. package/src/components/Radio/Radio.stories.tsx +0 -101
  438. package/src/components/Radio/Radio.tsx +0 -196
  439. package/src/components/Radio/index.ts +0 -2
  440. package/src/components/Scrollbar/Scrollbar.module.css +0 -86
  441. package/src/components/Scrollbar/Scrollbar.stories.tsx +0 -46
  442. package/src/components/Scrollbar/Scrollbar.tsx +0 -201
  443. package/src/components/Scrollbar/index.ts +0 -2
  444. package/src/components/Select/Select.module.css +0 -31
  445. package/src/components/Select/Select.stories.tsx +0 -59
  446. package/src/components/Select/Select.tsx +0 -222
  447. package/src/components/Select/index.ts +0 -2
  448. package/src/components/Sidebar/Sidebar.module.css +0 -168
  449. package/src/components/Sidebar/Sidebar.stories.tsx +0 -125
  450. package/src/components/Sidebar/Sidebar.tsx +0 -227
  451. package/src/components/Sidebar/SidebarItem.tsx +0 -57
  452. package/src/components/Sidebar/SidebarSection.tsx +0 -42
  453. package/src/components/Sidebar/index.ts +0 -6
  454. package/src/components/Skeleton/Skeleton.module.css +0 -53
  455. package/src/components/Skeleton/Skeleton.stories.tsx +0 -89
  456. package/src/components/Skeleton/Skeleton.tsx +0 -66
  457. package/src/components/Skeleton/index.ts +0 -2
  458. package/src/components/Slider/Slider.module.css +0 -66
  459. package/src/components/Slider/Slider.stories.tsx +0 -145
  460. package/src/components/Slider/Slider.tsx +0 -74
  461. package/src/components/Slider/index.ts +0 -2
  462. package/src/components/Surface/Surface.module.css +0 -222
  463. package/src/components/Surface/Surface.stories.tsx +0 -213
  464. package/src/components/Surface/Surface.tsx +0 -219
  465. package/src/components/Surface/index.ts +0 -12
  466. package/src/components/Tab/Tab.module.css +0 -66
  467. package/src/components/Tab/Tab.stories.tsx +0 -103
  468. package/src/components/Tab/Tab.tsx +0 -71
  469. package/src/components/Tab/index.ts +0 -2
  470. package/src/components/TabGroup/TabGroup.module.css +0 -26
  471. package/src/components/TabGroup/TabGroup.stories.tsx +0 -91
  472. package/src/components/TabGroup/TabGroup.tsx +0 -150
  473. package/src/components/TabGroup/index.ts +0 -2
  474. package/src/components/Table/Table.module.css +0 -140
  475. package/src/components/Table/Table.stories.tsx +0 -111
  476. package/src/components/Table/Table.tsx +0 -255
  477. package/src/components/Table/index.ts +0 -11
  478. package/src/components/Tag/Tag.module.css +0 -270
  479. package/src/components/Tag/Tag.stories.tsx +0 -399
  480. package/src/components/Tag/Tag.tsx +0 -165
  481. package/src/components/Tag/index.ts +0 -2
  482. package/src/components/Text/Text.module.css +0 -166
  483. package/src/components/Text/Text.stories.tsx +0 -212
  484. package/src/components/Text/Text.tsx +0 -181
  485. package/src/components/Text/index.ts +0 -13
  486. package/src/components/Toast/Toast.module.css +0 -91
  487. package/src/components/Toast/Toast.stories.tsx +0 -66
  488. package/src/components/Toast/Toast.tsx +0 -218
  489. package/src/components/Toast/index.ts +0 -8
  490. package/src/components/Toggle/Toggle.module.css +0 -87
  491. package/src/components/Toggle/Toggle.stories.tsx +0 -85
  492. package/src/components/Toggle/Toggle.tsx +0 -53
  493. package/src/components/Toggle/index.ts +0 -2
  494. package/src/components/ToggleButton/ToggleButton.module.css +0 -172
  495. package/src/components/ToggleButton/ToggleButton.stories.tsx +0 -299
  496. package/src/components/ToggleButton/ToggleButton.tsx +0 -118
  497. package/src/components/ToggleButton/index.ts +0 -2
  498. package/src/components/ToggleButtonGroup/ToggleButtonGroup.module.css +0 -163
  499. package/src/components/ToggleButtonGroup/ToggleButtonGroup.stories.tsx +0 -341
  500. package/src/components/ToggleButtonGroup/ToggleButtonGroup.tsx +0 -111
  501. package/src/components/ToggleButtonGroup/index.ts +0 -2
  502. package/src/components/Tooltip/Tooltip.module.css +0 -45
  503. package/src/components/Tooltip/Tooltip.stories.tsx +0 -46
  504. package/src/components/Tooltip/Tooltip.tsx +0 -260
  505. package/src/components/Tooltip/index.ts +0 -2
  506. package/src/css-modules.d.ts +0 -4
  507. package/src/docs/ColorUsage.mdx +0 -195
  508. package/src/docs/ElevationUsage.mdx +0 -95
  509. package/src/docs/Introduction.mdx +0 -97
  510. package/src/docs/OpticalSizing.mdx +0 -178
  511. package/src/docs/TypographyUsage.mdx +0 -121
  512. package/src/index.ts +0 -154
  513. package/src/stories/Colors.stories.tsx +0 -528
  514. package/src/stories/Dimensions.stories.tsx +0 -200
  515. package/src/stories/Effects.stories.tsx +0 -231
  516. package/src/stories/Icons.stories.tsx +0 -159
  517. package/src/stories/Typography.stories.tsx +0 -157
  518. package/src/types/icons.ts +0 -15
  519. package/src/types/index.ts +0 -1
  520. package/src/utils/cn.ts +0 -6
  521. package/src/utils/css-tokens.ts +0 -22
@@ -1,111 +0,0 @@
1
- import React from 'react';
2
- import { cn } from '@/utils/cn';
3
- import styles from './ToggleButtonGroup.module.css';
4
-
5
- export interface ToggleButtonGroupProps {
6
- children: React.ReactNode;
7
- className?: string;
8
- }
9
-
10
- /**
11
- * Renders ToggleButton children flush side-by-side with a 1px divider between them.
12
- * Outer corners keep the button's own border-radius; inner corners are flattened.
13
- *
14
- * Individual button chrome (shadow/border) is suppressed — the group container
15
- * carries the elevation so it wraps the whole control as one visual unit.
16
- *
17
- * Divider behaviour by elevation:
18
- * elevated / flat / floating — full-height color-border-tertiary line
19
- * none (ghost) — short centred line (icon/text height)
20
- *
21
- * Rounded groups: outer edges keep pill padding; inner edges revert to base padding.
22
- * Pressed state and onPressedChange are managed by the consumer on each ToggleButton.
23
- */
24
- export const ToggleButtonGroup = ({ children, className }: ToggleButtonGroupProps) => {
25
- const items = React.Children.toArray(children).filter(React.isValidElement);
26
- const count = items.length;
27
-
28
- // Read elevation + rounded from first child to drive the group container style.
29
- const firstEl = items[0] as React.ReactElement<Record<string, unknown>> | undefined;
30
- const firstProps = firstEl?.props as { elevation?: string; rounded?: boolean } | undefined;
31
- const groupElevation = firstProps?.elevation ?? 'elevated';
32
- const groupRounded = !!firstProps?.rounded;
33
- const groupElevKey = groupElevation.charAt(0).toUpperCase() + groupElevation.slice(1);
34
-
35
- return (
36
- <div
37
- className={cn(
38
- styles.group,
39
- (styles as Record<string, string>)[`group${groupElevKey}`],
40
- groupRounded && styles.groupRounded,
41
- className,
42
- )}
43
- role="group"
44
- >
45
- {items.map((child, i) => {
46
- const el = child as React.ReactElement<Record<string, unknown>>;
47
- const p = el.props as {
48
- className?: string;
49
- elevation?: string;
50
- size?: string;
51
- rounded?: boolean;
52
- pressed?: boolean;
53
- icon?: unknown;
54
- label?: unknown;
55
- };
56
-
57
- const isFirst = i === 0;
58
- const isLast = i === count - 1;
59
- const isMid = !isFirst && !isLast;
60
-
61
- const size = (p.size ?? 'md') as 'xs' | 'sm' | 'md';
62
- const isRounded = !!p.rounded;
63
- const isPressed = !!p.pressed;
64
- const isIconOnly = !!p.icon && !p.label;
65
- // Ghost: elevation='none' (no chrome) → short centred divider
66
- const isGhost = (p.elevation ?? 'elevated') === 'none';
67
-
68
- // XS rounded has no extra padding in ToggleButton so needs no correction
69
- const sizeKey = size.toUpperCase() as 'XS' | 'SM' | 'MD';
70
- const needsRoundedCorrection = isRounded && !isIconOnly && size !== 'xs';
71
-
72
- // Divider injected as a separate element so it's never affected by
73
- // the adjacent button's opacity (e.g. disabled state).
74
- const dividerClasses = cn(
75
- styles.divider,
76
- isGhost && styles.dividerGhost,
77
- isGhost && size === 'xs' && styles.dividerGhostXS,
78
- isGhost && size === 'sm' && styles.dividerGhostSM,
79
- );
80
-
81
- return (
82
- <React.Fragment key={i}>
83
- {i > 0 && <div className={dividerClasses} aria-hidden="true" />}
84
- {React.cloneElement(el, {
85
- className: cn(
86
- p.className,
87
- styles.item,
88
- isFirst && styles.first,
89
- isLast && styles.last,
90
- isMid && styles.middle,
91
-
92
- // Ghost variant: ::after overlay gets 4px radius treatment
93
- isGhost && styles.itemShort,
94
-
95
- // Ghost + pressed: selected state background chip
96
- isGhost && isPressed && styles.itemPressed,
97
-
98
- // Rounded: revert inner-edge padding to base (non-pill) value
99
- needsRoundedCorrection && isFirst && (styles as Record<string, string>)[`roundedFirst${sizeKey}`],
100
- needsRoundedCorrection && isLast && (styles as Record<string, string>)[`roundedLast${sizeKey}`],
101
- needsRoundedCorrection && isMid && (styles as Record<string, string>)[`roundedMid${sizeKey}`],
102
- ),
103
- })}
104
- </React.Fragment>
105
- );
106
- })}
107
- </div>
108
- );
109
- };
110
-
111
- ToggleButtonGroup.displayName = 'ToggleButtonGroup';
@@ -1,2 +0,0 @@
1
- export { ToggleButtonGroup } from './ToggleButtonGroup';
2
- export type { ToggleButtonGroupProps } from './ToggleButtonGroup';
@@ -1,45 +0,0 @@
1
- .tooltip {
2
- box-sizing: border-box;
3
- background-color: var(--color-background-primary);
4
- border-radius: var(--dimension-radius-075);
5
- box-shadow: var(--effect-elevation-elevated-floating);
6
- padding: var(--dimension-space-050);
7
- line-height: var(--typography-lineheight-sm);
8
- pointer-events: none;
9
- backface-visibility: hidden;
10
- -webkit-font-smoothing: subpixel-antialiased;
11
- animation: tooltipFadeIn var(--effect-motion-short-2) forwards;
12
- }
13
-
14
- .tooltipInner {
15
- display: flex;
16
- flex-direction: row;
17
- align-items: center;
18
- gap: var(--dimension-space-050);
19
- }
20
-
21
- .keyHint {
22
- width: var(--dimension-size-200);
23
- height: var(--dimension-size-200);
24
- flex-shrink: 0;
25
- display: flex;
26
- align-items: center;
27
- justify-content: center;
28
- border: var(--dimension-stroke-width-015) solid var(--color-foreground-tertiary);
29
- border-bottom-width: var(--dimension-stroke-width-025);
30
- border-radius: var(--dimension-radius-025);
31
- }
32
-
33
- .tooltip.closing {
34
- animation: tooltipFadeOut var(--effect-motion-short-3) forwards;
35
- }
36
-
37
- @keyframes tooltipFadeIn {
38
- from { opacity: 0; }
39
- to { opacity: 1; }
40
- }
41
-
42
- @keyframes tooltipFadeOut {
43
- from { opacity: 1; }
44
- to { opacity: 0; }
45
- }
@@ -1,46 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Tooltip } from './Tooltip';
3
- import { Button } from '../Button';
4
-
5
- const meta: Meta<typeof Tooltip> = {
6
- title: 'Components/Tooltip',
7
- component: Tooltip,
8
- };
9
-
10
- export default meta;
11
- type Story = StoryObj<typeof Tooltip>;
12
-
13
- export const Default: Story = {
14
- render: () => (
15
- <div style={{ padding: 80, display: 'flex', justifyContent: 'center' }}>
16
- <Tooltip label="This is a tooltip">
17
- <Button variant="secondary" label="Hover me" />
18
- </Tooltip>
19
- </div>
20
- ),
21
- };
22
-
23
- export const Positions: Story = {
24
- render: () => (
25
- <div style={{ padding: 100, display: 'flex', gap: 24, justifyContent: 'center' }}>
26
- {(['top', 'right', 'bottom', 'left'] as const).map(side => (
27
- <Tooltip key={side} label={`Tooltip on ${side}`} side={side}>
28
- <Button variant="secondary" label={side} />
29
- </Tooltip>
30
- ))}
31
- </div>
32
- ),
33
- };
34
-
35
- export const WithShortcut: Story = {
36
- render: () => (
37
- <div style={{ padding: 80, display: 'flex', gap: 24, justifyContent: 'center' }}>
38
- <Tooltip label="Save" shortcutKey="S">
39
- <Button variant="secondary" label="Save" />
40
- </Tooltip>
41
- <Tooltip label="Undo" shortcutKey="Z" shortcutKeyPosition="start">
42
- <Button variant="secondary" label="Undo" />
43
- </Tooltip>
44
- </div>
45
- ),
46
- };
@@ -1,260 +0,0 @@
1
- import React, { useState, useRef, useEffect, useLayoutEffect, useCallback, useId } from 'react';
2
- import { createPortal } from 'react-dom';
3
- import { getCssTimeMs } from '@/utils/css-tokens';
4
- import { Text } from '@/components/Text';
5
- import styles from './Tooltip.module.css';
6
-
7
- const HOVER_DELAY_FALLBACK_MS = 1000;
8
- const INSTANT_REOPEN_MS = 300;
9
- const FADE_OUT_DURATION_MS = 200;
10
-
11
- let lastTooltipDismissedAt = 0;
12
-
13
- export type TooltipSide = 'top' | 'right' | 'bottom' | 'left';
14
- export type TooltipAlign = 'start' | 'center' | 'end';
15
-
16
- export interface TooltipProps {
17
- label: string;
18
- children: React.ReactElement;
19
- delay?: number;
20
- side?: TooltipSide;
21
- align?: TooltipAlign;
22
- sideOffset?: number;
23
- alignOffset?: number;
24
- shortcutKey?: string;
25
- shortcutKeyPosition?: 'start' | 'end';
26
- usePortal?: boolean;
27
- }
28
-
29
- export const Tooltip: React.FC<TooltipProps> = ({
30
- label,
31
- children,
32
- delay,
33
- side = 'top',
34
- align = 'center',
35
- sideOffset = 4,
36
- alignOffset = 0,
37
- shortcutKey,
38
- shortcutKeyPosition = 'end',
39
- usePortal = true,
40
- }) => {
41
- const hoverDelayMs = getCssTimeMs('--effect-animation-delay-medium-3', HOVER_DELAY_FALLBACK_MS);
42
- const resolvedDelay = delay ?? hoverDelayMs;
43
- const anchorRef = useRef<HTMLElement | null>(null);
44
- const tooltipRef = useRef<HTMLDivElement>(null);
45
- const tooltipId = useId();
46
-
47
- const setAnchorRef = useCallback(
48
- (el: HTMLElement | null) => {
49
- (anchorRef as React.MutableRefObject<HTMLElement | null>).current = el;
50
- const childEl = React.Children.only(children) as React.ReactElement<{ ref?: React.Ref<unknown> }>;
51
- const childRef = 'ref' in childEl ? childEl.ref : undefined;
52
- if (typeof childRef === 'function') childRef(el);
53
- else if (childRef && typeof childRef === 'object') (childRef as React.MutableRefObject<unknown>).current = el;
54
- },
55
- [children]
56
- );
57
-
58
- const [open, setOpen] = useState(false);
59
- const [isClosing, setIsClosing] = useState(false);
60
- const [shouldRender, setShouldRender] = useState(false);
61
- const [position, setPosition] = useState<{ x: number; y: number }>({ x: 0, y: 0 });
62
- const [tooltipSize, setTooltipSize] = useState<{ width: number; height: number }>({ width: 0, height: 0 });
63
- const delayTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
64
- const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
65
- const viewportPadding = 4;
66
-
67
- const clearDelayTimer = () => {
68
- if (delayTimerRef.current) { clearTimeout(delayTimerRef.current); delayTimerRef.current = null; }
69
- };
70
-
71
- const handleOpen = () => {
72
- clearDelayTimer();
73
- const showImmediately = Date.now() - lastTooltipDismissedAt < INSTANT_REOPEN_MS;
74
- if (showImmediately) {
75
- setOpen(true); setShouldRender(true); setIsClosing(false); return;
76
- }
77
- delayTimerRef.current = setTimeout(() => {
78
- delayTimerRef.current = null;
79
- setOpen(true); setShouldRender(true); setIsClosing(false);
80
- }, resolvedDelay);
81
- };
82
-
83
- const handleClose = () => {
84
- clearDelayTimer();
85
- if (closeTimerRef.current) { clearTimeout(closeTimerRef.current); closeTimerRef.current = null; }
86
- if (!open && !shouldRender) return;
87
- lastTooltipDismissedAt = Date.now();
88
- setIsClosing(true);
89
- closeTimerRef.current = setTimeout(() => {
90
- closeTimerRef.current = null;
91
- setShouldRender(false); setOpen(false); setIsClosing(false);
92
- }, FADE_OUT_DURATION_MS);
93
- };
94
-
95
- useEffect(() => () => { clearDelayTimer(); if (closeTimerRef.current) clearTimeout(closeTimerRef.current); }, []);
96
-
97
- useEffect(() => {
98
- if (!shouldRender) return;
99
- const onKeyDown = (e: KeyboardEvent) => {
100
- if (e.key === 'Escape') handleClose();
101
- };
102
- document.addEventListener('keydown', onKeyDown);
103
- return () => document.removeEventListener('keydown', onKeyDown);
104
- // handleClose is stable in effect — re-subscribing on each render would churn the listener
105
- // eslint-disable-next-line react-hooks/exhaustive-deps
106
- }, [shouldRender]);
107
-
108
- useLayoutEffect(() => {
109
- if (!shouldRender || !tooltipRef.current) return;
110
- const updateSize = () => {
111
- if (!tooltipRef.current) return;
112
- const rect = tooltipRef.current.getBoundingClientRect();
113
- const w = rect.width || tooltipRef.current.offsetWidth;
114
- const h = rect.height || tooltipRef.current.offsetHeight;
115
- if (w > 0 && h > 0) setTooltipSize({ width: w, height: h });
116
- };
117
- updateSize();
118
- requestAnimationFrame(updateSize);
119
- if (typeof ResizeObserver !== 'undefined') {
120
- const observer = new ResizeObserver(updateSize);
121
- observer.observe(tooltipRef.current);
122
- return () => observer.disconnect();
123
- }
124
- }, [shouldRender, label, shortcutKey, shortcutKeyPosition]);
125
-
126
- useLayoutEffect(() => {
127
- if (!shouldRender || !anchorRef.current || !tooltipRef.current) return;
128
- const calculatePosition = () => {
129
- if (!anchorRef.current || !tooltipRef.current) return;
130
- const a = anchorRef.current.getBoundingClientRect();
131
- const tw = tooltipRef.current.getBoundingClientRect().width || tooltipSize.width || 80;
132
- const th = tooltipRef.current.getBoundingClientRect().height || tooltipSize.height || 24;
133
- let x = 0, y = 0;
134
- switch (side) {
135
- case 'top':
136
- y = a.top - th - sideOffset;
137
- x = align === 'start' ? a.left + alignOffset : align === 'end' ? a.right - tw + alignOffset : a.left + a.width / 2 - tw / 2 + alignOffset;
138
- break;
139
- case 'bottom':
140
- y = a.bottom + sideOffset;
141
- x = align === 'start' ? a.left + alignOffset : align === 'end' ? a.right - tw + alignOffset : a.left + a.width / 2 - tw / 2 + alignOffset;
142
- break;
143
- case 'left':
144
- x = a.left - tw - sideOffset;
145
- y = align === 'start' ? a.top + alignOffset : align === 'end' ? a.bottom - th + alignOffset : a.top + a.height / 2 - th / 2 + alignOffset;
146
- break;
147
- case 'right':
148
- x = a.right + sideOffset;
149
- y = align === 'start' ? a.top + alignOffset : align === 'end' ? a.bottom - th + alignOffset : a.top + a.height / 2 - th / 2 + alignOffset;
150
- break;
151
- }
152
- setPosition({
153
- x: Math.min(Math.max(x, viewportPadding), window.innerWidth - tw - viewportPadding),
154
- y: Math.min(Math.max(y, viewportPadding), window.innerHeight - th - viewportPadding),
155
- });
156
- };
157
- calculatePosition();
158
- requestAnimationFrame(() => requestAnimationFrame(calculatePosition));
159
- }, [shouldRender, side, align, sideOffset, alignOffset, tooltipSize.width, tooltipSize.height, label]);
160
-
161
- useEffect(() => {
162
- if (!shouldRender) return;
163
- const onScrollResize = () => {
164
- if (!anchorRef.current || !tooltipRef.current) return;
165
- const a = anchorRef.current.getBoundingClientRect();
166
- const tw = tooltipSize.width || 80;
167
- const th = tooltipSize.height || 24;
168
- let x = 0, y = 0;
169
- switch (side) {
170
- case 'top': y = a.top - th - sideOffset; x = align === 'start' ? a.left + alignOffset : align === 'end' ? a.right - tw + alignOffset : a.left + a.width / 2 - tw / 2 + alignOffset; break;
171
- case 'bottom': y = a.bottom + sideOffset; x = align === 'start' ? a.left + alignOffset : align === 'end' ? a.right - tw + alignOffset : a.left + a.width / 2 - tw / 2 + alignOffset; break;
172
- case 'left': x = a.left - tw - sideOffset; y = align === 'start' ? a.top + alignOffset : align === 'end' ? a.bottom - th + alignOffset : a.top + a.height / 2 - th / 2 + alignOffset; break;
173
- case 'right': x = a.right + sideOffset; y = align === 'start' ? a.top + alignOffset : align === 'end' ? a.bottom - th + alignOffset : a.top + a.height / 2 - th / 2 + alignOffset; break;
174
- }
175
- setPosition({
176
- x: Math.min(Math.max(x, viewportPadding), window.innerWidth - tw - viewportPadding),
177
- y: Math.min(Math.max(y, viewportPadding), window.innerHeight - th - viewportPadding),
178
- });
179
- };
180
- window.addEventListener('scroll', onScrollResize, true);
181
- window.addEventListener('resize', onScrollResize);
182
- return () => { window.removeEventListener('scroll', onScrollResize, true); window.removeEventListener('resize', onScrollResize); };
183
- }, [shouldRender, side, align, sideOffset, alignOffset, tooltipSize.width, tooltipSize.height]);
184
-
185
- const keyHint = shortcutKey ? (
186
- <div className={styles.keyHint} aria-hidden>
187
- <Text variant="text-caption-emphasis" as="span" color="primary">{shortcutKey}</Text>
188
- </div>
189
- ) : null;
190
-
191
- const tooltipContent = shouldRender ? (
192
- <div
193
- ref={tooltipRef}
194
- id={tooltipId}
195
- className={`${styles.tooltip} ${isClosing ? styles.closing : ''}`}
196
- style={{
197
- position: 'fixed',
198
- left: 0,
199
- top: 0,
200
- transform: `translate(${Math.round(position.x)}px, ${Math.round(position.y)}px)`,
201
- willChange: 'transform',
202
- zIndex: 10000,
203
- }}
204
- role="tooltip"
205
- onMouseEnter={handleOpen}
206
- onMouseLeave={handleClose}
207
- >
208
- <div className={styles.tooltipInner}>
209
- {shortcutKey && shortcutKeyPosition === 'start' && keyHint}
210
- <Text variant="text-body-small" as="span" color="primary">{label}</Text>
211
- {shortcutKey && shortcutKeyPosition === 'end' && keyHint}
212
- </div>
213
- </div>
214
- ) : null;
215
-
216
- type TriggerProps = {
217
- onMouseEnter?: (e: React.MouseEvent) => void;
218
- onMouseLeave?: (e: React.MouseEvent) => void;
219
- onFocus?: (e: React.FocusEvent) => void;
220
- onBlur?: (e: React.FocusEvent) => void;
221
- 'aria-describedby'?: string;
222
- };
223
- const trigger = React.Children.only(children);
224
- const triggerEl = React.isValidElement<TriggerProps>(trigger) ? trigger : null;
225
- const existingDescribedBy = triggerEl?.props['aria-describedby'];
226
- const mergedDescribedBy =
227
- [existingDescribedBy, shouldRender ? tooltipId : undefined].filter(Boolean).join(' ') ||
228
- undefined;
229
- const triggerWithRefAndHandlers = triggerEl
230
- ? React.cloneElement(triggerEl, {
231
- ref: setAnchorRef,
232
- 'aria-describedby': mergedDescribedBy,
233
- onMouseEnter: (e: React.MouseEvent) => {
234
- handleOpen();
235
- triggerEl.props.onMouseEnter?.(e);
236
- },
237
- onMouseLeave: (e: React.MouseEvent) => {
238
- handleClose();
239
- triggerEl.props.onMouseLeave?.(e);
240
- },
241
- onFocus: (e: React.FocusEvent) => {
242
- handleOpen();
243
- triggerEl.props.onFocus?.(e);
244
- },
245
- onBlur: (e: React.FocusEvent) => {
246
- handleClose();
247
- triggerEl.props.onBlur?.(e);
248
- },
249
- } as Partial<TriggerProps> & { ref: typeof setAnchorRef })
250
- : children;
251
-
252
- return (
253
- <>
254
- {triggerWithRefAndHandlers}
255
- {usePortal ? createPortal(tooltipContent, document.body) : tooltipContent}
256
- </>
257
- );
258
- };
259
-
260
- Tooltip.displayName = 'Tooltip';
@@ -1,2 +0,0 @@
1
- export { Tooltip } from './Tooltip';
2
- export type { TooltipProps, TooltipSide, TooltipAlign } from './Tooltip';
@@ -1,4 +0,0 @@
1
- declare module '*.module.css' {
2
- const classes: { [key: string]: string };
3
- export default classes;
4
- }
@@ -1,195 +0,0 @@
1
- import { Meta } from '@storybook/addon-docs/blocks';
2
-
3
- <Meta title="Docs/Color Usage" />
4
-
5
- # Color Usage Guidelines
6
-
7
- ## 1. Objective
8
-
9
- This document explains how to use color tokens in product code and design implementation.
10
-
11
- The key distinction in this repository is:
12
-
13
- 1. semantic colors are for UI meaning, hierarchy, and component states,
14
- 2. data colors are for charts, graphs, and other visualization marks,
15
- 3. both layers are aliases on top of the reference palette.
16
-
17
- If a choice is available between semantic and data tokens, default to semantic for interface chrome and default to data for visualization marks.
18
-
19
- ## 2. Quick Decision Rule
20
-
21
- Use this rule first:
22
-
23
- 1. use semantic colors when the color communicates UI role,
24
- 2. use data colors when the color differentiates or encodes data,
25
- 3. use reference colors only when working on the token system itself.
26
-
27
- Examples:
28
-
29
- 1. page background, card text, button hover, error banner: **semantic**
30
- 2. bar series, line series, pie slices, heatmap steps: **data**
31
- 3. palette generation or alias maintenance: **reference**
32
-
33
- ## 3. Semantic Colors
34
-
35
- ### 3.1 What Semantic Means
36
-
37
- Semantic tokens are named by purpose, not by visual appearance. They should be chosen based on what the UI element is doing, not based on whether a blue, red, or grey value looks convenient.
38
-
39
- For example:
40
-
41
- - `background.primary` means the main surface
42
- - `foreground.secondary` means lower-emphasis content
43
- - `background.strong.negative` means a strong negative-intent surface
44
- - `interaction.hover` means an interaction overlay
45
- - `foreground.on-strong-background.primary` means primary content placed on a strong colored background
46
-
47
- ### 3.2 When To Use Semantic Colors
48
-
49
- Use semantic tokens for:
50
-
51
- 1. application and component surfaces,
52
- 2. text and icon hierarchy,
53
- 3. borders and strokes when they convey UI structure,
54
- 4. status styling such as brand, positive, warning, and negative,
55
- 5. hover and pressed overlays,
56
- 6. special product-domain markers that are part of the product language.
57
-
58
- Do not use semantic tokens to color arbitrary chart series just because a semantic hue looks nice.
59
-
60
- ### 3.3 Common Semantic Families
61
-
62
- #### Background
63
-
64
- Use background tokens for surfaces and fills.
65
-
66
- - `background.primary` and `background.secondary` are standard UI surfaces
67
- - `background.strong.*`, `background.bold.*`, `background.medium.*`, and `background.faint.*` express emphasis and intent
68
- - `background.translucent`, `background.shade`, and `background.transparent` are utility surface values
69
-
70
- Typical mapping:
71
-
72
- | Use case | Token |
73
- |----------|-------|
74
- | Nested card or panel surface | <code>background.primary</code> |
75
- | App shell or secondary panel | <code>background.secondary</code> |
76
- | Bold status banner | <code>background.bold.negative</code> |
77
- | Subtle info container | <code>background.faint.neutral</code> |
78
-
79
- #### Foreground
80
-
81
- Use foreground tokens for text, icons, and strokes that follow content hierarchy.
82
-
83
- - `foreground.primary` is the highest-emphasis content
84
- - `foreground.secondary` through `foreground.quaternary` reduce emphasis
85
- - `foreground.strong.*`, `foreground.bold.*`, `foreground.medium.*`, and `foreground.faint.*` provide colored content roles
86
- - `foreground.on-strong-background.*` is for content placed on strong colored surfaces
87
-
88
- Typical mapping:
89
-
90
- | Use case | Token |
91
- |----------|-------|
92
- | Main body text | <code>foreground.primary</code> |
93
- | Helper text or secondary icon | <code>foreground.secondary</code> |
94
- | Inactive or de-emphasized content | <code>foreground.tertiary</code> |
95
- | Disabled or very low-emphasis ornament | <code>foreground.quaternary</code> |
96
- | Text on a bold brand fill | <code>foreground.on-bold-background.primary</code> |
97
-
98
- > **Note:** `foreground.tertiary` is only about 3.35:1 in light mode and 3.23:1 in dark mode, so it does not meet AA for standard text sizes. Use it only for genuinely low-emphasis content.
99
-
100
- #### Interaction
101
-
102
- Use interaction tokens for overlays caused by state changes, not for base surfaces or replacement fills.
103
-
104
- - `interaction.hover` and `interaction.pressed` are for standard surfaces
105
- - `interaction.on-strong-background.hover` and similar are for colored fills
106
- - Interaction tokens preserve the underlying semantic meaning of the surface they sit on
107
-
108
- #### Border & Divider
109
-
110
- - `border.primary`, `border.secondary`, and `border.tertiary` are for container edges, field outlines, card strokes
111
- - `divider.divider` is for internal rules that separate content inside a surface
112
- - `divider.on-strong-background`, `divider.on-bold-background`, etc. are divider variants for colored fills
113
-
114
- > **Divider tokens** are narrower in purpose than border tokens. Use them only when drawing a horizontal or vertical rule inside a surface.
115
-
116
- #### Always-Dark
117
-
118
- Use `always-dark.*` only when the component must stay dark regardless of surrounding theme. This is a special-case family for fixed dark contexts.
119
-
120
- ### 3.4 Semantic Tone Selection
121
-
122
- When multiple semantic intensities exist, choose the one that matches the amount of emphasis required:
123
-
124
- | Tone | Purpose |
125
- |------|---------|
126
- | <code>strong</code> | Highest-emphasis fills or content |
127
- | <code>bold</code> | Strong but less dominant than strong |
128
- | <code>medium</code> | Mid-emphasis |
129
- | <code>faint</code> | Low-emphasis tinting or supporting treatment |
130
-
131
- When a surface uses a strong semantic background, pair it with the matching `on-background` content token rather than reusing normal foreground tokens.
132
-
133
- ## 4. Data Colors
134
-
135
- ### 4.1 When To Use Data Colors
136
-
137
- Use data tokens for:
138
-
139
- 1. chart series colors,
140
- 2. legend keys,
141
- 3. map overlays and plotted markers,
142
- 4. heatmaps and gradients tied to values,
143
- 5. ordered or diverging color ramps.
144
-
145
- Do **not** use data tokens for page backgrounds, standard text hierarchy, button states, banners, or form validation.
146
-
147
- ### 4.2 Common Data Families
148
-
149
- | Family | Purpose | Examples |
150
- |--------|---------|----------|
151
- | <code>data-misc</code> | Neutral visualization elements | Gridlines, reference lines, axes |
152
- | <code>data-category</code> | Nominal categories (unordered) | Multi-series bars, pie slices, legend palettes |
153
- | <code>data-win-loss</code> | Outcome polarity | Pass/fail, win/loss, positive/negative |
154
- | <code>data-sequence-&#42;</code> | Ordered single-direction values | Intensity ramps, ordered buckets, choropleths |
155
- | <code>data-diverging-&#42;</code> | Values extending from a midpoint | Above/below target, deviation from baseline |
156
-
157
- > **Important:** When using `data-category` colors together, use them in numeric order (1, 2, 3...). This is especially important when categories touch each other (donut charts, stacked bars).
158
-
159
- ### 4.3 How Semantic And Data Work Together
160
-
161
- | Element | Token source |
162
- |---------|-------------|
163
- | Chart card background | <code>background.primary</code> (semantic) |
164
- | Chart title | <code>foreground.primary</code> (semantic) |
165
- | Axis labels | <code>foreground.secondary</code> (semantic) |
166
- | Chart bars/lines | <code>data-category.&#42;</code> or <code>data-sequence-&#42;</code> (data) |
167
- | Alert banner around chart | <code>background.faint.warning</code> (semantic) |
168
-
169
- ## 5. Accessibility & Pairing
170
-
171
- ### Preferred Text Pairings
172
-
173
- | Background | Safe foreground | Lowest contrast |
174
- |-----------|----------------|-----------------|
175
- | <code>background.primary</code> | <code>foreground.primary</code> or <code>.secondary</code> | ~5.74:1 light, ~6.13:1 dark |
176
- | <code>background.strong.&#42;</code> | <code>foreground.on-strong-background.primary</code> or <code>.secondary</code> | ~6.54:1 light, ~5.28:1 dark |
177
- | <code>background.bold.&#42;</code> | <code>foreground.on-bold-background.primary</code> or <code>.secondary</code> | ~5.45:1 light, ~4.89:1 dark |
178
-
179
- ### Tone Pairs
180
-
181
- - `background.bold.*` with `foreground.faint.*` — safe, lowest floor ~4.54:1
182
- - `background.faint.*` with `foreground.bold.*` — safe, same reciprocal rule
183
- - `background.strong.*` with `foreground.medium.*` — near-AA, not guaranteed for every intent
184
-
185
- ## 6. Anti-Patterns
186
-
187
- Avoid these patterns:
188
-
189
- 1. choosing a token only because the hue looks visually convenient,
190
- 2. using semantic status colors as a chart palette,
191
- 3. using data colors for ordinary UI text or surfaces,
192
- 4. mixing reference tokens directly into product code,
193
- 5. pairing strong backgrounds with regular foreground tokens instead of `on-background` tokens,
194
- 6. using `divider.*` as a generic border token,
195
- 7. changing token meaning across screens without a strong product reason.