@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,5 +0,0 @@
1
- .field {
2
- display: flex;
3
- flex-direction: column;
4
- gap: var(--dimension-space-050);
5
- }
@@ -1,111 +0,0 @@
1
- import React, { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Field } from './Field';
4
- import { Input } from '@/components/Input';
5
- import { Slider } from '@/components/Slider';
6
-
7
- const meta: Meta<typeof Field> = {
8
- title: 'Primitives/Field',
9
- component: Field,
10
- args: {
11
- label: 'Label',
12
- },
13
- argTypes: {
14
- label: { control: 'text' },
15
- },
16
- };
17
-
18
- export default meta;
19
- type Story = StoryObj<typeof Field>;
20
-
21
- export const Playground: Story = {
22
- render: (args) => {
23
- const [value, setValue] = useState('');
24
- return (
25
- <div style={{ width: 280 }}>
26
- <Field {...args}>
27
- <Input id={args.id} value={value} onChange={(e) => setValue(e.target.value)} placeholder="Enter value…" />
28
- </Field>
29
- </div>
30
- );
31
- },
32
- };
33
-
34
- // ─── Matrix ───────────────────────────────────────────────────────────────────
35
-
36
- const col: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 20 };
37
- const section = (text: string) => (
38
- <div style={{ fontSize: 11, fontWeight: 600, letterSpacing: '0.05em', textTransform: 'uppercase', color: '#555' }}>
39
- {text}
40
- </div>
41
- );
42
- const divider = <hr style={{ border: 'none', borderTop: '1px solid #e0e0e0', margin: '4px 0 20px' }} />;
43
-
44
- export const Matrix: Story = {
45
- parameters: { layout: 'padded' },
46
- render: () => {
47
- const [textVal, setTextVal] = useState('');
48
- const [emailVal, setEmailVal] = useState('');
49
- const [searchVal, setSearchVal] = useState('');
50
- const [sliderVal, setSliderVal] = useState(50);
51
- const [opacityVal, setOpacityVal] = useState(0.8);
52
-
53
- return (
54
- <div style={{ ...col, fontFamily: 'sans-serif', maxWidth: 320 }}>
55
-
56
- {section('With Input')}
57
- {divider}
58
- <Field label="Full name" id="name">
59
- <Input id="name" value={textVal} onChange={(e) => setTextVal(e.target.value)} placeholder="e.g. Jane Smith" />
60
- </Field>
61
- <Field label="Email address" id="email">
62
- <Input id="email" type="email" value={emailVal} onChange={(e) => setEmailVal(e.target.value)} placeholder="user@example.com" />
63
- </Field>
64
- <Field label="Search" id="search">
65
- <Input id="search" type="search" value={searchVal} onChange={(e) => setSearchVal(e.target.value)} placeholder="Search…" />
66
- </Field>
67
- <Field label="Disabled field" id="disabled">
68
- <Input id="disabled" value="Read-only value" disabled onChange={() => {}} />
69
- </Field>
70
-
71
- {section('With Slider')}
72
- {divider}
73
- <Field label="Volume">
74
- <Slider label="Volume" value={sliderVal} onChange={setSliderVal} />
75
- </Field>
76
- <Field label="Opacity">
77
- <Slider label="Opacity" value={opacityVal} onChange={setOpacityVal} min={0} max={1} step={0.05} />
78
- </Field>
79
-
80
- </div>
81
- );
82
- },
83
- };
84
-
85
- // ─── Individual stories ───────────────────────────────────────────────────────
86
-
87
- export const WithInput: Story = {
88
- render: () => {
89
- const [value, setValue] = useState('');
90
- return (
91
- <div style={{ width: 280 }}>
92
- <Field label="Name" id="name-field">
93
- <Input id="name-field" value={value} onChange={(e) => setValue(e.target.value)} placeholder="Enter your name" />
94
- </Field>
95
- </div>
96
- );
97
- },
98
- };
99
-
100
- export const WithSlider: Story = {
101
- render: () => {
102
- const [value, setValue] = useState(50);
103
- return (
104
- <div style={{ width: 280 }}>
105
- <Field label="Volume">
106
- <Slider label="Volume" value={value} onChange={setValue} />
107
- </Field>
108
- </div>
109
- );
110
- },
111
- };
@@ -1,22 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import { Text } from '@/components/Text';
4
- import styles from './Field.module.css';
5
-
6
- export interface FieldProps {
7
- label: string;
8
- children: React.ReactNode;
9
- id?: string;
10
- className?: string;
11
- }
12
-
13
- export const Field = forwardRef<HTMLDivElement, FieldProps>(
14
- ({ label, children, id, className }, ref) => (
15
- <div ref={ref} className={cn(styles.field, className)}>
16
- <Text variant="text-body-small-emphasis" as="label" htmlFor={id}>{label}</Text>
17
- {children}
18
- </div>
19
- )
20
- );
21
-
22
- Field.displayName = 'Field';
@@ -1,2 +0,0 @@
1
- export { Field } from './Field';
2
- export type { FieldProps } from './Field';
@@ -1,33 +0,0 @@
1
- .header {
2
- display: flex;
3
- align-items: center;
4
- justify-content: space-between;
5
- height: var(--dimension-size-600, 48px);
6
- padding: 0 var(--dimension-space-100);
7
- flex-shrink: 0;
8
- gap: var(--dimension-space-100);
9
- }
10
-
11
- .left {
12
- display: flex;
13
- align-items: center;
14
- gap: var(--dimension-space-100);
15
- flex-shrink: 0;
16
- min-width: 0;
17
- }
18
-
19
- .center {
20
- display: flex;
21
- align-items: center;
22
- justify-content: center;
23
- gap: var(--dimension-space-050);
24
- flex: 1;
25
- min-width: 0;
26
- }
27
-
28
- .right {
29
- display: flex;
30
- align-items: center;
31
- gap: var(--dimension-space-050);
32
- flex-shrink: 0;
33
- }
@@ -1,52 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Header } from './Header';
3
- import { Button } from '../Button';
4
-
5
- const meta: Meta<typeof Header> = {
6
- title: 'Layout/Header',
7
- component: Header,
8
- };
9
-
10
- export default meta;
11
- type Story = StoryObj<typeof Header>;
12
-
13
- export const Default: Story = {
14
- args: {
15
- title: 'Page Title',
16
- },
17
- };
18
-
19
- export const WithSlots: Story = {
20
- render: () => (
21
- <Header
22
- title="Dashboard"
23
- left={<Button variant="tertiary" label="Back" size="sm" />}
24
- right={
25
- <div style={{ display: 'flex', gap: 8 }}>
26
- <Button variant="secondary" label="Export" size="sm" />
27
- <Button variant="primary" label="New" size="sm" />
28
- </div>
29
- }
30
- />
31
- ),
32
- };
33
-
34
- export const CenterContent: Story = {
35
- render: () => (
36
- <Header
37
- left={<Button variant="tertiary" label="Menu" size="sm" />}
38
- center={<span style={{ fontWeight: 600 }}>App Name</span>}
39
- right={<Button variant="tertiary" label="Settings" size="sm" />}
40
- />
41
- ),
42
- };
43
-
44
- export const Backgrounds: Story = {
45
- render: () => (
46
- <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
47
- {(['primary', 'secondary', 'transparent', 'translucent'] as const).map(bg => (
48
- <Header key={bg} title={`${bg} background`} background={bg} />
49
- ))}
50
- </div>
51
- ),
52
- };
@@ -1,42 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import { Surface } from '@/components/Surface';
4
- import { Text } from '@/components/Text';
5
- import styles from './Header.module.css';
6
-
7
- export type HeaderBackground = 'primary' | 'secondary' | 'transparent' | 'translucent';
8
-
9
- export interface HeaderProps {
10
- title?: string;
11
- left?: React.ReactNode;
12
- center?: React.ReactNode;
13
- right?: React.ReactNode;
14
- background?: HeaderBackground;
15
- className?: string;
16
- }
17
-
18
- export const Header = forwardRef<HTMLElement, HeaderProps>(
19
- ({ title, left, center, right, background = 'secondary', className }, ref) => (
20
- <Surface
21
- ref={ref}
22
- as="header"
23
- background={background}
24
- elevation="none"
25
- edge="bottom"
26
- className={cn(styles.header, className)}
27
- >
28
- <div className={styles.left}>
29
- {left}
30
- {title && !center && (
31
- <Text variant="text-title-small" as="h1" lineTruncation={1}>
32
- {title}
33
- </Text>
34
- )}
35
- </div>
36
- {center && <div className={styles.center}>{center}</div>}
37
- <div className={styles.right}>{right}</div>
38
- </Surface>
39
- )
40
- );
41
-
42
- Header.displayName = 'Header';
@@ -1,2 +0,0 @@
1
- export { Header } from './Header';
2
- export type { HeaderProps, HeaderBackground } from './Header';
@@ -1,71 +0,0 @@
1
- .wrapper {
2
- width: 100%;
3
- height: var(--dimension-size-400);
4
- display: flex;
5
- align-items: center;
6
- background-color: var(--color-background-primary);
7
- border-radius: var(--dimension-radius-075);
8
- box-shadow: var(--effect-elevation-depressed-sm);
9
- box-sizing: border-box;
10
- }
11
-
12
- .wrapper:focus-within {
13
- box-shadow: inset 0 0 0 1.25px var(--color-foreground-bold-brand);
14
- }
15
-
16
- .row {
17
- display: flex;
18
- align-items: center;
19
- width: 100%;
20
- height: 100%;
21
- gap: var(--dimension-space-050);
22
- }
23
-
24
- .input {
25
- flex: 1;
26
- min-width: 0;
27
- height: 100%;
28
- padding: 0 var(--dimension-space-100);
29
- background: transparent;
30
- border: none;
31
- outline: none;
32
- font-family: inherit;
33
- font-size: var(--typography-fontsize-md);
34
- line-height: var(--typography-lineheight-md);
35
- color: var(--color-foreground-primary);
36
- border-radius: var(--dimension-radius-075);
37
- -webkit-appearance: none;
38
- appearance: none;
39
- }
40
-
41
- .input:disabled { opacity: 0.5; cursor: not-allowed; }
42
- .input::placeholder { color: var(--color-foreground-secondary); }
43
- .input:focus::placeholder { color: var(--color-foreground-tertiary); }
44
-
45
- /* Hide native search clear */
46
- .input[type="search"]::-webkit-search-cancel-button,
47
- .input[type="search"]::-webkit-search-decoration { display: none; }
48
-
49
- .clearButton {
50
- flex-shrink: 0;
51
- margin-right: var(--dimension-space-050);
52
- padding: var(--dimension-space-050);
53
- border: none;
54
- background: none;
55
- cursor: pointer;
56
- color: var(--color-foreground-secondary);
57
- border-radius: var(--dimension-radius-050);
58
- display: flex;
59
- align-items: center;
60
- justify-content: center;
61
- }
62
-
63
- .clearButton:hover { background-color: var(--color-interaction-hover); }
64
-
65
- .suffix {
66
- display: flex;
67
- align-items: center;
68
- gap: var(--dimension-space-050);
69
- flex-shrink: 0;
70
- margin-right: var(--dimension-space-050);
71
- }
@@ -1,135 +0,0 @@
1
- import React, { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Input } from './Input';
4
- import type { InputType } from './Input';
5
-
6
- const meta: Meta<typeof Input> = {
7
- title: 'Primitives/Input',
8
- component: Input,
9
- args: {
10
- placeholder: 'Enter text…',
11
- inactive: false,
12
- type: 'text',
13
- },
14
- argTypes: {
15
- type: { control: 'select', options: ['text', 'email', 'tel', 'url', 'search', 'password'] },
16
- inactive: { control: 'boolean' },
17
- placeholder: { control: 'text' },
18
- },
19
- };
20
-
21
- export default meta;
22
- type Story = StoryObj<typeof Input>;
23
-
24
- const Controlled = (props: Omit<React.ComponentProps<typeof Input>, 'value' | 'onChange'> & { initialValue?: string }) => {
25
- const [value, setValue] = useState(props.initialValue ?? '');
26
- return <Input {...props} value={value} onChange={(e) => setValue(e.target.value)} />;
27
- };
28
-
29
- export const Playground: Story = {
30
- render: (args) => <Controlled {...args} />,
31
- };
32
-
33
- // ─── Matrix ───────────────────────────────────────────────────────────────────
34
-
35
- const TYPES: InputType[] = ['text', 'email', 'search', 'password'];
36
-
37
- const col: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 10 };
38
- const row: React.CSSProperties = { display: 'flex', gap: 16, alignItems: 'center' };
39
- const labelStyle: React.CSSProperties = { fontSize: 10, fontFamily: 'monospace', color: '#888', minWidth: 72, flexShrink: 0 };
40
- const inputCell: React.CSSProperties = { width: 200, flexShrink: 0 };
41
- const section = (text: string) => (
42
- <div style={{ fontSize: 11, fontWeight: 600, letterSpacing: '0.05em', textTransform: 'uppercase', color: '#555', marginTop: 8 }}>
43
- {text}
44
- </div>
45
- );
46
- const divider = <hr style={{ border: 'none', borderTop: '1px solid #e0e0e0', margin: '16px 0' }} />;
47
-
48
- export const Matrix: Story = {
49
- parameters: { layout: 'padded' },
50
- render: () => (
51
- <div style={{ ...col, fontFamily: 'sans-serif', gap: 0 }}>
52
-
53
- {section('Types × Empty / Filled')}
54
- <div style={{ ...col, marginTop: 12 }}>
55
- <div style={row}>
56
- <span style={labelStyle}></span>
57
- <span style={{ ...inputCell, fontSize: 10, fontFamily: 'monospace', color: '#888', textAlign: 'center' }}>empty</span>
58
- <span style={{ ...inputCell, fontSize: 10, fontFamily: 'monospace', color: '#888', textAlign: 'center' }}>filled</span>
59
- </div>
60
- {TYPES.map(type => (
61
- <div key={type} style={row}>
62
- <span style={labelStyle}>{type}</span>
63
- <div style={inputCell}>
64
- <Controlled type={type} placeholder={`${type}…`} />
65
- </div>
66
- <div style={inputCell}>
67
- <Controlled type={type} initialValue={type === 'email' ? 'user@example.com' : type === 'password' ? 'secret123' : 'Hello, world'} />
68
- </div>
69
- </div>
70
- ))}
71
- </div>
72
-
73
- {divider}
74
-
75
- {section('States')}
76
- <div style={{ ...col, marginTop: 12 }}>
77
- <div style={row}>
78
- <span style={labelStyle}>default</span>
79
- <div style={inputCell}><Controlled placeholder="Enter text…" /></div>
80
- </div>
81
- <div style={row}>
82
- <span style={labelStyle}>with value</span>
83
- <div style={inputCell}><Controlled initialValue="Some value" /></div>
84
- </div>
85
- <div style={row}>
86
- <span style={labelStyle}>Inactive</span>
87
- <div style={inputCell}><Input value="Disabled value" inactive onChange={() => {}} /></div>
88
- </div>
89
- <div style={row}>
90
- <span style={labelStyle}>Inactive empty</span>
91
- <div style={inputCell}><Input value="" placeholder="Disabled…" inactive onChange={() => {}} /></div>
92
- </div>
93
- </div>
94
-
95
- </div>
96
- ),
97
- };
98
-
99
- // ─── Individual stories ───────────────────────────────────────────────────────
100
-
101
- export const Default: Story = {
102
- render: () => <Controlled placeholder="Enter text…" style={{ width: 260 }} />,
103
- };
104
-
105
- export const Search: Story = {
106
- render: () => (
107
- <div style={{ display: 'flex', flexDirection: 'column', gap: 12, width: 260 }}>
108
- <Controlled type="search" placeholder="Search…" />
109
- <Controlled type="search" placeholder="Search…" initialValue="Some query" />
110
- </div>
111
- ),
112
- };
113
-
114
- export const Password: Story = {
115
- render: () => <Controlled type="password" placeholder="Enter password…" style={{ width: 260 }} />,
116
- };
117
-
118
- export const Inactive: Story = {
119
- render: () => (
120
- <div style={{ display: 'flex', flexDirection: 'column', gap: 12, width: 260 }}>
121
- <Input value="" placeholder="Disabled empty" inactive onChange={() => {}} />
122
- <Input value="Disabled with value" inactive onChange={() => {}} />
123
- </div>
124
- ),
125
- };
126
-
127
- export const WithSuffix: Story = {
128
- render: () => (
129
- <Controlled
130
- placeholder="Enter amount…"
131
- suffix={<span style={{ fontSize: 12, color: '#888', paddingRight: 4 }}>USD</span>}
132
- style={{ width: 260 }}
133
- />
134
- ),
135
- };
@@ -1,76 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import { cn } from '@/utils/cn';
3
- import type { IconComponent } from '@/types/icons';
4
- import styles from './Input.module.css';
5
-
6
- export type InputType = 'text' | 'email' | 'tel' | 'url' | 'search' | 'password';
7
-
8
- export interface InputProps {
9
- value: string;
10
- onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
11
- id?: string;
12
- placeholder?: string;
13
- autoFocus?: boolean;
14
- className?: string;
15
- type?: InputType;
16
- inactive?: boolean;
17
- onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
18
- /** Content rendered inside the field on the right. */
19
- suffix?: React.ReactNode;
20
- /** Icon for clear button (search type). */
21
- clearIcon?: IconComponent;
22
- 'aria-label'?: string;
23
- }
24
-
25
- export const Input = forwardRef<HTMLDivElement, InputProps>(
26
- (
27
- {
28
- value,
29
- onChange,
30
- id,
31
- placeholder,
32
- autoFocus = false,
33
- className,
34
- type = 'text',
35
- inactive = false,
36
- onKeyDown,
37
- suffix,
38
- clearIcon: ClearIcon,
39
- 'aria-label': ariaLabel,
40
- },
41
- ref
42
- ) => {
43
- const showClear = type === 'search' && value.length > 0 && !inactive;
44
-
45
- const handleClear = () => {
46
- onChange({ target: { value: '' } } as React.ChangeEvent<HTMLInputElement>);
47
- };
48
-
49
- return (
50
- <div ref={ref} className={cn(styles.wrapper, className)}>
51
- <div className={styles.row}>
52
- <input
53
- type={type}
54
- id={id}
55
- value={value}
56
- onChange={onChange}
57
- onKeyDown={onKeyDown}
58
- placeholder={placeholder}
59
- className={styles.input}
60
- autoFocus={autoFocus}
61
- disabled={inactive}
62
- aria-label={ariaLabel}
63
- />
64
- {showClear && (
65
- <button type="button" className={styles.clearButton} onClick={handleClear} aria-label="Clear">
66
- {ClearIcon ? <ClearIcon size={16} /> : <span aria-hidden>&times;</span>}
67
- </button>
68
- )}
69
- {suffix && <div className={styles.suffix}>{suffix}</div>}
70
- </div>
71
- </div>
72
- );
73
- }
74
- );
75
-
76
- Input.displayName = 'Input';
@@ -1,2 +0,0 @@
1
- export { Input } from './Input';
2
- export type { InputProps, InputType } from './Input';
@@ -1,34 +0,0 @@
1
- /* ==========================================================================
2
- LabelWrap — internal utility
3
- Kills the inherited line-height strut so the component's fixed height
4
- is not inflated by body { line-height: 1.5 }, then adds optical
5
- horizontal padding around the text.
6
- ========================================================================== */
7
-
8
- .labelWrap {
9
- line-height: 0;
10
- padding: 0 var(--dimension-space-050); /* 4px — body sm / md / lg */
11
- white-space: nowrap;
12
- flex-shrink: 0;
13
- }
14
-
15
- /* Small scale: tighter optical padding */
16
- .sizeSm { padding: 0 var(--dimension-space-025); } /* 2px */
17
-
18
- /* Caption scale: tighter optical padding */
19
- .sizeXs { padding: 0 var(--dimension-space-025); } /* 2px */
20
-
21
- /* Truncation mode — used when parent is full-width and label must ellipsize */
22
- .truncate {
23
- flex-shrink: 1;
24
- min-width: 0;
25
- overflow: hidden;
26
- white-space: nowrap;
27
- }
28
-
29
- .truncate > span {
30
- display: block;
31
- overflow: hidden;
32
- text-overflow: ellipsis;
33
- white-space: nowrap;
34
- }
@@ -1,32 +0,0 @@
1
- import React from 'react';
2
- import { cn } from '@/utils/cn';
3
- import styles from './LabelWrap.module.css';
4
-
5
- interface LabelWrapProps {
6
- children: React.ReactNode;
7
- /**
8
- * Maps to typography size — controls optical horizontal padding:
9
- * xs | sm → 2px (tighter scale)
10
- * md | lg → 4px (body scale, default)
11
- */
12
- size?: 'xs' | 'sm' | 'md' | 'lg';
13
- /** Enables truncation with ellipsis — use inside full-width containers. */
14
- truncate?: boolean;
15
- className?: string;
16
- }
17
-
18
- /**
19
- * Internal utility wrapper used inside interactive components (Button, Tag,
20
- * Input, Select, MenuItem, etc.) to:
21
- * 1. Kill the inherited line-height strut from body { line-height: 1.5 }
22
- * 2. Add optical horizontal padding around the text
23
- *
24
- * Not exported from the public barrel — internal use only.
25
- */
26
- export const LabelWrap = ({ children, size = 'md', truncate = false, className }: LabelWrapProps) => (
27
- <span className={cn(styles.labelWrap, size === 'sm' && styles.sizeSm, size === 'xs' && styles.sizeXs, truncate && styles.truncate, className)}>
28
- {children}
29
- </span>
30
- );
31
-
32
- LabelWrap.displayName = 'LabelWrap';
@@ -1 +0,0 @@
1
- export { LabelWrap } from './LabelWrap';
@@ -1,9 +0,0 @@
1
- .loader {
2
- flex-shrink: 0;
3
- animation: spin 0.75s linear infinite;
4
- }
5
-
6
- @keyframes spin {
7
- from { transform: rotate(0deg); }
8
- to { transform: rotate(360deg); }
9
- }