@ds-mo/ui 0.2.4 → 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 (356) 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 +33 -29
  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/index.css +0 -2
  147. package/dist/index.d.ts +0 -969
  148. package/dist/index.js +0 -2492
  149. package/dist/index.js.map +0 -1
  150. package/dist/r/accordion.json +0 -79
  151. package/dist/r/badge.json +0 -69
  152. package/dist/r/banner.json +0 -90
  153. package/dist/r/breadcrumb.json +0 -70
  154. package/dist/r/button-group.json +0 -65
  155. package/dist/r/button.json +0 -137
  156. package/dist/r/card.json +0 -82
  157. package/dist/r/checkbox.json +0 -91
  158. package/dist/r/divider.json +0 -57
  159. package/dist/r/empty-state.json +0 -69
  160. package/dist/r/error-boundary.json +0 -66
  161. package/dist/r/fade.json +0 -65
  162. package/dist/r/field.json +0 -71
  163. package/dist/r/header.json +0 -67
  164. package/dist/r/input.json +0 -77
  165. package/dist/r/loader.json +0 -54
  166. package/dist/r/menu.json +0 -130
  167. package/dist/r/modal.json +0 -93
  168. package/dist/r/pagination.json +0 -80
  169. package/dist/r/radio.json +0 -85
  170. package/dist/r/registry.json +0 -1600
  171. package/dist/r/scrollbar.json +0 -68
  172. package/dist/r/select.json +0 -93
  173. package/dist/r/sidebar.json +0 -105
  174. package/dist/r/skeleton.json +0 -72
  175. package/dist/r/slider.json +0 -87
  176. package/dist/r/surface.json +0 -97
  177. package/dist/r/tab-group.json +0 -72
  178. package/dist/r/tab.json +0 -71
  179. package/dist/r/table.json +0 -110
  180. package/dist/r/tag.json +0 -110
  181. package/dist/r/text.json +0 -94
  182. package/dist/r/toast.json +0 -77
  183. package/dist/r/toggle-button-group.json +0 -65
  184. package/dist/r/toggle-button.json +0 -94
  185. package/dist/r/toggle.json +0 -65
  186. package/dist/r/tooltip.json +0 -86
  187. package/src/components/Accordion/Accordion.module.css +0 -66
  188. package/src/components/Accordion/Accordion.stories.tsx +0 -95
  189. package/src/components/Accordion/Accordion.tsx +0 -122
  190. package/src/components/Accordion/index.ts +0 -2
  191. package/src/components/Badge/Badge.module.css +0 -6
  192. package/src/components/Badge/Badge.stories.tsx +0 -99
  193. package/src/components/Badge/Badge.tsx +0 -23
  194. package/src/components/Badge/index.ts +0 -2
  195. package/src/components/Banner/Banner.module.css +0 -67
  196. package/src/components/Banner/Banner.stories.tsx +0 -81
  197. package/src/components/Banner/Banner.tsx +0 -109
  198. package/src/components/Banner/index.ts +0 -2
  199. package/src/components/Breadcrumb/Breadcrumb.module.css +0 -46
  200. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -72
  201. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -68
  202. package/src/components/Breadcrumb/index.ts +0 -2
  203. package/src/components/Button/Button.mdx +0 -143
  204. package/src/components/Button/Button.module.css +0 -343
  205. package/src/components/Button/Button.stories.tsx +0 -575
  206. package/src/components/Button/Button.tsx +0 -201
  207. package/src/components/Button/index.ts +0 -10
  208. package/src/components/ButtonGroup/ButtonGroup.module.css +0 -157
  209. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -384
  210. package/src/components/ButtonGroup/ButtonGroup.tsx +0 -122
  211. package/src/components/ButtonGroup/index.ts +0 -2
  212. package/src/components/Card/Card.module.css +0 -36
  213. package/src/components/Card/Card.stories.tsx +0 -78
  214. package/src/components/Card/Card.tsx +0 -53
  215. package/src/components/Card/index.ts +0 -2
  216. package/src/components/Checkbox/Checkbox.module.css +0 -47
  217. package/src/components/Checkbox/Checkbox.stories.tsx +0 -129
  218. package/src/components/Checkbox/Checkbox.tsx +0 -68
  219. package/src/components/Checkbox/index.ts +0 -2
  220. package/src/components/Divider/Divider.module.css +0 -19
  221. package/src/components/Divider/Divider.stories.tsx +0 -55
  222. package/src/components/Divider/Divider.tsx +0 -28
  223. package/src/components/Divider/index.ts +0 -2
  224. package/src/components/EmptyState/EmptyState.module.css +0 -8
  225. package/src/components/EmptyState/EmptyState.stories.tsx +0 -53
  226. package/src/components/EmptyState/EmptyState.tsx +0 -31
  227. package/src/components/EmptyState/index.ts +0 -2
  228. package/src/components/ErrorBoundary/ErrorBoundary.module.css +0 -18
  229. package/src/components/ErrorBoundary/ErrorBoundary.stories.tsx +0 -38
  230. package/src/components/ErrorBoundary/ErrorBoundary.tsx +0 -50
  231. package/src/components/ErrorBoundary/index.ts +0 -2
  232. package/src/components/Fade/Fade.module.css +0 -31
  233. package/src/components/Fade/Fade.stories.tsx +0 -35
  234. package/src/components/Fade/Fade.tsx +0 -33
  235. package/src/components/Fade/index.ts +0 -2
  236. package/src/components/Field/Field.module.css +0 -5
  237. package/src/components/Field/Field.stories.tsx +0 -111
  238. package/src/components/Field/Field.tsx +0 -22
  239. package/src/components/Field/index.ts +0 -2
  240. package/src/components/Header/Header.module.css +0 -33
  241. package/src/components/Header/Header.stories.tsx +0 -52
  242. package/src/components/Header/Header.tsx +0 -42
  243. package/src/components/Header/index.ts +0 -2
  244. package/src/components/Input/Input.module.css +0 -71
  245. package/src/components/Input/Input.stories.tsx +0 -135
  246. package/src/components/Input/Input.tsx +0 -76
  247. package/src/components/Input/index.ts +0 -2
  248. package/src/components/LabelWrap/LabelWrap.module.css +0 -34
  249. package/src/components/LabelWrap/LabelWrap.tsx +0 -32
  250. package/src/components/LabelWrap/index.ts +0 -1
  251. package/src/components/Loader/Loader.module.css +0 -9
  252. package/src/components/Loader/Loader.stories.tsx +0 -44
  253. package/src/components/Loader/Loader.tsx +0 -43
  254. package/src/components/Loader/index.ts +0 -2
  255. package/src/components/Menu/DestructiveMenuItem.module.css +0 -57
  256. package/src/components/Menu/DestructiveMenuItem.tsx +0 -64
  257. package/src/components/Menu/Menu.module.css +0 -49
  258. package/src/components/Menu/Menu.stories.tsx +0 -129
  259. package/src/components/Menu/Menu.tsx +0 -269
  260. package/src/components/Menu/MenuItem.module.css +0 -84
  261. package/src/components/Menu/MenuItem.tsx +0 -101
  262. package/src/components/Menu/index.ts +0 -6
  263. package/src/components/Modal/Modal.module.css +0 -67
  264. package/src/components/Modal/Modal.stories.tsx +0 -71
  265. package/src/components/Modal/Modal.tsx +0 -122
  266. package/src/components/Modal/index.ts +0 -2
  267. package/src/components/Pagination/Pagination.module.css +0 -64
  268. package/src/components/Pagination/Pagination.stories.tsx +0 -51
  269. package/src/components/Pagination/Pagination.tsx +0 -103
  270. package/src/components/Pagination/index.ts +0 -2
  271. package/src/components/Radio/Radio.module.css +0 -61
  272. package/src/components/Radio/Radio.stories.tsx +0 -101
  273. package/src/components/Radio/Radio.tsx +0 -108
  274. package/src/components/Radio/index.ts +0 -2
  275. package/src/components/Scrollbar/Scrollbar.module.css +0 -81
  276. package/src/components/Scrollbar/Scrollbar.stories.tsx +0 -46
  277. package/src/components/Scrollbar/Scrollbar.tsx +0 -187
  278. package/src/components/Scrollbar/index.ts +0 -2
  279. package/src/components/Select/Select.module.css +0 -31
  280. package/src/components/Select/Select.stories.tsx +0 -59
  281. package/src/components/Select/Select.tsx +0 -92
  282. package/src/components/Select/index.ts +0 -2
  283. package/src/components/Sidebar/Sidebar.module.css +0 -161
  284. package/src/components/Sidebar/Sidebar.stories.tsx +0 -125
  285. package/src/components/Sidebar/Sidebar.tsx +0 -129
  286. package/src/components/Sidebar/SidebarItem.tsx +0 -57
  287. package/src/components/Sidebar/SidebarSection.tsx +0 -42
  288. package/src/components/Sidebar/index.ts +0 -6
  289. package/src/components/Skeleton/Skeleton.module.css +0 -53
  290. package/src/components/Skeleton/Skeleton.stories.tsx +0 -89
  291. package/src/components/Skeleton/Skeleton.tsx +0 -66
  292. package/src/components/Skeleton/index.ts +0 -2
  293. package/src/components/Slider/Slider.module.css +0 -62
  294. package/src/components/Slider/Slider.stories.tsx +0 -120
  295. package/src/components/Slider/Slider.tsx +0 -74
  296. package/src/components/Slider/index.ts +0 -2
  297. package/src/components/Surface/Surface.module.css +0 -222
  298. package/src/components/Surface/Surface.stories.tsx +0 -213
  299. package/src/components/Surface/Surface.tsx +0 -219
  300. package/src/components/Surface/index.ts +0 -12
  301. package/src/components/Tab/Tab.module.css +0 -66
  302. package/src/components/Tab/Tab.stories.tsx +0 -103
  303. package/src/components/Tab/Tab.tsx +0 -41
  304. package/src/components/Tab/index.ts +0 -2
  305. package/src/components/TabGroup/TabGroup.module.css +0 -26
  306. package/src/components/TabGroup/TabGroup.stories.tsx +0 -60
  307. package/src/components/TabGroup/TabGroup.tsx +0 -83
  308. package/src/components/TabGroup/index.ts +0 -2
  309. package/src/components/Table/Table.module.css +0 -130
  310. package/src/components/Table/Table.stories.tsx +0 -111
  311. package/src/components/Table/Table.tsx +0 -226
  312. package/src/components/Table/index.ts +0 -11
  313. package/src/components/Tag/Tag.module.css +0 -270
  314. package/src/components/Tag/Tag.stories.tsx +0 -399
  315. package/src/components/Tag/Tag.tsx +0 -162
  316. package/src/components/Tag/index.ts +0 -2
  317. package/src/components/Text/Text.module.css +0 -166
  318. package/src/components/Text/Text.stories.tsx +0 -212
  319. package/src/components/Text/Text.tsx +0 -181
  320. package/src/components/Text/index.ts +0 -13
  321. package/src/components/Toast/Toast.module.css +0 -91
  322. package/src/components/Toast/Toast.stories.tsx +0 -66
  323. package/src/components/Toast/Toast.tsx +0 -182
  324. package/src/components/Toast/index.ts +0 -8
  325. package/src/components/Toggle/Toggle.module.css +0 -87
  326. package/src/components/Toggle/Toggle.stories.tsx +0 -85
  327. package/src/components/Toggle/Toggle.tsx +0 -52
  328. package/src/components/Toggle/index.ts +0 -2
  329. package/src/components/ToggleButton/ToggleButton.module.css +0 -172
  330. package/src/components/ToggleButton/ToggleButton.stories.tsx +0 -299
  331. package/src/components/ToggleButton/ToggleButton.tsx +0 -118
  332. package/src/components/ToggleButton/index.ts +0 -2
  333. package/src/components/ToggleButtonGroup/ToggleButtonGroup.module.css +0 -163
  334. package/src/components/ToggleButtonGroup/ToggleButtonGroup.stories.tsx +0 -341
  335. package/src/components/ToggleButtonGroup/ToggleButtonGroup.tsx +0 -111
  336. package/src/components/ToggleButtonGroup/index.ts +0 -2
  337. package/src/components/Tooltip/Tooltip.module.css +0 -45
  338. package/src/components/Tooltip/Tooltip.stories.tsx +0 -46
  339. package/src/components/Tooltip/Tooltip.tsx +0 -224
  340. package/src/components/Tooltip/index.ts +0 -2
  341. package/src/css-modules.d.ts +0 -4
  342. package/src/docs/ColorUsage.mdx +0 -195
  343. package/src/docs/ElevationUsage.mdx +0 -95
  344. package/src/docs/Introduction.mdx +0 -97
  345. package/src/docs/OpticalSizing.mdx +0 -178
  346. package/src/docs/TypographyUsage.mdx +0 -121
  347. package/src/index.ts +0 -154
  348. package/src/stories/Colors.stories.tsx +0 -528
  349. package/src/stories/Dimensions.stories.tsx +0 -200
  350. package/src/stories/Effects.stories.tsx +0 -231
  351. package/src/stories/Icons.stories.tsx +0 -159
  352. package/src/stories/Typography.stories.tsx +0 -157
  353. package/src/types/icons.ts +0 -15
  354. package/src/types/index.ts +0 -1
  355. package/src/utils/cn.ts +0 -6
  356. package/src/utils/css-tokens.ts +0 -22
@@ -1,2 +0,0 @@
1
- export { Card } from './Card';
2
- export type { CardProps, CardElevation, CardRadius } from './Card';
@@ -1,47 +0,0 @@
1
- .checkbox {
2
- display: flex;
3
- align-items: center;
4
- gap: var(--dimension-space-050);
5
- padding: var(--dimension-space-075);
6
- height: var(--dimension-size-400);
7
- box-sizing: border-box;
8
- cursor: pointer;
9
- -webkit-user-select: none;
10
- user-select: none;
11
- border-radius: var(--dimension-radius-075);
12
- transition: background-color var(--effect-motion-short-2);
13
- }
14
-
15
- .checkbox:hover { background-color: var(--color-interaction-hover); }
16
- .checkbox:active { background-color: var(--color-interaction-pressed); }
17
-
18
- .inactive {
19
- cursor: not-allowed;
20
- opacity: 0.5;
21
- pointer-events: none;
22
- }
23
-
24
- /* Fallback checkbox box (when no icon components provided) */
25
- .box {
26
- width: 20px;
27
- height: 20px;
28
- border: 1.5px solid var(--color-foreground-secondary);
29
- border-radius: var(--dimension-radius-050);
30
- display: flex;
31
- align-items: center;
32
- justify-content: center;
33
- flex-shrink: 0;
34
- transition: all var(--effect-motion-short-2);
35
- }
36
-
37
- .boxChecked {
38
- background-color: var(--color-foreground-primary);
39
- border-color: var(--color-foreground-primary);
40
- }
41
-
42
- .checkmark {
43
- color: var(--color-foreground-on-bold-background-primary);
44
- font-size: 14px;
45
- line-height: 1;
46
- font-weight: 700;
47
- }
@@ -1,129 +0,0 @@
1
- import React, { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Checkbox } from './Checkbox';
4
-
5
- const meta: Meta<typeof Checkbox> = {
6
- title: 'Primitives/Checkbox',
7
- component: Checkbox,
8
- args: {
9
- label: 'Accept terms',
10
- checked: false,
11
- indeterminate: false,
12
- inactive: false,
13
- },
14
- argTypes: {
15
- label: { control: 'text' },
16
- checked: { control: 'boolean' },
17
- indeterminate: { control: 'boolean' },
18
- inactive: { control: 'boolean' },
19
- },
20
- };
21
-
22
- export default meta;
23
- type Story = StoryObj<typeof Checkbox>;
24
-
25
- const Controlled = (props: React.ComponentProps<typeof Checkbox>) => {
26
- const [checked, setChecked] = useState(props.checked ?? false);
27
- return <Checkbox {...props} checked={checked} onChange={setChecked} />;
28
- };
29
-
30
- export const Playground: Story = {
31
- render: (args) => <Controlled {...args} />,
32
- };
33
-
34
- // ─── Matrix ───────────────────────────────────────────────────────────────────
35
-
36
- const col: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 10 };
37
- const row: React.CSSProperties = { display: 'flex', gap: 32, alignItems: 'center' };
38
- const labelStyle: React.CSSProperties = { fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 80, flexShrink: 0 };
39
- const section = (text: string) => (
40
- <div style={{ fontSize: 11, fontWeight: 600, letterSpacing: '0.05em', textTransform: 'uppercase', color: '#555', marginTop: 8 }}>
41
- {text}
42
- </div>
43
- );
44
-
45
- export const Matrix: Story = {
46
- parameters: { layout: 'padded' },
47
- render: () => (
48
- <div style={{ ...col, fontFamily: 'sans-serif', gap: 0 }}>
49
- {section('States × Enabled / Disabled')}
50
- <div style={{ ...col, marginTop: 12 }}>
51
- <div style={row}>
52
- <span style={labelStyle}></span>
53
- <span style={{ ...labelStyle, textAlign: 'center' }}>enabled</span>
54
- <span style={{ ...labelStyle, textAlign: 'center' }}>disabled</span>
55
- </div>
56
- <div style={row}>
57
- <span style={labelStyle}>unchecked</span>
58
- <Controlled label="Option" checked={false} />
59
- <Checkbox label="Option" checked={false} inactive onChange={() => {}} />
60
- </div>
61
- <div style={row}>
62
- <span style={labelStyle}>checked</span>
63
- <Controlled label="Option" checked={true} />
64
- <Checkbox label="Option" checked={true} inactive onChange={() => {}} />
65
- </div>
66
- <div style={row}>
67
- <span style={labelStyle}>indeterminate</span>
68
- <Checkbox label="Select all" checked={false} indeterminate onChange={() => {}} />
69
- <Checkbox label="Select all" checked={false} indeterminate inactive onChange={() => {}} />
70
- </div>
71
- </div>
72
- </div>
73
- ),
74
- };
75
-
76
- // ─── Individual stories ───────────────────────────────────────────────────────
77
-
78
- export const Default: Story = {
79
- render: () => <Controlled label="Accept terms and conditions" />,
80
- };
81
-
82
- export const Checked: Story = {
83
- render: () => <Controlled label="Checked option" checked />,
84
- };
85
-
86
- export const Indeterminate: Story = {
87
- render: () => (
88
- <Checkbox
89
- label="Select all (3 of 5 selected)"
90
- checked={false}
91
- indeterminate
92
- onChange={() => {}}
93
- />
94
- ),
95
- };
96
-
97
- export const Inactive: Story = {
98
- render: () => (
99
- <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
100
- <Checkbox label="Disabled unchecked" checked={false} inactive onChange={() => {}} />
101
- <Checkbox label="Disabled checked" checked={true} inactive onChange={() => {}} />
102
- <Checkbox label="Disabled indeterminate" checked={false} indeterminate inactive onChange={() => {}} />
103
- </div>
104
- ),
105
- };
106
-
107
- export const Group: Story = {
108
- render: () => {
109
- const [selected, setSelected] = useState<Set<string>>(new Set(['option-b']));
110
- const toggle = (key: string) => setSelected(prev => {
111
- const next = new Set(prev);
112
- next.has(key) ? next.delete(key) : next.add(key);
113
- return next;
114
- });
115
- const options = ['Option A', 'Option B', 'Option C', 'Option D'];
116
- return (
117
- <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>
118
- {options.map(opt => (
119
- <Checkbox
120
- key={opt}
121
- label={opt}
122
- checked={selected.has(opt.toLowerCase().replace(' ', '-'))}
123
- onChange={() => toggle(opt.toLowerCase().replace(' ', '-'))}
124
- />
125
- ))}
126
- </div>
127
- );
128
- },
129
- };
@@ -1,68 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import { Text } from '@/components/Text';
4
- import type { IconComponent } from '@/types/icons';
5
- import styles from './Checkbox.module.css';
6
-
7
- export interface CheckboxProps {
8
- label: string;
9
- checked?: boolean;
10
- indeterminate?: boolean;
11
- onChange?: (checked: boolean) => void;
12
- inactive?: boolean;
13
- className?: string;
14
- /** Icon for checked state. */
15
- checkedIcon?: IconComponent;
16
- /** Icon for unchecked state. */
17
- uncheckedIcon?: IconComponent;
18
- /** Icon for indeterminate state. */
19
- indeterminateIcon?: IconComponent;
20
- }
21
-
22
- export const Checkbox = forwardRef<HTMLDivElement, CheckboxProps>(
23
- (
24
- {
25
- label,
26
- checked = false,
27
- indeterminate = false,
28
- onChange,
29
- inactive = false,
30
- className,
31
- checkedIcon: CheckedIcon,
32
- uncheckedIcon: UncheckedIcon,
33
- indeterminateIcon: IndeterminateIcon,
34
- },
35
- ref
36
- ) => {
37
- const handleClick = () => {
38
- if (!inactive) onChange?.(!checked);
39
- };
40
-
41
- const iconColor = indeterminate || checked ? 'var(--color-foreground-primary)' : 'var(--color-foreground-secondary)';
42
- const Icon = indeterminate ? IndeterminateIcon : checked ? CheckedIcon : UncheckedIcon;
43
-
44
- return (
45
- <div
46
- ref={ref}
47
- role="checkbox"
48
- aria-checked={indeterminate ? 'mixed' : checked}
49
- aria-inactive={inactive}
50
- tabIndex={inactive ? -1 : 0}
51
- className={cn(styles.checkbox, inactive && styles.inactive, className)}
52
- onClick={handleClick}
53
- onKeyDown={e => { if (e.key === ' ' || e.key === 'Enter') { e.preventDefault(); handleClick(); } }}
54
- >
55
- {Icon ? <Icon size={20} color={iconColor} /> : (
56
- <span className={cn(styles.box, (checked || indeterminate) && styles.boxChecked)}>
57
- {(checked || indeterminate) && <span className={styles.checkmark}>{indeterminate ? '−' : '✓'}</span>}
58
- </span>
59
- )}
60
- <Text variant="text-body-medium" as="span" color="inherit">
61
- {label}
62
- </Text>
63
- </div>
64
- );
65
- }
66
- );
67
-
68
- Checkbox.displayName = 'Checkbox';
@@ -1,2 +0,0 @@
1
- export { Checkbox } from './Checkbox';
2
- export type { CheckboxProps } from './Checkbox';
@@ -1,19 +0,0 @@
1
- .divider {
2
- border: none;
3
- margin: 0;
4
- flex-shrink: 0;
5
- background-color: var(--color-border-secondary);
6
- }
7
-
8
- /* Horizontal (default) */
9
- .divider:not(.vertical) {
10
- width: 100%;
11
- height: 1px;
12
- }
13
-
14
- /* Vertical */
15
- .vertical {
16
- width: 1px;
17
- height: 100%;
18
- align-self: stretch;
19
- }
@@ -1,55 +0,0 @@
1
- import React from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Divider } from './Divider';
4
- import { Text } from '@/components/Text';
5
-
6
- const meta: Meta<typeof Divider> = {
7
- title: 'Classic/Divider',
8
- component: Divider,
9
- args: {
10
- orientation: 'horizontal',
11
- },
12
- argTypes: {
13
- orientation: { control: 'select', options: ['horizontal', 'vertical'] },
14
- },
15
- };
16
-
17
- export default meta;
18
- type Story = StoryObj<typeof Divider>;
19
-
20
- export const Playground: Story = {};
21
-
22
- export const Horizontal: Story = {
23
- render: () => (
24
- <div style={{ display: 'flex', flexDirection: 'column', gap: 16, width: 300 }}>
25
- <Text variant="text-body-medium" as="p">Section one content above the divider.</Text>
26
- <Divider />
27
- <Text variant="text-body-medium" as="p">Section two content below the divider.</Text>
28
- </div>
29
- ),
30
- };
31
-
32
- export const Vertical: Story = {
33
- render: () => (
34
- <div style={{ display: 'flex', alignItems: 'center', gap: 16, height: 40 }}>
35
- <Text variant="text-body-medium" as="span">Left</Text>
36
- <Divider orientation="vertical" />
37
- <Text variant="text-body-medium" as="span">Right</Text>
38
- </div>
39
- ),
40
- };
41
-
42
- export const InList: Story = {
43
- render: () => (
44
- <div style={{ display: 'flex', flexDirection: 'column', width: 280 }}>
45
- {['Item 1', 'Item 2', 'Item 3', 'Item 4'].map((item, i) => (
46
- <React.Fragment key={item}>
47
- {i > 0 && <Divider />}
48
- <div style={{ padding: '12px 0' }}>
49
- <Text variant="text-body-medium" as="span">{item}</Text>
50
- </div>
51
- </React.Fragment>
52
- ))}
53
- </div>
54
- ),
55
- };
@@ -1,28 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import styles from './Divider.module.css';
4
-
5
- export type DividerOrientation = 'horizontal' | 'vertical';
6
-
7
- export interface DividerProps {
8
- /** Direction of the divider line. */
9
- orientation?: DividerOrientation;
10
- className?: string;
11
- }
12
-
13
- export const Divider = forwardRef<HTMLHRElement, DividerProps>(
14
- ({ orientation = 'horizontal', className }, ref) => (
15
- <hr
16
- ref={ref}
17
- role="separator"
18
- aria-orientation={orientation}
19
- className={cn(
20
- styles.divider,
21
- orientation === 'vertical' && styles.vertical,
22
- className
23
- )}
24
- />
25
- )
26
- );
27
-
28
- Divider.displayName = 'Divider';
@@ -1,2 +0,0 @@
1
- export { Divider } from './Divider';
2
- export type { DividerProps, DividerOrientation } from './Divider';
@@ -1,8 +0,0 @@
1
- .emptyState {
2
- display: flex;
3
- align-items: center;
4
- justify-content: center;
5
- height: 100%;
6
- min-height: 400px;
7
- width: 100%;
8
- }
@@ -1,53 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { EmptyState } from './EmptyState';
3
-
4
- const meta: Meta<typeof EmptyState> = {
5
- title: 'Components/EmptyState',
6
- component: EmptyState,
7
- };
8
-
9
- export default meta;
10
- type Story = StoryObj<typeof EmptyState>;
11
-
12
- export const NoContent: Story = {
13
- args: {
14
- type: 'no-content',
15
- },
16
- };
17
-
18
- export const NoResults: Story = {
19
- args: {
20
- type: 'no-results',
21
- },
22
- };
23
-
24
- export const NoResultsFilter: Story = {
25
- args: {
26
- type: 'no-results-filter',
27
- },
28
- };
29
-
30
- export const NoAccess: Story = {
31
- args: {
32
- type: 'no-access',
33
- },
34
- };
35
-
36
- export const CustomMessage: Story = {
37
- args: {
38
- type: 'no-content',
39
- message: 'Create your first project to get started.',
40
- },
41
- };
42
-
43
- export const AllTypes: Story = {
44
- render: () => (
45
- <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 24, padding: 24 }}>
46
- {(['no-content', 'no-results', 'no-results-filter', 'no-access'] as const).map(type => (
47
- <div key={type} style={{ border: '1px solid var(--color-border-tertiary)', borderRadius: 8, padding: 24 }}>
48
- <EmptyState type={type} />
49
- </div>
50
- ))}
51
- </div>
52
- ),
53
- };
@@ -1,31 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import { Text } from '@/components/Text';
4
- import styles from './EmptyState.module.css';
5
-
6
- export type EmptyStateType = 'no-content' | 'no-results' | 'no-results-filter' | 'no-access';
7
-
8
- const defaultMessages: Record<EmptyStateType, string> = {
9
- 'no-content': 'No page contents to display.',
10
- 'no-results': 'No results found.',
11
- 'no-results-filter': 'No results found. Please update search criteria.',
12
- 'no-access': "You don't have access to this page.",
13
- };
14
-
15
- export interface EmptyStateProps {
16
- type?: EmptyStateType;
17
- message?: string;
18
- className?: string;
19
- }
20
-
21
- export const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(
22
- ({ type = 'no-content', message, className }, ref) => (
23
- <div ref={ref} className={cn(styles.emptyState, className)}>
24
- <Text variant="text-body-medium" as="p" color="secondary">
25
- {message || defaultMessages[type]}
26
- </Text>
27
- </div>
28
- )
29
- );
30
-
31
- EmptyState.displayName = 'EmptyState';
@@ -1,2 +0,0 @@
1
- export { EmptyState } from './EmptyState';
2
- export type { EmptyStateProps, EmptyStateType } from './EmptyState';
@@ -1,18 +0,0 @@
1
- .errorBoundary {
2
- display: flex;
3
- flex-direction: column;
4
- align-items: center;
5
- justify-content: center;
6
- min-height: 400px;
7
- padding: var(--dimension-space-400);
8
- gap: var(--dimension-space-200);
9
- }
10
-
11
- .errorDetails {
12
- display: flex;
13
- flex-direction: column;
14
- align-items: center;
15
- gap: var(--dimension-space-200);
16
- max-width: 600px;
17
- text-align: center;
18
- }
@@ -1,38 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { ErrorBoundary } from './ErrorBoundary';
3
-
4
- const meta: Meta<typeof ErrorBoundary> = {
5
- title: 'Components/ErrorBoundary',
6
- component: ErrorBoundary,
7
- };
8
-
9
- export default meta;
10
- type Story = StoryObj<typeof ErrorBoundary>;
11
-
12
- const ThrowingComponent = () => {
13
- throw new Error('Something went wrong!');
14
- };
15
-
16
- export const WithError: Story = {
17
- render: () => (
18
- <ErrorBoundary>
19
- <ThrowingComponent />
20
- </ErrorBoundary>
21
- ),
22
- };
23
-
24
- export const WithCustomFallback: Story = {
25
- render: () => (
26
- <ErrorBoundary fallback={<div style={{ padding: 24, color: 'var(--color-foreground-bold-negative)' }}>Custom error UI</div>}>
27
- <ThrowingComponent />
28
- </ErrorBoundary>
29
- ),
30
- };
31
-
32
- export const NoError: Story = {
33
- render: () => (
34
- <ErrorBoundary>
35
- <div style={{ padding: 24 }}>This content renders normally.</div>
36
- </ErrorBoundary>
37
- ),
38
- };
@@ -1,50 +0,0 @@
1
- import React, { Component, ReactNode } from 'react';
2
- import { EmptyState } from '@/components/EmptyState';
3
- import { Text } from '@/components/Text';
4
- import styles from './ErrorBoundary.module.css';
5
-
6
- export interface ErrorBoundaryProps {
7
- children: ReactNode;
8
- fallback?: ReactNode;
9
- }
10
-
11
- interface ErrorBoundaryState {
12
- hasError: boolean;
13
- error: Error | null;
14
- }
15
-
16
- export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
17
- constructor(props: ErrorBoundaryProps) {
18
- super(props);
19
- this.state = { hasError: false, error: null };
20
- }
21
-
22
- static getDerivedStateFromError(error: Error): ErrorBoundaryState {
23
- return { hasError: true, error };
24
- }
25
-
26
- override componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
27
- console.error('ErrorBoundary caught an error:', error, errorInfo);
28
- }
29
-
30
- handleReset = () => {
31
- this.setState({ hasError: false, error: null });
32
- };
33
-
34
- override render() {
35
- if (this.state.hasError) {
36
- if (this.props.fallback) return this.props.fallback;
37
- return (
38
- <div className={styles.errorBoundary}>
39
- <EmptyState type="no-content" />
40
- <div className={styles.errorDetails}>
41
- <Text variant="text-body-small" as="p" color="secondary">
42
- Something went wrong. Please refresh the page.
43
- </Text>
44
- </div>
45
- </div>
46
- );
47
- }
48
- return this.props.children;
49
- }
50
- }
@@ -1,2 +0,0 @@
1
- export { ErrorBoundary } from './ErrorBoundary';
2
- export type { ErrorBoundaryProps } from './ErrorBoundary';
@@ -1,31 +0,0 @@
1
- .fade {
2
- position: absolute;
3
- pointer-events: none;
4
- z-index: 10;
5
- transform: translateZ(0);
6
- backface-visibility: hidden;
7
- }
8
-
9
- @media (prefers-reduced-motion: reduce) {
10
- .fade { transition: none; }
11
- }
12
-
13
- .fadeTop {
14
- top: 0; left: 0; right: 0;
15
- background: linear-gradient(to bottom, var(--background) 0%, var(--background) 50%, transparent 100%);
16
- }
17
-
18
- .fadeBottom {
19
- bottom: 0; left: 0; right: 0;
20
- background: linear-gradient(to top, var(--background) 0%, transparent 100%);
21
- }
22
-
23
- .fadeLeft {
24
- top: 0; bottom: 0; left: 0;
25
- background: linear-gradient(to right, var(--background) 0%, transparent 100%);
26
- }
27
-
28
- .fadeRight {
29
- top: 0; bottom: 0; right: 0;
30
- background: linear-gradient(to left, var(--background) 0%, transparent 100%);
31
- }
@@ -1,35 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Fade } from './Fade';
3
-
4
- const meta: Meta<typeof Fade> = {
5
- title: 'Layout/Fade',
6
- component: Fade,
7
- };
8
-
9
- export default meta;
10
- type Story = StoryObj<typeof Fade>;
11
-
12
- export const Sides: Story = {
13
- render: () => (
14
- <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 24, padding: 24 }}>
15
- {(['top', 'bottom', 'left', 'right'] as const).map(side => (
16
- <div
17
- key={side}
18
- style={{
19
- position: 'relative',
20
- height: 120,
21
- background: 'var(--color-background-secondary)',
22
- borderRadius: 8,
23
- overflow: 'hidden',
24
- display: 'flex',
25
- alignItems: 'center',
26
- justifyContent: 'center',
27
- }}
28
- >
29
- <span>{side}</span>
30
- <Fade side={side} height="40px" />
31
- </div>
32
- ))}
33
- </div>
34
- ),
35
- };
@@ -1,33 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import styles from './Fade.module.css';
4
-
5
- export type FadeSide = 'top' | 'bottom' | 'left' | 'right';
6
-
7
- export interface FadeProps {
8
- side: FadeSide;
9
- height: string;
10
- background?: string;
11
- className?: string;
12
- style?: React.CSSProperties;
13
- }
14
-
15
- const sideClassMap: Record<FadeSide, string> = {
16
- top: 'fadeTop',
17
- bottom: 'fadeBottom',
18
- left: 'fadeLeft',
19
- right: 'fadeRight',
20
- };
21
-
22
- export const Fade = forwardRef<HTMLDivElement, FadeProps>(
23
- ({ side, height, background = 'var(--color-background-secondary)', className, style = {} }, ref) => (
24
- <div
25
- ref={ref}
26
- className={cn(styles.fade, styles[sideClassMap[side]], className)}
27
- style={{ ...style, height, '--background': background } as React.CSSProperties}
28
- aria-hidden="true"
29
- />
30
- )
31
- );
32
-
33
- Fade.displayName = 'Fade';
@@ -1,2 +0,0 @@
1
- export { Fade } from './Fade';
2
- export type { FadeProps, FadeSide } from './Fade';