vanduo-framework 1.1.8

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 (196) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +205 -0
  3. package/css/components/alerts.css +224 -0
  4. package/css/components/avatar.css +275 -0
  5. package/css/components/badges.css +230 -0
  6. package/css/components/breadcrumbs.css +146 -0
  7. package/css/components/button-group.css +82 -0
  8. package/css/components/buttons.css +530 -0
  9. package/css/components/cards.css +304 -0
  10. package/css/components/chips.css +259 -0
  11. package/css/components/code-snippet.css +555 -0
  12. package/css/components/collapsible.css +267 -0
  13. package/css/components/collections.css +253 -0
  14. package/css/components/doc-search.css +464 -0
  15. package/css/components/doc-tabs.css +38 -0
  16. package/css/components/draggable.css +317 -0
  17. package/css/components/dropdown.css +266 -0
  18. package/css/components/footer.css +375 -0
  19. package/css/components/forms.css +1774 -0
  20. package/css/components/image-box.css +279 -0
  21. package/css/components/modals.css +285 -0
  22. package/css/components/navbar.css +530 -0
  23. package/css/components/pagination.css +186 -0
  24. package/css/components/preloader.css +340 -0
  25. package/css/components/progress.css +107 -0
  26. package/css/components/sidenav.css +301 -0
  27. package/css/components/skeleton.css +241 -0
  28. package/css/components/spinner.css +144 -0
  29. package/css/components/tabs.css +327 -0
  30. package/css/components/theme-customizer.css +835 -0
  31. package/css/components/toast.css +357 -0
  32. package/css/components/tooltips.css +270 -0
  33. package/css/core/colors.css +1017 -0
  34. package/css/core/fonts.css +266 -0
  35. package/css/core/grid.css +1699 -0
  36. package/css/core/helpers.css +2202 -0
  37. package/css/core/reset.css +128 -0
  38. package/css/core/tokens.css +213 -0
  39. package/css/core/typography.css +405 -0
  40. package/css/core/vd-aliases.css +47 -0
  41. package/css/effects/parallax.css +113 -0
  42. package/css/icons/icons-all.css +23 -0
  43. package/css/icons/icons.css +25 -0
  44. package/css/utilities/media.css +167 -0
  45. package/css/utilities/print.css +111 -0
  46. package/css/utilities/shadow.css +243 -0
  47. package/css/utilities/table.css +381 -0
  48. package/css/utilities/transforms.css +71 -0
  49. package/css/utilities/transitions.css +87 -0
  50. package/css/vanduo.css +80 -0
  51. package/dist/build-info.json +6 -0
  52. package/dist/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  53. package/dist/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  54. package/dist/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  55. package/dist/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  56. package/dist/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  57. package/dist/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  58. package/dist/fonts/inter/inter-bold.woff2 +0 -0
  59. package/dist/fonts/inter/inter-medium.woff2 +0 -0
  60. package/dist/fonts/inter/inter-regular.woff2 +0 -0
  61. package/dist/fonts/inter/inter-semibold.woff2 +0 -0
  62. package/dist/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  63. package/dist/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  64. package/dist/fonts/open-sans/open-sans-bold.woff2 +0 -0
  65. package/dist/fonts/open-sans/open-sans-medium.woff2 +0 -0
  66. package/dist/fonts/open-sans/open-sans-regular.woff2 +0 -0
  67. package/dist/fonts/rubik/rubik-bold.woff2 +0 -0
  68. package/dist/fonts/rubik/rubik-medium.woff2 +0 -0
  69. package/dist/fonts/rubik/rubik-regular.woff2 +0 -0
  70. package/dist/fonts/source-sans/source-sans-bold.woff2 +0 -0
  71. package/dist/fonts/source-sans/source-sans-regular.woff2 +0 -0
  72. package/dist/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  73. package/dist/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  74. package/dist/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  75. package/dist/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  76. package/dist/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  77. package/dist/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  78. package/dist/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  79. package/dist/icons/phosphor/LICENSE +21 -0
  80. package/dist/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  81. package/dist/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  82. package/dist/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  83. package/dist/icons/phosphor/bold/style.css +4627 -0
  84. package/dist/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  85. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  86. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  87. package/dist/icons/phosphor/duotone/style.css +12115 -0
  88. package/dist/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  89. package/dist/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  90. package/dist/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  91. package/dist/icons/phosphor/fill/style.css +4627 -0
  92. package/dist/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  93. package/dist/icons/phosphor/light/Phosphor-Light.woff +0 -0
  94. package/dist/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  95. package/dist/icons/phosphor/light/style.css +4627 -0
  96. package/dist/icons/phosphor/regular/Phosphor.ttf +0 -0
  97. package/dist/icons/phosphor/regular/Phosphor.woff +0 -0
  98. package/dist/icons/phosphor/regular/Phosphor.woff2 +0 -0
  99. package/dist/icons/phosphor/regular/style.css +4627 -0
  100. package/dist/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  101. package/dist/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  102. package/dist/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  103. package/dist/icons/phosphor/thin/style.css +4627 -0
  104. package/dist/vanduo.cjs.js +5569 -0
  105. package/dist/vanduo.cjs.js.map +7 -0
  106. package/dist/vanduo.cjs.min.js +48 -0
  107. package/dist/vanduo.cjs.min.js.map +7 -0
  108. package/dist/vanduo.css +60666 -0
  109. package/dist/vanduo.css.map +1 -0
  110. package/dist/vanduo.esm.js +5548 -0
  111. package/dist/vanduo.esm.js.map +7 -0
  112. package/dist/vanduo.esm.min.js +48 -0
  113. package/dist/vanduo.esm.min.js.map +7 -0
  114. package/dist/vanduo.js +5545 -0
  115. package/dist/vanduo.js.map +7 -0
  116. package/dist/vanduo.min.css +2 -0
  117. package/dist/vanduo.min.css.map +1 -0
  118. package/dist/vanduo.min.js +48 -0
  119. package/dist/vanduo.min.js.map +7 -0
  120. package/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  121. package/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  122. package/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  123. package/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  124. package/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  125. package/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  126. package/fonts/inter/inter-bold.woff2 +0 -0
  127. package/fonts/inter/inter-medium.woff2 +0 -0
  128. package/fonts/inter/inter-regular.woff2 +0 -0
  129. package/fonts/inter/inter-semibold.woff2 +0 -0
  130. package/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  131. package/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  132. package/fonts/open-sans/open-sans-bold.woff2 +0 -0
  133. package/fonts/open-sans/open-sans-medium.woff2 +0 -0
  134. package/fonts/open-sans/open-sans-regular.woff2 +0 -0
  135. package/fonts/rubik/rubik-bold.woff2 +0 -0
  136. package/fonts/rubik/rubik-medium.woff2 +0 -0
  137. package/fonts/rubik/rubik-regular.woff2 +0 -0
  138. package/fonts/source-sans/source-sans-bold.woff2 +0 -0
  139. package/fonts/source-sans/source-sans-regular.woff2 +0 -0
  140. package/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  141. package/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  142. package/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  143. package/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  144. package/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  145. package/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  146. package/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  147. package/icons/phosphor/LICENSE +21 -0
  148. package/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  149. package/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  150. package/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  151. package/icons/phosphor/bold/style.css +4627 -0
  152. package/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  153. package/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  154. package/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  155. package/icons/phosphor/duotone/style.css +12115 -0
  156. package/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  157. package/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  158. package/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  159. package/icons/phosphor/fill/style.css +4627 -0
  160. package/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  161. package/icons/phosphor/light/Phosphor-Light.woff +0 -0
  162. package/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  163. package/icons/phosphor/light/style.css +4627 -0
  164. package/icons/phosphor/regular/Phosphor.ttf +0 -0
  165. package/icons/phosphor/regular/Phosphor.woff +0 -0
  166. package/icons/phosphor/regular/Phosphor.woff2 +0 -0
  167. package/icons/phosphor/regular/style.css +4627 -0
  168. package/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  169. package/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  170. package/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  171. package/icons/phosphor/thin/style.css +4627 -0
  172. package/js/components/code-snippet.js +639 -0
  173. package/js/components/collapsible.js +226 -0
  174. package/js/components/doc-search.js +936 -0
  175. package/js/components/draggable.js +725 -0
  176. package/js/components/dropdown.js +362 -0
  177. package/js/components/font-switcher.js +253 -0
  178. package/js/components/grid.js +279 -0
  179. package/js/components/image-box.js +372 -0
  180. package/js/components/modals.js +367 -0
  181. package/js/components/navbar.js +264 -0
  182. package/js/components/pagination.js +286 -0
  183. package/js/components/parallax.js +216 -0
  184. package/js/components/preloader.js +183 -0
  185. package/js/components/select.js +444 -0
  186. package/js/components/sidenav.js +303 -0
  187. package/js/components/tabs.js +303 -0
  188. package/js/components/theme-customizer.js +784 -0
  189. package/js/components/theme-switcher.js +183 -0
  190. package/js/components/toast.js +343 -0
  191. package/js/components/tooltips.js +306 -0
  192. package/js/index.js +52 -0
  193. package/js/utils/helpers.js +306 -0
  194. package/js/utils/lifecycle.js +135 -0
  195. package/js/vanduo.js +120 -0
  196. package/package.json +78 -0
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Vanduo Framework - Avatar
3
+ * User profile images and placeholders
4
+ */
5
+
6
+ :root {
7
+ /* Avatar Sizes (Fibonacci) */
8
+ --avatar-size-xs: 1.3125rem; /* 21px - fib */
9
+ --avatar-size-sm: 2.125rem; /* 34px - fib */
10
+ --avatar-size-md: 2.125rem; /* 34px - fib */
11
+ --avatar-size: 3.4375rem; /* 55px - fib */
12
+ --avatar-size-lg: 3.4375rem; /* 55px - fib */
13
+ --avatar-size-xl: 5.5625rem; /* 89px - fib */
14
+ --avatar-size-2xl: 9rem; /* 144px - fib */
15
+
16
+ /* Avatar Colors */
17
+ --avatar-bg: var(--color-gray-300);
18
+ --avatar-text: var(--color-gray-700);
19
+ --avatar-border: var(--color-white);
20
+ --avatar-status-online: var(--color-success);
21
+ --avatar-status-offline: var(--color-gray-400);
22
+ --avatar-status-busy: var(--color-error);
23
+ --avatar-status-away: var(--color-warning);
24
+ }
25
+
26
+ /* Dark Theme Overrides */
27
+ [data-theme="dark"] {
28
+ --avatar-bg: var(--color-gray-600);
29
+ --avatar-text: var(--color-gray-200);
30
+ --avatar-border: var(--color-gray-800);
31
+ }
32
+
33
+ @media (prefers-color-scheme: dark) {
34
+ :root:not([data-theme]) {
35
+ --avatar-bg: var(--color-gray-600);
36
+ --avatar-text: var(--color-gray-200);
37
+ --avatar-border: var(--color-gray-800);
38
+ }
39
+ }
40
+
41
+ /* Base Avatar */
42
+ .vd-avatar {
43
+ position: relative;
44
+ display: inline-flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ width: var(--avatar-size);
48
+ height: var(--avatar-size);
49
+ border-radius: 50%;
50
+ background-color: var(--avatar-bg);
51
+ color: var(--avatar-text);
52
+ font-weight: var(--font-weight-medium);
53
+ font-size: calc(var(--avatar-size) * 0.4);
54
+ line-height: 1;
55
+ overflow: hidden;
56
+ flex-shrink: 0;
57
+ vertical-align: middle;
58
+ }
59
+
60
+ /* Avatar Image */
61
+ .vd-avatar img {
62
+ width: 100%;
63
+ height: 100%;
64
+ object-fit: cover;
65
+ border-radius: inherit;
66
+ }
67
+
68
+ /* Avatar Initials (fallback) */
69
+ .vd-avatar-initials {
70
+ text-transform: uppercase;
71
+ user-select: none;
72
+ }
73
+
74
+ /* Avatar Sizes */
75
+ .vd-avatar-xs {
76
+ width: var(--avatar-size-xs);
77
+ height: var(--avatar-size-xs);
78
+ font-size: calc(var(--avatar-size-xs) * 0.4);
79
+ }
80
+
81
+ .vd-avatar-sm {
82
+ width: var(--avatar-size-sm);
83
+ height: var(--avatar-size-sm);
84
+ font-size: calc(var(--avatar-size-sm) * 0.4);
85
+ }
86
+
87
+ .vd-avatar-md {
88
+ width: var(--avatar-size-md);
89
+ height: var(--avatar-size-md);
90
+ font-size: calc(var(--avatar-size-md) * 0.4);
91
+ }
92
+
93
+ .vd-avatar-lg {
94
+ width: var(--avatar-size-lg);
95
+ height: var(--avatar-size-lg);
96
+ font-size: calc(var(--avatar-size-lg) * 0.4);
97
+ }
98
+
99
+ .vd-avatar-xl {
100
+ width: var(--avatar-size-xl);
101
+ height: var(--avatar-size-xl);
102
+ font-size: calc(var(--avatar-size-xl) * 0.4);
103
+ }
104
+
105
+ .vd-avatar-2xl {
106
+ width: var(--avatar-size-2xl);
107
+ height: var(--avatar-size-2xl);
108
+ font-size: calc(var(--avatar-size-2xl) * 0.4);
109
+ }
110
+
111
+ /* Avatar Shapes */
112
+ .vd-avatar-rounded {
113
+ border-radius: var(--btn-border-radius);
114
+ }
115
+
116
+ .vd-avatar-square {
117
+ border-radius: 0;
118
+ }
119
+
120
+ /* Avatar Status Indicator */
121
+ .vd-avatar-status {
122
+ position: absolute;
123
+ bottom: 0;
124
+ right: 0;
125
+ width: 25%;
126
+ height: 25%;
127
+ min-width: 0.5rem;
128
+ min-height: 0.5rem;
129
+ border-radius: 50%;
130
+ border: 2px solid var(--avatar-border);
131
+ background-color: var(--avatar-status-offline);
132
+ }
133
+
134
+ .vd-avatar-status-online {
135
+ background-color: var(--avatar-status-online);
136
+ }
137
+
138
+ .vd-avatar-status-offline {
139
+ background-color: var(--avatar-status-offline);
140
+ }
141
+
142
+ .vd-avatar-status-busy {
143
+ background-color: var(--avatar-status-busy);
144
+ }
145
+
146
+ .vd-avatar-status-away {
147
+ background-color: var(--avatar-status-away);
148
+ }
149
+
150
+ /* Avatar with Ring/Border */
151
+ .vd-avatar-ring {
152
+ box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--color-primary);
153
+ }
154
+
155
+ .vd-avatar-ring-success {
156
+ box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--color-success);
157
+ }
158
+
159
+ .vd-avatar-ring-warning {
160
+ box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--color-warning);
161
+ }
162
+
163
+ .vd-avatar-ring-error {
164
+ box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--color-error);
165
+ }
166
+
167
+ /* Avatar Group (stacked avatars) */
168
+ .vd-avatar-group {
169
+ display: inline-flex;
170
+ flex-direction: row-reverse;
171
+ }
172
+
173
+ .vd-avatar-group .vd-avatar {
174
+ border: 2px solid var(--avatar-border);
175
+ margin-left: -0.75rem;
176
+ }
177
+
178
+ .vd-avatar-group .vd-avatar:last-child {
179
+ margin-left: 0;
180
+ }
181
+
182
+ .vd-avatar-group .vd-avatar:hover {
183
+ z-index: 1;
184
+ }
185
+
186
+ /* Avatar Group Sizes */
187
+ .vd-avatar-group-sm .vd-avatar {
188
+ margin-left: -0.5rem;
189
+ }
190
+
191
+ .vd-avatar-group-lg .vd-avatar {
192
+ margin-left: -1rem;
193
+ }
194
+
195
+ /* Avatar Group with Counter */
196
+ .vd-avatar-group-count {
197
+ display: inline-flex;
198
+ align-items: center;
199
+ justify-content: center;
200
+ width: var(--avatar-size);
201
+ height: var(--avatar-size);
202
+ border-radius: 50%;
203
+ background-color: var(--color-gray-200);
204
+ color: var(--text-primary);
205
+ font-size: var(--font-size-sm);
206
+ font-weight: var(--font-weight-medium);
207
+ border: 2px solid var(--avatar-border);
208
+ margin-left: -0.75rem;
209
+ }
210
+
211
+ [data-theme="dark"] .vd-avatar-group-count {
212
+ background-color: var(--color-gray-700);
213
+ }
214
+
215
+ /* Color Variants */
216
+ .vd-avatar-primary {
217
+ background-color: var(--color-primary);
218
+ color: var(--color-white);
219
+ }
220
+
221
+ .vd-avatar-secondary {
222
+ background-color: var(--color-secondary);
223
+ color: var(--color-white);
224
+ }
225
+
226
+ .vd-avatar-success {
227
+ background-color: var(--color-success);
228
+ color: var(--color-white);
229
+ }
230
+
231
+ .vd-avatar-warning {
232
+ background-color: var(--color-warning);
233
+ color: var(--color-gray-900);
234
+ }
235
+
236
+ .vd-avatar-error {
237
+ background-color: var(--color-error);
238
+ color: var(--color-white);
239
+ }
240
+
241
+ .vd-avatar-info {
242
+ background-color: var(--color-info);
243
+ color: var(--color-white);
244
+ }
245
+
246
+ /* Clickable Avatar */
247
+ a.vd-avatar,
248
+ button.vd-avatar {
249
+ cursor: pointer;
250
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
251
+ }
252
+
253
+ a.vd-avatar:hover,
254
+ button.vd-avatar:hover {
255
+ transform: scale(1.05);
256
+ }
257
+
258
+ a.vd-avatar:focus-visible,
259
+ button.vd-avatar:focus-visible {
260
+ outline: 2px solid var(--color-primary);
261
+ outline-offset: 2px;
262
+ }
263
+
264
+ /* Reduced Motion */
265
+ @media (prefers-reduced-motion: reduce) {
266
+ a.vd-avatar,
267
+ button.vd-avatar {
268
+ transition: none;
269
+ }
270
+
271
+ a.vd-avatar:hover,
272
+ button.vd-avatar:hover {
273
+ transform: none;
274
+ }
275
+ }
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Vanduo Framework - Badges
3
+ * Status indicator badges
4
+ */
5
+
6
+ :root {
7
+ /* Badge Padding (x/y ratio ~ phi) */
8
+ --badge-padding-y: 0.25em;
9
+ --badge-padding-x: 0.4em; /* 0.4/0.25 = 1.6 ~ phi */
10
+ --badge-padding-y-sm: 0.15em;
11
+ --badge-padding-x-sm: 0.25em; /* 0.25/0.15 = 1.67 ~ phi */
12
+ --badge-padding-y-lg: 0.35em;
13
+ --badge-padding-x-lg: 0.55em; /* 0.55/0.35 = 1.57 ~ phi */
14
+
15
+ /* Badge Font */
16
+ --badge-font-size: 0.75em;
17
+ --badge-font-size-sm: 0.65em;
18
+ --badge-font-size-lg: 0.875em;
19
+ --badge-font-weight: var(--font-weight-semibold);
20
+ --badge-line-height: 1;
21
+
22
+ /* Badge Border Radius */
23
+ --badge-border-radius: var(--btn-border-radius-sm);
24
+ --badge-pill-border-radius: 50rem;
25
+ }
26
+
27
+ /* Dark Theme Overrides */
28
+ [data-theme="dark"] {
29
+ /* Invert light/dark badge colors for visibility */
30
+ }
31
+
32
+ @media (prefers-color-scheme: dark) {
33
+ :root:not([data-theme]) {
34
+ /* Invert light/dark badge colors for visibility */
35
+ }
36
+ }
37
+
38
+ /* Dark Theme - Light badge needs different colors */
39
+ [data-theme="dark"] .vd-badge-light {
40
+ background-color: var(--color-gray-700);
41
+ color: var(--color-gray-100);
42
+ }
43
+
44
+ [data-theme="dark"] .vd-badge-outlined.vd-badge-light {
45
+ color: var(--color-gray-300);
46
+ border-color: var(--color-gray-500);
47
+ }
48
+
49
+ @media (prefers-color-scheme: dark) {
50
+ :root:not([data-theme]) .vd-badge-light {
51
+ background-color: var(--color-gray-700);
52
+ color: var(--color-gray-100);
53
+ }
54
+
55
+ :root:not([data-theme]) .vd-badge-outlined.vd-badge-light {
56
+ color: var(--color-gray-300);
57
+ border-color: var(--color-gray-500);
58
+ }
59
+ }
60
+
61
+ /* Base Badge */
62
+ .vd-badge {
63
+ display: inline-block;
64
+ padding: var(--badge-padding-y) var(--badge-padding-x);
65
+ font-size: var(--badge-font-size);
66
+ font-weight: var(--badge-font-weight);
67
+ line-height: var(--badge-line-height);
68
+ color: var(--color-white);
69
+ text-align: center;
70
+ white-space: nowrap;
71
+ vertical-align: baseline;
72
+ border-radius: var(--badge-border-radius);
73
+ background-color: var(--color-secondary);
74
+ }
75
+
76
+ /* Badge Variants */
77
+ .vd-badge-primary {
78
+ background-color: var(--color-primary);
79
+ color: var(--color-white);
80
+ }
81
+
82
+ .vd-badge-secondary {
83
+ background-color: var(--color-secondary);
84
+ color: var(--color-white);
85
+ }
86
+
87
+ .vd-badge-success {
88
+ background-color: var(--color-success);
89
+ color: var(--color-white);
90
+ }
91
+
92
+ .vd-badge-warning {
93
+ background-color: var(--color-warning);
94
+ color: var(--color-gray-900);
95
+ }
96
+
97
+ .vd-badge-error {
98
+ background-color: var(--color-error);
99
+ color: var(--color-white);
100
+ }
101
+
102
+ .vd-badge-info {
103
+ background-color: var(--color-info);
104
+ color: var(--color-white);
105
+ }
106
+
107
+ .vd-badge-light {
108
+ background-color: var(--color-gray-100);
109
+ color: var(--color-gray-900);
110
+ }
111
+
112
+ .vd-badge-dark {
113
+ background-color: var(--color-gray-800);
114
+ color: var(--color-white);
115
+ }
116
+
117
+ /* Badge Sizes */
118
+ .vd-badge-sm {
119
+ padding: var(--badge-padding-y-sm) var(--badge-padding-x-sm);
120
+ font-size: var(--badge-font-size-sm);
121
+ }
122
+
123
+ .vd-badge-lg {
124
+ padding: var(--badge-padding-y-lg) var(--badge-padding-x-lg);
125
+ font-size: var(--badge-font-size-lg);
126
+ }
127
+
128
+ /* Badge Styles */
129
+ .vd-badge-pill {
130
+ padding-right: var(--badge-padding-x);
131
+ padding-left: var(--badge-padding-x);
132
+ border-radius: var(--badge-pill-border-radius);
133
+ }
134
+
135
+ .vd-badge-outlined {
136
+ background-color: transparent;
137
+ border: 1px solid currentColor;
138
+ }
139
+
140
+ .vd-badge-outlined.vd-badge-primary {
141
+ color: var(--color-primary);
142
+ border-color: var(--color-primary);
143
+ }
144
+
145
+ .vd-badge-outlined.vd-badge-secondary {
146
+ color: var(--color-secondary);
147
+ border-color: var(--color-secondary);
148
+ }
149
+
150
+ .vd-badge-outlined.vd-badge-success {
151
+ color: var(--color-success);
152
+ border-color: var(--color-success);
153
+ }
154
+
155
+ .vd-badge-outlined.vd-badge-warning {
156
+ color: var(--color-warning);
157
+ border-color: var(--color-warning);
158
+ }
159
+
160
+ .vd-badge-outlined.vd-badge-error {
161
+ color: var(--color-error);
162
+ border-color: var(--color-error);
163
+ }
164
+
165
+ .vd-badge-outlined.vd-badge-info {
166
+ color: var(--color-info);
167
+ border-color: var(--color-info);
168
+ }
169
+
170
+ .vd-badge-outlined.vd-badge-light {
171
+ color: var(--color-gray-600);
172
+ border-color: var(--color-gray-300);
173
+ }
174
+
175
+ .vd-badge-outlined.vd-badge-dark {
176
+ color: var(--color-gray-800);
177
+ border-color: var(--color-gray-800);
178
+ }
179
+
180
+ /* Badge Positioning (for use with buttons, avatars, etc.) */
181
+ .vd-badge-top-right,
182
+ .vd-badge-top-left,
183
+ .vd-badge-bottom-right,
184
+ .vd-badge-bottom-left {
185
+ position: absolute;
186
+ z-index: 1;
187
+ transform: translate(50%, -50%);
188
+ }
189
+
190
+ .vd-badge-top-right {
191
+ top: 0;
192
+ right: 0;
193
+ transform: translate(50%, -50%);
194
+ }
195
+
196
+ .vd-badge-top-left {
197
+ top: 0;
198
+ left: 0;
199
+ transform: translate(-50%, -50%);
200
+ }
201
+
202
+ .vd-badge-bottom-right {
203
+ bottom: 0;
204
+ right: 0;
205
+ transform: translate(50%, 50%);
206
+ }
207
+
208
+ .vd-badge-bottom-left {
209
+ bottom: 0;
210
+ left: 0;
211
+ transform: translate(-50%, 50%);
212
+ }
213
+
214
+ /* Badge in Buttons */
215
+ .vd-btn .vd-badge {
216
+ position: relative;
217
+ top: -1px;
218
+ }
219
+
220
+ /* Badge in Headings */
221
+ h1 .vd-badge,
222
+ h2 .vd-badge,
223
+ h3 .vd-badge,
224
+ h4 .vd-badge,
225
+ h5 .vd-badge,
226
+ h6 .vd-badge {
227
+ font-size: 0.6em;
228
+ vertical-align: middle;
229
+ }
230
+
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Vanduo Framework - Breadcrumbs
3
+ * Breadcrumb navigation component
4
+ */
5
+
6
+ :root {
7
+ /* Breadcrumb Spacing (Fibonacci) */
8
+ --breadcrumb-padding-y: 0.5rem; /* 8px - fib */
9
+ --breadcrumb-padding-x: 0;
10
+ --breadcrumb-margin-bottom: 0.8125rem; /* 13px - fib */
11
+
12
+ /* Breadcrumb Separator */
13
+ --breadcrumb-separator: "/";
14
+ --breadcrumb-separator-color: var(--text-muted);
15
+ --breadcrumb-separator-padding: 0.5rem; /* 8px - fib */
16
+
17
+ /* Breadcrumb Colors */
18
+ --breadcrumb-bg: transparent;
19
+ --breadcrumb-link-color: var(--color-primary);
20
+ --breadcrumb-link-hover-color: var(--color-primary-dark);
21
+ --breadcrumb-active-color: var(--text-secondary);
22
+ }
23
+
24
+ /* Dark Theme Overrides - breadcrumbs use CSS variables that already adapt */
25
+ /* No additional overrides needed as --text-secondary and --color-primary update in dark mode */
26
+
27
+ /* Base Breadcrumbs */
28
+ .vd-breadcrumbs,
29
+ .vd-breadcrumb {
30
+ display: flex;
31
+ flex-wrap: wrap;
32
+ padding: var(--breadcrumb-padding-y) var(--breadcrumb-padding-x);
33
+ margin-bottom: var(--breadcrumb-margin-bottom);
34
+ list-style: none;
35
+ background-color: var(--breadcrumb-bg);
36
+ border-radius: var(--btn-border-radius);
37
+ }
38
+
39
+ /* Breadcrumb Item */
40
+ .vd-breadcrumb-item {
41
+ display: flex;
42
+ align-items: center;
43
+ }
44
+
45
+ .vd-breadcrumb-item + .vd-breadcrumb-item {
46
+ padding-left: var(--breadcrumb-separator-padding);
47
+ }
48
+
49
+ .vd-breadcrumb-item + .vd-breadcrumb-item::before {
50
+ content: var(--breadcrumb-separator);
51
+ display: inline-block;
52
+ padding-right: var(--breadcrumb-separator-padding);
53
+ color: var(--breadcrumb-separator-color);
54
+ font-weight: var(--font-weight-normal);
55
+ }
56
+
57
+ /* Breadcrumb Link */
58
+ .vd-breadcrumb-link,
59
+ .vd-breadcrumb-item > a {
60
+ color: var(--breadcrumb-link-color);
61
+ text-decoration: none;
62
+ transition: color 0.2s ease;
63
+ }
64
+
65
+ .vd-breadcrumb-link:hover,
66
+ .vd-breadcrumb-item > a:hover {
67
+ color: var(--breadcrumb-link-hover-color);
68
+ text-decoration: underline;
69
+ }
70
+
71
+ .vd-breadcrumb-link:focus,
72
+ .vd-breadcrumb-item > a:focus {
73
+ outline: 2px solid var(--color-primary);
74
+ outline-offset: 2px;
75
+ border-radius: 0.25rem;
76
+ }
77
+
78
+ /* Active/Current Breadcrumb Item */
79
+ .vd-breadcrumb-item.active,
80
+ .vd-breadcrumb-current {
81
+ color: var(--breadcrumb-active-color);
82
+ }
83
+
84
+ .vd-breadcrumb-item.active > a,
85
+ .vd-breadcrumb-current > a {
86
+ color: var(--breadcrumb-active-color);
87
+ pointer-events: none;
88
+ cursor: default;
89
+ }
90
+
91
+ .vd-breadcrumb-item.active > a:hover,
92
+ .vd-breadcrumb-current > a:hover {
93
+ text-decoration: none;
94
+ }
95
+
96
+ /* Breadcrumb Variants - With Icons */
97
+ .vd-breadcrumb-item > svg,
98
+ .vd-breadcrumb-item > i {
99
+ margin-right: 0.25rem;
100
+ vertical-align: middle;
101
+ }
102
+
103
+ /* Custom Separators */
104
+ .vd-breadcrumb-separator-slash::before {
105
+ content: "/";
106
+ }
107
+
108
+ .vd-breadcrumb-separator-chevron::before {
109
+ content: "›";
110
+ }
111
+
112
+ .vd-breadcrumb-separator-arrow::before {
113
+ content: "→";
114
+ }
115
+
116
+ .vd-breadcrumb-separator-dot::before {
117
+ content: "·";
118
+ }
119
+
120
+ .vd-breadcrumb-separator-pipe::before {
121
+ content: "|";
122
+ }
123
+
124
+ /* Breadcrumb Sizes */
125
+ .vd-breadcrumb-sm {
126
+ font-size: var(--font-size-sm);
127
+ padding: calc(var(--breadcrumb-padding-y) * 0.75) var(--breadcrumb-padding-x);
128
+ }
129
+
130
+ .vd-breadcrumb-lg {
131
+ font-size: var(--font-size-lg);
132
+ padding: calc(var(--breadcrumb-padding-y) * 1.25) var(--breadcrumb-padding-x);
133
+ }
134
+
135
+ /* Responsive Behavior */
136
+ @media (max-width: 575.98px) {
137
+ .vd-breadcrumb-item {
138
+ font-size: var(--font-size-sm);
139
+ }
140
+
141
+ .vd-breadcrumb-item + .vd-breadcrumb-item::before {
142
+ padding-right: calc(var(--breadcrumb-separator-padding) * 0.75);
143
+ padding-left: calc(var(--breadcrumb-separator-padding) * 0.75);
144
+ }
145
+ }
146
+
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Vanduo Framework - Button Group Component
3
+ * Toolbar-style button grouping
4
+ */
5
+
6
+ /* Button Group - Horizontal */
7
+ .vd-btn-group {
8
+ display: inline-flex;
9
+ position: relative;
10
+ vertical-align: middle;
11
+ }
12
+
13
+ .vd-btn-group>.vd-btn {
14
+ position: relative;
15
+ flex: 0 1 auto;
16
+ margin-bottom: 0;
17
+ }
18
+
19
+ /* Remove inner border-radius for adjacent buttons */
20
+ .vd-btn-group>.vd-btn:not(:first-child) {
21
+ border-top-left-radius: 0;
22
+ border-bottom-left-radius: 0;
23
+ margin-left: -1px;
24
+ }
25
+
26
+ .vd-btn-group>.vd-btn:not(:last-child) {
27
+ border-top-right-radius: 0;
28
+ border-bottom-right-radius: 0;
29
+ }
30
+
31
+ /* Ensure z-index for focus/active states */
32
+ .vd-btn-group>.vd-btn:hover,
33
+ .vd-btn-group>.vd-btn:focus,
34
+ .vd-btn-group>.vd-btn:active,
35
+ .vd-btn-group>.vd-btn.is-active {
36
+ z-index: 1;
37
+ }
38
+
39
+ /* Button Group - Vertical */
40
+ .vd-btn-group-vertical {
41
+ display: inline-flex;
42
+ flex-direction: column;
43
+ align-items: stretch;
44
+ justify-content: center;
45
+ }
46
+
47
+ .vd-btn-group-vertical>.vd-btn {
48
+ width: 100%;
49
+ margin-bottom: 0;
50
+ }
51
+
52
+ .vd-btn-group-vertical>.vd-btn:not(:first-child) {
53
+ border-top-left-radius: 0;
54
+ border-top-right-radius: 0;
55
+ margin-top: -1px;
56
+ }
57
+
58
+ .vd-btn-group-vertical>.vd-btn:not(:last-child) {
59
+ border-bottom-left-radius: 0;
60
+ border-bottom-right-radius: 0;
61
+ }
62
+
63
+ /* Sizing - inherit from button sizes */
64
+ .vd-btn-group-sm>.vd-btn {
65
+ font-size: var(--font-size-sm);
66
+ padding: 0.3125rem 0.625rem;
67
+ }
68
+
69
+ .vd-btn-group-lg>.vd-btn {
70
+ font-size: var(--font-size-lg);
71
+ padding: 0.625rem 1.25rem;
72
+ }
73
+
74
+ /* Full Width */
75
+ .vd-btn-group-full {
76
+ display: flex;
77
+ width: 100%;
78
+ }
79
+
80
+ .vd-btn-group-full>.vd-btn {
81
+ flex: 1 1 auto;
82
+ }