qdadm 1.1.1 → 1.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qdadm",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Vue 3 framework for admin dashboards with PrimeVue",
5
5
  "author": "quazardous",
6
6
  "license": "MIT",
@@ -569,51 +569,8 @@ const showBreadcrumb = computed<boolean>(() => {
569
569
  z-index: 10;
570
570
  }
571
571
 
572
- /* Nav items - compact, subtle hover */
573
- .nav-item {
574
- display: flex;
575
- align-items: center;
576
- gap: 0.5rem;
577
- padding: var(--fad-nav-item-padding-y) var(--fad-nav-item-padding-x);
578
- padding-left: 1rem;
579
- color: var(--p-surface-300, #cbd5e1);
580
- text-decoration: none;
581
- font-size: var(--fad-font-size-sm);
582
- font-weight: var(--fad-font-weight-normal);
583
- border-radius: 0;
584
- transition: background var(--fad-transition-fast), color var(--fad-transition-fast);
585
- }
586
-
587
- .nav-item span {
588
- white-space: nowrap;
589
- }
590
-
591
- .nav-item:hover {
592
- background: var(--p-surface-700, #334155);
593
- color: var(--p-surface-0, white);
594
- }
595
-
596
- .nav-item-active {
597
- background: var(--p-surface-700, #334155);
598
- color: var(--p-primary-300, #93c5fd);
599
- border-left: 2px solid var(--p-primary-400, #60a5fa);
600
- padding-left: calc(1rem - 2px);
601
- }
602
-
603
- .nav-item-active:hover {
604
- background: var(--p-surface-600, #475569);
605
- }
606
-
607
- .nav-item i {
608
- font-size: var(--fad-nav-icon-size);
609
- width: 1.125rem;
610
- text-align: center;
611
- opacity: 0.8;
612
- }
613
-
614
- .nav-item-active i {
615
- opacity: 1;
616
- }
572
+ /* Nav items are styled in _sidebar.scss (global styles)
573
+ See .sidebar-nav .nav-item for base styles */
617
574
 
618
575
  /* -----------------------------------------------------------------------------
619
576
  Main Content
@@ -866,25 +823,8 @@ const showBreadcrumb = computed<boolean>(() => {
866
823
  opacity: 1 !important;
867
824
  }
868
825
 
869
- .sidebar--collapsed .nav-item {
870
- padding: 0.5rem 0;
871
- gap: 0;
872
- border-left: none !important;
873
- justify-content: center;
874
- }
875
-
876
- .sidebar--collapsed .nav-item-active {
877
- border-left: none !important;
878
- padding: 0.5rem 0;
879
- }
880
-
881
- .sidebar--collapsed .nav-item span {
882
- display: none;
883
- }
884
-
885
- .sidebar--collapsed .nav-item i {
886
- width: auto;
887
- }
826
+ /* Nav item collapsed styles are in _sidebar.scss (global styles)
827
+ See .sidebar--collapsed .sidebar-nav .nav-item */
888
828
 
889
829
  /* Powered-by collapsed: smaller height */
890
830
  .sidebar--collapsed #powered-by {
@@ -995,23 +935,7 @@ const showBreadcrumb = computed<boolean>(() => {
995
935
  pointer-events: auto;
996
936
  }
997
937
 
998
- .sidebar.sidebar--collapsed .nav-item {
999
- justify-content: flex-start;
1000
- padding: var(--fad-nav-item-padding-y) var(--fad-nav-item-padding-x);
1001
- padding-left: 1rem;
1002
- gap: 0.5rem;
1003
- }
1004
-
1005
- .sidebar.sidebar--collapsed .nav-item span {
1006
- display: inline;
1007
- opacity: 1;
1008
- width: auto;
1009
- }
1010
-
1011
- .sidebar.sidebar--collapsed .nav-item i {
1012
- font-size: var(--fad-nav-icon-size);
1013
- width: 1.125rem;
1014
- }
938
+ /* Nav item mobile collapsed styles are in _sidebar.scss (global styles) */
1015
939
 
1016
940
  .sidebar.sidebar--collapsed #powered-by,
1017
941
  .sidebar.sidebar--collapsed #user-zone {
@@ -95,7 +95,8 @@ watch(() => route?.path, () => {
95
95
  </script>
96
96
 
97
97
  <template>
98
- <nav class="default-menu">
98
+ <!-- Use sidebar-nav class to inherit global nav-item styles from _sidebar.scss -->
99
+ <nav class="sidebar-nav">
99
100
  <div v-for="section in navSections" :key="section.title || section.label" class="nav-section">
100
101
  <div
101
102
  class="nav-section-title"
@@ -126,7 +127,10 @@ watch(() => route?.path, () => {
126
127
  </template>
127
128
 
128
129
  <style scoped>
129
- .default-menu {
130
+ /* DefaultMenu uses sidebar-nav class to inherit global nav-item styles from _sidebar.scss
131
+ Only component-specific styles remain here */
132
+
133
+ .sidebar-nav {
130
134
  flex: 1;
131
135
  overflow-y: auto;
132
136
  padding: 1rem 0;
@@ -175,30 +179,6 @@ watch(() => route?.path, () => {
175
179
  opacity: 0;
176
180
  }
177
181
 
178
- .nav-item {
179
- display: flex;
180
- align-items: center;
181
- gap: 0.75rem;
182
- padding: 0.625rem 1.5rem;
183
- font-size: 0.9375rem;
184
- color: var(--p-surface-300, #cbd5e1);
185
- text-decoration: none;
186
- transition: all 0.15s;
187
- }
188
-
189
- .nav-item:hover {
190
- background: var(--p-surface-700, #334155);
191
- color: var(--p-surface-0, white);
192
- }
193
-
194
- .nav-item-active {
195
- background: var(--p-primary-600, #2563eb);
196
- color: var(--p-surface-0, white);
197
- }
198
-
199
- .nav-item i {
200
- font-size: 1rem;
201
- width: 1.25rem;
202
- text-align: center;
203
- }
182
+ /* Nav item styles are in _sidebar.scss (global styles)
183
+ See .sidebar-nav .nav-item for base styles */
204
184
  </style>
@@ -252,3 +252,129 @@ $sidebar-box-content-duration: 0.1s;
252
252
  opacity: 0;
253
253
  transition: opacity 0s;
254
254
  }
255
+
256
+ /* =============================================================================
257
+ Nav Item - Sidebar navigation items
258
+
259
+ Same behavior as SidebarBox:
260
+ - Icon stays at fixed left position (never moves horizontally)
261
+ - On close: text disappears immediately
262
+ - On open: text appears with delayed fade after sidebar is fully open
263
+ ============================================================================= */
264
+
265
+ // Nav item icon width
266
+ $nav-item-icon-width: 1.125rem;
267
+
268
+ // Nav item content left = icon-left + icon-width + gap
269
+ // Icon is centered in collapsed sidebar: (collapsed-width - icon-width) / 2
270
+ // Content starts after icon: icon-left + icon-width + gap = (collapsed-width + icon-width) / 2 + gap
271
+ $nav-item-content-left: calc((var(--fad-sidebar-width-collapsed) + #{$nav-item-icon-width}) / 2 + 0.375rem);
272
+
273
+ .sidebar-nav .nav-item {
274
+ position: relative;
275
+ display: flex;
276
+ align-items: center;
277
+ padding: var(--fad-nav-item-padding-y) var(--fad-nav-item-padding-x);
278
+ padding-left: $nav-item-content-left;
279
+ color: var(--p-surface-300, #cbd5e1);
280
+ text-decoration: none;
281
+ font-size: var(--fad-font-size-sm);
282
+ font-weight: var(--fad-font-weight-normal);
283
+ border-radius: 0;
284
+ transition: background var(--fad-transition-fast), color var(--fad-transition-fast), padding var(--fad-transition-slow);
285
+ }
286
+
287
+ // Icon: FIXED position at left, centered in collapsed sidebar width
288
+ // Position = (collapsed-width - icon-width) / 2 so icon is centered when collapsed
289
+ .sidebar-nav .nav-item i {
290
+ position: absolute;
291
+ left: calc((var(--fad-sidebar-width-collapsed) - #{$nav-item-icon-width}) / 2);
292
+ top: 50%;
293
+ transform: translateY(-50%);
294
+ font-size: var(--fad-nav-icon-size);
295
+ width: $nav-item-icon-width;
296
+ text-align: center;
297
+ opacity: 0.8;
298
+ // No horizontal transition - icon never moves
299
+ }
300
+
301
+ // Text: delayed fade-in when sidebar opens
302
+ .sidebar-nav .nav-item span {
303
+ white-space: nowrap;
304
+ opacity: 1;
305
+ transition: opacity $sidebar-box-content-duration ease $sidebar-box-content-delay;
306
+ }
307
+
308
+ .sidebar-nav .nav-item:hover {
309
+ background: var(--p-surface-700, #334155);
310
+ color: var(--p-surface-0, white);
311
+ }
312
+
313
+ .sidebar-nav .nav-item-active {
314
+ background: var(--p-surface-700, #334155);
315
+ color: var(--p-primary-300, #93c5fd);
316
+ border-left: 2px solid var(--p-primary-400, #60a5fa);
317
+ padding-left: calc(#{$nav-item-content-left} - 2px);
318
+ }
319
+
320
+ .sidebar-nav .nav-item-active:hover {
321
+ background: var(--p-surface-600, #475569);
322
+ }
323
+
324
+ .sidebar-nav .nav-item-active i {
325
+ opacity: 1;
326
+ }
327
+
328
+ /* =============================================================================
329
+ Nav Item - Collapsed state
330
+ ============================================================================= */
331
+
332
+ .sidebar--collapsed .sidebar-nav .nav-item {
333
+ padding: 0.5rem 0;
334
+ padding-left: $nav-item-content-left; // Keep same padding - icon position doesn't change
335
+ border-left: none !important;
336
+ }
337
+
338
+ .sidebar--collapsed .sidebar-nav .nav-item-active {
339
+ border-left: none !important;
340
+ padding-left: $nav-item-content-left;
341
+ }
342
+
343
+ // Text: disappears IMMEDIATELY when closing (no transition)
344
+ .sidebar--collapsed .sidebar-nav .nav-item span {
345
+ opacity: 0;
346
+ visibility: hidden;
347
+ transition: opacity 0s, visibility 0s; // Instant hide
348
+ }
349
+
350
+ // Icon: stays at EXACT SAME left position - no movement at all
351
+ // (inherits left: $sidebar-box-icon-left, no change needed)
352
+
353
+ /* =============================================================================
354
+ Nav Item - Mobile responsive
355
+ On mobile, sidebar becomes fullscreen and collapsed state is ignored
356
+ ============================================================================= */
357
+
358
+ @media (max-width: 767px) {
359
+ .sidebar.sidebar--collapsed .sidebar-nav .nav-item {
360
+ justify-content: flex-start;
361
+ padding: var(--fad-nav-item-padding-y) var(--fad-nav-item-padding-x);
362
+ padding-left: $nav-item-content-left; // Keep same padding for absolute icon
363
+ }
364
+
365
+ .sidebar.sidebar--collapsed .sidebar-nav .nav-item span {
366
+ display: inline;
367
+ opacity: 1;
368
+ visibility: visible;
369
+ width: auto;
370
+ transition: opacity $sidebar-box-content-duration ease $sidebar-box-content-delay; // Restore delayed fade-in
371
+ }
372
+
373
+ .sidebar.sidebar--collapsed .sidebar-nav .nav-item i {
374
+ // Keep absolute positioning on mobile too - same centered position
375
+ position: absolute;
376
+ left: calc((var(--fad-sidebar-width-collapsed) - #{$nav-item-icon-width}) / 2);
377
+ font-size: var(--fad-nav-icon-size);
378
+ width: $nav-item-icon-width;
379
+ }
380
+ }