vanduo-framework 1.1.8-docs-update

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 +216 -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,530 @@
1
+ /**
2
+ * Vanduo Framework - Navbar
3
+ * Navigation bar component with responsive mobile menu
4
+ */
5
+
6
+ :root {
7
+ /* Navbar Colors */
8
+ --navbar-bg: var(--color-white);
9
+ --navbar-bg-dark: var(--bg-dark);
10
+ --navbar-text-color: var(--text-primary);
11
+ --navbar-text-color-dark: var(--text-inverse);
12
+ --navbar-link-color: var(--text-primary);
13
+ --navbar-link-hover-color: var(--color-primary);
14
+ --navbar-link-active-color: var(--color-primary);
15
+ --navbar-border-color: var(--border-color);
16
+
17
+ /* Navbar Spacing (Fibonacci) */
18
+ --navbar-padding-y: 0.8125rem; /* 13px - fib */
19
+ --navbar-padding-x: 1.3125rem; /* 21px - fib (21/13 ~ phi) */
20
+ --navbar-height: 3.4375rem; /* 55px - fib */
21
+ --navbar-brand-font-size: var(--font-size-xl);
22
+ --navbar-nav-gap: 1.3125rem; /* 21px - fib */
23
+ --navbar-actions-gap: 2.125rem; /* 34px - fib */
24
+
25
+ /* Mobile Menu */
26
+ --navbar-mobile-menu-bg: var(--color-white);
27
+ --navbar-mobile-menu-bg-dark: var(--bg-dark);
28
+ --navbar-mobile-menu-width: 233px; /* fib */
29
+ --navbar-mobile-overlay-bg: rgba(0, 0, 0, 0.5);
30
+ }
31
+
32
+ /* Dark Theme Overrides */
33
+ [data-theme="dark"] {
34
+ --navbar-bg: var(--bg-primary);
35
+ --navbar-text-color: var(--text-primary);
36
+ --navbar-link-color: var(--text-primary);
37
+ --navbar-mobile-menu-bg: var(--bg-primary);
38
+ }
39
+
40
+ @media (prefers-color-scheme: dark) {
41
+ :root:not([data-theme]) {
42
+ --navbar-bg: var(--bg-primary);
43
+ --navbar-text-color: var(--text-primary);
44
+ --navbar-link-color: var(--text-primary);
45
+ --navbar-mobile-menu-bg: var(--bg-primary);
46
+ }
47
+ }
48
+
49
+ /* Base Navbar */
50
+ .vd-navbar {
51
+ position: relative;
52
+ display: flex;
53
+ flex-wrap: wrap;
54
+ align-items: center;
55
+ justify-content: space-between;
56
+ padding: var(--navbar-padding-y) var(--navbar-padding-x);
57
+ background-color: var(--navbar-bg);
58
+ border-bottom: 1px solid var(--navbar-border-color);
59
+ min-height: var(--navbar-height);
60
+ }
61
+
62
+ /* Navbar Container - matches .vd-container-responsive breakpoints for alignment with page content */
63
+ .vd-navbar-container {
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ width: 100%;
69
+ max-width: var(--container-max-width);
70
+ margin-left: auto;
71
+ margin-right: auto;
72
+ padding-left: var(--container-padding);
73
+ padding-right: var(--container-padding);
74
+ }
75
+
76
+ @media (min-width: 1200px) {
77
+ .vd-navbar-container {
78
+ max-width: var(--container-xl);
79
+ }
80
+ }
81
+
82
+ @media (min-width: 1400px) {
83
+ .vd-navbar-container {
84
+ max-width: var(--container-2xl);
85
+ }
86
+ }
87
+
88
+ /* Navbar Brand */
89
+ .vd-navbar-brand {
90
+ display: inline-flex;
91
+ align-items: center;
92
+ margin-right: 1rem;
93
+ margin-bottom: 0.5rem;
94
+ font-size: var(--navbar-brand-font-size);
95
+ font-weight: var(--font-weight-bold);
96
+ line-height: 1;
97
+ white-space: nowrap;
98
+ color: var(--navbar-text-color);
99
+ text-decoration: none;
100
+ transition: color 0.2s ease;
101
+ }
102
+
103
+ .vd-navbar-brand a {
104
+ color: inherit;
105
+ text-decoration: none;
106
+ font-weight: inherit;
107
+ }
108
+
109
+ .vd-navbar-brand:hover,
110
+ .vd-navbar-brand:focus {
111
+ color: var(--navbar-link-hover-color);
112
+ text-decoration: none;
113
+ }
114
+
115
+ .vd-navbar-brand img {
116
+ height: 2rem;
117
+ width: auto;
118
+ margin-right: 0.5rem;
119
+ }
120
+
121
+ /* Navbar Navigation */
122
+ .vd-navbar-nav {
123
+ display: flex;
124
+ flex-direction: column;
125
+ align-items: center;
126
+ padding-left: 0;
127
+ margin-bottom: 0;
128
+ list-style: none;
129
+ gap: 0;
130
+ }
131
+
132
+ .vd-navbar-nav .vd-nav-link {
133
+ padding: 0.5rem 1rem;
134
+ color: var(--navbar-link-color);
135
+ text-decoration: none;
136
+ transition: color 0.2s ease, background-color 0.2s ease;
137
+ display: block;
138
+ }
139
+
140
+ .vd-navbar-nav .vd-nav-link:hover,
141
+ .vd-navbar-nav .vd-nav-link:focus {
142
+ color: var(--navbar-link-hover-color);
143
+ text-decoration: none;
144
+ background-color: rgba(0, 0, 0, 0.05);
145
+ }
146
+
147
+ .vd-navbar-nav .vd-nav-link:focus-visible {
148
+ outline: 2px solid var(--color-primary);
149
+ outline-offset: 2px;
150
+ }
151
+
152
+ .vd-navbar-nav .vd-nav-link.active {
153
+ color: var(--navbar-link-active-color);
154
+ font-weight: var(--font-weight-semibold);
155
+ }
156
+
157
+ /* Navbar Toggle (Hamburger Menu) */
158
+ .vd-navbar-toggle,
159
+ .vd-navbar-burger {
160
+ display: none;
161
+ flex-direction: column;
162
+ justify-content: space-around;
163
+ width: 2rem;
164
+ height: 2rem;
165
+ background: transparent;
166
+ border: none;
167
+ cursor: pointer;
168
+ padding: 0;
169
+ z-index: 1001;
170
+ }
171
+
172
+ .vd-navbar-toggle span,
173
+ .vd-navbar-burger span {
174
+ width: 2rem;
175
+ height: 2px;
176
+ background-color: var(--navbar-text-color);
177
+ border-radius: 10px;
178
+ transition: all 0.3s ease;
179
+ transform-origin: center;
180
+ }
181
+
182
+ .vd-navbar-toggle.is-active span:nth-child(1),
183
+ .vd-navbar-burger.is-active span:nth-child(1) {
184
+ transform: rotate(45deg) translate(5px, 5px);
185
+ }
186
+
187
+ .vd-navbar-toggle.is-active span:nth-child(2),
188
+ .vd-navbar-burger.is-active span:nth-child(2) {
189
+ opacity: 0;
190
+ }
191
+
192
+ .vd-navbar-toggle.is-active span:nth-child(3),
193
+ .vd-navbar-burger.is-active span:nth-child(3) {
194
+ transform: rotate(-45deg) translate(7px, -6px);
195
+ }
196
+
197
+ /* Mobile Menu */
198
+ .vd-navbar-menu {
199
+ display: flex;
200
+ flex-basis: 100%;
201
+ flex-grow: 1;
202
+ align-items: center;
203
+ }
204
+
205
+ .vd-navbar-menu.is-open {
206
+ display: flex;
207
+ }
208
+
209
+ /* Navbar Actions */
210
+ .vd-navbar-actions {
211
+ display: flex;
212
+ align-items: center;
213
+ gap: 0.5rem;
214
+ }
215
+
216
+ /* Mobile Menu Overlay */
217
+ .vd-navbar-overlay {
218
+ display: none;
219
+ position: fixed;
220
+ top: 0;
221
+ left: 0;
222
+ width: 100%;
223
+ height: 100%;
224
+ background-color: var(--navbar-mobile-overlay-bg);
225
+ z-index: 999;
226
+ opacity: 0;
227
+ transition: opacity 0.3s ease;
228
+ }
229
+
230
+ .vd-navbar-overlay.is-active {
231
+ display: block;
232
+ opacity: 1;
233
+ }
234
+
235
+ /* Navbar Variants - Dark */
236
+ .vd-navbar-dark {
237
+ background-color: var(--navbar-bg-dark);
238
+ color: var(--navbar-text-color-dark);
239
+ border-bottom-color: rgba(255, 255, 255, 0.1);
240
+ }
241
+
242
+ .vd-navbar-dark .vd-navbar-brand {
243
+ color: var(--navbar-text-color-dark);
244
+ }
245
+
246
+ .vd-navbar-dark .vd-navbar-brand:hover,
247
+ .vd-navbar-dark .vd-navbar-brand:focus {
248
+ color: var(--color-primary-light);
249
+ }
250
+
251
+ .vd-navbar-dark .vd-navbar-nav .vd-nav-link {
252
+ color: rgba(255, 255, 255, 0.8);
253
+ }
254
+
255
+ .vd-navbar-dark .vd-navbar-nav .vd-nav-link:hover,
256
+ .vd-navbar-dark .vd-navbar-nav .vd-nav-link:focus {
257
+ color: var(--color-primary-light);
258
+ background-color: rgba(255, 255, 255, 0.1);
259
+ }
260
+
261
+ .vd-navbar-dark .vd-navbar-nav .vd-nav-link.active {
262
+ color: var(--color-primary-light);
263
+ }
264
+
265
+ .vd-navbar-dark .vd-navbar-toggle span,
266
+ .vd-navbar-dark .vd-navbar-burger span {
267
+ background-color: var(--navbar-text-color-dark);
268
+ }
269
+
270
+ /* Navbar Variants - Transparent */
271
+ .vd-navbar-transparent {
272
+ background-color: transparent;
273
+ border-bottom: none;
274
+ }
275
+
276
+ .vd-navbar-transparent.vd-navbar-scrolled {
277
+ background-color: var(--navbar-bg);
278
+ border-bottom: 1px solid var(--navbar-border-color);
279
+ }
280
+
281
+ .vd-navbar-transparent.vd-navbar-dark.vd-navbar-scrolled {
282
+ background-color: var(--navbar-bg-dark);
283
+ border-bottom-color: rgba(255, 255, 255, 0.1);
284
+ }
285
+
286
+ /* Navbar Positioning - Fixed Top */
287
+ .vd-navbar-fixed,
288
+ .vd-navbar-fixed-top {
289
+ position: fixed;
290
+ top: 0;
291
+ right: 0;
292
+ left: 0;
293
+ z-index: 1000;
294
+ box-shadow: var(--shadow-sm);
295
+ }
296
+
297
+ .vd-navbar-fixed ~ *,
298
+ .vd-navbar-fixed-top ~ * {
299
+ padding-top: var(--navbar-height);
300
+ }
301
+
302
+ /* Navbar Positioning - Fixed Bottom */
303
+ .vd-navbar-fixed-bottom {
304
+ position: fixed;
305
+ right: 0;
306
+ bottom: 0;
307
+ left: 0;
308
+ z-index: 1000;
309
+ box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.1);
310
+ }
311
+
312
+ .vd-navbar-fixed-bottom ~ * {
313
+ padding-bottom: var(--navbar-height);
314
+ }
315
+
316
+ /* Navbar Positioning - Sticky */
317
+ .vd-navbar-sticky {
318
+ position: sticky;
319
+ top: 0;
320
+ z-index: 1000;
321
+ box-shadow: var(--shadow-sm);
322
+ }
323
+
324
+ /* Navbar Dropdown */
325
+ .vd-navbar-dropdown {
326
+ position: relative;
327
+ }
328
+
329
+ .vd-navbar-dropdown-menu {
330
+ position: absolute;
331
+ top: 100%;
332
+ left: 0;
333
+ z-index: 1000;
334
+ display: none;
335
+ min-width: 200px;
336
+ padding: 0.5rem 0;
337
+ margin: 0.125rem 0 0;
338
+ background-color: var(--color-white);
339
+ border: 1px solid var(--navbar-border-color);
340
+ border-radius: var(--btn-border-radius);
341
+ box-shadow: var(--shadow-md);
342
+ list-style: none;
343
+ }
344
+
345
+ .vd-navbar-dropdown-menu.is-open {
346
+ display: block;
347
+ }
348
+
349
+ .vd-navbar-dropdown-item {
350
+ display: block;
351
+ width: 100%;
352
+ padding: 0.5rem 1rem;
353
+ clear: both;
354
+ font-weight: var(--font-weight-normal);
355
+ color: var(--navbar-link-color);
356
+ text-align: inherit;
357
+ text-decoration: none;
358
+ white-space: nowrap;
359
+ background-color: transparent;
360
+ border: 0;
361
+ transition: background-color 0.2s ease, color 0.2s ease;
362
+ }
363
+
364
+ .vd-navbar-dropdown-item:hover,
365
+ .vd-navbar-dropdown-item:focus {
366
+ color: var(--navbar-link-hover-color);
367
+ background-color: var(--bg-secondary);
368
+ text-decoration: none;
369
+ }
370
+
371
+ .vd-navbar-dropdown-item.active {
372
+ color: var(--navbar-link-active-color);
373
+ background-color: var(--color-primary-alpha-10);
374
+ }
375
+
376
+ .vd-navbar-dark .vd-navbar-dropdown-menu {
377
+ background-color: var(--navbar-bg-dark);
378
+ border-color: rgba(255, 255, 255, 0.1);
379
+ }
380
+
381
+ .vd-navbar-dark .vd-navbar-dropdown-item {
382
+ color: rgba(255, 255, 255, 0.8);
383
+ }
384
+
385
+ .vd-navbar-dark .vd-navbar-dropdown-item:hover,
386
+ .vd-navbar-dark .vd-navbar-dropdown-item:focus {
387
+ color: var(--color-primary-light);
388
+ background-color: rgba(255, 255, 255, 0.1);
389
+ }
390
+
391
+ /* Desktop Layout */
392
+ @media (min-width: 992px) {
393
+ .vd-navbar-container {
394
+ position: relative;
395
+ }
396
+
397
+ .vd-navbar-nav {
398
+ flex-direction: row;
399
+ flex-wrap: wrap;
400
+ gap: 0.5rem var(--navbar-nav-gap);
401
+ position: absolute;
402
+ left: 50%;
403
+ transform: translateX(-50%);
404
+ z-index: 1;
405
+ }
406
+
407
+ .vd-navbar-nav .vd-nav-link {
408
+ padding: 0.5rem 0;
409
+ background-color: transparent;
410
+ }
411
+
412
+ .vd-navbar-nav .vd-nav-link:hover,
413
+ .vd-navbar-nav .vd-nav-link:focus {
414
+ background-color: transparent;
415
+ }
416
+
417
+ .vd-navbar-toggle,
418
+ .vd-navbar-burger {
419
+ display: none;
420
+ }
421
+
422
+ .vd-navbar-menu {
423
+ display: flex;
424
+ flex: 1;
425
+ flex-wrap: wrap;
426
+ align-items: center;
427
+ justify-content: flex-end;
428
+ min-width: 0;
429
+ }
430
+
431
+ .vd-navbar-actions {
432
+ margin-left: var(--navbar-actions-gap);
433
+ }
434
+
435
+ .vd-navbar-dropdown-menu {
436
+ margin-top: 0.5rem;
437
+ }
438
+ }
439
+
440
+ /* Mobile Layout */
441
+ @media (max-width: 991.98px) {
442
+ .vd-navbar-toggle,
443
+ .vd-navbar-burger {
444
+ display: flex;
445
+ }
446
+
447
+ .vd-navbar-menu {
448
+ position: fixed;
449
+ top: 0;
450
+ right: -100%;
451
+ width: var(--navbar-mobile-menu-width);
452
+ height: 100vh;
453
+ background-color: var(--navbar-mobile-menu-bg);
454
+ flex-direction: column;
455
+ align-items: flex-start;
456
+ padding: 4rem 1.5rem 1.5rem;
457
+ box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1);
458
+ transition: right 0.3s ease;
459
+ z-index: 1000;
460
+ overflow-y: auto;
461
+ }
462
+
463
+ .vd-navbar-menu.is-open {
464
+ right: 0;
465
+ }
466
+
467
+ .vd-navbar-dark .vd-navbar-menu {
468
+ background-color: var(--navbar-mobile-menu-bg-dark);
469
+ }
470
+
471
+ .vd-navbar-nav {
472
+ width: 100%;
473
+ gap: 0;
474
+ }
475
+
476
+ .vd-navbar-nav .vd-nav-link {
477
+ width: 100%;
478
+ padding: 1rem;
479
+ border-bottom: 1px solid var(--navbar-border-color);
480
+ }
481
+
482
+ .vd-navbar-nav .vd-nav-link:last-child {
483
+ border-bottom: none;
484
+ }
485
+
486
+ .vd-navbar-dark .vd-navbar-nav .vd-nav-link {
487
+ border-bottom-color: rgba(255, 255, 255, 0.1);
488
+ }
489
+
490
+ .vd-navbar-dropdown-menu {
491
+ position: static;
492
+ display: block;
493
+ width: 100%;
494
+ margin: 0;
495
+ padding: 0;
496
+ border: none;
497
+ box-shadow: none;
498
+ background-color: var(--bg-secondary);
499
+ }
500
+
501
+ .vd-navbar-dark .vd-navbar-dropdown-menu {
502
+ background-color: rgba(255, 255, 255, 0.05);
503
+ }
504
+
505
+ .vd-navbar-actions {
506
+ margin-top: 1rem;
507
+ padding-top: 1rem;
508
+ border-top: 1px solid var(--navbar-border-color);
509
+ width: 100%;
510
+ }
511
+
512
+ .vd-navbar-dark .vd-navbar-actions {
513
+ border-top-color: rgba(255, 255, 255, 0.1);
514
+ }
515
+ }
516
+
517
+ /* Navbar Utilities */
518
+ .vd-navbar-expand {
519
+ flex-wrap: nowrap;
520
+ justify-content: flex-start;
521
+ }
522
+
523
+ .vd-navbar-expand .vd-navbar-nav {
524
+ flex-direction: row;
525
+ }
526
+
527
+ .vd-navbar-expand .vd-navbar-toggle {
528
+ display: none;
529
+ }
530
+
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Vanduo Framework - Pagination
3
+ * Page navigation component
4
+ */
5
+
6
+ :root {
7
+ /* Pagination Colors */
8
+ --pagination-bg: var(--color-white);
9
+ --pagination-border-color: var(--border-color);
10
+ --pagination-link-color: var(--color-primary);
11
+ --pagination-link-bg: var(--color-white);
12
+ --pagination-link-bg-hover: var(--bg-secondary);
13
+ --pagination-link-bg-active: var(--color-primary);
14
+ --pagination-link-color-active: var(--color-white);
15
+ --pagination-link-color-disabled: var(--text-muted);
16
+
17
+ /* Pagination Spacing (Fibonacci pairs: x/y ratio ~ phi) */
18
+ --pagination-padding-y: 0.5rem; /* 8px - fib */
19
+ --pagination-padding-x: 0.8125rem; /* 13px - fib */
20
+ --pagination-padding-y-sm: 0.1875rem; /* 3px - fib */
21
+ --pagination-padding-x-sm: 0.3125rem; /* 5px - fib */
22
+ --pagination-padding-y-lg: 0.8125rem; /* 13px - fib */
23
+ --pagination-padding-x-lg: 1.3125rem; /* 21px - fib */
24
+
25
+ /* Pagination Font */
26
+ --pagination-font-size: var(--font-size-base);
27
+ --pagination-font-size-sm: var(--font-size-sm);
28
+ --pagination-font-size-lg: var(--font-size-lg);
29
+ }
30
+
31
+ /* Dark Theme Overrides */
32
+ [data-theme="dark"] {
33
+ --pagination-bg: var(--bg-secondary);
34
+ --pagination-link-bg: var(--bg-secondary);
35
+ --pagination-link-bg-hover: var(--bg-primary);
36
+ }
37
+
38
+ @media (prefers-color-scheme: dark) {
39
+ :root:not([data-theme]) {
40
+ --pagination-bg: var(--bg-secondary);
41
+ --pagination-link-bg: var(--bg-secondary);
42
+ --pagination-link-bg-hover: var(--bg-primary);
43
+ }
44
+ }
45
+
46
+ /* Base Pagination */
47
+ .vd-pagination {
48
+ display: flex;
49
+ flex-wrap: wrap;
50
+ padding-left: 0;
51
+ margin: 0;
52
+ list-style: none;
53
+ }
54
+
55
+ /* Pagination Item */
56
+ .vd-pagination-item {
57
+ display: inline-block;
58
+ margin: 0 0.125rem;
59
+ }
60
+
61
+ .vd-pagination-item:first-child {
62
+ margin-left: 0;
63
+ }
64
+
65
+ .vd-pagination-item:last-child {
66
+ margin-right: 0;
67
+ }
68
+
69
+ /* Pagination Link */
70
+ .vd-pagination-link {
71
+ position: relative;
72
+ display: block;
73
+ padding: var(--pagination-padding-y) var(--pagination-padding-x);
74
+ font-size: var(--pagination-font-size);
75
+ line-height: var(--line-height-normal);
76
+ color: var(--pagination-link-color);
77
+ text-decoration: none;
78
+ background-color: var(--pagination-link-bg);
79
+ border: 1px solid var(--pagination-border-color);
80
+ border-radius: var(--btn-border-radius);
81
+ transition: var(--transition-colors);
82
+ cursor: pointer;
83
+ user-select: none;
84
+ }
85
+
86
+ .vd-pagination-link:hover {
87
+ color: var(--pagination-link-color);
88
+ background-color: var(--pagination-link-bg-hover);
89
+ border-color: var(--pagination-border-color);
90
+ text-decoration: none;
91
+ }
92
+
93
+ .vd-pagination-link:focus {
94
+ outline: 0;
95
+ box-shadow: var(--input-focus-box-shadow);
96
+ z-index: 1;
97
+ }
98
+
99
+ /* Pagination Active State */
100
+ .vd-pagination-item.active .vd-pagination-link {
101
+ z-index: 1;
102
+ color: var(--pagination-link-color-active);
103
+ background-color: var(--pagination-link-bg-active);
104
+ border-color: var(--pagination-link-bg-active);
105
+ cursor: default;
106
+ }
107
+
108
+ .vd-pagination-item.active .vd-pagination-link:hover {
109
+ color: var(--pagination-link-color-active);
110
+ background-color: var(--pagination-link-bg-active);
111
+ border-color: var(--pagination-link-bg-active);
112
+ }
113
+
114
+ /* Pagination Disabled State */
115
+ .vd-pagination-item.disabled .vd-pagination-link {
116
+ color: var(--pagination-link-color-disabled);
117
+ pointer-events: none;
118
+ cursor: not-allowed;
119
+ background-color: var(--pagination-link-bg);
120
+ border-color: var(--pagination-border-color);
121
+ opacity: 0.6;
122
+ }
123
+
124
+ /* Pagination Previous/Next */
125
+ .vd-pagination-prev,
126
+ .vd-pagination-next {
127
+ font-weight: var(--font-weight-medium);
128
+ }
129
+
130
+ .vd-pagination-prev .vd-pagination-link::before {
131
+ content: '«';
132
+ margin-right: 0.25rem;
133
+ }
134
+
135
+ .vd-pagination-next .vd-pagination-link::after {
136
+ content: '»';
137
+ margin-left: 0.25rem;
138
+ }
139
+
140
+ /* Pagination Ellipsis */
141
+ .vd-pagination-ellipsis {
142
+ padding: var(--pagination-padding-y) var(--pagination-padding-x);
143
+ color: var(--text-muted);
144
+ pointer-events: none;
145
+ cursor: default;
146
+ }
147
+
148
+ /* Pagination Sizes */
149
+ .vd-pagination-sm .vd-pagination-link {
150
+ padding: var(--pagination-padding-y-sm) var(--pagination-padding-x-sm);
151
+ font-size: var(--pagination-font-size-sm);
152
+ }
153
+
154
+ .vd-pagination-lg .vd-pagination-link {
155
+ padding: var(--pagination-padding-y-lg) var(--pagination-padding-x-lg);
156
+ font-size: var(--pagination-font-size-lg);
157
+ }
158
+
159
+ /* Pagination Alignment */
160
+ .vd-pagination-center {
161
+ justify-content: center;
162
+ }
163
+
164
+ .vd-pagination-right {
165
+ justify-content: flex-end;
166
+ }
167
+
168
+ /* Responsive Behavior */
169
+ @media (max-width: 575.98px) {
170
+ .vd-pagination {
171
+ flex-wrap: wrap;
172
+ justify-content: center;
173
+ }
174
+
175
+ .vd-pagination-item {
176
+ margin: 0.125rem;
177
+ }
178
+
179
+ .vd-pagination-prev,
180
+ .vd-pagination-next {
181
+ width: 100%;
182
+ text-align: center;
183
+ margin: 0.5rem 0;
184
+ }
185
+ }
186
+