@olympusoss/canvas 3.2.1 → 5.0.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 (302) hide show
  1. package/README.md +75 -65
  2. package/package.json +11 -5
  3. package/src/atoms/avatar/avatar.md +185 -0
  4. package/src/atoms/avatar/avatar.styles.ts +48 -0
  5. package/src/atoms/avatar/avatar.tsx +99 -0
  6. package/src/atoms/badge/badge.md +237 -0
  7. package/src/atoms/badge/badge.styles.ts +79 -0
  8. package/src/atoms/badge/badge.tsx +86 -0
  9. package/src/atoms/breadcrumb/breadcrumb.md +233 -0
  10. package/src/atoms/breadcrumb/breadcrumb.styles.ts +40 -0
  11. package/src/atoms/breadcrumb/breadcrumb.tsx +130 -0
  12. package/src/atoms/button/button.android.tsx +6 -0
  13. package/src/atoms/button/button.ios.tsx +6 -0
  14. package/src/atoms/button/button.md +184 -0
  15. package/src/atoms/button/button.shared.tsx +79 -0
  16. package/src/atoms/button/button.styles.ts +152 -0
  17. package/src/atoms/button/button.tsx +6 -0
  18. package/src/atoms/button-group/button-group.android.tsx +6 -0
  19. package/src/atoms/button-group/button-group.ios.tsx +6 -0
  20. package/src/atoms/button-group/button-group.md +120 -0
  21. package/src/atoms/button-group/button-group.shared.tsx +398 -0
  22. package/src/atoms/button-group/button-group.styles.ts +483 -0
  23. package/src/atoms/button-group/button-group.tsx +6 -0
  24. package/src/atoms/checkbox/checkbox.android.tsx +6 -0
  25. package/src/atoms/checkbox/checkbox.ios.tsx +6 -0
  26. package/src/atoms/checkbox/checkbox.md +150 -0
  27. package/src/atoms/checkbox/checkbox.shared.tsx +103 -0
  28. package/src/atoms/checkbox/checkbox.styles.ts +106 -0
  29. package/src/atoms/checkbox/checkbox.tsx +6 -0
  30. package/src/atoms/combobox/combobox.android.tsx +6 -0
  31. package/src/atoms/combobox/combobox.ios.tsx +6 -0
  32. package/src/atoms/combobox/combobox.md +213 -0
  33. package/src/atoms/combobox/combobox.shared.tsx +160 -0
  34. package/src/atoms/combobox/combobox.styles.ts +270 -0
  35. package/src/atoms/combobox/combobox.tsx +6 -0
  36. package/src/atoms/divider/divider.md +140 -0
  37. package/src/atoms/divider/divider.styles.ts +35 -0
  38. package/src/atoms/divider/divider.tsx +67 -0
  39. package/src/atoms/dropdown/dropdown.android.tsx +6 -0
  40. package/src/atoms/dropdown/dropdown.ios.tsx +6 -0
  41. package/src/atoms/dropdown/dropdown.md +221 -0
  42. package/src/atoms/dropdown/dropdown.shared.tsx +190 -0
  43. package/src/atoms/dropdown/dropdown.styles.ts +233 -0
  44. package/src/atoms/dropdown/dropdown.tsx +6 -0
  45. package/src/atoms/icon/icon.md +131 -0
  46. package/src/atoms/icon/icon.styles.ts +30 -0
  47. package/src/atoms/icon/icon.tsx +328 -0
  48. package/src/atoms/index.ts +24 -0
  49. package/src/atoms/input/input.android.tsx +6 -0
  50. package/src/atoms/input/input.ios.tsx +6 -0
  51. package/src/atoms/input/input.md +118 -0
  52. package/src/atoms/input/input.shared.tsx +203 -0
  53. package/src/atoms/input/input.styles.ts +286 -0
  54. package/src/atoms/input/input.tsx +6 -0
  55. package/src/atoms/kbd/kbd.md +91 -0
  56. package/src/atoms/kbd/kbd.styles.ts +33 -0
  57. package/src/atoms/kbd/kbd.tsx +27 -0
  58. package/src/atoms/listbox/listbox.md +177 -0
  59. package/src/atoms/listbox/listbox.styles.ts +60 -0
  60. package/src/atoms/listbox/listbox.tsx +113 -0
  61. package/src/atoms/pagination/pagination.android.tsx +6 -0
  62. package/src/atoms/pagination/pagination.ios.tsx +6 -0
  63. package/src/atoms/pagination/pagination.md +133 -0
  64. package/src/atoms/pagination/pagination.shared.tsx +289 -0
  65. package/src/atoms/pagination/pagination.styles.ts +245 -0
  66. package/src/atoms/pagination/pagination.tsx +6 -0
  67. package/src/atoms/popover/popover.android.tsx +8 -0
  68. package/src/atoms/popover/popover.ios.tsx +6 -0
  69. package/src/atoms/popover/popover.md +87 -0
  70. package/src/atoms/popover/popover.shared.tsx +124 -0
  71. package/src/atoms/popover/popover.styles.ts +144 -0
  72. package/src/atoms/popover/popover.tsx +6 -0
  73. package/src/atoms/radio/radio.android.tsx +6 -0
  74. package/src/atoms/radio/radio.ios.tsx +6 -0
  75. package/src/atoms/radio/radio.md +173 -0
  76. package/src/atoms/radio/radio.shared.tsx +98 -0
  77. package/src/atoms/radio/radio.styles.ts +109 -0
  78. package/src/atoms/radio/radio.tsx +6 -0
  79. package/src/atoms/select/select.android.tsx +6 -0
  80. package/src/atoms/select/select.ios.tsx +6 -0
  81. package/src/atoms/select/select.md +156 -0
  82. package/src/atoms/select/select.shared.tsx +143 -0
  83. package/src/atoms/select/select.styles.ts +310 -0
  84. package/src/atoms/select/select.tsx +6 -0
  85. package/src/atoms/skeleton/skeleton.md +135 -0
  86. package/src/atoms/skeleton/skeleton.styles.ts +117 -0
  87. package/src/atoms/skeleton/skeleton.tsx +145 -0
  88. package/src/atoms/spinner/spinner.android.tsx +7 -0
  89. package/src/atoms/spinner/spinner.ios.tsx +7 -0
  90. package/src/atoms/spinner/spinner.md +94 -0
  91. package/src/atoms/spinner/spinner.shared.tsx +92 -0
  92. package/src/atoms/spinner/spinner.styles.tsx +115 -0
  93. package/src/atoms/spinner/spinner.tsx +7 -0
  94. package/src/atoms/switch/switch.android.tsx +6 -0
  95. package/src/atoms/switch/switch.ios.tsx +6 -0
  96. package/src/atoms/switch/switch.md +91 -0
  97. package/src/atoms/switch/switch.shared.tsx +97 -0
  98. package/src/atoms/switch/switch.styles.ts +79 -0
  99. package/src/atoms/switch/switch.tsx +6 -0
  100. package/src/atoms/textarea/textarea.android.tsx +6 -0
  101. package/src/atoms/textarea/textarea.ios.tsx +6 -0
  102. package/src/atoms/textarea/textarea.md +140 -0
  103. package/src/atoms/textarea/textarea.shared.tsx +74 -0
  104. package/src/atoms/textarea/textarea.styles.ts +116 -0
  105. package/src/atoms/textarea/textarea.tsx +6 -0
  106. package/src/atoms/tooltip/tooltip.android.tsx +6 -0
  107. package/src/atoms/tooltip/tooltip.ios.tsx +7 -0
  108. package/src/atoms/tooltip/tooltip.md +122 -0
  109. package/src/atoms/tooltip/tooltip.shared.tsx +113 -0
  110. package/src/atoms/tooltip/tooltip.styles.ts +113 -0
  111. package/src/atoms/tooltip/tooltip.tsx +6 -0
  112. package/src/atoms/typography/typography.md +330 -0
  113. package/src/atoms/typography/typography.styles.ts +95 -0
  114. package/src/atoms/typography/typography.tsx +76 -0
  115. package/src/index.ts +12 -2
  116. package/src/molecules/action-panels/action-panels.md +133 -0
  117. package/src/molecules/action-panels/action-panels.styles.ts +39 -0
  118. package/src/molecules/action-panels/action-panels.tsx +113 -0
  119. package/src/molecules/alert/alert.md +119 -0
  120. package/src/molecules/alert/alert.styles.ts +88 -0
  121. package/src/molecules/alert/alert.tsx +74 -0
  122. package/src/molecules/alert-dialog/alert-dialog.android.tsx +6 -0
  123. package/src/molecules/alert-dialog/alert-dialog.ios.tsx +6 -0
  124. package/src/molecules/alert-dialog/alert-dialog.md +177 -0
  125. package/src/molecules/alert-dialog/alert-dialog.shared.tsx +187 -0
  126. package/src/molecules/alert-dialog/alert-dialog.styles.ts +248 -0
  127. package/src/molecules/alert-dialog/alert-dialog.tsx +6 -0
  128. package/src/molecules/card/card.md +190 -0
  129. package/src/molecules/card/card.styles.ts +67 -0
  130. package/src/molecules/card/card.tsx +176 -0
  131. package/src/molecules/code-block/code-block.md +159 -0
  132. package/src/molecules/code-block/code-block.styles.ts +167 -0
  133. package/src/molecules/code-block/code-block.tsx +176 -0
  134. package/src/molecules/description-lists/description-lists.md +129 -0
  135. package/src/molecules/description-lists/description-lists.styles.ts +102 -0
  136. package/src/molecules/description-lists/description-lists.tsx +133 -0
  137. package/src/molecules/empty-state/empty-state.md +218 -0
  138. package/src/molecules/empty-state/empty-state.styles.ts +63 -0
  139. package/src/molecules/empty-state/empty-state.tsx +77 -0
  140. package/src/molecules/feeds/feeds.md +102 -0
  141. package/src/molecules/feeds/feeds.styles.ts +120 -0
  142. package/src/molecules/feeds/feeds.tsx +167 -0
  143. package/src/molecules/field/field.md +117 -0
  144. package/src/molecules/field/field.styles.ts +85 -0
  145. package/src/molecules/field/field.tsx +175 -0
  146. package/src/molecules/fieldset/fieldset.md +141 -0
  147. package/src/molecules/fieldset/fieldset.styles.ts +79 -0
  148. package/src/molecules/fieldset/fieldset.tsx +182 -0
  149. package/src/molecules/form/form.md +137 -0
  150. package/src/molecules/form/form.styles.ts +39 -0
  151. package/src/molecules/form/form.tsx +246 -0
  152. package/src/molecules/grid-lists/grid-lists.md +114 -0
  153. package/src/molecules/grid-lists/grid-lists.styles.ts +79 -0
  154. package/src/molecules/grid-lists/grid-lists.tsx +157 -0
  155. package/src/molecules/index.ts +16 -0
  156. package/src/molecules/media-objects/media-objects.md +87 -0
  157. package/src/molecules/media-objects/media-objects.styles.ts +94 -0
  158. package/src/molecules/media-objects/media-objects.tsx +128 -0
  159. package/src/molecules/stacked-lists/stacked-lists.md +116 -0
  160. package/src/molecules/stacked-lists/stacked-lists.styles.ts +111 -0
  161. package/src/molecules/stacked-lists/stacked-lists.tsx +195 -0
  162. package/src/molecules/stats/stats.md +166 -0
  163. package/src/molecules/stats/stats.styles.ts +91 -0
  164. package/src/molecules/stats/stats.tsx +88 -0
  165. package/src/organisms/calendar/calendar.android.tsx +6 -0
  166. package/src/organisms/calendar/calendar.ios.tsx +6 -0
  167. package/src/organisms/calendar/calendar.md +114 -0
  168. package/src/organisms/calendar/calendar.shared.tsx +146 -0
  169. package/src/organisms/calendar/calendar.styles.ts +315 -0
  170. package/src/organisms/calendar/calendar.tsx +6 -0
  171. package/src/organisms/charts/charts.md +326 -0
  172. package/src/organisms/charts/charts.styles.ts +135 -0
  173. package/src/organisms/charts/charts.tsx +124 -0
  174. package/src/organisms/command/command.md +117 -0
  175. package/src/organisms/command/command.styles.ts +179 -0
  176. package/src/organisms/command/command.tsx +164 -0
  177. package/src/organisms/data-table/data-table.md +182 -0
  178. package/src/organisms/data-table/data-table.styles.ts +103 -0
  179. package/src/organisms/data-table/data-table.tsx +105 -0
  180. package/src/organisms/dialog/dialog.android.tsx +6 -0
  181. package/src/organisms/dialog/dialog.ios.tsx +6 -0
  182. package/src/organisms/dialog/dialog.md +271 -0
  183. package/src/organisms/dialog/dialog.shared.tsx +230 -0
  184. package/src/organisms/dialog/dialog.styles.ts +272 -0
  185. package/src/organisms/dialog/dialog.tsx +6 -0
  186. package/src/organisms/filter-panel/filter-panel.md +116 -0
  187. package/src/organisms/filter-panel/filter-panel.styles.ts +83 -0
  188. package/src/organisms/filter-panel/filter-panel.tsx +91 -0
  189. package/src/organisms/index.ts +13 -0
  190. package/src/organisms/navbars/navbars.android.tsx +6 -0
  191. package/src/organisms/navbars/navbars.ios.tsx +6 -0
  192. package/src/organisms/navbars/navbars.md +144 -0
  193. package/src/organisms/navbars/navbars.shared.tsx +137 -0
  194. package/src/organisms/navbars/navbars.styles.ts +251 -0
  195. package/src/organisms/navbars/navbars.tsx +6 -0
  196. package/src/organisms/overlays/overlays.android.tsx +6 -0
  197. package/src/organisms/overlays/overlays.ios.tsx +6 -0
  198. package/src/organisms/overlays/overlays.md +123 -0
  199. package/src/organisms/overlays/overlays.shared.tsx +175 -0
  200. package/src/organisms/overlays/overlays.styles.ts +309 -0
  201. package/src/organisms/overlays/overlays.tsx +6 -0
  202. package/src/organisms/row-menu/row-menu.android.tsx +6 -0
  203. package/src/organisms/row-menu/row-menu.ios.tsx +6 -0
  204. package/src/organisms/row-menu/row-menu.md +102 -0
  205. package/src/organisms/row-menu/row-menu.shared.tsx +105 -0
  206. package/src/organisms/row-menu/row-menu.styles.ts +262 -0
  207. package/src/organisms/row-menu/row-menu.tsx +6 -0
  208. package/src/organisms/sidebar/sidebar.android.tsx +6 -0
  209. package/src/organisms/sidebar/sidebar.ios.tsx +6 -0
  210. package/src/organisms/sidebar/sidebar.md +188 -0
  211. package/src/organisms/sidebar/sidebar.shared.tsx +167 -0
  212. package/src/organisms/sidebar/sidebar.styles.ts +262 -0
  213. package/src/organisms/sidebar/sidebar.tsx +6 -0
  214. package/src/organisms/stepper/stepper.android.tsx +6 -0
  215. package/src/organisms/stepper/stepper.ios.tsx +6 -0
  216. package/src/organisms/stepper/stepper.md +150 -0
  217. package/src/organisms/stepper/stepper.shared.tsx +158 -0
  218. package/src/organisms/stepper/stepper.styles.ts +280 -0
  219. package/src/organisms/stepper/stepper.tsx +6 -0
  220. package/src/organisms/tabs/tabs.android.tsx +6 -0
  221. package/src/organisms/tabs/tabs.ios.tsx +6 -0
  222. package/src/organisms/tabs/tabs.md +127 -0
  223. package/src/organisms/tabs/tabs.shared.tsx +281 -0
  224. package/src/organisms/tabs/tabs.styles.ts +398 -0
  225. package/src/organisms/tabs/tabs.tsx +6 -0
  226. package/src/style/color.ts +17 -0
  227. package/src/style/index.ts +14 -0
  228. package/src/style/primitives.ts +26 -0
  229. package/src/style/responsive.ts +45 -0
  230. package/src/style/shadow.ts +21 -0
  231. package/src/style/theme.tsx +56 -0
  232. package/src/style/tokens.ts +487 -0
  233. package/styles/canvas.css +127 -74
  234. package/tsconfig.json +4 -2
  235. package/src/cn.ts +0 -3
  236. package/styles/atoms/avatar.css +0 -22
  237. package/styles/atoms/badge.css +0 -83
  238. package/styles/atoms/breadcrumb.css +0 -35
  239. package/styles/atoms/button-group.css +0 -23
  240. package/styles/atoms/button.css +0 -107
  241. package/styles/atoms/checkbox.css +0 -55
  242. package/styles/atoms/combobox.css +0 -76
  243. package/styles/atoms/dropdown.css +0 -54
  244. package/styles/atoms/icon.css +0 -8
  245. package/styles/atoms/input-group.css +0 -45
  246. package/styles/atoms/input.css +0 -56
  247. package/styles/atoms/kbd.css +0 -15
  248. package/styles/atoms/pagination.css +0 -48
  249. package/styles/atoms/popover.css +0 -14
  250. package/styles/atoms/radio.css +0 -28
  251. package/styles/atoms/select.css +0 -57
  252. package/styles/atoms/separator.css +0 -32
  253. package/styles/atoms/skeleton.css +0 -32
  254. package/styles/atoms/spinner.css +0 -26
  255. package/styles/atoms/switch.css +0 -45
  256. package/styles/atoms/textarea.css +0 -31
  257. package/styles/atoms/tooltip.css +0 -53
  258. package/styles/atoms/typography.css +0 -105
  259. package/styles/base.css +0 -17
  260. package/styles/molecules/alert.css +0 -66
  261. package/styles/molecules/card.css +0 -58
  262. package/styles/molecules/code-block.css +0 -18
  263. package/styles/molecules/empty-state.css +0 -17
  264. package/styles/molecules/field.css +0 -27
  265. package/styles/molecules/form.css +0 -27
  266. package/styles/molecules/page-header.css +0 -52
  267. package/styles/molecules/section-card.css +0 -49
  268. package/styles/molecules/stat-card.css +0 -71
  269. package/styles/molecules/toast.css +0 -95
  270. package/styles/organisms/app-shell.css +0 -46
  271. package/styles/organisms/calendar.css +0 -73
  272. package/styles/organisms/command.css +0 -95
  273. package/styles/organisms/data-table.css +0 -142
  274. package/styles/organisms/dialog.css +0 -72
  275. package/styles/organisms/filter-panel.css +0 -58
  276. package/styles/organisms/row-menu.css +0 -69
  277. package/styles/organisms/sheet.css +0 -70
  278. package/styles/organisms/sidebar.css +0 -146
  279. package/styles/organisms/stepper.css +0 -63
  280. package/styles/organisms/tabs.css +0 -40
  281. package/styles/organisms/topbar.css +0 -24
  282. package/styles/patterns/backdrops.css +0 -35
  283. package/styles/patterns/density.css +0 -66
  284. package/styles/patterns/focus.css +0 -22
  285. package/styles/patterns/glass.css +0 -85
  286. package/styles/patterns/high-contrast.css +0 -70
  287. package/styles/patterns/reduced-motion.css +0 -12
  288. package/styles/patterns/scrollbar.css +0 -10
  289. package/styles/reset.css +0 -89
  290. package/styles/tokens/colors.css +0 -108
  291. package/styles/tokens/motion.css +0 -33
  292. package/styles/tokens/radius.css +0 -10
  293. package/styles/tokens/shadows.css +0 -35
  294. package/styles/tokens/spacing.css +0 -19
  295. package/styles/tokens/typography.css +0 -6
  296. package/styles/tokens/z-index.css +0 -12
  297. package/styles/utilities/display.css +0 -66
  298. package/styles/utilities/flexbox.css +0 -240
  299. package/styles/utilities/gap.css +0 -288
  300. package/styles/utilities/grid.css +0 -138
  301. package/styles/utilities/position.css +0 -78
  302. package/styles/utilities/sizing.css +0 -138
package/styles/canvas.css CHANGED
@@ -1,80 +1,133 @@
1
- @layer canvas.reset, canvas.tokens, canvas.base, canvas.components, canvas.patterns, canvas.utilities;
1
+ @import "tailwindcss";
2
2
 
3
- /* Reset */
4
- @import "./reset.css";
3
+ /* ─────────────────────────────────────────────────────────────────────────
4
+ Canvas theme. Fresh and Tailwind-native: Canvas's own semantic tokens,
5
+ not shadcn's set and not the old v3 values. Indigo brand primary on a
6
+ zinc-neutral base, plus a five-hue chart palette and brand orb colors.
7
+ Light at :root, dark under .dark.
8
+ ───────────────────────────────────────────────────────────────────────── */
5
9
 
6
- /* Tokens */
7
- @import "./tokens/colors.css";
8
- @import "./tokens/typography.css";
9
- @import "./tokens/radius.css";
10
- @import "./tokens/spacing.css";
11
- @import "./tokens/shadows.css";
12
- @import "./tokens/z-index.css";
13
- @import "./tokens/motion.css";
10
+ /* Dark mode keys off a `.dark` class on <html>, not prefers-color-scheme. */
11
+ @custom-variant dark (&:where(.dark, .dark *));
14
12
 
15
- /* Base */
16
- @import "./base.css";
13
+ @theme {
14
+ --radius-sm: 0.25rem;
15
+ --radius-md: 0.375rem;
16
+ --radius-lg: 0.5rem;
17
+ --radius-xl: 0.75rem;
17
18
 
18
- /* Components */
19
- @import "./atoms/typography.css";
20
- @import "./atoms/button.css";
21
- @import "./atoms/input.css";
22
- @import "./molecules/card.css";
23
- @import "./atoms/badge.css";
24
- @import "./atoms/separator.css";
25
- @import "./atoms/icon.css";
26
- @import "./atoms/avatar.css";
27
- @import "./atoms/kbd.css";
28
- @import "./molecules/code-block.css";
29
- @import "./organisms/sidebar.css";
30
- @import "./organisms/topbar.css";
31
- @import "./organisms/app-shell.css";
32
- @import "./molecules/stat-card.css";
33
- @import "./molecules/section-card.css";
34
- @import "./organisms/data-table.css";
35
- @import "./molecules/field.css";
36
- @import "./molecules/page-header.css";
37
- @import "./molecules/empty-state.css";
38
- @import "./organisms/row-menu.css";
39
- @import "./atoms/tooltip.css";
40
- @import "./atoms/skeleton.css";
41
- @import "./atoms/spinner.css";
42
- @import "./atoms/checkbox.css";
43
- @import "./atoms/radio.css";
44
- @import "./atoms/switch.css";
45
- @import "./atoms/select.css";
46
- @import "./atoms/textarea.css";
47
- @import "./atoms/combobox.css";
48
- @import "./molecules/alert.css";
49
- @import "./molecules/toast.css";
50
- @import "./organisms/dialog.css";
51
- @import "./organisms/sheet.css";
52
- @import "./atoms/popover.css";
53
- @import "./atoms/dropdown.css";
54
- @import "./atoms/breadcrumb.css";
55
- @import "./atoms/pagination.css";
56
- @import "./organisms/tabs.css";
57
- @import "./atoms/button-group.css";
58
- @import "./molecules/form.css";
59
- @import "./atoms/input-group.css";
60
- @import "./organisms/command.css";
61
- @import "./organisms/stepper.css";
62
- @import "./organisms/calendar.css";
63
- @import "./organisms/filter-panel.css";
19
+ /* Geist Sans / Geist Mono are the Canvas faces; consumers self-host them
20
+ (the docs do, in fonts.css). Falls back to the system UI font otherwise. */
21
+ --font-sans: "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI",
22
+ "Helvetica Neue", Arial, sans-serif;
23
+ --font-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas,
24
+ monospace;
25
+ }
64
26
 
65
- /* Patterns */
66
- @import "./patterns/backdrops.css";
67
- @import "./patterns/glass.css";
68
- @import "./patterns/density.css";
69
- @import "./patterns/focus.css";
70
- @import "./patterns/scrollbar.css";
71
- @import "./patterns/reduced-motion.css";
72
- @import "./patterns/high-contrast.css";
27
+ /* Map the semantic tokens into Tailwind so they generate utilities:
28
+ bg-primary, text-muted-foreground, border-border, ring-ring, and so on. */
29
+ @theme inline {
30
+ --color-background: var(--background);
31
+ --color-foreground: var(--foreground);
32
+ --color-card: var(--card);
33
+ --color-card-foreground: var(--card-foreground);
34
+ --color-popover: var(--popover);
35
+ --color-popover-foreground: var(--popover-foreground);
36
+ --color-primary: var(--primary);
37
+ --color-primary-foreground: var(--primary-foreground);
38
+ --color-secondary: var(--secondary);
39
+ --color-secondary-foreground: var(--secondary-foreground);
40
+ --color-muted: var(--muted);
41
+ --color-muted-foreground: var(--muted-foreground);
42
+ --color-accent: var(--accent);
43
+ --color-accent-foreground: var(--accent-foreground);
44
+ --color-destructive: var(--destructive);
45
+ --color-destructive-foreground: var(--destructive-foreground);
46
+ --color-border: var(--border);
47
+ --color-input: var(--input);
48
+ --color-ring: var(--ring);
49
+ --color-chart-1: var(--chart-1);
50
+ --color-chart-2: var(--chart-2);
51
+ --color-chart-3: var(--chart-3);
52
+ --color-chart-4: var(--chart-4);
53
+ --color-chart-5: var(--chart-5);
54
+ }
73
55
 
74
- /* Utilities */
75
- @import "./utilities/display.css";
76
- @import "./utilities/flexbox.css";
77
- @import "./utilities/grid.css";
78
- @import "./utilities/gap.css";
79
- @import "./utilities/sizing.css";
80
- @import "./utilities/position.css";
56
+ /* Light */
57
+ :root {
58
+ --background: oklch(1 0 0);
59
+ --foreground: oklch(0.141 0.005 285.823);
60
+ --card: oklch(1 0 0);
61
+ --card-foreground: oklch(0.141 0.005 285.823);
62
+ --popover: oklch(1 0 0);
63
+ --popover-foreground: oklch(0.141 0.005 285.823);
64
+ --primary: oklch(0.511 0.262 276.966);
65
+ --primary-foreground: oklch(0.985 0 0);
66
+ --secondary: oklch(0.967 0.001 286.375);
67
+ --secondary-foreground: oklch(0.21 0.006 285.885);
68
+ --muted: oklch(0.967 0.001 286.375);
69
+ --muted-foreground: oklch(0.552 0.016 285.938);
70
+ --accent: oklch(0.967 0.001 286.375);
71
+ --accent-foreground: oklch(0.21 0.006 285.885);
72
+ --destructive: oklch(0.577 0.245 27.325);
73
+ --destructive-foreground: oklch(0.985 0 0);
74
+ --border: oklch(0.92 0.004 286.32);
75
+ --input: oklch(0.92 0.004 286.32);
76
+ --ring: oklch(0.585 0.233 277.117);
77
+
78
+ /* Data-viz palette: five distinct hues tuned for small marks. */
79
+ --chart-1: hsl(12 76% 61%);
80
+ --chart-2: hsl(173 58% 39%);
81
+ --chart-3: hsl(197 37% 24%);
82
+ --chart-4: hsl(43 74% 66%);
83
+ --chart-5: hsl(27 87% 67%);
84
+
85
+ /* Brand constants (do not flip with theme): avatar gradient, sign-in orbs. */
86
+ --orb-indigo: #6366f1;
87
+ --orb-violet: #8b5cf6;
88
+ --orb-cyan: #06b6d4;
89
+ }
90
+
91
+ /* Dark */
92
+ .dark {
93
+ --background: oklch(0.141 0.005 285.823);
94
+ --foreground: oklch(0.985 0 0);
95
+ --card: oklch(0.21 0.006 285.885);
96
+ --card-foreground: oklch(0.985 0 0);
97
+ --popover: oklch(0.21 0.006 285.885);
98
+ --popover-foreground: oklch(0.985 0 0);
99
+ --primary: oklch(0.585 0.233 277.117);
100
+ --primary-foreground: oklch(0.985 0 0);
101
+ --secondary: oklch(0.274 0.006 286.033);
102
+ --secondary-foreground: oklch(0.985 0 0);
103
+ --muted: oklch(0.274 0.006 286.033);
104
+ --muted-foreground: oklch(0.705 0.015 286.067);
105
+ --accent: oklch(0.274 0.006 286.033);
106
+ --accent-foreground: oklch(0.985 0 0);
107
+ --destructive: oklch(0.704 0.191 22.216);
108
+ --destructive-foreground: oklch(0.985 0 0);
109
+ --border: oklch(0.274 0.006 286.033);
110
+ --input: oklch(0.274 0.006 286.033);
111
+ --ring: oklch(0.585 0.233 277.117);
112
+
113
+ /* Data-viz palette: dark-mode set is independently chosen, not lightness-flipped. */
114
+ --chart-1: hsl(220 70% 50%);
115
+ --chart-2: hsl(160 60% 45%);
116
+ --chart-3: hsl(30 80% 55%);
117
+ --chart-4: hsl(280 65% 60%);
118
+ --chart-5: hsl(340 75% 55%);
119
+ }
120
+
121
+ @layer base {
122
+ *,
123
+ ::after,
124
+ ::before {
125
+ border-color: var(--color-border);
126
+ }
127
+ body {
128
+ background-color: var(--color-background);
129
+ color: var(--color-foreground);
130
+ font-family: var(--font-sans);
131
+ -webkit-font-smoothing: antialiased;
132
+ }
133
+ }
package/tsconfig.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "target": "ES2020",
4
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
5
+ "jsx": "react-jsx",
4
6
  "module": "ESNext",
5
7
  "moduleResolution": "bundler",
6
8
  "strict": true,
@@ -17,6 +19,6 @@
17
19
  "@/*": ["./src/*"]
18
20
  }
19
21
  },
20
- "include": ["src/**/*.ts"],
21
- "exclude": ["node_modules", "dist"]
22
+ "include": ["src/**/*.ts", "src/**/*.tsx"],
23
+ "exclude": ["node_modules", "dist", "src/**/*.test.ts", "test"]
22
24
  }
package/src/cn.ts DELETED
@@ -1,3 +0,0 @@
1
- export function cn(...inputs: (string | false | null | undefined)[]): string {
2
- return inputs.filter(Boolean).join(" ");
3
- }
@@ -1,22 +0,0 @@
1
- @layer canvas.components {
2
- .avatar {
3
- display: inline-flex;
4
- align-items: center;
5
- justify-content: center;
6
- width: 1.75rem;
7
- height: 1.75rem;
8
- border-radius: 9999px;
9
- color: #fff;
10
- font-size: 11px;
11
- font-weight: 600;
12
- flex-shrink: 0;
13
- background: linear-gradient(135deg, var(--orb-indigo), var(--orb-violet));
14
- overflow: hidden;
15
- }
16
-
17
- .avatar img {
18
- width: 100%;
19
- height: 100%;
20
- object-fit: cover;
21
- }
22
- }
@@ -1,83 +0,0 @@
1
- @layer canvas.components {
2
- .badge {
3
- display: inline-flex;
4
- align-items: center;
5
- padding-left: 0.625rem;
6
- padding-right: 0.625rem;
7
- padding-top: 0.125rem;
8
- padding-bottom: 0.125rem;
9
- border-radius: var(--radius-md, 6px);
10
- font-size: 0.75rem;
11
- line-height: 1.4;
12
- font-weight: 600;
13
- border-width: 1px;
14
- border-style: solid;
15
- border-color: transparent;
16
- }
17
-
18
- .badge-default {
19
- background-color: hsl(var(--primary));
20
- color: hsl(var(--primary-foreground));
21
- }
22
-
23
- .badge-secondary {
24
- background-color: hsl(var(--secondary));
25
- color: hsl(var(--secondary-foreground));
26
- }
27
-
28
- .badge-outline {
29
- color: hsl(var(--foreground));
30
- border-color: hsl(var(--border));
31
- }
32
-
33
- .badge-destructive {
34
- background-color: hsl(var(--destructive));
35
- color: hsl(var(--destructive-foreground));
36
- }
37
-
38
- .status-badge {
39
- display: inline-flex;
40
- align-items: center;
41
- gap: 0.375rem;
42
- padding-left: 0.625rem;
43
- padding-right: 0.625rem;
44
- padding-top: 0.125rem;
45
- padding-bottom: 0.125rem;
46
- border-radius: 9999px;
47
- font-size: 0.75rem;
48
- line-height: 1.4;
49
- font-weight: 500;
50
- }
51
-
52
- .status-badge .dot {
53
- width: 0.375rem;
54
- height: 0.375rem;
55
- border-radius: 9999px;
56
- background-color: currentColor;
57
- }
58
-
59
- .sb-success {
60
- background-color: hsl(var(--success-bg));
61
- color: hsl(var(--success-fg));
62
- }
63
-
64
- .sb-warning {
65
- background-color: hsl(var(--warning-bg));
66
- color: hsl(var(--warning-fg));
67
- }
68
-
69
- .sb-error {
70
- background-color: hsl(var(--error-bg));
71
- color: hsl(var(--error-fg));
72
- }
73
-
74
- .sb-info {
75
- background-color: hsl(var(--info-bg));
76
- color: hsl(var(--info-fg));
77
- }
78
-
79
- .sb-neutral {
80
- background-color: hsl(var(--muted));
81
- color: hsl(var(--muted-foreground));
82
- }
83
- }
@@ -1,35 +0,0 @@
1
- @layer canvas.components {
2
- .breadcrumb {
3
- display: flex;
4
- align-items: center;
5
- gap: 0.375rem;
6
- font-size: 0.875rem;
7
- line-height: 1.25rem;
8
- }
9
-
10
- .breadcrumb-item {
11
- color: hsl(var(--muted-foreground));
12
- }
13
-
14
- .breadcrumb-item a {
15
- color: inherit;
16
- text-decoration: none;
17
- }
18
-
19
- .breadcrumb-item a:hover {
20
- color: hsl(var(--foreground));
21
- text-decoration: underline;
22
- text-underline-offset: 4px;
23
- }
24
-
25
- .breadcrumb-item.active {
26
- color: hsl(var(--foreground));
27
- font-weight: 500;
28
- }
29
-
30
- .breadcrumb-sep {
31
- color: hsl(var(--muted-foreground));
32
- display: flex;
33
- align-items: center;
34
- }
35
- }
@@ -1,23 +0,0 @@
1
- @layer canvas.components {
2
- .btn-group {
3
- display: inline-flex;
4
- }
5
-
6
- .btn-group > .btn {
7
- border-radius: 0;
8
- }
9
-
10
- .btn-group > .btn:first-child {
11
- border-top-left-radius: var(--radius-md, 6px);
12
- border-bottom-left-radius: var(--radius-md, 6px);
13
- }
14
-
15
- .btn-group > .btn:last-child {
16
- border-top-right-radius: var(--radius-md, 6px);
17
- border-bottom-right-radius: var(--radius-md, 6px);
18
- }
19
-
20
- .btn-group > .btn + .btn {
21
- margin-left: -1px;
22
- }
23
- }
@@ -1,107 +0,0 @@
1
- @layer canvas.components {
2
- .btn {
3
- display: inline-flex;
4
- align-items: center;
5
- justify-content: center;
6
- gap: 0.5rem;
7
- white-space: nowrap;
8
- font-size: 0.875rem;
9
- line-height: 1.25rem;
10
- font-weight: 500;
11
- border-radius: var(--radius-md, 6px);
12
- border-width: 1px;
13
- border-style: solid;
14
- border-color: transparent;
15
- cursor: pointer;
16
- height: 2.25rem;
17
- padding-left: 1rem;
18
- padding-right: 1rem;
19
- font-family: var(--font-sans);
20
- text-decoration: none;
21
- transition-property: color, background-color, border-color,
22
- text-decoration-color, fill, stroke;
23
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
24
- transition-duration: 150ms;
25
- }
26
-
27
- .btn:focus-visible {
28
- outline: 2px solid hsl(var(--ring));
29
- outline-offset: 2px;
30
- }
31
-
32
- .btn:disabled {
33
- opacity: 0.5;
34
- pointer-events: none;
35
- }
36
-
37
- .btn-default {
38
- background-color: hsl(var(--primary));
39
- color: hsl(var(--primary-foreground));
40
- box-shadow: var(--shadow-xs);
41
- }
42
-
43
- .btn-default:hover {
44
- background-color: hsl(var(--primary) / 0.9);
45
- }
46
-
47
- .btn-outline {
48
- background-color: hsl(var(--background));
49
- color: hsl(var(--foreground));
50
- border-color: hsl(var(--input));
51
- box-shadow: var(--shadow-xs);
52
- }
53
-
54
- .btn-outline:hover {
55
- background-color: hsl(var(--accent));
56
- }
57
-
58
- .btn-secondary {
59
- background-color: hsl(var(--secondary));
60
- color: hsl(var(--secondary-foreground));
61
- box-shadow: var(--shadow-xs);
62
- }
63
-
64
- .btn-ghost {
65
- background-color: transparent;
66
- color: hsl(var(--foreground));
67
- }
68
-
69
- .btn-ghost:hover {
70
- background-color: hsl(var(--accent));
71
- }
72
-
73
- .btn-destructive {
74
- background-color: hsl(var(--destructive));
75
- color: hsl(var(--destructive-foreground));
76
- box-shadow: var(--shadow-xs);
77
- }
78
-
79
- .btn-link {
80
- background-color: transparent;
81
- color: hsl(var(--primary));
82
- height: auto;
83
- padding: 0;
84
- text-decoration-line: underline;
85
- text-underline-offset: 4px;
86
- }
87
-
88
- .btn-sm {
89
- height: 2rem;
90
- padding-left: 0.75rem;
91
- padding-right: 0.75rem;
92
- font-size: 0.75rem;
93
- line-height: 1rem;
94
- }
95
-
96
- .btn-lg {
97
- height: 2.5rem;
98
- padding-left: 2rem;
99
- padding-right: 2rem;
100
- }
101
-
102
- .btn-icon {
103
- width: 2.25rem;
104
- height: 2.25rem;
105
- padding: 0;
106
- }
107
- }
@@ -1,55 +0,0 @@
1
- @layer canvas.components {
2
- .checkbox {
3
- appearance: none;
4
- width: 1rem;
5
- height: 1rem;
6
- border: 1px solid hsl(var(--input));
7
- border-radius: var(--radius-sm, 4px);
8
- background-color: transparent;
9
- cursor: pointer;
10
- flex-shrink: 0;
11
- transition: background-color var(--duration-fast), border-color var(--duration-fast);
12
- }
13
-
14
- .checkbox:focus-visible {
15
- outline: 2px solid hsl(var(--ring));
16
- outline-offset: 2px;
17
- }
18
-
19
- .checkbox:checked {
20
- background-color: hsl(var(--primary));
21
- border-color: hsl(var(--primary));
22
- }
23
-
24
- .checkbox:checked::after {
25
- content: "";
26
- display: block;
27
- width: 0.25rem;
28
- height: 0.5rem;
29
- margin: 1px auto 0;
30
- border: solid hsl(var(--primary-foreground));
31
- border-width: 0 2px 2px 0;
32
- transform: rotate(45deg);
33
- }
34
-
35
- .checkbox:disabled {
36
- opacity: 0.5;
37
- pointer-events: none;
38
- }
39
-
40
- .checkbox-label {
41
- display: inline-flex;
42
- align-items: center;
43
- gap: 0.5rem;
44
- font-family: var(--font-sans);
45
- font-size: 0.875rem;
46
- line-height: 1.25rem;
47
- color: hsl(var(--foreground));
48
- cursor: pointer;
49
- }
50
-
51
- .checkbox-label:has(.checkbox:disabled) {
52
- opacity: 0.5;
53
- pointer-events: none;
54
- }
55
- }
@@ -1,76 +0,0 @@
1
- @layer canvas.components {
2
- .combobox {
3
- position: relative;
4
- width: 100%;
5
- }
6
-
7
- .combobox-input {
8
- height: 2.25rem;
9
- padding: 0.25rem 0.75rem;
10
- border: 1px solid hsl(var(--input));
11
- border-radius: var(--radius-md, 6px);
12
- background-color: transparent;
13
- color: hsl(var(--foreground));
14
- font-family: var(--font-sans);
15
- font-size: 0.875rem;
16
- line-height: 1.25rem;
17
- box-shadow: var(--shadow-xs);
18
- outline: none;
19
- width: 100%;
20
- }
21
-
22
- .combobox-input::placeholder {
23
- color: hsl(var(--muted-foreground));
24
- }
25
-
26
- .combobox-input:focus-visible {
27
- outline: 2px solid hsl(var(--ring));
28
- outline-offset: 2px;
29
- }
30
-
31
- .combobox-list {
32
- position: absolute;
33
- top: 100%;
34
- left: 0;
35
- right: 0;
36
- margin-top: 4px;
37
- max-height: 15rem;
38
- overflow-y: auto;
39
- background-color: hsl(var(--popover));
40
- color: hsl(var(--popover-foreground));
41
- border: 1px solid hsl(var(--border));
42
- border-radius: var(--radius-md, 6px);
43
- box-shadow: var(--shadow-md);
44
- z-index: var(--z-dropdown);
45
- padding: 4px;
46
- }
47
-
48
- .combobox-item {
49
- display: flex;
50
- align-items: center;
51
- padding: 0.375rem 0.5rem;
52
- border-radius: var(--radius-sm, 4px);
53
- font-size: 0.875rem;
54
- line-height: 1.25rem;
55
- cursor: pointer;
56
- user-select: none;
57
- }
58
-
59
- .combobox-item:hover {
60
- background-color: hsl(var(--accent));
61
- color: hsl(var(--accent-foreground));
62
- }
63
-
64
- .combobox-item.selected {
65
- background-color: hsl(var(--primary) / 0.16);
66
- color: hsl(var(--primary));
67
- font-weight: 500;
68
- }
69
-
70
- .combobox-empty {
71
- padding: 1.5rem 0.5rem;
72
- text-align: center;
73
- font-size: 0.875rem;
74
- color: hsl(var(--muted-foreground));
75
- }
76
- }
@@ -1,54 +0,0 @@
1
- @layer canvas.components {
2
- .dropdown {
3
- position: absolute;
4
- z-index: var(--z-dropdown);
5
- background-color: hsl(var(--popover));
6
- color: hsl(var(--popover-foreground));
7
- border: 1px solid hsl(var(--border));
8
- border-radius: var(--radius-md, 6px);
9
- box-shadow: var(--shadow-md);
10
- padding: 0.25rem;
11
- min-width: 10rem;
12
- animation: var(--animate-fade-in);
13
- overflow: hidden;
14
- }
15
-
16
- .dropdown-item {
17
- display: flex;
18
- align-items: center;
19
- gap: 0.5rem;
20
- padding: 0.375rem 0.5rem;
21
- border-radius: var(--radius-sm, 4px);
22
- cursor: pointer;
23
- font-size: 0.875rem;
24
- line-height: 1.25rem;
25
- color: hsl(var(--foreground));
26
- background: none;
27
- border: none;
28
- width: 100%;
29
- text-align: left;
30
- }
31
-
32
- .dropdown-item:hover {
33
- background-color: hsl(var(--accent));
34
- }
35
-
36
- .dropdown-item.disabled {
37
- opacity: 0.5;
38
- pointer-events: none;
39
- }
40
-
41
- .dropdown-sep {
42
- height: 1px;
43
- margin: 0.25rem -0.25rem;
44
- background-color: hsl(var(--border));
45
- }
46
-
47
- .dropdown-label {
48
- padding: 0.375rem 0.5rem;
49
- font-size: 0.75rem;
50
- line-height: 1rem;
51
- font-weight: 600;
52
- color: hsl(var(--muted-foreground));
53
- }
54
- }
@@ -1,8 +0,0 @@
1
- @layer canvas.components {
2
- [data-lucide] {
3
- width: 1rem;
4
- height: 1rem;
5
- flex-shrink: 0;
6
- stroke-width: 2;
7
- }
8
- }