@vadem/ui 0.0.0-stage → 0.0.1

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 (289) hide show
  1. package/LICENSE-lucide.txt +43 -0
  2. package/README.md +19 -2
  3. package/fesm2022/vadem-ui-accordion.mjs +139 -0
  4. package/fesm2022/vadem-ui-accordion.mjs.map +1 -0
  5. package/fesm2022/vadem-ui-active-filters.mjs +355 -0
  6. package/fesm2022/vadem-ui-active-filters.mjs.map +1 -0
  7. package/fesm2022/vadem-ui-alert-dialog.mjs +433 -0
  8. package/fesm2022/vadem-ui-alert-dialog.mjs.map +1 -0
  9. package/fesm2022/vadem-ui-alert.mjs +266 -0
  10. package/fesm2022/vadem-ui-alert.mjs.map +1 -0
  11. package/fesm2022/vadem-ui-autocomplete.mjs +715 -0
  12. package/fesm2022/vadem-ui-autocomplete.mjs.map +1 -0
  13. package/fesm2022/vadem-ui-avatar.mjs +219 -0
  14. package/fesm2022/vadem-ui-avatar.mjs.map +1 -0
  15. package/fesm2022/vadem-ui-badge.mjs +86 -0
  16. package/fesm2022/vadem-ui-badge.mjs.map +1 -0
  17. package/fesm2022/vadem-ui-breadcrumbs.mjs +61 -0
  18. package/fesm2022/vadem-ui-breadcrumbs.mjs.map +1 -0
  19. package/fesm2022/vadem-ui-button.mjs +220 -0
  20. package/fesm2022/vadem-ui-button.mjs.map +1 -0
  21. package/fesm2022/vadem-ui-calendar.mjs +1314 -0
  22. package/fesm2022/vadem-ui-calendar.mjs.map +1 -0
  23. package/fesm2022/vadem-ui-card.mjs +271 -0
  24. package/fesm2022/vadem-ui-card.mjs.map +1 -0
  25. package/fesm2022/vadem-ui-character-count.mjs +269 -0
  26. package/fesm2022/vadem-ui-character-count.mjs.map +1 -0
  27. package/fesm2022/vadem-ui-chart.mjs +1984 -0
  28. package/fesm2022/vadem-ui-chart.mjs.map +1 -0
  29. package/fesm2022/vadem-ui-checkbox.mjs +67 -0
  30. package/fesm2022/vadem-ui-checkbox.mjs.map +1 -0
  31. package/fesm2022/vadem-ui-color-picker.mjs +815 -0
  32. package/fesm2022/vadem-ui-color-picker.mjs.map +1 -0
  33. package/fesm2022/vadem-ui-command.mjs +735 -0
  34. package/fesm2022/vadem-ui-command.mjs.map +1 -0
  35. package/fesm2022/vadem-ui-copy-button.mjs +375 -0
  36. package/fesm2022/vadem-ui-copy-button.mjs.map +1 -0
  37. package/fesm2022/vadem-ui-date-range-picker.mjs +1011 -0
  38. package/fesm2022/vadem-ui-date-range-picker.mjs.map +1 -0
  39. package/fesm2022/vadem-ui-description-list.mjs +59 -0
  40. package/fesm2022/vadem-ui-description-list.mjs.map +1 -0
  41. package/fesm2022/vadem-ui-dialog.mjs +587 -0
  42. package/fesm2022/vadem-ui-dialog.mjs.map +1 -0
  43. package/fesm2022/vadem-ui-dropzone.mjs +176 -0
  44. package/fesm2022/vadem-ui-dropzone.mjs.map +1 -0
  45. package/fesm2022/vadem-ui-editable-text.mjs +641 -0
  46. package/fesm2022/vadem-ui-editable-text.mjs.map +1 -0
  47. package/fesm2022/vadem-ui-empty-state.mjs +175 -0
  48. package/fesm2022/vadem-ui-empty-state.mjs.map +1 -0
  49. package/fesm2022/vadem-ui-expandable-text.mjs +244 -0
  50. package/fesm2022/vadem-ui-expandable-text.mjs.map +1 -0
  51. package/fesm2022/vadem-ui-field.mjs +583 -0
  52. package/fesm2022/vadem-ui-field.mjs.map +1 -0
  53. package/fesm2022/vadem-ui-file-preview.mjs +532 -0
  54. package/fesm2022/vadem-ui-file-preview.mjs.map +1 -0
  55. package/fesm2022/vadem-ui-file-size.mjs +83 -0
  56. package/fesm2022/vadem-ui-file-size.mjs.map +1 -0
  57. package/fesm2022/vadem-ui-form-error-summary.mjs +201 -0
  58. package/fesm2022/vadem-ui-form-error-summary.mjs.map +1 -0
  59. package/fesm2022/vadem-ui-icon.mjs +303 -0
  60. package/fesm2022/vadem-ui-icon.mjs.map +1 -0
  61. package/fesm2022/vadem-ui-input.mjs +120 -0
  62. package/fesm2022/vadem-ui-input.mjs.map +1 -0
  63. package/fesm2022/vadem-ui-kbd.mjs +286 -0
  64. package/fesm2022/vadem-ui-kbd.mjs.map +1 -0
  65. package/fesm2022/vadem-ui-keyboard.mjs +105 -0
  66. package/fesm2022/vadem-ui-keyboard.mjs.map +1 -0
  67. package/fesm2022/vadem-ui-locale.mjs +443 -0
  68. package/fesm2022/vadem-ui-locale.mjs.map +1 -0
  69. package/fesm2022/vadem-ui-menu.mjs +637 -0
  70. package/fesm2022/vadem-ui-menu.mjs.map +1 -0
  71. package/fesm2022/vadem-ui-navigation-list.mjs +130 -0
  72. package/fesm2022/vadem-ui-navigation-list.mjs.map +1 -0
  73. package/fesm2022/vadem-ui-number-input.mjs +264 -0
  74. package/fesm2022/vadem-ui-number-input.mjs.map +1 -0
  75. package/fesm2022/vadem-ui-otp-input.mjs +86 -0
  76. package/fesm2022/vadem-ui-otp-input.mjs.map +1 -0
  77. package/fesm2022/vadem-ui-pagination.mjs +353 -0
  78. package/fesm2022/vadem-ui-pagination.mjs.map +1 -0
  79. package/fesm2022/vadem-ui-password-input.mjs +213 -0
  80. package/fesm2022/vadem-ui-password-input.mjs.map +1 -0
  81. package/fesm2022/vadem-ui-popover.mjs +178 -0
  82. package/fesm2022/vadem-ui-popover.mjs.map +1 -0
  83. package/fesm2022/vadem-ui-progress.mjs +331 -0
  84. package/fesm2022/vadem-ui-progress.mjs.map +1 -0
  85. package/fesm2022/vadem-ui-radio.mjs +39 -0
  86. package/fesm2022/vadem-ui-radio.mjs.map +1 -0
  87. package/fesm2022/vadem-ui-range-slider.mjs +561 -0
  88. package/fesm2022/vadem-ui-range-slider.mjs.map +1 -0
  89. package/fesm2022/vadem-ui-rating.mjs +404 -0
  90. package/fesm2022/vadem-ui-rating.mjs.map +1 -0
  91. package/fesm2022/vadem-ui-relative-time.mjs +217 -0
  92. package/fesm2022/vadem-ui-relative-time.mjs.map +1 -0
  93. package/fesm2022/vadem-ui-reorder-list.mjs +601 -0
  94. package/fesm2022/vadem-ui-reorder-list.mjs.map +1 -0
  95. package/fesm2022/vadem-ui-scroll-area.mjs +65 -0
  96. package/fesm2022/vadem-ui-scroll-area.mjs.map +1 -0
  97. package/fesm2022/vadem-ui-search-input.mjs +307 -0
  98. package/fesm2022/vadem-ui-search-input.mjs.map +1 -0
  99. package/fesm2022/vadem-ui-segmented.mjs +297 -0
  100. package/fesm2022/vadem-ui-segmented.mjs.map +1 -0
  101. package/fesm2022/vadem-ui-select.mjs +1462 -0
  102. package/fesm2022/vadem-ui-select.mjs.map +1 -0
  103. package/fesm2022/vadem-ui-sidebar.mjs +493 -0
  104. package/fesm2022/vadem-ui-sidebar.mjs.map +1 -0
  105. package/fesm2022/vadem-ui-skeleton.mjs +106 -0
  106. package/fesm2022/vadem-ui-skeleton.mjs.map +1 -0
  107. package/fesm2022/vadem-ui-slider.mjs +60 -0
  108. package/fesm2022/vadem-ui-slider.mjs.map +1 -0
  109. package/fesm2022/vadem-ui-splitter.mjs +438 -0
  110. package/fesm2022/vadem-ui-splitter.mjs.map +1 -0
  111. package/fesm2022/vadem-ui-stat.mjs +369 -0
  112. package/fesm2022/vadem-ui-stat.mjs.map +1 -0
  113. package/fesm2022/vadem-ui-stepper.mjs +483 -0
  114. package/fesm2022/vadem-ui-stepper.mjs.map +1 -0
  115. package/fesm2022/vadem-ui-switch.mjs +45 -0
  116. package/fesm2022/vadem-ui-switch.mjs.map +1 -0
  117. package/fesm2022/vadem-ui-table.mjs +593 -0
  118. package/fesm2022/vadem-ui-table.mjs.map +1 -0
  119. package/fesm2022/vadem-ui-tabs.mjs +405 -0
  120. package/fesm2022/vadem-ui-tabs.mjs.map +1 -0
  121. package/fesm2022/vadem-ui-tag-input.mjs +685 -0
  122. package/fesm2022/vadem-ui-tag-input.mjs.map +1 -0
  123. package/fesm2022/vadem-ui-text-highlight.mjs +126 -0
  124. package/fesm2022/vadem-ui-text-highlight.mjs.map +1 -0
  125. package/fesm2022/vadem-ui-time-input.mjs +430 -0
  126. package/fesm2022/vadem-ui-time-input.mjs.map +1 -0
  127. package/fesm2022/vadem-ui-timeline.mjs +313 -0
  128. package/fesm2022/vadem-ui-timeline.mjs.map +1 -0
  129. package/fesm2022/vadem-ui-toast.mjs +397 -0
  130. package/fesm2022/vadem-ui-toast.mjs.map +1 -0
  131. package/fesm2022/vadem-ui-toolbar.mjs +396 -0
  132. package/fesm2022/vadem-ui-toolbar.mjs.map +1 -0
  133. package/fesm2022/vadem-ui-tooltip.mjs +218 -0
  134. package/fesm2022/vadem-ui-tooltip.mjs.map +1 -0
  135. package/fesm2022/vadem-ui-tree.mjs +551 -0
  136. package/fesm2022/vadem-ui-tree.mjs.map +1 -0
  137. package/fesm2022/vadem-ui-upload-list.mjs +408 -0
  138. package/fesm2022/vadem-ui-upload-list.mjs.map +1 -0
  139. package/fesm2022/vadem-ui.mjs +4 -0
  140. package/fesm2022/vadem-ui.mjs.map +1 -0
  141. package/fonts/jetbrains-mono/OFL.txt +93 -0
  142. package/fonts/jetbrains-mono/jetbrains-mono-cyrillic.woff2 +0 -0
  143. package/fonts/jetbrains-mono/jetbrains-mono-latin.woff2 +0 -0
  144. package/fonts/manrope/OFL.txt +93 -0
  145. package/fonts/manrope/manrope-cyrillic.woff2 +0 -0
  146. package/fonts/manrope/manrope-latin.woff2 +0 -0
  147. package/package.json +306 -3
  148. package/styles/base.css +160 -0
  149. package/styles/components/accordion.css +130 -0
  150. package/styles/components/active-filters.css +42 -0
  151. package/styles/components/alert-dialog.css +34 -0
  152. package/styles/components/alert.css +159 -0
  153. package/styles/components/autocomplete.css +97 -0
  154. package/styles/components/avatar.css +90 -0
  155. package/styles/components/badge.css +91 -0
  156. package/styles/components/breadcrumbs.css +94 -0
  157. package/styles/components/button.css +174 -0
  158. package/styles/components/calendar.css +186 -0
  159. package/styles/components/card.css +206 -0
  160. package/styles/components/character-count.css +41 -0
  161. package/styles/components/chart.css +308 -0
  162. package/styles/components/checkbox.css +115 -0
  163. package/styles/components/color-picker.css +158 -0
  164. package/styles/components/command.css +175 -0
  165. package/styles/components/copy-button.css +58 -0
  166. package/styles/components/date-range-picker.css +153 -0
  167. package/styles/components/description-list.css +69 -0
  168. package/styles/components/dialog.css +334 -0
  169. package/styles/components/dropzone.css +89 -0
  170. package/styles/components/editable-text.css +58 -0
  171. package/styles/components/empty-state.css +72 -0
  172. package/styles/components/expandable-text.css +24 -0
  173. package/styles/components/field.css +148 -0
  174. package/styles/components/file-preview.css +65 -0
  175. package/styles/components/form-error-summary.css +71 -0
  176. package/styles/components/icon.css +38 -0
  177. package/styles/components/index.css +80 -0
  178. package/styles/components/input.css +171 -0
  179. package/styles/components/kbd.css +42 -0
  180. package/styles/components/menu.css +168 -0
  181. package/styles/components/multi-select.css +156 -0
  182. package/styles/components/navigation-list.css +147 -0
  183. package/styles/components/number-input.css +33 -0
  184. package/styles/components/otp-input.css +26 -0
  185. package/styles/components/pagination.css +127 -0
  186. package/styles/components/password-input.css +20 -0
  187. package/styles/components/popover.css +93 -0
  188. package/styles/components/progress-ring.css +112 -0
  189. package/styles/components/progress.css +162 -0
  190. package/styles/components/radio.css +117 -0
  191. package/styles/components/range-slider.css +158 -0
  192. package/styles/components/rating.css +100 -0
  193. package/styles/components/reorder-list.css +143 -0
  194. package/styles/components/scroll-area.css +39 -0
  195. package/styles/components/search-input.css +25 -0
  196. package/styles/components/segmented.css +136 -0
  197. package/styles/components/select.css +257 -0
  198. package/styles/components/sidebar.css +105 -0
  199. package/styles/components/skeleton.css +83 -0
  200. package/styles/components/slider.css +132 -0
  201. package/styles/components/splitter.css +83 -0
  202. package/styles/components/stat.css +62 -0
  203. package/styles/components/stepper.css +236 -0
  204. package/styles/components/switch.css +107 -0
  205. package/styles/components/table.css +195 -0
  206. package/styles/components/tabs.css +198 -0
  207. package/styles/components/tag-input.css +138 -0
  208. package/styles/components/text-highlight.css +22 -0
  209. package/styles/components/time-input.css +96 -0
  210. package/styles/components/timeline.css +182 -0
  211. package/styles/components/toast.css +146 -0
  212. package/styles/components/toolbar.css +72 -0
  213. package/styles/components/tooltip.css +93 -0
  214. package/styles/components/tree.css +88 -0
  215. package/styles/components/upload-list.css +113 -0
  216. package/styles/fonts.css +67 -0
  217. package/styles/index.css +14 -0
  218. package/styles/reset.css +57 -0
  219. package/styles/tokens/primitives.css +364 -0
  220. package/styles/tokens/semantic.css +233 -0
  221. package/types/vadem-ui-accordion.d.ts +43 -0
  222. package/types/vadem-ui-active-filters.d.ts +73 -0
  223. package/types/vadem-ui-alert-dialog.d.ts +87 -0
  224. package/types/vadem-ui-alert.d.ts +64 -0
  225. package/types/vadem-ui-autocomplete.d.ts +156 -0
  226. package/types/vadem-ui-avatar.d.ts +59 -0
  227. package/types/vadem-ui-badge.d.ts +25 -0
  228. package/types/vadem-ui-breadcrumbs.d.ts +22 -0
  229. package/types/vadem-ui-button.d.ts +52 -0
  230. package/types/vadem-ui-calendar.d.ts +327 -0
  231. package/types/vadem-ui-card.d.ts +58 -0
  232. package/types/vadem-ui-character-count.d.ts +71 -0
  233. package/types/vadem-ui-chart.d.ts +452 -0
  234. package/types/vadem-ui-checkbox.d.ts +20 -0
  235. package/types/vadem-ui-color-picker.d.ts +171 -0
  236. package/types/vadem-ui-command.d.ts +145 -0
  237. package/types/vadem-ui-copy-button.d.ts +90 -0
  238. package/types/vadem-ui-date-range-picker.d.ts +216 -0
  239. package/types/vadem-ui-description-list.d.ts +15 -0
  240. package/types/vadem-ui-dialog.d.ts +174 -0
  241. package/types/vadem-ui-dropzone.d.ts +73 -0
  242. package/types/vadem-ui-editable-text.d.ts +141 -0
  243. package/types/vadem-ui-empty-state.d.ts +34 -0
  244. package/types/vadem-ui-expandable-text.d.ts +52 -0
  245. package/types/vadem-ui-field.d.ts +180 -0
  246. package/types/vadem-ui-file-preview.d.ts +108 -0
  247. package/types/vadem-ui-file-size.d.ts +18 -0
  248. package/types/vadem-ui-form-error-summary.d.ts +46 -0
  249. package/types/vadem-ui-icon.d.ts +152 -0
  250. package/types/vadem-ui-input.d.ts +31 -0
  251. package/types/vadem-ui-kbd.d.ts +66 -0
  252. package/types/vadem-ui-keyboard.d.ts +61 -0
  253. package/types/vadem-ui-locale.d.ts +241 -0
  254. package/types/vadem-ui-menu.d.ts +132 -0
  255. package/types/vadem-ui-navigation-list.d.ts +28 -0
  256. package/types/vadem-ui-number-input.d.ts +39 -0
  257. package/types/vadem-ui-otp-input.d.ts +15 -0
  258. package/types/vadem-ui-pagination.d.ts +96 -0
  259. package/types/vadem-ui-password-input.d.ts +36 -0
  260. package/types/vadem-ui-popover.d.ts +48 -0
  261. package/types/vadem-ui-progress.d.ts +95 -0
  262. package/types/vadem-ui-radio.d.ts +11 -0
  263. package/types/vadem-ui-range-slider.d.ts +136 -0
  264. package/types/vadem-ui-rating.d.ts +95 -0
  265. package/types/vadem-ui-relative-time.d.ts +58 -0
  266. package/types/vadem-ui-reorder-list.d.ts +120 -0
  267. package/types/vadem-ui-scroll-area.d.ts +13 -0
  268. package/types/vadem-ui-search-input.d.ts +58 -0
  269. package/types/vadem-ui-segmented.d.ts +76 -0
  270. package/types/vadem-ui-select.d.ts +303 -0
  271. package/types/vadem-ui-sidebar.d.ts +70 -0
  272. package/types/vadem-ui-skeleton.d.ts +28 -0
  273. package/types/vadem-ui-slider.d.ts +17 -0
  274. package/types/vadem-ui-splitter.d.ts +99 -0
  275. package/types/vadem-ui-stat.d.ts +101 -0
  276. package/types/vadem-ui-stepper.d.ts +108 -0
  277. package/types/vadem-ui-switch.d.ts +10 -0
  278. package/types/vadem-ui-table.d.ts +172 -0
  279. package/types/vadem-ui-tabs.d.ts +101 -0
  280. package/types/vadem-ui-tag-input.d.ts +170 -0
  281. package/types/vadem-ui-text-highlight.d.ts +27 -0
  282. package/types/vadem-ui-time-input.d.ts +47 -0
  283. package/types/vadem-ui-timeline.d.ts +54 -0
  284. package/types/vadem-ui-toast.d.ts +104 -0
  285. package/types/vadem-ui-toolbar.d.ts +80 -0
  286. package/types/vadem-ui-tooltip.d.ts +71 -0
  287. package/types/vadem-ui-tree.d.ts +123 -0
  288. package/types/vadem-ui-upload-list.d.ts +70 -0
  289. package/types/vadem-ui.d.ts +1 -0
@@ -0,0 +1,308 @@
1
+ /* Charts - spec: specs/chart.md. Mark specs follow the dataviz method: thin bars, 2px lines,
2
+ 8px dots with a 2px surface ring, hairline solid grid, text in text tokens only. */
3
+ @layer vd.components {
4
+ .vd-chart {
5
+ --vd-chart-surface: var(--vd-color-surface);
6
+ --vd-chart-grid: var(--vd-color-border);
7
+ --vd-chart-axis: var(--vd-color-text-muted);
8
+ --vd-chart-band: var(--vd-color-fill);
9
+ --vd-chart-crosshair: var(--vd-color-border-strong);
10
+ --vd-chart-area-opacity: 0.12;
11
+
12
+ display: block;
13
+ min-inline-size: 0;
14
+ }
15
+
16
+ /* Series identity: slots 1..8 in fixed order; a lone series uses the accent. */
17
+ :is(.vd-chart, .vd-sparkline) [data-series='accent'] {
18
+ --vd-chart-series: var(--vd-color-action);
19
+ }
20
+ .vd-chart [data-series='1'] {
21
+ --vd-chart-series: var(--vd-color-chart-1);
22
+ }
23
+ .vd-chart [data-series='2'] {
24
+ --vd-chart-series: var(--vd-color-chart-2);
25
+ }
26
+ .vd-chart [data-series='3'] {
27
+ --vd-chart-series: var(--vd-color-chart-3);
28
+ }
29
+ .vd-chart [data-series='4'] {
30
+ --vd-chart-series: var(--vd-color-chart-4);
31
+ }
32
+ .vd-chart [data-series='5'] {
33
+ --vd-chart-series: var(--vd-color-chart-5);
34
+ }
35
+ .vd-chart [data-series='6'] {
36
+ --vd-chart-series: var(--vd-color-chart-6);
37
+ }
38
+ .vd-chart [data-series='7'] {
39
+ --vd-chart-series: var(--vd-color-chart-7);
40
+ }
41
+ .vd-chart [data-series='8'] {
42
+ --vd-chart-series: var(--vd-color-chart-8);
43
+ }
44
+
45
+ .vd-chart__figure {
46
+ display: grid;
47
+ gap: var(--vd-space-3);
48
+ margin: 0;
49
+ min-inline-size: 0;
50
+ }
51
+ .vd-chart__head {
52
+ display: grid;
53
+ gap: var(--vd-space-1);
54
+ }
55
+ .vd-chart__title {
56
+ color: var(--vd-color-text);
57
+ font-size: var(--vd-text-md);
58
+ font-weight: var(--vd-weight-semibold);
59
+ }
60
+ .vd-chart__description {
61
+ color: var(--vd-color-text-muted);
62
+ font-size: var(--vd-text-sm);
63
+ }
64
+
65
+ .vd-chart__toolbar {
66
+ display: flex;
67
+ flex-wrap: wrap;
68
+ align-items: center;
69
+ gap: var(--vd-space-2) var(--vd-space-4);
70
+ }
71
+ .vd-chart__table-toggle {
72
+ margin-inline-start: auto;
73
+ }
74
+ .vd-chart__legend {
75
+ display: flex;
76
+ flex-wrap: wrap;
77
+ gap: var(--vd-space-1) var(--vd-space-4);
78
+ margin: 0;
79
+ padding: 0;
80
+ list-style: none;
81
+ color: var(--vd-color-text-muted);
82
+ font-size: var(--vd-text-sm);
83
+ }
84
+ .vd-chart__legend-item {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ gap: var(--vd-space-2);
88
+ }
89
+ /* Keys mirror the mark: a square for bars, a short stroke for lines. */
90
+ .vd-chart__key {
91
+ flex: none;
92
+ inline-size: 0.625rem;
93
+ block-size: 0.625rem;
94
+ border-radius: var(--vd-radius-xs);
95
+ background: var(--vd-chart-series);
96
+ }
97
+ .vd-chart__key[data-kind='line'] {
98
+ inline-size: 0.875rem;
99
+ block-size: 2px;
100
+ border-radius: var(--vd-radius-full);
101
+ }
102
+
103
+ /* Pixel coordinates come from the LTR plot; tooltip text sets its own direction. */
104
+ /* Refetch: hold the previous render, muted; no skeleton and no layout jump. */
105
+ .vd-chart__figure[data-loading] :is(.vd-chart__plot, .vd-chart__table-wrap) {
106
+ opacity: 0.5;
107
+ transition: opacity var(--vd-duration-base) var(--vd-ease-out);
108
+ }
109
+ .vd-chart__plot {
110
+ position: relative;
111
+ min-inline-size: 0;
112
+ direction: ltr;
113
+ }
114
+ /* Plot geometry is not mirrored in RTL (like numbers); labels around it are. */
115
+ .vd-chart__svg {
116
+ display: block;
117
+ overflow: visible;
118
+ direction: ltr;
119
+ font-family: var(--vd-font-sans);
120
+ font-size: var(--vd-text-xs);
121
+ font-variant-numeric: tabular-nums;
122
+ }
123
+ .vd-chart__grid line {
124
+ stroke: var(--vd-chart-grid);
125
+ stroke-width: 1;
126
+ shape-rendering: crispEdges;
127
+ }
128
+ .vd-chart__grid line[data-zero] {
129
+ stroke: var(--vd-chart-crosshair);
130
+ }
131
+ .vd-chart__grid text,
132
+ .vd-chart__axis text {
133
+ fill: var(--vd-chart-axis);
134
+ }
135
+ .vd-chart__end-labels text {
136
+ fill: var(--vd-color-text-muted);
137
+ font-size: var(--vd-text-xs);
138
+ }
139
+ .vd-chart__band {
140
+ fill: var(--vd-chart-band);
141
+ }
142
+
143
+ .vd-chart__bar {
144
+ fill: var(--vd-chart-series);
145
+ }
146
+ /* Emphasis: the rest of the series recedes; hovering a muted bar restores it. */
147
+ .vd-chart__bar[data-muted] {
148
+ fill: color-mix(in oklch, var(--vd-chart-series) 45%, transparent);
149
+ }
150
+ .vd-chart__line {
151
+ fill: none;
152
+ stroke: var(--vd-chart-series);
153
+ stroke-width: 2;
154
+ stroke-linecap: round;
155
+ stroke-linejoin: round;
156
+ }
157
+ .vd-chart__area {
158
+ fill: var(--vd-chart-series);
159
+ opacity: var(--vd-chart-area-opacity);
160
+ }
161
+ .vd-chart__dot {
162
+ fill: var(--vd-chart-series);
163
+ stroke: var(--vd-chart-surface);
164
+ stroke-width: 2;
165
+ paint-order: stroke;
166
+ }
167
+ .vd-chart__crosshair {
168
+ stroke: var(--vd-chart-crosshair);
169
+ stroke-width: 1;
170
+ shape-rendering: crispEdges;
171
+ }
172
+
173
+ /* Hit targets: whole bands, invisible until keyboard focus. */
174
+ .vd-chart__hit {
175
+ fill: transparent;
176
+ outline: none;
177
+ }
178
+ .vd-chart__hit:focus-visible {
179
+ stroke: var(--vd-color-focus);
180
+ stroke-width: var(--vd-focus-ring-width);
181
+ }
182
+
183
+ .vd-chart__tooltip {
184
+ position: absolute;
185
+ inset-block-start: var(--vd-chart-tip-y, 0);
186
+ inset-inline-start: var(--vd-chart-tip-x, 0);
187
+ z-index: 1;
188
+ display: grid;
189
+ gap: var(--vd-space-1);
190
+ inline-size: max-content;
191
+ max-inline-size: 16rem;
192
+ padding: var(--vd-space-2) var(--vd-space-3);
193
+ border: var(--vd-border-width) solid var(--vd-color-border-strong);
194
+ border-radius: var(--vd-radius-md);
195
+ background: var(--vd-color-surface-overlay);
196
+ box-shadow: var(--vd-highlight-top), var(--vd-shadow-md);
197
+ font-size: var(--vd-text-xs);
198
+ pointer-events: none;
199
+ translate: var(--vd-space-3) 0;
200
+ }
201
+ .vd-chart__tooltip[data-side='start'] {
202
+ translate: calc(-100% - var(--vd-space-3)) 0;
203
+ }
204
+ .vd-chart__tooltip-category {
205
+ color: var(--vd-color-text-muted);
206
+ }
207
+ .vd-chart__tooltip-row {
208
+ display: grid;
209
+ grid-template-columns: auto auto minmax(0, 1fr);
210
+ align-items: center;
211
+ gap: var(--vd-space-2);
212
+ }
213
+ /* Values lead (strong), series names follow (muted). */
214
+ .vd-chart__tooltip-value {
215
+ color: var(--vd-color-text);
216
+ font-weight: var(--vd-weight-semibold);
217
+ font-variant-numeric: tabular-nums;
218
+ }
219
+ .vd-chart__tooltip-name {
220
+ color: var(--vd-color-text-muted);
221
+ overflow-wrap: anywhere;
222
+ }
223
+
224
+ .vd-chart__table-wrap {
225
+ max-inline-size: 100%;
226
+ overflow-x: auto;
227
+ border-radius: var(--vd-radius-sm);
228
+ }
229
+ .vd-chart__table-wrap:focus-visible {
230
+ outline: var(--vd-focus-ring-width) solid var(--vd-color-focus);
231
+ outline-offset: var(--vd-focus-ring-offset);
232
+ }
233
+ .vd-chart__table {
234
+ inline-size: 100%;
235
+ border-collapse: collapse;
236
+ font-size: var(--vd-text-sm);
237
+ }
238
+ .vd-chart__table :is(th, td) {
239
+ padding: var(--vd-space-2) var(--vd-space-3);
240
+ border-block-end: var(--vd-border-width) solid var(--vd-color-border);
241
+ text-align: start;
242
+ }
243
+ .vd-chart__table td {
244
+ font-variant-numeric: tabular-nums;
245
+ text-align: end;
246
+ }
247
+ .vd-chart__table thead th {
248
+ color: var(--vd-color-text-muted);
249
+ font-weight: var(--vd-weight-medium);
250
+ }
251
+
252
+ /* ------------------------------------------------------------ sparkline */
253
+
254
+ .vd-sparkline {
255
+ --vd-sparkline-ink: var(--vd-color-text-subtle);
256
+ --vd-sparkline-block-size: var(--vd-space-8);
257
+
258
+ position: relative;
259
+ display: block;
260
+ inline-size: 100%;
261
+ block-size: var(--vd-sparkline-block-size);
262
+ /* Geometry only, no text: keep it LTR so the dot matches the SVG's x. */
263
+ direction: ltr;
264
+ }
265
+ .vd-sparkline__svg {
266
+ display: block;
267
+ inline-size: 100%;
268
+ block-size: 100%;
269
+ overflow: visible;
270
+ direction: ltr;
271
+ }
272
+ .vd-sparkline__line {
273
+ fill: none;
274
+ stroke: var(--vd-sparkline-ink);
275
+ stroke-width: 1.5;
276
+ stroke-linecap: round;
277
+ stroke-linejoin: round;
278
+ }
279
+ .vd-sparkline__area {
280
+ fill: var(--vd-sparkline-ink);
281
+ opacity: 0.08;
282
+ }
283
+ /* Current period in the accent; an HTML dot stays round however the SVG stretches. */
284
+ .vd-sparkline__dot {
285
+ position: absolute;
286
+ inset-block-start: var(--vd-sparkline-y);
287
+ inset-inline-start: var(--vd-sparkline-x);
288
+ inline-size: 0.5rem;
289
+ block-size: 0.5rem;
290
+ border: 2px solid var(--vd-color-surface);
291
+ border-radius: var(--vd-radius-full);
292
+ background: var(--vd-color-action);
293
+ box-sizing: content-box;
294
+ translate: -50% -50%;
295
+ }
296
+
297
+ @media (forced-colors: active) {
298
+ /* Keep series hues; the legend and data table carry identity as text. */
299
+ .vd-chart__svg,
300
+ .vd-chart__key,
301
+ .vd-sparkline {
302
+ forced-color-adjust: none;
303
+ }
304
+ .vd-chart__tooltip {
305
+ border-color: CanvasText;
306
+ }
307
+ }
308
+ }
@@ -0,0 +1,115 @@
1
+ /* Checkbox - spec: specs/checkbox.md */
2
+ @layer vd.components {
3
+ .vd-checkbox {
4
+ --vd-checkbox-size: 1.125rem;
5
+ --vd-checkbox-radius: var(--vd-radius-xs);
6
+ --vd-checkbox-bg: var(--vd-color-field);
7
+ --vd-checkbox-border: var(--vd-color-border-control);
8
+ --vd-checkbox-border-hover: var(--vd-color-border-control-hover);
9
+ --vd-checkbox-bg-checked: var(--vd-color-action);
10
+ --vd-checkbox-bg-checked-hover: var(--vd-color-action-hover);
11
+ --vd-checkbox-mark: var(--vd-color-on-action);
12
+ /* Lucide check / minus geometry, drawn bolder for the small box. */
13
+ --vd-checkbox-icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
14
+ --vd-checkbox-icon-mixed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.25' stroke-linecap='round'%3E%3Cpath d='M6 12h12'/%3E%3C/svg%3E");
15
+
16
+ appearance: none;
17
+ position: relative;
18
+ display: inline-grid;
19
+ place-content: center;
20
+ flex: none;
21
+ inline-size: var(--vd-checkbox-size);
22
+ block-size: var(--vd-checkbox-size);
23
+ margin: 0;
24
+ border: var(--vd-border-width) solid var(--vd-checkbox-border);
25
+ border-radius: var(--vd-checkbox-radius);
26
+ background-color: var(--vd-checkbox-bg);
27
+ vertical-align: middle;
28
+ cursor: pointer;
29
+ transition:
30
+ var(--vd-transition-colors),
31
+ scale var(--vd-duration-fast) var(--vd-ease-out);
32
+ }
33
+
34
+ .vd-checkbox::before {
35
+ content: '';
36
+ inline-size: calc(var(--vd-checkbox-size) * 0.75);
37
+ block-size: calc(var(--vd-checkbox-size) * 0.75);
38
+ background-color: var(--vd-checkbox-mark);
39
+ mask: var(--vd-checkbox-icon-check) center / contain no-repeat;
40
+ opacity: 0;
41
+ scale: 0.4;
42
+ transition:
43
+ opacity var(--vd-duration-fast) var(--vd-ease-out),
44
+ scale var(--vd-duration-base) var(--vd-ease-spring);
45
+ }
46
+
47
+ .vd-checkbox:is(:checked, :indeterminate) {
48
+ --vd-checkbox-bg: var(--vd-checkbox-bg-checked);
49
+ --vd-checkbox-border: var(--vd-checkbox-bg-checked);
50
+ --vd-checkbox-border-hover: var(--vd-checkbox-bg-checked-hover);
51
+
52
+ box-shadow: var(--vd-highlight-top);
53
+ }
54
+
55
+ .vd-checkbox:is(:checked, :indeterminate)::before {
56
+ opacity: 1;
57
+ scale: 1;
58
+ }
59
+
60
+ .vd-checkbox:indeterminate::before {
61
+ mask-image: var(--vd-checkbox-icon-mixed);
62
+ }
63
+
64
+ @media (hover: hover) {
65
+ .vd-checkbox:not(:disabled):hover,
66
+ .vd-choice:has(> .vd-checkbox:not(:disabled)):hover > .vd-checkbox {
67
+ border-color: var(--vd-checkbox-border-hover);
68
+ }
69
+
70
+ .vd-checkbox:is(:checked, :indeterminate):not(:disabled):hover,
71
+ .vd-choice:hover > .vd-checkbox:is(:checked, :indeterminate):not(:disabled) {
72
+ background-color: var(--vd-checkbox-bg-checked-hover);
73
+ }
74
+ }
75
+
76
+ .vd-checkbox:not(:disabled):active {
77
+ scale: var(--vd-press-scale);
78
+ }
79
+
80
+ .vd-checkbox:focus-visible {
81
+ outline: var(--vd-focus-ring-width) solid var(--vd-color-focus);
82
+ outline-offset: var(--vd-focus-ring-offset);
83
+ }
84
+
85
+ .vd-checkbox[data-invalid] {
86
+ --vd-checkbox-border: var(--vd-color-danger);
87
+ --vd-checkbox-border-hover: var(--vd-color-danger);
88
+ }
89
+
90
+ .vd-checkbox:disabled {
91
+ opacity: var(--vd-opacity-disabled);
92
+ cursor: not-allowed;
93
+ }
94
+
95
+ @media (forced-colors: active) {
96
+ .vd-checkbox {
97
+ forced-color-adjust: none;
98
+ border-color: ButtonText;
99
+ background-color: Canvas;
100
+ }
101
+
102
+ .vd-checkbox:is(:checked, :indeterminate) {
103
+ border-color: Highlight;
104
+ background-color: Highlight;
105
+ }
106
+
107
+ .vd-checkbox::before {
108
+ background-color: HighlightText;
109
+ }
110
+
111
+ .vd-checkbox:disabled {
112
+ border-color: GrayText;
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,158 @@
1
+ @layer vd.components {
2
+ .vd-color-picker {
3
+ --vd-color-picker-border: var(--vd-color-border-control);
4
+ --vd-color-picker-selected: var(--vd-color-action-text);
5
+ --vd-color-picker-hover: var(--vd-color-fill-hover);
6
+ --vd-color-picker-surface: var(--vd-color-surface);
7
+ --vd-color-picker-error: var(--vd-color-danger-text);
8
+ display: block;
9
+ min-inline-size: 0;
10
+ }
11
+ .vd-color-picker__trigger {
12
+ display: flex;
13
+ align-items: center;
14
+ gap: var(--vd-space-3);
15
+ text-align: start;
16
+ cursor: pointer;
17
+ }
18
+ /* Native buttons match :read-only; keep the editable input boundary explicitly. */
19
+ .vd-color-picker__trigger:read-only:not(:disabled) {
20
+ --vd-input-bg: var(--vd-color-field);
21
+ --vd-input-border: var(--vd-color-picker-border);
22
+ }
23
+ .vd-color-picker[data-readonly] .vd-color-picker__trigger {
24
+ --vd-input-bg: var(--vd-color-field-readonly);
25
+ }
26
+ .vd-color-picker__trigger[data-invalid]:read-only:not(:disabled) {
27
+ --vd-input-border: var(--vd-color-danger);
28
+ }
29
+ @media (hover: hover) {
30
+ .vd-color-picker__trigger:not(:disabled, [aria-disabled='true']):hover {
31
+ border-color: var(--vd-input-border-hover);
32
+ }
33
+ }
34
+ .vd-color-picker__value {
35
+ flex: 1;
36
+ min-inline-size: 0;
37
+ overflow: hidden;
38
+ white-space: nowrap;
39
+ text-overflow: ellipsis;
40
+ }
41
+ .vd-color-picker__value:not([data-placeholder]),
42
+ .vd-color-picker__hex {
43
+ font-family: var(--vd-font-mono);
44
+ }
45
+ .vd-color-picker__value[data-placeholder] {
46
+ color: var(--vd-color-text-muted);
47
+ }
48
+ .vd-color-picker__preview {
49
+ display: block;
50
+ flex: none;
51
+ inline-size: var(--vd-space-6);
52
+ block-size: var(--vd-space-6);
53
+ border: var(--vd-border-width) solid var(--vd-color-picker-border);
54
+ border-radius: var(--vd-radius-sm);
55
+ background: var(--vd-color-picker-value, transparent);
56
+ }
57
+ @position-try --vd-color-picker-center {
58
+ position-area: none;
59
+ inset: 0;
60
+ margin: auto;
61
+ }
62
+ .vd-color-picker__popup {
63
+ position-try-fallbacks:
64
+ flip-block,
65
+ flip-inline,
66
+ flip-block flip-inline,
67
+ --vd-color-picker-center;
68
+ block-size: fit-content;
69
+ container-type: inline-size;
70
+ }
71
+ .vd-color-picker__popup:popover-open {
72
+ display: grid;
73
+ gap: var(--vd-space-3);
74
+ }
75
+ .vd-color-picker__draft {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: var(--vd-space-3);
79
+ }
80
+ .vd-color-picker__hex-label {
81
+ overflow-wrap: anywhere;
82
+ }
83
+ .vd-color-picker__palette {
84
+ display: grid;
85
+ grid-template-columns: repeat(4, minmax(0, 1fr));
86
+ gap: var(--vd-space-2);
87
+ }
88
+ @container (inline-size < 16rem) {
89
+ .vd-color-picker__palette {
90
+ grid-template-columns: repeat(2, minmax(0, 1fr));
91
+ }
92
+ }
93
+ .vd-color-picker__swatch {
94
+ display: grid;
95
+ place-items: center;
96
+ min-inline-size: 0;
97
+ min-block-size: var(--vd-control-height-md);
98
+ padding: var(--vd-space-1);
99
+ background: var(--vd-color-picker-surface);
100
+ border: var(--vd-border-width) solid var(--vd-color-picker-border);
101
+ border-radius: var(--vd-radius-control);
102
+ cursor: pointer;
103
+ }
104
+ .vd-color-picker__swatch:hover {
105
+ background: var(--vd-color-picker-hover);
106
+ }
107
+ .vd-color-picker__swatch[aria-checked='true'] {
108
+ border-color: var(--vd-color-picker-selected);
109
+ box-shadow: inset 0 0 0 var(--vd-border-width) var(--vd-color-picker-selected);
110
+ }
111
+ .vd-color-picker__swatch:focus-visible {
112
+ outline: var(--vd-focus-ring-width) solid var(--vd-color-focus);
113
+ outline-offset: var(--vd-focus-ring-offset);
114
+ }
115
+ .vd-color-picker__chip {
116
+ display: grid;
117
+ place-items: center;
118
+ inline-size: 100%;
119
+ min-block-size: var(--vd-space-6);
120
+ background: var(--vd-color-picker-value);
121
+ color: var(--vd-color-picker-ink);
122
+ border-radius: var(--vd-radius-sm);
123
+ }
124
+ .vd-color-picker__chip {
125
+ min-inline-size: 0;
126
+ }
127
+ .vd-color-picker__chip .vd-icon {
128
+ max-inline-size: 100%;
129
+ }
130
+ .vd-color-picker__swatch:not([aria-checked='true']) .vd-icon {
131
+ visibility: hidden;
132
+ }
133
+ .vd-color-picker__error {
134
+ display: flex;
135
+ align-items: start;
136
+ gap: var(--vd-space-2);
137
+ margin: 0;
138
+ color: var(--vd-color-picker-error);
139
+ font-size: var(--vd-text-sm);
140
+ overflow-wrap: anywhere;
141
+ }
142
+ .vd-color-picker[data-readonly] .vd-color-picker__trigger {
143
+ cursor: default;
144
+ }
145
+ @media (forced-colors: active) {
146
+ .vd-color-picker__preview,
147
+ .vd-color-picker__chip {
148
+ forced-color-adjust: none;
149
+ }
150
+ .vd-color-picker__swatch[aria-checked='true'] {
151
+ border-color: Highlight;
152
+ outline: var(--vd-focus-ring-width) solid Highlight;
153
+ }
154
+ .vd-color-picker__swatch:focus-visible {
155
+ outline-color: Highlight;
156
+ }
157
+ }
158
+ }