@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,575 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import React from 'react';
3
- import { Button } from './Button';
4
- import { Surface } from '@/components/Surface';
5
- import type { SurfaceIntent, SurfaceContrast } from '@/components/Surface';
6
- import type { ButtonVariant, ButtonElevation, ButtonIntent, ButtonContrast, ButtonSize, ButtonBackground } from './Button';
7
- import type { IconComponent } from '@/types/icons';
8
-
9
- /** Placeholder icon component for stories (no real icon dependency). */
10
- const PlaceholderIcon: IconComponent = ({ size = 20 }) => (
11
- <svg width={size} height={size} viewBox="0 0 20 20" fill="currentColor">
12
- <circle cx="10" cy="10" r="6" />
13
- </svg>
14
- );
15
-
16
- const meta: Meta<typeof Button> = {
17
- title: 'Primitives (Reviewed)/Button',
18
- component: Button,
19
- args: {
20
- label: 'Button',
21
- variant: 'primary',
22
- intent: 'brand',
23
- size: 'md',
24
- contrast: 'bold',
25
- elevation: 'none',
26
- rounded: false,
27
- inactive: false,
28
- loading: false,
29
- dropdown: false,
30
- fullWidth: false,
31
- },
32
- argTypes: {
33
- variant: { control: 'select', options: ['primary', 'secondary'] },
34
- elevation: { control: 'select', options: ['elevated', 'flat', 'none', 'floating'] },
35
- intent: { control: 'select', options: ['none', 'neutral', 'brand', 'ai', 'negative', 'warning', 'caution', 'positive'] },
36
- size: { control: 'select', options: ['xs', 'sm', 'md', 'lg'] },
37
- contrast: { control: 'select', options: ['strong', 'bold', 'medium', 'faint'] },
38
- label: { control: 'text' },
39
- rounded: { control: 'boolean' },
40
- inactive: { control: 'boolean' },
41
- loading: { control: 'boolean' },
42
- dropdown: { control: 'boolean' },
43
- background: { control: 'select', options: ['faint', 'medium', 'bold', 'strong', 'always-dark'] },
44
- fullWidth: { control: 'boolean' },
45
- badgeCount:{ control: 'number' },
46
- width: { control: 'text' },
47
- icon: {
48
- control: 'boolean',
49
- mapping: { true: PlaceholderIcon, false: undefined },
50
- },
51
- },
52
- };
53
-
54
- export default meta;
55
- type Story = StoryObj<typeof Button>;
56
-
57
- export const Playground: Story = {};
58
-
59
- // ─── Matrix ───────────────────────────────────────────────────────────────────
60
-
61
- const INTENTS: ButtonIntent[] = ['none', 'neutral', 'brand', 'ai', 'negative', 'warning', 'caution', 'positive'];
62
- const CONTRASTS: ButtonContrast[] = ['strong', 'bold', 'medium', 'faint'];
63
- const SIZES: ButtonSize[] = ['lg', 'md', 'sm', 'xs'];
64
- const VARIANTS: ButtonVariant[] = ['primary', 'secondary'];
65
- const ELEVATIONS: ButtonElevation[] = ['elevated', 'flat', 'none', 'floating'];
66
-
67
- const col: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 8, alignItems: 'flex-start' };
68
- const row: React.CSSProperties = { display: 'flex', gap: 8, alignItems: 'center' };
69
- const lbl = (text: string): React.CSSProperties => ({ fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 80, flexShrink: 0 });
70
- const section = (text: string) => (
71
- <div style={{ fontSize: 11, fontWeight: 600, letterSpacing: '0.05em', textTransform: 'uppercase', color: '#555', marginTop: 8 }}>
72
- {text}
73
- </div>
74
- );
75
- const divider = <hr style={{ border: 'none', borderTop: '1px solid #e0e0e0', margin: '16px 0' }} />;
76
-
77
- export const Matrix: Story = {
78
- parameters: { layout: 'padded' },
79
- render: () => (
80
- <div style={{ display: 'flex', flexDirection: 'column', gap: 0, fontFamily: 'sans-serif' }}>
81
-
82
- {/* ── Variants × Intent ── */}
83
- {section('Variants × Intent — md, bold contrast')}
84
- <div style={{ ...col, marginTop: 12 }}>
85
- <div style={row}>
86
- <span style={lbl('')}></span>
87
- {VARIANTS.map(v => (
88
- <span key={v} style={{ ...lbl(''), minWidth: 100, textAlign: 'center' }}>{v}</span>
89
- ))}
90
- <span style={{ ...lbl(''), minWidth: 100, textAlign: 'center' }}>secondary / none</span>
91
- </div>
92
- {INTENTS.map(intent => (
93
- <div key={intent} style={row}>
94
- <span style={lbl(intent)}>{intent}</span>
95
- {VARIANTS.map(v => (
96
- <div key={v} style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
97
- <Button variant={v} intent={intent} label="Label" size="md" />
98
- </div>
99
- ))}
100
- <div style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
101
- <Button variant="secondary" intent={intent} elevation="none" label="Label" size="md" />
102
- </div>
103
- </div>
104
- ))}
105
- </div>
106
-
107
- {divider}
108
-
109
- {/* ── Elevation levels ── */}
110
- {section('Elevation levels — secondary variant')}
111
- <div style={{ ...col, marginTop: 12 }}>
112
- {ELEVATIONS.map(elev => (
113
- <div key={elev} style={row}>
114
- <span style={lbl(elev)}>{elev}</span>
115
- <Button variant="secondary" elevation={elev} label="Label" />
116
- <Button variant="secondary" elevation={elev} icon={PlaceholderIcon} label="Label" />
117
- <Button variant="secondary" elevation={elev} icon={PlaceholderIcon} aria-label="action" />
118
- </div>
119
- ))}
120
- </div>
121
-
122
- {divider}
123
-
124
- {/* ── Elevation levels — primary ── */}
125
- {section('Elevation levels — primary variant')}
126
- <div style={{ ...col, marginTop: 12 }}>
127
- {ELEVATIONS.map(elev => (
128
- <div key={elev} style={row}>
129
- <span style={lbl(elev)}>{elev}</span>
130
- <Button variant="primary" intent="brand" elevation={elev} label="Brand" />
131
- <Button variant="primary" intent="none" elevation={elev} label="None" />
132
- </div>
133
- ))}
134
- </div>
135
-
136
- {divider}
137
-
138
- {/* ── Contrast × Intent (primary only) ── */}
139
- {section('Primary × Contrast × Intent')}
140
- <div style={{ ...col, marginTop: 12 }}>
141
- <div style={row}>
142
- <span style={lbl('')}></span>
143
- {CONTRASTS.map(c => (
144
- <span key={c} style={{ ...lbl(''), minWidth: 90, textAlign: 'center' }}>{c}</span>
145
- ))}
146
- </div>
147
- {INTENTS.filter(i => i !== 'none').map(intent => (
148
- <div key={intent} style={row}>
149
- <span style={lbl(intent)}>{intent}</span>
150
- {CONTRASTS.map(contrast => (
151
- <div key={contrast} style={{ minWidth: 90, display: 'flex', justifyContent: 'center' }}>
152
- <Button variant="primary" intent={intent} contrast={contrast} label="Label" size="md" elevation="flat" />
153
- </div>
154
- ))}
155
- </div>
156
- ))}
157
- </div>
158
-
159
- {divider}
160
-
161
- {/* ── Sizes × Variants ── */}
162
- {section('Sizes × Variants')}
163
- <div style={{ ...col, marginTop: 12 }}>
164
- <div style={row}>
165
- <span style={lbl('')}></span>
166
- {[...VARIANTS, 'ghost'].map(v => (
167
- <span key={v} style={{ ...lbl(''), minWidth: 100, textAlign: 'center' }}>{v === 'ghost' ? 'secondary/none' : v}</span>
168
- ))}
169
- </div>
170
- {SIZES.flatMap(size => ([
171
- { key: `${size}-label`, size, iconProp: false, labelProp: true },
172
- { key: `${size}-icon`, size, iconProp: true, labelProp: false },
173
- { key: `${size}-iconlabel`, size, iconProp: true, labelProp: true },
174
- ])).map(({ key, size, iconProp, labelProp }) => (
175
- <div key={key} style={row}>
176
- <span style={lbl(key)}>{key}</span>
177
- {VARIANTS.map(v => (
178
- <div key={v} style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
179
- <Button variant={v} size={size} label={labelProp ? 'Label' : undefined} icon={iconProp ? PlaceholderIcon : undefined} aria-label="action" />
180
- </div>
181
- ))}
182
- <div style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
183
- <Button variant="secondary" elevation="none" size={size} label={labelProp ? 'Label' : undefined} icon={iconProp ? PlaceholderIcon : undefined} aria-label="action" />
184
- </div>
185
- </div>
186
- ))}
187
- </div>
188
-
189
- {divider}
190
-
191
- {/* ── Icon states ── */}
192
- {section('Icon states — md')}
193
- <div style={{ ...col, marginTop: 12 }}>
194
- {([
195
- { combo: 'icon only', iconProp: true, labelProp: false, roundedProp: false, dropdownProp: false },
196
- { combo: 'icon only rounded', iconProp: true, labelProp: false, roundedProp: true, dropdownProp: false },
197
- { combo: 'icon + label', iconProp: true, labelProp: true, roundedProp: false, dropdownProp: false },
198
- { combo: 'label only', iconProp: false, labelProp: true, roundedProp: false, dropdownProp: false },
199
- { combo: 'dropdown', iconProp: false, labelProp: true, roundedProp: false, dropdownProp: true },
200
- { combo: 'icon + dropdown', iconProp: true, labelProp: true, roundedProp: false, dropdownProp: true },
201
- ] as const).map(({ combo, iconProp, labelProp, roundedProp, dropdownProp }) => (
202
- <div key={combo} style={row}>
203
- <span style={lbl(combo)}>{combo}</span>
204
- {VARIANTS.map(v => (
205
- <div key={v} style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
206
- <Button variant={v} label={labelProp ? 'Label' : undefined} icon={iconProp ? PlaceholderIcon : undefined} rounded={roundedProp} dropdown={dropdownProp} aria-label="action" />
207
- </div>
208
- ))}
209
- <div style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
210
- <Button variant="secondary" elevation="none" label={labelProp ? 'Label' : undefined} icon={iconProp ? PlaceholderIcon : undefined} rounded={roundedProp} dropdown={dropdownProp} aria-label="action" />
211
- </div>
212
- </div>
213
- ))}
214
- </div>
215
-
216
- {divider}
217
-
218
- {/* ── States ── */}
219
- {section('States')}
220
- <div style={{ ...col, marginTop: 12 }}>
221
- {([
222
- { label: 'default', props: {} },
223
- { label: 'Inactive', props: { inactive: true } },
224
- { label: 'rounded', props: { rounded: true } },
225
- ] as const).map(({ label: stateLabel, props }) => (
226
- <div key={stateLabel} style={row}>
227
- <span style={lbl(stateLabel)}>{stateLabel}</span>
228
- {VARIANTS.map(v => (
229
- <div key={v} style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
230
- <Button variant={v} label="Label" {...(props as object)} />
231
- </div>
232
- ))}
233
- <div style={{ minWidth: 100, display: 'flex', justifyContent: 'center' }}>
234
- <Button variant="secondary" elevation="none" label="Label" {...(props as object)} />
235
- </div>
236
- </div>
237
- ))}
238
- </div>
239
-
240
- </div>
241
- ),
242
- };
243
-
244
- // ─── Individual stories ───────────────────────────────────────────────────────
245
-
246
- export const Variants: Story = {
247
- render: () => (
248
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
249
- <Button variant="primary" label="Primary" />
250
- <Button variant="secondary" label="Secondary (flat)" />
251
- <Button variant="secondary" elevation="elevated" label="Secondary elevated" />
252
- <Button variant="secondary" elevation="none" label="Ghost" />
253
- </div>
254
- ),
255
- };
256
-
257
- export const Sizes: Story = {
258
- render: () => (
259
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
260
- <Button size="lg" label="Large" />
261
- <Button size="md" label="Medium" />
262
- <Button size="sm" label="Small" />
263
- <Button size="xs" label="Extra Small" />
264
- </div>
265
- ),
266
- };
267
-
268
- export const Intents: Story = {
269
- render: () => (
270
- <div style={{ display: 'flex', gap: 12, alignItems: 'center', flexWrap: 'wrap' }}>
271
- <Button intent="none" label="None" />
272
- <Button intent="neutral" label="Neutral" />
273
- <Button intent="brand" label="Brand" />
274
- <Button intent="ai" label="AI" />
275
- <Button intent="negative" label="Negative" />
276
- <Button intent="warning" label="Warning" />
277
- <Button intent="caution" label="Caution" />
278
- <Button intent="positive" label="Positive" />
279
- </div>
280
- ),
281
- };
282
-
283
- export const Elevation: Story = {
284
- render: () => (
285
- <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
286
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
287
- <span style={{ fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 80 }}>primary</span>
288
- <Button variant="primary" label="elevated" elevation="elevated" />
289
- <Button variant="primary" label="flat" elevation="flat" />
290
- <Button variant="primary" label="none" elevation="none" />
291
- <Button variant="primary" label="floating" elevation="floating" />
292
- </div>
293
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
294
- <span style={{ fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 80 }}>secondary</span>
295
- <Button variant="secondary" label="elevated" elevation="elevated" />
296
- <Button variant="secondary" label="flat" elevation="flat" />
297
- <Button variant="secondary" label="none" elevation="none" />
298
- <Button variant="secondary" label="floating" elevation="floating" />
299
- </div>
300
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
301
- <span style={{ fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 80 }}>p / intentNone</span>
302
- <Button variant="primary" intent="none" label="elevated" elevation="elevated" />
303
- <Button variant="primary" intent="none" label="flat" elevation="flat" />
304
- <Button variant="primary" intent="none" label="none" elevation="none" />
305
- <Button variant="primary" intent="none" label="floating" elevation="floating" />
306
- </div>
307
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
308
- <span style={{ fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 80 }}>FAB</span>
309
- <Button variant="primary" icon={PlaceholderIcon} rounded elevation="floating" aria-label="FAB" />
310
- <Button variant="secondary" icon={PlaceholderIcon} rounded elevation="floating" aria-label="FAB secondary" />
311
- </div>
312
- </div>
313
- ),
314
- };
315
-
316
- export const IconOnly: Story = {
317
- render: () => (
318
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
319
- <Button variant="primary" icon={PlaceholderIcon} aria-label="Action" />
320
- <Button variant="secondary" icon={PlaceholderIcon} aria-label="Action" />
321
- <Button variant="secondary" elevation="none" icon={PlaceholderIcon} aria-label="Action" />
322
- </div>
323
- ),
324
- };
325
-
326
- export const IconAndLabel: Story = {
327
- render: () => (
328
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
329
- <Button variant="primary" icon={PlaceholderIcon} label="Primary" />
330
- <Button variant="secondary" icon={PlaceholderIcon} label="Secondary" />
331
- <Button variant="secondary" elevation="none" icon={PlaceholderIcon} label="Ghost" />
332
- </div>
333
- ),
334
- };
335
-
336
- export const WithBadge: Story = {
337
- render: () => (
338
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
339
- <Button variant="secondary" label="Messages" badgeCount={3} />
340
- <Button variant="secondary" label="Notifications" badgeCount={9} />
341
- <Button variant="secondary" label="Alerts" badgeCount={12} />
342
- </div>
343
- ),
344
- };
345
-
346
- export const Inactive: Story = {
347
- render: () => (
348
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
349
- <Button variant="primary" label="Primary" inactive />
350
- <Button variant="secondary" label="Secondary" inactive />
351
- <Button variant="secondary" elevation="none" label="Ghost" inactive />
352
- </div>
353
- ),
354
- };
355
-
356
- export const Rounded: Story = {
357
- render: () => (
358
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
359
- <Button variant="primary" label="Rounded" rounded />
360
- <Button variant="secondary" label="Rounded" rounded />
361
- <Button variant="secondary" elevation="none" label="Rounded" rounded />
362
- </div>
363
- ),
364
- };
365
-
366
- export const Contrasts: Story = {
367
- render: () => (
368
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
369
- <Button variant="primary" label="Strong" contrast="strong" elevation="flat" />
370
- <Button variant="primary" label="Bold" contrast="bold" elevation="flat" />
371
- <Button variant="primary" label="Medium" contrast="medium" elevation="flat" />
372
- <Button variant="primary" label="Faint" contrast="faint" elevation="flat" />
373
- </div>
374
- ),
375
- };
376
-
377
- export const Loading: Story = {
378
- render: () => (
379
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
380
- <Button variant="primary" label="Saving" loading />
381
- <Button variant="secondary" label="Saving" loading />
382
- <Button variant="secondary" elevation="none" label="Saving" loading />
383
- <Button variant="primary" icon={PlaceholderIcon} label="Saving" loading />
384
- <Button variant="primary" icon={PlaceholderIcon} loading aria-label="Loading" />
385
- </div>
386
- ),
387
- };
388
-
389
- export const FullWidth: Story = {
390
- render: () => (
391
- <div style={{ display: 'flex', flexDirection: 'column', gap: 12, width: 300 }}>
392
- <Button variant="primary" label="Full Width Button" fullWidth />
393
- <Button variant="secondary" icon={PlaceholderIcon} label="Full Width with Icon" fullWidth />
394
- <Button variant="primary" label="This label is very long and should truncate gracefully" fullWidth />
395
- </div>
396
- ),
397
- };
398
-
399
- export const AsLink: Story = {
400
- render: () => (
401
- <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
402
- <Button as="a" href="#" variant="primary" label="Link button" />
403
- <Button as="a" href="#" variant="secondary" label="Link button" />
404
- <Button as="a" href="#" variant="secondary" elevation="none" label="Link button" />
405
- </div>
406
- ),
407
- };
408
-
409
- // ─── Background Context ──────────────────────────────────────────────────────
410
-
411
- type SurfaceConfig = { bg: ButtonBackground; intent: SurfaceIntent; contrast: SurfaceContrast };
412
-
413
- const COLORED_SURFACES: SurfaceConfig[] = [
414
- { bg: 'faint', intent: 'brand', contrast: 'faint' },
415
- { bg: 'medium', intent: 'brand', contrast: 'medium' },
416
- { bg: 'bold', intent: 'brand', contrast: 'bold' },
417
- { bg: 'strong', intent: 'brand', contrast: 'strong' },
418
- { bg: 'faint', intent: 'neutral', contrast: 'faint' },
419
- { bg: 'bold', intent: 'neutral', contrast: 'bold' },
420
- { bg: 'strong', intent: 'neutral', contrast: 'strong' },
421
- { bg: 'faint', intent: 'negative', contrast: 'faint' },
422
- { bg: 'bold', intent: 'negative', contrast: 'bold' },
423
- { bg: 'bold', intent: 'ai', contrast: 'bold' },
424
- { bg: 'bold', intent: 'positive', contrast: 'bold' },
425
- { bg: 'bold', intent: 'warning', contrast: 'bold' },
426
- ];
427
-
428
- const bgRow = (label: string, children: React.ReactNode) => (
429
- <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>
430
- <span style={{ fontSize: 10, fontFamily: 'monospace', opacity: 0.6, minWidth: 96, flexShrink: 0 }}>{label}</span>
431
- {children}
432
- </div>
433
- );
434
-
435
- export const BackgroundContext: Story = {
436
- parameters: { layout: 'padded' },
437
- render: () => (
438
- <div style={{ display: 'flex', flexDirection: 'column', gap: 24, fontFamily: 'sans-serif' }}>
439
- <div style={{ fontSize: 11, fontWeight: 600, letterSpacing: '0.05em', textTransform: 'uppercase', color: '#555' }}>
440
- All button variants on colored surfaces — hover to test interaction layers
441
- </div>
442
-
443
- {COLORED_SURFACES.map(({ bg, intent, contrast }) => (
444
- <Surface key={`${bg}-${intent}`} intent={intent} contrast={contrast} radius="md" style={{ padding: 20 }}>
445
- <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>
446
- <span style={{ fontSize: 10, fontFamily: 'monospace', opacity: 0.7, marginBottom: 2 }}>
447
- background="{bg}" — {contrast} {intent}
448
- </span>
449
-
450
- {bgRow('primary', <>
451
- <Button variant="primary" intent="brand" label="Brand" background={bg} />
452
- <Button variant="primary" intent="neutral" label="Neutral" background={bg} />
453
- <Button variant="primary" intent="ai" label="AI" background={bg} />
454
- <Button variant="primary" intent="negative" label="Negative" background={bg} />
455
- <Button variant="primary" intent="positive" label="Positive" background={bg} />
456
- <Button variant="primary" intent="warning" label="Warning" background={bg} />
457
- <Button variant="primary" intent="none" label="Inverted" background={bg} />
458
- </>)}
459
-
460
- {bgRow('primary +icon', <>
461
- <Button variant="primary" intent="brand" icon={PlaceholderIcon} label="Brand" background={bg} />
462
- <Button variant="primary" intent="neutral" icon={PlaceholderIcon} label="Neutral" background={bg} />
463
- <Button variant="primary" intent="negative" icon={PlaceholderIcon} label="Negative" background={bg} />
464
- <Button variant="primary" intent="none" icon={PlaceholderIcon} label="Inverted" background={bg} />
465
- <Button variant="primary" intent="brand" icon={PlaceholderIcon} aria-label="brand" background={bg} />
466
- <Button variant="primary" intent="none" icon={PlaceholderIcon} aria-label="inverted" background={bg} />
467
- </>)}
468
-
469
- {bgRow('sec. flat', <>
470
- <Button variant="secondary" elevation="flat" label="Default" background={bg} />
471
- <Button variant="secondary" elevation="flat" intent="brand" label="Brand" background={bg} />
472
- <Button variant="secondary" elevation="flat" intent="neutral" label="Neutral" background={bg} />
473
- <Button variant="secondary" elevation="flat" intent="negative" label="Negative" background={bg} />
474
- <Button variant="secondary" elevation="flat" intent="ai" label="AI" background={bg} />
475
- <Button variant="secondary" elevation="flat" icon={PlaceholderIcon} label="Icon" background={bg} />
476
- <Button variant="secondary" elevation="flat" icon={PlaceholderIcon} aria-label="icon" background={bg} />
477
- </>)}
478
-
479
- {bgRow('sec. ghost', <>
480
- <Button variant="secondary" elevation="none" label="Default" background={bg} />
481
- <Button variant="secondary" elevation="none" intent="brand" label="Brand" background={bg} />
482
- <Button variant="secondary" elevation="none" intent="neutral" label="Neutral" background={bg} />
483
- <Button variant="secondary" elevation="none" intent="negative" label="Negative" background={bg} />
484
- <Button variant="secondary" elevation="none" intent="ai" label="AI" background={bg} />
485
- <Button variant="secondary" elevation="none" icon={PlaceholderIcon} label="Icon" background={bg} />
486
- <Button variant="secondary" elevation="none" icon={PlaceholderIcon} aria-label="icon" background={bg} />
487
- </>)}
488
-
489
- {bgRow('inverted', <>
490
- <Button variant="primary" intent="none" elevation="none" label="None" background={bg} />
491
- <Button variant="primary" intent="none" elevation="flat" label="Flat" background={bg} />
492
- <Button variant="primary" intent="none" elevation="elevated" label="Elevated" background={bg} />
493
- <Button variant="primary" intent="none" icon={PlaceholderIcon} label="Icon" background={bg} />
494
- <Button variant="primary" intent="none" rounded label="Rounded" background={bg} />
495
- <Button variant="primary" intent="none" inactive label="Inactive" background={bg} />
496
- </>)}
497
-
498
- {bgRow('states', <>
499
- <Button variant="primary" intent="brand" inactive label="Inactive" background={bg} />
500
- <Button variant="secondary" elevation="flat" inactive label="Inactive" background={bg} />
501
- <Button variant="primary" intent="brand" rounded label="Rounded" background={bg} />
502
- <Button variant="secondary" elevation="flat" rounded label="Rounded" background={bg} />
503
- <Button variant="primary" intent="brand" loading label="Loading" background={bg} />
504
- <Button variant="secondary" elevation="flat" dropdown label="Dropdown" background={bg} />
505
- </>)}
506
- </div>
507
- </Surface>
508
- ))}
509
-
510
- {/* Always-dark surface */}
511
- <div style={{ background: 'var(--color-always-dark-background)', borderRadius: 8, padding: 20 }}>
512
- <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>
513
- <span style={{ fontSize: 10, fontFamily: 'monospace', color: 'rgba(255,255,255,0.5)', marginBottom: 2 }}>
514
- background="always-dark" — custom dark surface
515
- </span>
516
-
517
- {bgRow('primary', <>
518
- <Button variant="primary" intent="brand" label="Brand" background="always-dark" />
519
- <Button variant="primary" intent="neutral" label="Neutral" background="always-dark" />
520
- <Button variant="primary" intent="ai" label="AI" background="always-dark" />
521
- <Button variant="primary" intent="negative" label="Negative" background="always-dark" />
522
- <Button variant="primary" intent="positive" label="Positive" background="always-dark" />
523
- <Button variant="primary" intent="warning" label="Warning" background="always-dark" />
524
- <Button variant="primary" intent="none" label="Inverted" background="always-dark" />
525
- </>)}
526
-
527
- {bgRow('primary +icon', <>
528
- <Button variant="primary" intent="brand" icon={PlaceholderIcon} label="Brand" background="always-dark" />
529
- <Button variant="primary" intent="negative" icon={PlaceholderIcon} label="Negative" background="always-dark" />
530
- <Button variant="primary" intent="none" icon={PlaceholderIcon} label="Inverted" background="always-dark" />
531
- <Button variant="primary" intent="brand" icon={PlaceholderIcon} aria-label="brand" background="always-dark" />
532
- <Button variant="primary" intent="none" icon={PlaceholderIcon} aria-label="inverted" background="always-dark" />
533
- </>)}
534
-
535
- {bgRow('sec. flat', <>
536
- <Button variant="secondary" elevation="flat" label="Default" background="always-dark" />
537
- <Button variant="secondary" elevation="flat" intent="brand" label="Brand" background="always-dark" />
538
- <Button variant="secondary" elevation="flat" intent="neutral" label="Neutral" background="always-dark" />
539
- <Button variant="secondary" elevation="flat" intent="negative" label="Negative" background="always-dark" />
540
- <Button variant="secondary" elevation="flat" intent="ai" label="AI" background="always-dark" />
541
- <Button variant="secondary" elevation="flat" icon={PlaceholderIcon} label="Icon" background="always-dark" />
542
- <Button variant="secondary" elevation="flat" icon={PlaceholderIcon} aria-label="icon" background="always-dark" />
543
- </>)}
544
-
545
- {bgRow('sec. ghost', <>
546
- <Button variant="secondary" elevation="none" label="Default" background="always-dark" />
547
- <Button variant="secondary" elevation="none" intent="brand" label="Brand" background="always-dark" />
548
- <Button variant="secondary" elevation="none" intent="neutral" label="Neutral" background="always-dark" />
549
- <Button variant="secondary" elevation="none" intent="negative" label="Negative" background="always-dark" />
550
- <Button variant="secondary" elevation="none" intent="ai" label="AI" background="always-dark" />
551
- <Button variant="secondary" elevation="none" icon={PlaceholderIcon} label="Icon" background="always-dark" />
552
- <Button variant="secondary" elevation="none" icon={PlaceholderIcon} aria-label="icon" background="always-dark" />
553
- </>)}
554
-
555
- {bgRow('inverted', <>
556
- <Button variant="primary" intent="none" elevation="none" label="None" background="always-dark" />
557
- <Button variant="primary" intent="none" elevation="flat" label="Flat" background="always-dark" />
558
- <Button variant="primary" intent="none" elevation="elevated" label="Elevated" background="always-dark" />
559
- <Button variant="primary" intent="none" icon={PlaceholderIcon} label="Icon" background="always-dark" />
560
- <Button variant="primary" intent="none" rounded label="Rounded" background="always-dark" />
561
- <Button variant="primary" intent="none" inactive label="Inactive" background="always-dark" />
562
- </>)}
563
-
564
- {bgRow('states', <>
565
- <Button variant="primary" intent="brand" inactive label="Inactive" background="always-dark" />
566
- <Button variant="secondary" elevation="flat" inactive label="Inactive" background="always-dark" />
567
- <Button variant="primary" intent="brand" rounded label="Rounded" background="always-dark" />
568
- <Button variant="primary" intent="brand" loading label="Loading" background="always-dark" />
569
- <Button variant="secondary" elevation="flat" dropdown label="Dropdown" background="always-dark" />
570
- </>)}
571
- </div>
572
- </div>
573
- </div>
574
- ),
575
- };