@vanduo-oss/framework 1.4.0 → 1.4.2

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 (89) hide show
  1. package/README.md +11 -9
  2. package/css/components/affix.css +11 -11
  3. package/css/components/alerts.css +55 -55
  4. package/css/components/avatar.css +62 -62
  5. package/css/components/badges.css +25 -25
  6. package/css/components/breadcrumbs.css +31 -31
  7. package/css/components/bubble.css +40 -40
  8. package/css/components/button-group.css +2 -2
  9. package/css/components/buttons.css +33 -33
  10. package/css/components/cards.css +76 -76
  11. package/css/components/chips.css +27 -27
  12. package/css/components/code-snippet.css +132 -132
  13. package/css/components/collapsible.css +60 -60
  14. package/css/components/collections.css +58 -58
  15. package/css/components/datepicker.css +55 -53
  16. package/css/components/doc-search.css +63 -63
  17. package/css/components/doc-tabs.css +1 -1
  18. package/css/components/draggable.css +69 -69
  19. package/css/components/dropdown.css +48 -48
  20. package/css/components/fab.css +60 -60
  21. package/css/components/flow.css +55 -55
  22. package/css/components/footer.css +52 -52
  23. package/css/components/forms.css +373 -373
  24. package/css/components/image-box.css +39 -39
  25. package/css/components/modals.css +53 -49
  26. package/css/components/music-player.css +150 -150
  27. package/css/components/navbar.css +71 -71
  28. package/css/components/pagination.css +50 -50
  29. package/css/components/preloader.css +18 -18
  30. package/css/components/progress.css +16 -16
  31. package/css/components/rating.css +18 -18
  32. package/css/components/ripple.css +10 -10
  33. package/css/components/sidenav.css +67 -67
  34. package/css/components/skeleton.css +13 -13
  35. package/css/components/spinner.css +30 -30
  36. package/css/components/spotlight.css +27 -27
  37. package/css/components/stepper.css +36 -36
  38. package/css/components/suggest.css +35 -35
  39. package/css/components/tabs.css +46 -46
  40. package/css/components/theme-customizer.css +73 -73
  41. package/css/components/timeline.css +43 -43
  42. package/css/components/timepicker.css +32 -30
  43. package/css/components/toast.css +27 -27
  44. package/css/components/tooltips.css +77 -77
  45. package/css/components/transfer.css +35 -35
  46. package/css/components/tree.css +25 -25
  47. package/css/components/waypoint.css +12 -12
  48. package/css/core/colors.css +610 -610
  49. package/css/core/grid.css +127 -127
  50. package/css/core/helpers.css +338 -338
  51. package/css/core/tokens.css +69 -81
  52. package/css/core/typography.css +91 -91
  53. package/css/effects/morph.css +17 -17
  54. package/css/effects/parallax.css +6 -6
  55. package/css/utilities/color-utilities.css +273 -273
  56. package/css/utilities/media.css +2 -2
  57. package/css/utilities/shadow.css +75 -75
  58. package/css/utilities/table.css +40 -40
  59. package/css/utilities/transitions.css +38 -38
  60. package/css/vanduo.css +1 -2
  61. package/dist/build-info.json +3 -3
  62. package/dist/vanduo.cjs.js +104 -29
  63. package/dist/vanduo.cjs.js.map +2 -2
  64. package/dist/vanduo.cjs.min.js +5 -5
  65. package/dist/vanduo.cjs.min.js.map +3 -3
  66. package/dist/vanduo.css +4042 -4133
  67. package/dist/vanduo.css.map +1 -1
  68. package/dist/vanduo.esm.js +104 -29
  69. package/dist/vanduo.esm.js.map +2 -2
  70. package/dist/vanduo.esm.min.js +5 -5
  71. package/dist/vanduo.esm.min.js.map +3 -3
  72. package/dist/vanduo.js +104 -29
  73. package/dist/vanduo.js.map +2 -2
  74. package/dist/vanduo.min.css +2 -2
  75. package/dist/vanduo.min.css.map +1 -1
  76. package/dist/vanduo.min.js +5 -5
  77. package/dist/vanduo.min.js.map +3 -3
  78. package/js/components/affix.js +2 -2
  79. package/js/components/datepicker.js +51 -4
  80. package/js/components/image-box.js +2 -2
  81. package/js/components/morph.js +1 -1
  82. package/js/components/music-player.js +11 -11
  83. package/js/components/navbar.js +1 -1
  84. package/js/components/preloader.js +1 -1
  85. package/js/components/theme-customizer.js +4 -4
  86. package/js/components/timepicker.js +48 -6
  87. package/js/components/vd-hex.js +8 -10
  88. package/package.json +1 -1
  89. package/css/core/vd-aliases.css +0 -108
@@ -51,7 +51,7 @@
51
51
  sentinel.style.cssText = 'display:block;height:1px;margin-bottom:-1px;visibility:hidden;pointer-events:none;';
52
52
  el.parentNode.insertBefore(sentinel, el);
53
53
 
54
- el.style.setProperty('--affix-top-offset', offset + 'px');
54
+ el.style.setProperty('--vd-affix-top-offset', offset + 'px');
55
55
 
56
56
  function stick() {
57
57
  if (isStuck) return;
@@ -100,7 +100,7 @@
100
100
  () => { if (sentinel.parentNode) sentinel.parentNode.removeChild(sentinel); },
101
101
  () => {
102
102
  el.classList.remove('is-stuck');
103
- el.style.removeProperty('--affix-top-offset');
103
+ el.style.removeProperty('--vd-affix-top-offset');
104
104
  }
105
105
  );
106
106
 
@@ -128,6 +128,32 @@
128
128
  return x;
129
129
  }
130
130
 
131
+ function positionAnchoredPopup(anchor, popup, gap) {
132
+ const padding = 8;
133
+ const offset = gap != null ? gap : 4;
134
+ const rect = anchor.getBoundingClientRect();
135
+
136
+ popup.style.minWidth = Math.max(rect.width, 0) + 'px';
137
+
138
+ let top = rect.bottom + offset;
139
+ let left = rect.left;
140
+ popup.style.top = top + 'px';
141
+ popup.style.left = left + 'px';
142
+
143
+ const popRect = popup.getBoundingClientRect();
144
+ if (popRect.bottom > window.innerHeight - padding && rect.top - popRect.height > padding) {
145
+ top = rect.top - popRect.height - offset;
146
+ popup.style.top = top + 'px';
147
+ }
148
+
149
+ const alignedRect = popup.getBoundingClientRect();
150
+ left = rect.left;
151
+ if (left + alignedRect.width > window.innerWidth - padding) {
152
+ left = window.innerWidth - alignedRect.width - padding;
153
+ }
154
+ popup.style.left = Math.max(padding, left) + 'px';
155
+ }
156
+
131
157
  const Datepicker = {
132
158
  instances: new Map(),
133
159
 
@@ -221,7 +247,7 @@
221
247
  wrapper.style.display = 'inline-block';
222
248
  input.parentNode.insertBefore(wrapper, input);
223
249
  wrapper.appendChild(input);
224
- wrapper.appendChild(popup);
250
+ document.body.appendChild(popup);
225
251
 
226
252
  const isSameDay = (a, b) => a && b &&
227
253
  a.getFullYear() === b.getFullYear() &&
@@ -442,6 +468,10 @@
442
468
  }
443
469
  popup.appendChild(grid);
444
470
  }
471
+
472
+ if (popup.classList.contains('is-open')) {
473
+ requestAnimationFrame(positionPopup);
474
+ }
445
475
  };
446
476
 
447
477
  const handleGridKeydown = (e) => {
@@ -523,6 +553,15 @@
523
553
  requestAnimationFrame(focusFocusedDay);
524
554
  };
525
555
 
556
+ const positionPopup = () => {
557
+ if (!popup.classList.contains('is-open')) return;
558
+ positionAnchoredPopup(input, popup);
559
+ };
560
+
561
+ const repositionHandler = () => {
562
+ positionPopup();
563
+ };
564
+
526
565
  const open = () => {
527
566
  viewMode = 'days';
528
567
  if (selectedDate) {
@@ -542,7 +581,10 @@
542
581
  render();
543
582
  popup.classList.add('is-open');
544
583
  input.setAttribute('aria-expanded', 'true');
545
- requestAnimationFrame(focusFocusedDay);
584
+ requestAnimationFrame(() => {
585
+ positionPopup();
586
+ focusFocusedDay();
587
+ });
546
588
  };
547
589
 
548
590
  const close = () => {
@@ -559,7 +601,7 @@
559
601
  open();
560
602
  };
561
603
  const outsideHandler = (e) => {
562
- if (!wrapper.contains(e.target)) close();
604
+ if (!input.contains(e.target) && !popup.contains(e.target)) close();
563
605
  };
564
606
  const escHandler = (e) => {
565
607
  if (e.key === 'Escape' && popup.classList.contains('is-open')) {
@@ -573,6 +615,8 @@
573
615
  document.addEventListener('click', outsideHandler, true);
574
616
  document.addEventListener('keydown', escHandler);
575
617
  popup.addEventListener('keydown', handleGridKeydown);
618
+ window.addEventListener('resize', repositionHandler);
619
+ window.addEventListener('scroll', repositionHandler, true);
576
620
 
577
621
  input.setAttribute('aria-haspopup', 'dialog');
578
622
  input.setAttribute('aria-expanded', 'false');
@@ -582,7 +626,10 @@
582
626
  () => input.removeEventListener('focus', focusHandler),
583
627
  () => document.removeEventListener('click', outsideHandler, true),
584
628
  () => document.removeEventListener('keydown', escHandler),
585
- () => popup.removeEventListener('keydown', handleGridKeydown)
629
+ () => popup.removeEventListener('keydown', handleGridKeydown),
630
+ () => window.removeEventListener('resize', repositionHandler),
631
+ () => window.removeEventListener('scroll', repositionHandler, true),
632
+ () => popup.remove()
586
633
  );
587
634
 
588
635
  this.instances.set(input, { cleanup: cleanup, open: open, close: close, popup: popup });
@@ -280,7 +280,7 @@
280
280
 
281
281
  // Calculate scrollbar width and lock body scroll
282
282
  const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
283
- document.body.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);
283
+ document.body.style.setProperty('--vd-scrollbar-width', `${scrollbarWidth}px`);
284
284
  document.body.classList.add('body-image-box-open');
285
285
 
286
286
  // Show backdrop
@@ -318,7 +318,7 @@
318
318
 
319
319
  // Unlock body scroll
320
320
  document.body.classList.remove('body-image-box-open');
321
- document.body.style.removeProperty('--scrollbar-width');
321
+ document.body.style.removeProperty('--vd-scrollbar-width');
322
322
 
323
323
  // Return focus to trigger
324
324
  if (this.currentTrigger) {
@@ -102,7 +102,7 @@
102
102
  el.classList.add('is-morphing');
103
103
 
104
104
  let duration = MORPH_DURATION_MS;
105
- const custom = getComputedStyle(el).getPropertyValue('--morph-duration');
105
+ const custom = getComputedStyle(el).getPropertyValue('--vd-morph-duration');
106
106
  if (custom) {
107
107
  const parsed = parseFloat(custom);
108
108
  if (!isNaN(parsed)) duration = parsed * (custom.indexOf('ms') !== -1 ? 1 : 1000);
@@ -101,13 +101,13 @@
101
101
  const max = parseFloat(input.max) || 1;
102
102
  const val = parseFloat(input.value) || 0;
103
103
  const pct = ((val - min) / (max - min)) * 100;
104
- input.style.setProperty('--fill', pct + '%');
104
+ input.style.setProperty('--vd-fill', pct + '%');
105
105
  // Fallback inline gradient for browsers without ::-moz-range-progress
106
106
  input.style.backgroundImage =
107
- 'linear-gradient(to right, var(--music-player-track-fill, currentColor) 0%, ' +
108
- 'var(--music-player-track-fill, currentColor) ' + pct + '%, ' +
109
- 'var(--music-player-track-bg, #ccc) ' + pct + '%, ' +
110
- 'var(--music-player-track-bg, #ccc) 100%)';
107
+ 'linear-gradient(to right, var(--vd-music-player-track-fill, currentColor) 0%, ' +
108
+ 'var(--vd-music-player-track-fill, currentColor) ' + pct + '%, ' +
109
+ 'var(--vd-music-player-track-bg, #ccc) ' + pct + '%, ' +
110
+ 'var(--vd-music-player-track-bg, #ccc) 100%)';
111
111
  }
112
112
 
113
113
  /* ─── Phosphor icon helper (matches framework icon style) ─ */
@@ -911,8 +911,8 @@
911
911
  'vd-music-player-floating-bottom-right',
912
912
  'is-position-custom'
913
913
  );
914
- container.style.removeProperty('--music-player-floating-top');
915
- container.style.removeProperty('--music-player-floating-left');
914
+ container.style.removeProperty('--vd-music-player-floating-top');
915
+ container.style.removeProperty('--vd-music-player-floating-left');
916
916
  if (r && r.parent && r.parent.isConnected) {
917
917
  r.parent.insertBefore(container, r.next);
918
918
  }
@@ -1014,8 +1014,8 @@
1014
1014
  */
1015
1015
  _setCornerPosition: function (container, which) {
1016
1016
  container.classList.remove('is-position-custom', 'vd-music-player-floating-bottom-left', 'vd-music-player-floating-bottom-right');
1017
- container.style.removeProperty('--music-player-floating-top');
1018
- container.style.removeProperty('--music-player-floating-left');
1017
+ container.style.removeProperty('--vd-music-player-floating-top');
1018
+ container.style.removeProperty('--vd-music-player-floating-left');
1019
1019
  if (which === 'bottom-left') {
1020
1020
  container.classList.add('vd-music-player-floating-bottom-left');
1021
1021
  } else {
@@ -1031,8 +1031,8 @@
1031
1031
  _setCustomPositionFromRect: function (container, left, top) {
1032
1032
  container.classList.remove('vd-music-player-floating-bottom-left', 'vd-music-player-floating-bottom-right');
1033
1033
  container.classList.add('is-position-custom');
1034
- container.style.setProperty('--music-player-floating-left', left + 'px');
1035
- container.style.setProperty('--music-player-floating-top', top + 'px');
1034
+ container.style.setProperty('--vd-music-player-floating-left', left + 'px');
1035
+ container.style.setProperty('--vd-music-player-floating-top', top + 'px');
1036
1036
  },
1037
1037
 
1038
1038
  /**
@@ -19,7 +19,7 @@
19
19
  */
20
20
  getBreakpoint: function () {
21
21
  const root = getComputedStyle(document.documentElement);
22
- const breakpointValue = root.getPropertyValue('--breakpoint-lg').trim();
22
+ const breakpointValue = root.getPropertyValue('--vd-breakpoint-lg').trim();
23
23
 
24
24
  // Parse the value (could be "992px" or just "992")
25
25
  const parsed = parseInt(breakpointValue, 10);
@@ -60,7 +60,7 @@
60
60
 
61
61
  // Update width
62
62
  if (animate) {
63
- el.style.transition = 'width var(--transition-duration-slow) var(--transition-ease)';
63
+ el.style.transition = 'width var(--vd-transition-duration-slow) var(--vd-transition-ease)';
64
64
  } else {
65
65
  el.style.transition = 'none';
66
66
  setTimeout(() => {
@@ -260,7 +260,7 @@
260
260
 
261
261
  this.state.radius = radius;
262
262
  document.documentElement.setAttribute('data-radius', radius);
263
- document.documentElement.style.setProperty('--radius-scale', radius);
263
+ document.documentElement.style.setProperty('--vd-radius-scale', radius);
264
264
  this.savePreference(this.STORAGE_KEYS.RADIUS, radius);
265
265
 
266
266
  this.dispatchEvent('radius-change', { radius: radius });
@@ -461,7 +461,7 @@
461
461
  } else {
462
462
  // Desktop: position directly below the trigger button, aligned to its right edge
463
463
  const triggerRect = anchorTrigger.getBoundingClientRect();
464
- const panelWidth = 320; // --customizer-width
464
+ const panelWidth = 320; // --vd-customizer-width
465
465
  const panelTop = triggerRect.bottom + 8;
466
466
 
467
467
  // Calculate right position: align panel's right edge with trigger's right edge
@@ -572,13 +572,13 @@
572
572
  // Generate primary color swatches
573
573
  let primarySwatches = '';
574
574
  for (const [key, value] of Object.entries(this.PRIMARY_COLORS)) {
575
- primarySwatches += `<button class="tc-color-swatch${key === this.state.primary ? ' is-active' : ''}" data-color="${esc(key)}" style="--swatch-color: ${safeColor(value.color)}" title="${esc(value.name)}"></button>`;
575
+ primarySwatches += `<button class="tc-color-swatch${key === this.state.primary ? ' is-active' : ''}" data-color="${esc(key)}" style="--vd-swatch-color: ${safeColor(value.color)}" title="${esc(value.name)}"></button>`;
576
576
  }
577
577
 
578
578
  // Generate neutral color swatches
579
579
  let neutralSwatches = '';
580
580
  for (const [key, value] of Object.entries(this.NEUTRAL_COLORS)) {
581
- neutralSwatches += `<button class="tc-neutral-swatch${key === this.state.neutral ? ' is-active' : ''}" data-neutral="${esc(key)}" style="--swatch-color: ${safeColor(value.color)}" title="${esc(value.name)}"><span>${esc(value.name)}</span></button>`;
581
+ neutralSwatches += `<button class="tc-neutral-swatch${key === this.state.neutral ? ' is-active' : ''}" data-neutral="${esc(key)}" style="--vd-swatch-color: ${safeColor(value.color)}" title="${esc(value.name)}"><span>${esc(value.name)}</span></button>`;
582
582
  }
583
583
 
584
584
  // Generate radius buttons
@@ -6,6 +6,32 @@
6
6
  (function () {
7
7
  'use strict';
8
8
 
9
+ function positionAnchoredPopup(anchor, popup, gap) {
10
+ const padding = 8;
11
+ const offset = gap != null ? gap : 4;
12
+ const rect = anchor.getBoundingClientRect();
13
+
14
+ popup.style.minWidth = Math.max(rect.width, 0) + 'px';
15
+
16
+ let top = rect.bottom + offset;
17
+ let left = rect.left;
18
+ popup.style.top = top + 'px';
19
+ popup.style.left = left + 'px';
20
+
21
+ const popRect = popup.getBoundingClientRect();
22
+ if (popRect.bottom > window.innerHeight - padding && rect.top - popRect.height > padding) {
23
+ top = rect.top - popRect.height - offset;
24
+ popup.style.top = top + 'px';
25
+ }
26
+
27
+ const alignedRect = popup.getBoundingClientRect();
28
+ left = rect.left;
29
+ if (left + alignedRect.width > window.innerWidth - padding) {
30
+ left = window.innerWidth - alignedRect.width - padding;
31
+ }
32
+ popup.style.left = Math.max(padding, left) + 'px';
33
+ }
34
+
9
35
  const Timepicker = {
10
36
  instances: new Map(),
11
37
 
@@ -36,7 +62,7 @@
36
62
  const popup = document.createElement('div');
37
63
  popup.className = 'vd-timepicker-popup';
38
64
  popup.setAttribute('role', 'listbox');
39
- wrapper.appendChild(popup);
65
+ document.body.appendChild(popup);
40
66
 
41
67
  // Generate time slots
42
68
  const times = [];
@@ -84,13 +110,24 @@
84
110
  });
85
111
  };
86
112
 
113
+ const positionPopup = () => {
114
+ if (!popup.classList.contains('is-open')) return;
115
+ positionAnchoredPopup(input, popup);
116
+ };
117
+
118
+ const repositionHandler = () => {
119
+ positionPopup();
120
+ };
121
+
87
122
  const open = () => {
88
123
  render();
89
124
  popup.classList.add('is-open');
90
125
  input.setAttribute('aria-expanded', 'true');
91
- // Scroll to selected
92
- const selected = popup.querySelector('.is-selected');
93
- if (selected) selected.scrollIntoView({ block: 'center' });
126
+ requestAnimationFrame(() => {
127
+ positionPopup();
128
+ const selected = popup.querySelector('.is-selected');
129
+ if (selected) selected.scrollIntoView({ block: 'center' });
130
+ });
94
131
  };
95
132
 
96
133
  const close = () => {
@@ -100,13 +137,15 @@
100
137
 
101
138
  const focusHandler = () => open();
102
139
  const outsideHandler = (e) => {
103
- if (!wrapper.contains(e.target)) close();
140
+ if (!input.contains(e.target) && !popup.contains(e.target)) close();
104
141
  };
105
142
  const escHandler = (e) => { if (e.key === 'Escape') close(); };
106
143
 
107
144
  input.addEventListener('focus', focusHandler);
108
145
  document.addEventListener('click', outsideHandler, true);
109
146
  document.addEventListener('keydown', escHandler);
147
+ window.addEventListener('resize', repositionHandler);
148
+ window.addEventListener('scroll', repositionHandler, true);
110
149
  input.setAttribute('aria-haspopup', 'listbox');
111
150
  input.setAttribute('aria-expanded', 'false');
112
151
  input.setAttribute('autocomplete', 'off');
@@ -115,7 +154,10 @@
115
154
  cleanup.push(
116
155
  () => input.removeEventListener('focus', focusHandler),
117
156
  () => document.removeEventListener('click', outsideHandler, true),
118
- () => document.removeEventListener('keydown', escHandler)
157
+ () => document.removeEventListener('keydown', escHandler),
158
+ () => window.removeEventListener('resize', repositionHandler),
159
+ () => window.removeEventListener('scroll', repositionHandler, true),
160
+ () => popup.remove()
119
161
  );
120
162
 
121
163
  this.instances.set(input, { cleanup, open, close });
@@ -90,19 +90,17 @@ export class VdHexGrid {
90
90
  const root = document.documentElement;
91
91
  const style = getComputedStyle(root);
92
92
 
93
- const readToken = (canonical, fallback, defaultValue) => {
94
- return style.getPropertyValue(canonical).trim()
95
- || style.getPropertyValue(fallback).trim()
96
- || defaultValue;
93
+ const readToken = (token, defaultValue) => {
94
+ return style.getPropertyValue(token).trim() || defaultValue;
97
95
  };
98
96
 
99
97
  return {
100
- bgPrimary: readToken('--vd-bg-primary', '--bg-primary', '#ffffff'),
101
- bgSecondary: readToken('--vd-bg-secondary', '--bg-secondary', '#f5f5f5'),
102
- borderColor: readToken('--vd-border-color', '--border-color', '#e0e0e0'),
103
- colorPrimary: readToken('--vd-color-primary', '--color-primary', '#3b82f6'),
104
- textColor: readToken('--vd-text-primary', '--text-primary', '#1f2937'),
105
- textMuted: readToken('--vd-text-muted', '--text-muted', '#6b7280')
98
+ bgPrimary: readToken('--vd-bg-primary', '#ffffff'),
99
+ bgSecondary: readToken('--vd-bg-secondary', '#f5f5f5'),
100
+ borderColor: readToken('--vd-border-color', '#e0e0e0'),
101
+ colorPrimary: readToken('--vd-color-primary', '#3b82f6'),
102
+ textColor: readToken('--vd-text-primary', '#1f2937'),
103
+ textMuted: readToken('--vd-text-muted', '#6b7280')
106
104
  };
107
105
  }
108
106
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vanduo-oss/framework",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "description": "Zero-dependency CSS/JS framework built on Fibonacci/Golden Ratio design system with Open Color integration",
5
5
  "keywords": [
6
6
  "css",
@@ -1,108 +0,0 @@
1
- /**
2
- * Vanduo Framework - Semantic Compatibility Aliases
3
- * Maps legacy unprefixed semantic tokens to the canonical `--vd-*` API.
4
- */
5
-
6
- :root {
7
- /* Colors */
8
- --color-primary: var(--vd-color-primary);
9
- --color-primary-light: var(--vd-color-primary-light);
10
- --color-primary-dark: var(--vd-color-primary-dark);
11
- --color-primary-hover: var(--vd-color-primary-hover);
12
- --color-primary-active: var(--vd-color-primary-active);
13
- --color-primary-rgb: var(--vd-color-primary-rgb);
14
- --color-primary-alpha-5: var(--vd-color-primary-alpha-5);
15
- --color-primary-alpha-08: var(--vd-color-primary-alpha-08);
16
- --color-primary-alpha-10: var(--vd-color-primary-alpha-10);
17
- --color-primary-alpha-15: var(--vd-color-primary-alpha-15);
18
- --color-primary-alpha-20: var(--vd-color-primary-alpha-20);
19
- --color-primary-alpha-30: var(--vd-color-primary-alpha-30);
20
- --color-primary-alpha-40: var(--vd-color-primary-alpha-40);
21
- --color-primary-alpha-50: var(--vd-color-primary-alpha-50);
22
-
23
- --color-secondary: var(--vd-color-secondary);
24
- --color-secondary-light: var(--vd-color-secondary-light);
25
- --color-secondary-dark: var(--vd-color-secondary-dark);
26
- --color-secondary-hover: var(--vd-color-secondary-hover);
27
- --color-secondary-active: var(--vd-color-secondary-active);
28
- --color-secondary-alpha-10: var(--vd-color-secondary-alpha-10);
29
- --color-secondary-alpha-20: var(--vd-color-secondary-alpha-20);
30
-
31
- --color-accent: var(--vd-color-accent);
32
- --color-accent-light: var(--vd-color-accent-light);
33
- --color-accent-dark: var(--vd-color-accent-dark);
34
-
35
- --color-success: var(--vd-color-success);
36
- --color-success-light: var(--vd-color-success-light);
37
- --color-success-dark: var(--vd-color-success-dark);
38
- --color-success-hover: var(--vd-color-success-hover);
39
- --color-success-active: var(--vd-color-success-active);
40
- --color-success-alpha-10: var(--vd-color-success-alpha-10);
41
- --color-success-alpha-20: var(--vd-color-success-alpha-20);
42
-
43
- --color-warning: var(--vd-color-warning);
44
- --color-warning-light: var(--vd-color-warning-light);
45
- --color-warning-dark: var(--vd-color-warning-dark);
46
- --color-warning-hover: var(--vd-color-warning-hover);
47
- --color-warning-active: var(--vd-color-warning-active);
48
- --color-warning-alpha-10: var(--vd-color-warning-alpha-10);
49
- --color-warning-alpha-20: var(--vd-color-warning-alpha-20);
50
- --color-warning-alpha-30: var(--vd-color-warning-alpha-30);
51
-
52
- --color-error: var(--vd-color-error);
53
- --color-error-light: var(--vd-color-error-light);
54
- --color-error-dark: var(--vd-color-error-dark);
55
- --color-error-hover: var(--vd-color-error-hover);
56
- --color-error-active: var(--vd-color-error-active);
57
- --color-error-alpha-10: var(--vd-color-error-alpha-10);
58
- --color-error-alpha-20: var(--vd-color-error-alpha-20);
59
-
60
- --color-danger: var(--vd-color-danger);
61
- --color-danger-light: var(--vd-color-danger-light);
62
- --color-danger-dark: var(--vd-color-danger-dark);
63
- --color-danger-hover: var(--vd-color-danger-hover);
64
- --color-danger-active: var(--vd-color-danger-active);
65
-
66
- --color-info: var(--vd-color-info);
67
- --color-info-light: var(--vd-color-info-light);
68
- --color-info-dark: var(--vd-color-info-dark);
69
- --color-info-hover: var(--vd-color-info-hover);
70
- --color-info-active: var(--vd-color-info-active);
71
- --color-info-alpha-10: var(--vd-color-info-alpha-10);
72
- --color-info-alpha-20: var(--vd-color-info-alpha-20);
73
-
74
- --color-white: var(--vd-color-white);
75
- --color-black: var(--vd-color-black);
76
- --color-gray-50: var(--vd-color-gray-50);
77
- --color-gray-100: var(--vd-color-gray-100);
78
- --color-gray-200: var(--vd-color-gray-200);
79
- --color-gray-300: var(--vd-color-gray-300);
80
- --color-gray-400: var(--vd-color-gray-400);
81
- --color-gray-500: var(--vd-color-gray-500);
82
- --color-gray-600: var(--vd-color-gray-600);
83
- --color-gray-700: var(--vd-color-gray-700);
84
- --color-gray-800: var(--vd-color-gray-800);
85
- --color-gray-900: var(--vd-color-gray-900);
86
-
87
- /* Backgrounds */
88
- --bg-primary: var(--vd-bg-primary);
89
- --bg-secondary: var(--vd-bg-secondary);
90
- --bg-tertiary: var(--vd-bg-tertiary);
91
- --bg-dark: var(--vd-bg-dark);
92
- --bg-darker: var(--vd-bg-darker);
93
-
94
- /* Text */
95
- --text-primary: var(--vd-text-primary);
96
- --text-secondary: var(--vd-text-secondary);
97
- --text-tertiary: var(--vd-text-tertiary);
98
- --text-muted: var(--vd-text-muted);
99
- --text-light: var(--vd-text-light);
100
- --text-disabled: var(--vd-text-disabled);
101
- --text-on-primary: var(--vd-text-on-primary);
102
- --text-inverse: var(--vd-text-inverse);
103
-
104
- /* Borders */
105
- --border-color: var(--vd-border-color);
106
- --border-color-light: var(--vd-border-color-light);
107
- --border-color-dark: var(--vd-border-color-dark);
108
- }