@chromvoid/uikit 0.1.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 (246) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +96 -0
  3. package/dist/components/cv-accordion-item.d.ts +69 -0
  4. package/dist/components/cv-accordion-item.js +176 -0
  5. package/dist/components/cv-accordion.d.ts +79 -0
  6. package/dist/components/cv-accordion.js +310 -0
  7. package/dist/components/cv-alert-dialog.d.ts +86 -0
  8. package/dist/components/cv-alert-dialog.js +393 -0
  9. package/dist/components/cv-alert.d.ts +48 -0
  10. package/dist/components/cv-alert.js +156 -0
  11. package/dist/components/cv-badge.d.ts +56 -0
  12. package/dist/components/cv-badge.js +280 -0
  13. package/dist/components/cv-breadcrumb-item.d.ts +35 -0
  14. package/dist/components/cv-breadcrumb-item.js +64 -0
  15. package/dist/components/cv-breadcrumb.d.ts +39 -0
  16. package/dist/components/cv-breadcrumb.js +160 -0
  17. package/dist/components/cv-button.d.ts +83 -0
  18. package/dist/components/cv-button.js +541 -0
  19. package/dist/components/cv-callout.d.ts +32 -0
  20. package/dist/components/cv-callout.js +221 -0
  21. package/dist/components/cv-card.d.ts +48 -0
  22. package/dist/components/cv-card.js +269 -0
  23. package/dist/components/cv-carousel-slide.d.ts +25 -0
  24. package/dist/components/cv-carousel-slide.js +51 -0
  25. package/dist/components/cv-carousel.d.ts +96 -0
  26. package/dist/components/cv-carousel.js +457 -0
  27. package/dist/components/cv-checkbox.d.ts +84 -0
  28. package/dist/components/cv-checkbox.js +274 -0
  29. package/dist/components/cv-combobox-group.d.ts +15 -0
  30. package/dist/components/cv-combobox-group.js +34 -0
  31. package/dist/components/cv-combobox-option.d.ts +30 -0
  32. package/dist/components/cv-combobox-option.js +66 -0
  33. package/dist/components/cv-combobox.d.ts +135 -0
  34. package/dist/components/cv-combobox.js +834 -0
  35. package/dist/components/cv-command-item.d.ts +30 -0
  36. package/dist/components/cv-command-item.js +68 -0
  37. package/dist/components/cv-command-palette.d.ts +105 -0
  38. package/dist/components/cv-command-palette.js +578 -0
  39. package/dist/components/cv-context-menu.d.ts +98 -0
  40. package/dist/components/cv-context-menu.js +515 -0
  41. package/dist/components/cv-copy-button.d.ts +61 -0
  42. package/dist/components/cv-copy-button.js +318 -0
  43. package/dist/components/cv-date-picker.d.ts +161 -0
  44. package/dist/components/cv-date-picker.js +803 -0
  45. package/dist/components/cv-dialog.d.ts +89 -0
  46. package/dist/components/cv-dialog.js +459 -0
  47. package/dist/components/cv-disclosure.d.ts +57 -0
  48. package/dist/components/cv-disclosure.js +241 -0
  49. package/dist/components/cv-drawer.d.ts +102 -0
  50. package/dist/components/cv-drawer.js +595 -0
  51. package/dist/components/cv-feed-article.d.ts +26 -0
  52. package/dist/components/cv-feed-article.js +52 -0
  53. package/dist/components/cv-feed.d.ts +62 -0
  54. package/dist/components/cv-feed.js +310 -0
  55. package/dist/components/cv-grid-cell.d.ts +30 -0
  56. package/dist/components/cv-grid-cell.js +57 -0
  57. package/dist/components/cv-grid-column.d.ts +30 -0
  58. package/dist/components/cv-grid-column.js +43 -0
  59. package/dist/components/cv-grid-row.d.ts +30 -0
  60. package/dist/components/cv-grid-row.js +42 -0
  61. package/dist/components/cv-grid.d.ts +119 -0
  62. package/dist/components/cv-grid.js +567 -0
  63. package/dist/components/cv-icon.d.ts +57 -0
  64. package/dist/components/cv-icon.js +352 -0
  65. package/dist/components/cv-input.d.ts +127 -0
  66. package/dist/components/cv-input.js +482 -0
  67. package/dist/components/cv-landmark.d.ts +32 -0
  68. package/dist/components/cv-landmark.js +62 -0
  69. package/dist/components/cv-link.d.ts +22 -0
  70. package/dist/components/cv-link.js +99 -0
  71. package/dist/components/cv-listbox-group.d.ts +15 -0
  72. package/dist/components/cv-listbox-group.js +42 -0
  73. package/dist/components/cv-listbox.d.ts +81 -0
  74. package/dist/components/cv-listbox.js +388 -0
  75. package/dist/components/cv-menu-button.d.ts +118 -0
  76. package/dist/components/cv-menu-button.js +822 -0
  77. package/dist/components/cv-menu-group.d.ts +20 -0
  78. package/dist/components/cv-menu-group.js +48 -0
  79. package/dist/components/cv-menu-item.d.ts +52 -0
  80. package/dist/components/cv-menu-item.js +105 -0
  81. package/dist/components/cv-menu.d.ts +62 -0
  82. package/dist/components/cv-menu.js +414 -0
  83. package/dist/components/cv-meter.d.ts +66 -0
  84. package/dist/components/cv-meter.js +154 -0
  85. package/dist/components/cv-number.d.ts +139 -0
  86. package/dist/components/cv-number.js +553 -0
  87. package/dist/components/cv-option.d.ts +30 -0
  88. package/dist/components/cv-option.js +84 -0
  89. package/dist/components/cv-popover.d.ts +87 -0
  90. package/dist/components/cv-popover.js +373 -0
  91. package/dist/components/cv-progress-ring.d.ts +45 -0
  92. package/dist/components/cv-progress-ring.js +169 -0
  93. package/dist/components/cv-progress.d.ts +45 -0
  94. package/dist/components/cv-progress.js +148 -0
  95. package/dist/components/cv-radio-group.d.ts +79 -0
  96. package/dist/components/cv-radio-group.js +398 -0
  97. package/dist/components/cv-radio.d.ts +36 -0
  98. package/dist/components/cv-radio.js +123 -0
  99. package/dist/components/cv-select-group.d.ts +15 -0
  100. package/dist/components/cv-select-group.js +44 -0
  101. package/dist/components/cv-select-option.d.ts +30 -0
  102. package/dist/components/cv-select-option.js +66 -0
  103. package/dist/components/cv-select.d.ts +128 -0
  104. package/dist/components/cv-select.js +666 -0
  105. package/dist/components/cv-sidebar-item.d.ts +26 -0
  106. package/dist/components/cv-sidebar-item.js +142 -0
  107. package/dist/components/cv-sidebar.d.ts +171 -0
  108. package/dist/components/cv-sidebar.js +767 -0
  109. package/dist/components/cv-slider-multi-thumb.d.ts +73 -0
  110. package/dist/components/cv-slider-multi-thumb.js +374 -0
  111. package/dist/components/cv-slider.d.ts +84 -0
  112. package/dist/components/cv-slider.js +328 -0
  113. package/dist/components/cv-spinbutton.d.ts +121 -0
  114. package/dist/components/cv-spinbutton.js +486 -0
  115. package/dist/components/cv-spinner.d.ts +18 -0
  116. package/dist/components/cv-spinner.js +95 -0
  117. package/dist/components/cv-switch.d.ts +81 -0
  118. package/dist/components/cv-switch.js +285 -0
  119. package/dist/components/cv-tab-panel.d.ts +20 -0
  120. package/dist/components/cv-tab-panel.js +37 -0
  121. package/dist/components/cv-tab.d.ts +40 -0
  122. package/dist/components/cv-tab.js +132 -0
  123. package/dist/components/cv-table-cell.d.ts +31 -0
  124. package/dist/components/cv-table-cell.js +49 -0
  125. package/dist/components/cv-table-column.d.ts +37 -0
  126. package/dist/components/cv-table-column.js +63 -0
  127. package/dist/components/cv-table-row.d.ts +30 -0
  128. package/dist/components/cv-table-row.js +45 -0
  129. package/dist/components/cv-table.d.ts +147 -0
  130. package/dist/components/cv-table.js +607 -0
  131. package/dist/components/cv-tabs.d.ts +70 -0
  132. package/dist/components/cv-tabs.js +524 -0
  133. package/dist/components/cv-textarea.d.ts +108 -0
  134. package/dist/components/cv-textarea.js +328 -0
  135. package/dist/components/cv-toast-region.d.ts +39 -0
  136. package/dist/components/cv-toast-region.js +162 -0
  137. package/dist/components/cv-toast.d.ts +67 -0
  138. package/dist/components/cv-toast.js +315 -0
  139. package/dist/components/cv-toolbar-item.d.ts +25 -0
  140. package/dist/components/cv-toolbar-item.js +72 -0
  141. package/dist/components/cv-toolbar-separator.d.ts +25 -0
  142. package/dist/components/cv-toolbar-separator.js +45 -0
  143. package/dist/components/cv-toolbar.d.ts +63 -0
  144. package/dist/components/cv-toolbar.js +295 -0
  145. package/dist/components/cv-tooltip.d.ts +83 -0
  146. package/dist/components/cv-tooltip.js +455 -0
  147. package/dist/components/cv-treegrid-cell.d.ts +30 -0
  148. package/dist/components/cv-treegrid-cell.js +57 -0
  149. package/dist/components/cv-treegrid-column.d.ts +37 -0
  150. package/dist/components/cv-treegrid-column.js +53 -0
  151. package/dist/components/cv-treegrid-row.d.ts +55 -0
  152. package/dist/components/cv-treegrid-row.js +90 -0
  153. package/dist/components/cv-treegrid.d.ts +96 -0
  154. package/dist/components/cv-treegrid.js +632 -0
  155. package/dist/components/cv-treeitem.d.ts +58 -0
  156. package/dist/components/cv-treeitem.js +144 -0
  157. package/dist/components/cv-treeview.d.ts +70 -0
  158. package/dist/components/cv-treeview.js +396 -0
  159. package/dist/components/cv-window-splitter.d.ts +79 -0
  160. package/dist/components/cv-window-splitter.js +316 -0
  161. package/dist/components/index.d.ts +94 -0
  162. package/dist/components/index.js +79 -0
  163. package/dist/dialog/create-dialog-controller.d.ts +31 -0
  164. package/dist/dialog/create-dialog-controller.js +320 -0
  165. package/dist/dialog/index.d.ts +2 -0
  166. package/dist/dialog/index.js +1 -0
  167. package/dist/form-associated/FormAssociatedReatomElement.d.ts +25 -0
  168. package/dist/form-associated/FormAssociatedReatomElement.js +70 -0
  169. package/dist/form-associated/withFormAssociated.d.ts +5 -0
  170. package/dist/form-associated/withFormAssociated.js +1 -0
  171. package/dist/index.d.ts +10 -0
  172. package/dist/index.js +9 -0
  173. package/dist/reatom-lit/ReatomLitElement.d.ts +27 -0
  174. package/dist/reatom-lit/ReatomLitElement.js +118 -0
  175. package/dist/reatom-lit/html.d.ts +4 -0
  176. package/dist/reatom-lit/html.js +10 -0
  177. package/dist/reatom-lit/index.d.ts +4 -0
  178. package/dist/reatom-lit/index.js +4 -0
  179. package/dist/reatom-lit/watch.d.ts +15 -0
  180. package/dist/reatom-lit/watch.js +40 -0
  181. package/dist/reatom-lit/withReatomElement.d.ts +4 -0
  182. package/dist/reatom-lit/withReatomElement.js +57 -0
  183. package/dist/register.d.ts +1 -0
  184. package/dist/register.js +84 -0
  185. package/dist/styles/component-styles.d.ts +4 -0
  186. package/dist/styles/component-styles.js +78 -0
  187. package/dist/theme/cv-theme-provider.d.ts +32 -0
  188. package/dist/theme/cv-theme-provider.js +110 -0
  189. package/dist/theme/index.d.ts +4 -0
  190. package/dist/theme/index.js +2 -0
  191. package/dist/theme/theme-engine.d.ts +4 -0
  192. package/dist/theme/theme-engine.js +67 -0
  193. package/dist/theme/tokens.css +265 -0
  194. package/dist/theme/types.d.ts +7 -0
  195. package/dist/theme/types.js +1 -0
  196. package/dist/toast/create-toast-controller.d.ts +12 -0
  197. package/dist/toast/create-toast-controller.js +12 -0
  198. package/dist/toast/index.d.ts +2 -0
  199. package/dist/toast/index.js +1 -0
  200. package/package.json +146 -0
  201. package/specs/_template.md +110 -0
  202. package/specs/components/accordion.md +207 -0
  203. package/specs/components/alert.md +83 -0
  204. package/specs/components/badge.md +183 -0
  205. package/specs/components/breadcrumb.md +152 -0
  206. package/specs/components/button.md +227 -0
  207. package/specs/components/callout.md +153 -0
  208. package/specs/components/card.md +192 -0
  209. package/specs/components/carousel.md +232 -0
  210. package/specs/components/checkbox.md +141 -0
  211. package/specs/components/combobox.md +427 -0
  212. package/specs/components/context-menu.md +375 -0
  213. package/specs/components/copy-button.md +236 -0
  214. package/specs/components/date-picker.md +290 -0
  215. package/specs/components/dialog.md +184 -0
  216. package/specs/components/disclosure.md +151 -0
  217. package/specs/components/drawer.md +216 -0
  218. package/specs/components/feed.md +266 -0
  219. package/specs/components/grid.md +423 -0
  220. package/specs/components/input.md +237 -0
  221. package/specs/components/landmark.md +92 -0
  222. package/specs/components/link.md +117 -0
  223. package/specs/components/listbox.md +327 -0
  224. package/specs/components/menu.md +508 -0
  225. package/specs/components/meter.md +148 -0
  226. package/specs/components/number.md +268 -0
  227. package/specs/components/option.md +167 -0
  228. package/specs/components/popover.md +207 -0
  229. package/specs/components/progress-ring.md +134 -0
  230. package/specs/components/progress.md +110 -0
  231. package/specs/components/radio.md +208 -0
  232. package/specs/components/select.md +305 -0
  233. package/specs/components/sidebar.md +204 -0
  234. package/specs/components/spinbutton.md +157 -0
  235. package/specs/components/spinner.md +83 -0
  236. package/specs/components/switch.md +145 -0
  237. package/specs/components/table.md +372 -0
  238. package/specs/components/tabs.md +242 -0
  239. package/specs/components/textarea.md +166 -0
  240. package/specs/components/theme.md +364 -0
  241. package/specs/components/toast.md +198 -0
  242. package/specs/components/toolbar.md +258 -0
  243. package/specs/components/tooltip.md +152 -0
  244. package/specs/components/treegrid.md +363 -0
  245. package/specs/components/treeview.md +263 -0
  246. package/specs/components/window-splitter.md +225 -0
@@ -0,0 +1,265 @@
1
+ /* === Dark tokens (default) === */
2
+ :root,
3
+ cv-theme-provider {
4
+ color-scheme: dark;
5
+ --cv-color-bg: #070b12;
6
+ --cv-color-surface: #101722;
7
+ --cv-color-surface-2: #181c23;
8
+ --cv-color-surface-3: #262a32;
9
+ --cv-color-surface-4: #31353d;
10
+ --cv-color-surface-elevated: var(--cv-color-surface-2);
11
+ --cv-color-surface-secondary: var(--cv-color-surface-2);
12
+ --cv-color-surface-tertiary: var(--cv-color-surface-3);
13
+ --cv-color-surface-hover: color-mix(in oklch, var(--cv-color-primary) 8%, var(--cv-color-surface));
14
+ --cv-color-text: #e8ecf6;
15
+ --cv-color-text-primary: var(--cv-color-text);
16
+ --cv-color-text-muted: #9aa6bf;
17
+ --cv-color-text-secondary: var(--cv-color-text-muted);
18
+ --cv-color-text-subtle: #7f8aa3;
19
+ --cv-color-text-strong: #f5f7fc;
20
+ --cv-color-text-strongest: #ffffff;
21
+ --cv-color-border: #2a3245;
22
+ --cv-color-border-muted: color-mix(in oklch, var(--cv-color-border) 55%, transparent);
23
+ --cv-color-border-strong: color-mix(in oklch, var(--cv-color-border) 82%, white 18%);
24
+ --cv-color-border-accent: color-mix(in oklch, var(--cv-color-primary) 35%, var(--cv-color-border));
25
+ --cv-color-brand: var(--cv-color-primary);
26
+ --cv-color-primary: #65d7ff;
27
+ --cv-color-primary-dark: #36bae8;
28
+ --cv-color-primary-darker: #1794c2;
29
+ --cv-color-primary-subtle: color-mix(in oklch, var(--cv-color-primary) 12%, var(--cv-color-surface));
30
+ --cv-color-primary-muted: color-mix(in oklch, var(--cv-color-primary) 22%, var(--cv-color-surface));
31
+ --cv-color-on-primary: #03151c;
32
+ --cv-color-accent: #b388ff;
33
+ --cv-color-accent-light: color-mix(in oklch, var(--cv-color-accent) 70%, white);
34
+ --cv-color-accent-dark: color-mix(in oklch, var(--cv-color-accent) 70%, black);
35
+ --cv-color-accent-hover: color-mix(in oklch, var(--cv-color-accent) 85%, white);
36
+ --cv-color-accent-contrast: #14001f;
37
+ --cv-color-cyan: var(--cv-color-primary);
38
+ --cv-color-cyan-light: color-mix(in oklch, var(--cv-color-cyan) 70%, white);
39
+ --cv-color-cyan-dark: color-mix(in oklch, var(--cv-color-cyan) 70%, black);
40
+ --cv-color-success: #6ef7c8;
41
+ --cv-color-success-dark: #32cca0;
42
+ --cv-color-success-text: #e8fff5;
43
+ --cv-color-warning: #ffd36e;
44
+ --cv-color-warning-dark: #d3a74a;
45
+ --cv-color-warning-text: #fff8e6;
46
+ --cv-color-danger: #ff7d86;
47
+ --cv-color-danger-dark: #e14f5b;
48
+ --cv-color-danger-text: #fff1f2;
49
+ --cv-color-info: var(--cv-color-primary);
50
+ --cv-color-info-text: var(--cv-color-text);
51
+ --cv-color-focus: var(--cv-color-primary);
52
+ --cv-color-focus-ring: var(--cv-color-primary);
53
+ --cv-color-hover: color-mix(in oklch, var(--cv-color-primary) 10%, var(--cv-color-surface));
54
+ --cv-color-active: color-mix(in oklch, var(--cv-color-primary) 18%, transparent);
55
+ --cv-color-selected: color-mix(in oklch, var(--cv-color-primary) 16%, var(--cv-color-surface));
56
+ --cv-color-overlay: rgba(4, 7, 13, 0.72);
57
+
58
+ --cv-alpha-white-4: color-mix(in oklch, white 4%, transparent);
59
+ --cv-alpha-white-6: color-mix(in oklch, white 6%, transparent);
60
+ --cv-alpha-white-8: color-mix(in oklch, white 8%, transparent);
61
+ --cv-alpha-white-10: color-mix(in oklch, white 10%, transparent);
62
+ --cv-alpha-white-15: color-mix(in oklch, white 15%, transparent);
63
+ --cv-alpha-white-20: color-mix(in oklch, white 20%, transparent);
64
+ --cv-alpha-white-30: color-mix(in oklch, white 30%, transparent);
65
+ --cv-alpha-white-50: color-mix(in oklch, white 50%, transparent);
66
+ --cv-alpha-white-70: color-mix(in oklch, white 70%, transparent);
67
+
68
+ --cv-alpha-black-5: color-mix(in oklch, black 5%, transparent);
69
+ --cv-alpha-black-10: color-mix(in oklch, black 10%, transparent);
70
+ --cv-alpha-black-25: color-mix(in oklch, black 25%, transparent);
71
+ --cv-alpha-black-35: color-mix(in oklch, black 35%, transparent);
72
+ --cv-alpha-black-50: color-mix(in oklch, black 50%, transparent);
73
+ --cv-alpha-black-65: color-mix(in oklch, black 65%, transparent);
74
+ --cv-alpha-black-95: color-mix(in oklch, black 95%, transparent);
75
+
76
+ --cv-space-1: 4px;
77
+ --cv-space-2: 8px;
78
+ --cv-space-3: 12px;
79
+ --cv-space-4: 16px;
80
+ --cv-space-5: 20px;
81
+ --cv-space-6: 24px;
82
+ --cv-space-7: 32px;
83
+ --cv-space-8: 40px;
84
+
85
+ --cv-radius-1: 6px;
86
+ --cv-radius-2: 10px;
87
+ --cv-radius-3: 14px;
88
+ --cv-radius-4: 18px;
89
+ --cv-radius-s: var(--cv-radius-1);
90
+ --cv-radius-sm: var(--cv-radius-1);
91
+ --cv-radius-m: var(--cv-radius-2);
92
+ --cv-radius-md: var(--cv-radius-2);
93
+ --cv-radius-lg: var(--cv-radius-3);
94
+ --cv-radius-xl: var(--cv-radius-4);
95
+ --cv-radius-pill: 999px;
96
+ --cv-radius-full: 9999px;
97
+
98
+ --cv-font-family-primary: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
99
+ --cv-font-family-body: var(--cv-font-family-primary);
100
+ --cv-font-family-display: 'Satoshi', var(--cv-font-family-primary);
101
+ --cv-font-family-sans: var(--cv-font-family-primary);
102
+ --cv-font-family-code: 'JetBrains Mono', 'SF Mono', 'Monaco', 'Consolas', monospace;
103
+ --cv-font-size-xs: 0.75rem;
104
+ --cv-font-size-sm: 0.875rem;
105
+ --cv-font-size-base: 1rem;
106
+ --cv-font-size-md: var(--cv-font-size-base);
107
+ --cv-font-size-lg: 1.125rem;
108
+ --cv-font-size-xl: 1.25rem;
109
+ --cv-font-size-2xl: 1.5rem;
110
+ --cv-font-size-3xl: 1.875rem;
111
+ --cv-font-size-4xl: 2.25rem;
112
+ --cv-font-size-5xl: 3rem;
113
+ --cv-font-size-6xl: 3.75rem;
114
+ --cv-font-weight-thin: 100;
115
+ --cv-font-weight-light: 300;
116
+ --cv-font-weight-normal: 400;
117
+ --cv-font-weight-regular: var(--cv-font-weight-normal);
118
+ --cv-font-weight-medium: 500;
119
+ --cv-font-weight-semibold: 600;
120
+ --cv-font-weight-bold: 700;
121
+ --cv-font-weight-extrabold: 800;
122
+ --cv-font-weight-black: 900;
123
+
124
+ --cv-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.24);
125
+ --cv-shadow-md: 0 8px 28px rgba(0, 0, 0, 0.32);
126
+ --cv-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.38);
127
+ --cv-shadow-xl: 0 24px 64px rgba(0, 0, 0, 0.42);
128
+ --cv-shadow-glow: 0 0 40px color-mix(in oklch, var(--cv-color-cyan) 15%, transparent);
129
+ --cv-shadow-1: var(--cv-shadow-sm);
130
+ --cv-shadow-2: var(--cv-shadow-md);
131
+ --cv-shadow-3: var(--cv-shadow-lg);
132
+ --cv-shadow-4: var(--cv-shadow-xl);
133
+
134
+ --cv-duration-instant: 0ms;
135
+ --cv-duration-fast: 120ms;
136
+ --cv-duration-normal: 220ms;
137
+ --cv-duration-slow: 320ms;
138
+ --cv-duration-slower: 500ms;
139
+ --cv-duration-slowest: 800ms;
140
+
141
+ --cv-easing-standard: cubic-bezier(0.2, 0, 0, 1);
142
+ --cv-easing-accelerate: cubic-bezier(0.4, 0, 1, 1);
143
+ --cv-easing-decelerate: cubic-bezier(0, 0, 0.2, 1);
144
+ --cv-easing-spring: cubic-bezier(0.16, 1, 0.3, 1);
145
+
146
+ --cv-z-base: 0;
147
+ --cv-z-overlay: 1000;
148
+ --cv-z-modal: 1100;
149
+ --cv-z-toast: 1200;
150
+
151
+ --cv-size-control-height: 48px;
152
+ }
153
+
154
+ /* === Light tokens — explicit mode === */
155
+ cv-theme-provider[mode='light'] {
156
+ color-scheme: light;
157
+ --cv-color-bg: #f8f9fb;
158
+ --cv-color-surface: #ffffff;
159
+ --cv-color-surface-2: #f0f2f5;
160
+ --cv-color-surface-3: #e6e9ee;
161
+ --cv-color-surface-4: #dce0e7;
162
+ --cv-color-surface-elevated: var(--cv-color-surface-2);
163
+ --cv-color-surface-secondary: var(--cv-color-surface-2);
164
+ --cv-color-surface-tertiary: var(--cv-color-surface-3);
165
+ --cv-color-surface-hover: color-mix(in oklch, var(--cv-color-primary) 6%, var(--cv-color-surface));
166
+ --cv-color-text: #1a1f2e;
167
+ --cv-color-text-primary: var(--cv-color-text);
168
+ --cv-color-text-muted: #5c6577;
169
+ --cv-color-text-secondary: var(--cv-color-text-muted);
170
+ --cv-color-text-subtle: #7a8394;
171
+ --cv-color-text-strong: #0e1219;
172
+ --cv-color-text-strongest: #000000;
173
+ --cv-color-border: #d0d5de;
174
+ --cv-color-border-muted: color-mix(in oklch, var(--cv-color-border) 55%, transparent);
175
+ --cv-color-border-strong: color-mix(in oklch, var(--cv-color-border) 82%, black 18%);
176
+ --cv-color-border-accent: color-mix(in oklch, var(--cv-color-primary) 35%, var(--cv-color-border));
177
+ --cv-color-primary: #0e8ab4;
178
+ --cv-color-primary-dark: #0b7199;
179
+ --cv-color-primary-darker: #085a7a;
180
+ --cv-color-primary-subtle: color-mix(in oklch, var(--cv-color-primary) 8%, var(--cv-color-surface));
181
+ --cv-color-primary-muted: color-mix(in oklch, var(--cv-color-primary) 15%, var(--cv-color-surface));
182
+ --cv-color-on-primary: #ffffff;
183
+ --cv-color-accent: #7c3aed;
184
+ --cv-color-accent-light: color-mix(in oklch, var(--cv-color-accent) 70%, white);
185
+ --cv-color-accent-dark: color-mix(in oklch, var(--cv-color-accent) 70%, black);
186
+ --cv-color-accent-hover: color-mix(in oklch, var(--cv-color-accent) 85%, black);
187
+ --cv-color-accent-contrast: #ffffff;
188
+ --cv-color-success: #16a367;
189
+ --cv-color-success-dark: #0f8553;
190
+ --cv-color-success-text: #052e1a;
191
+ --cv-color-warning: #b8860b;
192
+ --cv-color-warning-dark: #9a7209;
193
+ --cv-color-warning-text: #3d2c04;
194
+ --cv-color-danger: #dc2c3e;
195
+ --cv-color-danger-dark: #b82232;
196
+ --cv-color-danger-text: #450a10;
197
+ --cv-color-info-text: var(--cv-color-text);
198
+ --cv-color-hover: color-mix(in oklch, var(--cv-color-primary) 8%, var(--cv-color-surface));
199
+ --cv-color-active: color-mix(in oklch, var(--cv-color-primary) 14%, transparent);
200
+ --cv-color-selected: color-mix(in oklch, var(--cv-color-primary) 12%, var(--cv-color-surface));
201
+ --cv-color-overlay: rgba(15, 20, 30, 0.38);
202
+ --cv-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);
203
+ --cv-shadow-md: 0 8px 28px rgba(0, 0, 0, 0.12);
204
+ --cv-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.14);
205
+ --cv-shadow-xl: 0 24px 64px rgba(0, 0, 0, 0.16);
206
+ --cv-shadow-glow: 0 0 40px color-mix(in oklch, var(--cv-color-cyan) 10%, transparent);
207
+ }
208
+
209
+ /* === Light tokens — system preference === */
210
+ @media (prefers-color-scheme: light) {
211
+ :root,
212
+ cv-theme-provider[mode='system'] {
213
+ color-scheme: light;
214
+ --cv-color-bg: #f8f9fb;
215
+ --cv-color-surface: #ffffff;
216
+ --cv-color-surface-2: #f0f2f5;
217
+ --cv-color-surface-3: #e6e9ee;
218
+ --cv-color-surface-4: #dce0e7;
219
+ --cv-color-surface-elevated: var(--cv-color-surface-2);
220
+ --cv-color-surface-secondary: var(--cv-color-surface-2);
221
+ --cv-color-surface-tertiary: var(--cv-color-surface-3);
222
+ --cv-color-surface-hover: color-mix(in oklch, var(--cv-color-primary) 6%, var(--cv-color-surface));
223
+ --cv-color-text: #1a1f2e;
224
+ --cv-color-text-primary: var(--cv-color-text);
225
+ --cv-color-text-muted: #5c6577;
226
+ --cv-color-text-secondary: var(--cv-color-text-muted);
227
+ --cv-color-text-subtle: #7a8394;
228
+ --cv-color-text-strong: #0e1219;
229
+ --cv-color-text-strongest: #000000;
230
+ --cv-color-border: #d0d5de;
231
+ --cv-color-border-muted: color-mix(in oklch, var(--cv-color-border) 55%, transparent);
232
+ --cv-color-border-strong: color-mix(in oklch, var(--cv-color-border) 82%, black 18%);
233
+ --cv-color-border-accent: color-mix(in oklch, var(--cv-color-primary) 35%, var(--cv-color-border));
234
+ --cv-color-primary: #0e8ab4;
235
+ --cv-color-primary-dark: #0b7199;
236
+ --cv-color-primary-darker: #085a7a;
237
+ --cv-color-primary-subtle: color-mix(in oklch, var(--cv-color-primary) 8%, var(--cv-color-surface));
238
+ --cv-color-primary-muted: color-mix(in oklch, var(--cv-color-primary) 15%, var(--cv-color-surface));
239
+ --cv-color-on-primary: #ffffff;
240
+ --cv-color-accent: #7c3aed;
241
+ --cv-color-accent-light: color-mix(in oklch, var(--cv-color-accent) 70%, white);
242
+ --cv-color-accent-dark: color-mix(in oklch, var(--cv-color-accent) 70%, black);
243
+ --cv-color-accent-hover: color-mix(in oklch, var(--cv-color-accent) 85%, black);
244
+ --cv-color-accent-contrast: #ffffff;
245
+ --cv-color-success: #16a367;
246
+ --cv-color-success-dark: #0f8553;
247
+ --cv-color-success-text: #052e1a;
248
+ --cv-color-warning: #b8860b;
249
+ --cv-color-warning-dark: #9a7209;
250
+ --cv-color-warning-text: #3d2c04;
251
+ --cv-color-danger: #dc2c3e;
252
+ --cv-color-danger-dark: #b82232;
253
+ --cv-color-danger-text: #450a10;
254
+ --cv-color-info-text: var(--cv-color-text);
255
+ --cv-color-hover: color-mix(in oklch, var(--cv-color-primary) 8%, var(--cv-color-surface));
256
+ --cv-color-active: color-mix(in oklch, var(--cv-color-primary) 14%, transparent);
257
+ --cv-color-selected: color-mix(in oklch, var(--cv-color-primary) 12%, var(--cv-color-surface));
258
+ --cv-color-overlay: rgba(15, 20, 30, 0.38);
259
+ --cv-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);
260
+ --cv-shadow-md: 0 8px 28px rgba(0, 0, 0, 0.12);
261
+ --cv-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.14);
262
+ --cv-shadow-xl: 0 24px 64px rgba(0, 0, 0, 0.16);
263
+ --cv-shadow-glow: 0 0 40px color-mix(in oklch, var(--cv-color-cyan) 10%, transparent);
264
+ }
265
+ }
@@ -0,0 +1,7 @@
1
+ export type CVThemeTokenName = `--cv-${string}`;
2
+ export type CVThemeTokens = Record<CVThemeTokenName, string>;
3
+ export interface CVThemeDefinition {
4
+ name: string;
5
+ tokens: CVThemeTokens;
6
+ }
7
+ export type CVThemeTarget = HTMLElement | ShadowRoot | Document;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { type CreateToastOptions, type ToastModel, type ToastItem } from '@chromvoid/headless-ui/toast';
2
+ export interface CVToastController {
3
+ readonly model: ToastModel;
4
+ push(item: Omit<ToastItem, 'id'> & {
5
+ id?: string;
6
+ }): string;
7
+ dismiss(id: string): void;
8
+ clear(): void;
9
+ pause(): void;
10
+ resume(): void;
11
+ }
12
+ export declare function createToastController(options?: CreateToastOptions): CVToastController;
@@ -0,0 +1,12 @@
1
+ import { createToast, } from '@chromvoid/headless-ui/toast';
2
+ export function createToastController(options = {}) {
3
+ const model = createToast(options);
4
+ return {
5
+ model,
6
+ push: (item) => model.actions.push(item),
7
+ dismiss: (id) => model.actions.dismiss(id),
8
+ clear: () => model.actions.clear(),
9
+ pause: () => model.actions.pause(),
10
+ resume: () => model.actions.resume(),
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ export { createToastController } from './create-toast-controller.js';
2
+ export type { CVToastController } from './create-toast-controller.js';
@@ -0,0 +1 @@
1
+ export { createToastController } from './create-toast-controller.js';
package/package.json ADDED
@@ -0,0 +1,146 @@
1
+ {
2
+ "name": "@chromvoid/uikit",
3
+ "version": "0.1.0",
4
+ "description": "Thin Lit UI kit on top of @chromvoid/headless-ui",
5
+ "homepage": "https://github.com/chromvoid/uikit#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/chromvoid/uikit/issues"
8
+ },
9
+ "license": "AGPL-3.0-only",
10
+ "author": "ChromVoid Team",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/chromvoid/uikit.git"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "LICENSE",
18
+ "README.md",
19
+ "specs"
20
+ ],
21
+ "type": "module",
22
+ "sideEffects": [
23
+ "**/*.css"
24
+ ],
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
+ },
34
+ "./register": {
35
+ "types": "./dist/register.d.ts",
36
+ "import": "./dist/register.js",
37
+ "default": "./dist/register.js"
38
+ },
39
+ "./components": {
40
+ "types": "./dist/components/index.d.ts",
41
+ "import": "./dist/components/index.js",
42
+ "default": "./dist/components/index.js"
43
+ },
44
+ "./components/*": {
45
+ "types": "./dist/components/*.d.ts",
46
+ "import": "./dist/components/*.js",
47
+ "default": "./dist/components/*.js"
48
+ },
49
+ "./html": {
50
+ "types": "./dist/reatom-lit/html.d.ts",
51
+ "import": "./dist/reatom-lit/html.js",
52
+ "default": "./dist/reatom-lit/html.js"
53
+ },
54
+ "./reatom-lit": {
55
+ "types": "./dist/reatom-lit/index.d.ts",
56
+ "import": "./dist/reatom-lit/index.js",
57
+ "default": "./dist/reatom-lit/index.js"
58
+ },
59
+ "./theme": {
60
+ "types": "./dist/theme/index.d.ts",
61
+ "import": "./dist/theme/index.js",
62
+ "default": "./dist/theme/index.js"
63
+ },
64
+ "./theme/*": {
65
+ "types": "./dist/theme/*.d.ts",
66
+ "import": "./dist/theme/*.js",
67
+ "default": "./dist/theme/*.js"
68
+ },
69
+ "./theme/tokens.css": "./dist/theme/tokens.css",
70
+ "./styles/uno-utilities": {
71
+ "types": "./dist/styles/uno-utilities.d.ts",
72
+ "import": "./dist/styles/uno-utilities.js",
73
+ "default": "./dist/styles/uno-utilities.js"
74
+ },
75
+ "./dialog": {
76
+ "types": "./dist/dialog/index.d.ts",
77
+ "import": "./dist/dialog/index.js",
78
+ "default": "./dist/dialog/index.js"
79
+ },
80
+ "./dialog/*": {
81
+ "types": "./dist/dialog/*.d.ts",
82
+ "import": "./dist/dialog/*.js",
83
+ "default": "./dist/dialog/*.js"
84
+ },
85
+ "./toast": {
86
+ "types": "./dist/toast/index.d.ts",
87
+ "import": "./dist/toast/index.js",
88
+ "default": "./dist/toast/index.js"
89
+ },
90
+ "./toast/*": {
91
+ "types": "./dist/toast/*.d.ts",
92
+ "import": "./dist/toast/*.js",
93
+ "default": "./dist/toast/*.js"
94
+ },
95
+ "./package.json": "./package.json"
96
+ },
97
+ "publishConfig": {
98
+ "access": "public"
99
+ },
100
+ "scripts": {
101
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs",
102
+ "check:bundle": "npm run build && node ./scripts/check-bundle-contract.mjs",
103
+ "check:entry-imports": "node ./scripts/check-entry-imports.mjs",
104
+ "check:exports": "npm run build && node ./scripts/check-package-exports.mjs",
105
+ "check:pack": "npm pack --dry-run",
106
+ "docs:prepare": "node ./scripts/prepare-docs.mjs",
107
+ "docs:build": "npm run docs:prepare && npm run build && vitepress build docs",
108
+ "docs:dev": "npm run docs:prepare && npm run build && vitepress dev docs",
109
+ "docs:preview": "npm run docs:prepare && vitepress preview docs",
110
+ "demo": "npm run docs:dev -- --open",
111
+ "format": "oxfmt --write README.md package.json tsconfig.json tsconfig.build.json tsconfig.test.json vitest.config.ts uno.config.ts .oxlintrc.json .oxfmtrc.json src scripts specs docs/index.md docs/guide docs/components docs/.vitepress/config.ts docs/.vitepress/component-catalog.mjs docs/.vitepress/theme/index.ts",
112
+ "lint": "npm run docs:prepare && npm run lint:types && npm run lint:oxlint && npm run lint:format && npm run lint:boundaries",
113
+ "lint:boundaries": "node ./scripts/check-standalone-boundaries.mjs",
114
+ "lint:format": "oxfmt --check README.md package.json tsconfig.json tsconfig.build.json tsconfig.test.json vitest.config.ts uno.config.ts .oxlintrc.json .oxfmtrc.json src scripts specs docs/index.md docs/guide docs/components docs/.vitepress/config.ts docs/.vitepress/component-catalog.mjs docs/.vitepress/theme/index.ts",
115
+ "lint:oxlint": "oxlint --config ./.oxlintrc.json src scripts vitest.config.ts uno.config.ts docs/.vitepress/config.ts docs/.vitepress/theme/index.ts",
116
+ "lint:types": "tsc --noEmit -p tsconfig.test.json",
117
+ "prepack": "npm run build",
118
+ "prepublishOnly": "npm run lint && npm run test && npm run check:pack",
119
+ "test": "npm run test:unit && npm run check:exports && npm run check:bundle && npm run check:entry-imports",
120
+ "test:unit": "vitest run --config ./vitest.config.ts"
121
+ },
122
+ "dependencies": {
123
+ "@chromvoid/headless-ui": "0.1.1",
124
+ "@reatom/core": "^1000.15.0"
125
+ },
126
+ "devDependencies": {
127
+ "@types/node": "^24.11.0",
128
+ "@unocss/transformer-directives": "^66.6.7",
129
+ "esbuild": "^0.27.4",
130
+ "jsdom": "^26.1.0",
131
+ "lit": "^3.3.1",
132
+ "oxfmt": "^0.41.0",
133
+ "oxlint": "^1.51.0",
134
+ "typescript": "^5.9.3",
135
+ "unocss": "^66.6.7",
136
+ "vite": "^7.1.0",
137
+ "vitepress": "^1.6.3",
138
+ "vitest": "^3.2.4"
139
+ },
140
+ "peerDependencies": {
141
+ "lit": "^3.0.0"
142
+ },
143
+ "engines": {
144
+ "node": ">=20.0.0"
145
+ }
146
+ }
@@ -0,0 +1,110 @@
1
+ # cv-{name}
2
+
3
+ One-sentence description of the component's purpose.
4
+
5
+ **Headless:** [`create{Name}`](https://github.com/chromvoid/headless-ui/blob/main/specs/components/{name}.md)
6
+
7
+ ## Anatomy
8
+
9
+ ```
10
+ <cv-{name}> (host)
11
+ └── <div part="base">
12
+ └── <slot>
13
+ ```
14
+
15
+ ## Attributes
16
+
17
+ | Attribute | Type | Default | Description |
18
+ | --------- | ------- | ------- | ----------- |
19
+ | `example` | Boolean | `false` | Description |
20
+
21
+ ## Variants
22
+
23
+ > _Include only if the component has visual variants (e.g. solid, outline, ghost)._
24
+
25
+ | Variant | Description |
26
+ | ------- | -------------------- |
27
+ | `solid` | Default filled style |
28
+
29
+ ## Sizes
30
+
31
+ > _Include only if the component has size options._
32
+
33
+ | Size | Description |
34
+ | ---- | ------------ |
35
+ | `md` | Default size |
36
+
37
+ ## Slots
38
+
39
+ | Slot | Description |
40
+ | ----------- | ------------ |
41
+ | `(default)` | Main content |
42
+
43
+ ## CSS Parts
44
+
45
+ | Part | Element | Description |
46
+ | ------ | ------------ | ------------------------------------ |
47
+ | `base` | Root wrapper | Outermost interactive/layout element |
48
+
49
+ ## CSS Custom Properties
50
+
51
+ | Property | Default | Description |
52
+ | --------------- | ------- | ----------- |
53
+ | `--cv-{name}-*` | `…` | Description |
54
+
55
+ ## Visual States
56
+
57
+ | Host selector | Description |
58
+ | ---------------- | ----------- |
59
+ | `:host([state])` | Description |
60
+
61
+ ## Events
62
+
63
+ | Event | Detail | Description |
64
+ | -------- | ------ | ------------------------ |
65
+ | `input` | `{…}` | Fires on interaction |
66
+ | `change` | `{…}` | Fires when value commits |
67
+
68
+ ## Usage
69
+
70
+ ```html
71
+ <cv-{name}>Content</cv-{name}>
72
+ ```
73
+
74
+ ## Child Elements
75
+
76
+ > _Include only for composite components (parent + child). Each child element gets its own Anatomy, Attributes, Slots, CSS Parts, and Visual States subsections._
77
+
78
+ ### cv-{child-name}
79
+
80
+ #### Anatomy
81
+
82
+ ```
83
+ <cv-{child-name}> (host)
84
+ └── <div part="base">
85
+ └── <slot>
86
+ ```
87
+
88
+ #### Attributes
89
+
90
+ | Attribute | Type | Default | Description |
91
+ | --------- | ------ | ------- | ----------- |
92
+ | `value` | String | `""` | Identifier |
93
+
94
+ #### Slots
95
+
96
+ | Slot | Description |
97
+ | ----------- | ----------- |
98
+ | `(default)` | Content |
99
+
100
+ #### CSS Parts
101
+
102
+ | Part | Element | Description |
103
+ | ------ | ------------ | ----------------- |
104
+ | `base` | Root wrapper | Outermost element |
105
+
106
+ #### Visual States
107
+
108
+ | Host selector | Description |
109
+ | ---------------- | ----------- |
110
+ | `:host([state])` | Description |