srcdev-nuxt-components 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -156,9 +156,7 @@ watch(
156
156
  text-wrap: nowrap;
157
157
  }
158
158
  }
159
- .icon {
160
-
161
- }
159
+ /* .icon {} */
162
160
  }
163
161
  .display-details-content {
164
162
  .overflow-navigation-sub-nav-inner {
@@ -176,9 +174,7 @@ watch(
176
174
  text-decoration: none;
177
175
  color: inherit;
178
176
 
179
- .overflow-navigation-sub-nav-text {
180
-
181
- }
177
+ /* .overflow-navigation-sub-nav-text {} */
182
178
  }
183
179
  }
184
180
  }
@@ -1,78 +1,61 @@
1
1
  <template>
2
- <header class="responsive-header" :class="[elementClasses]">
3
- <h1><a href="/">Logo</a></h1>
4
- <div class="navigation" :class="[{ loaded: navLoaded }]" ref="navigationWrapper">
5
- <nav class="main-navigation" ref="mainNav">
6
-
7
- <ul
8
- v-for="(navGroup, groupKey) in responsiveNavLinks"
9
- :key="groupKey"
10
- class="main-navigation-list"
11
- :ref="el => setNavRef(String(groupKey), el as HTMLUListElement | null)"
12
- >
13
- <template v-for="(link, localIndex) in navGroup" :key="localIndex">
14
- <li
15
- v-if="link.path"
16
- class="main-navigation-item"
17
- :class="{ 'visually-hidden': !mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.visible }"
18
- :style="{ '--_main-navigation-item-width': mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.width + 'px' }"
19
- ref="mainNavigationItems"
20
- :data-group-key="groupKey"
21
- :data-local-index="localIndex"
22
- >
23
- <NuxtLink class="main-navigation-link" :to="link.path">{{ link.name }}</NuxtLink>
24
- </li>
25
- <li
26
- v-else
27
- class="main-navigation-item"
28
- :class="{ 'visually-hidden': !mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.visible }"
29
- :style="{ '--_main-navigation-item-width': mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.width + 'px' }"
30
- ref="mainNavigationItems"
31
- :data-group-key="groupKey"
32
- :data-local-index="localIndex"
33
- >
34
- <details
35
- class="main-navigation-details"
36
- name="navigation-group"
37
- ref="navigationDetails"
38
- >
39
- <summary @mouseover="handleSummaryHover($event)" @focusin="handleSummaryHover($event)" class="main-navigation-link has-toggle-icon">
40
- <Icon name="mdi:chevron-down" class="icon" />
41
- {{ link.childLinksTitle }}
42
- </summary>
43
- <div class="main-navigation-sub-nav">
44
- <ul class="main-navigation-sub-nav-list">
45
- <li class="main-navigation-sub-nav-item" v-for="childLink in link.childLinks" :key="childLink.name">
46
- <NuxtLink :to="childLink.path" class="main-navigation-sub-nav-link">{{ childLink.name }}</NuxtLink>
47
- </li>
48
- </ul>
49
- </div>
50
- </details>
51
- </li>
52
- </template>
53
- </ul>
54
-
55
- </nav>
56
- <nav class="secondary-navigation" ref="secondaryNav">
57
- <details class="overflow-details" :class="[{ 'visually-hidden': !navLoaded || !showOverflowDetails }]" ref="overflowDetails" name="overflow-group">
58
- <summary class="overflow-details-summary has-toggle-icon">
59
- <Icon name="gravity-ui:ellipsis" class="icon" />
60
- </summary>
61
- <div class="overflow-details-nav">
62
- <NavigationItems
63
- :main-navigation-state="mainNavigationState"
64
- />
65
- </div>
66
- </details>
67
- <NuxtLink class="main-navigation-link" to="/"><Icon name="material-symbols:settings-outline-rounded" class="icon" /></NuxtLink>
68
- </nav>
69
- </div>
70
- </header>
71
- <LayoutRow
72
- tag="div"
73
- variant="full"
74
- :style-class-passthrough="['mb-20', 'debug-grid']"
75
- >
2
+ <div class="navigation" :class="[elementClasses, { loaded: navLoaded }]" ref="navigationWrapper">
3
+ <nav class="main-navigation" ref="mainNav">
4
+
5
+ <ul v-for="(navGroup, groupKey) in responsiveNavLinks" :key="groupKey" class="main-navigation-list"
6
+ :ref="el => setNavRef(String(groupKey), el as HTMLUListElement | null)">
7
+ <template v-for="(link, localIndex) in navGroup" :key="localIndex">
8
+ <li v-if="link.path" class="main-navigation-item"
9
+ :class="{ 'visually-hidden': !mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.visible }"
10
+ :style="{ '--_main-navigation-item-width': mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.width + 'px' }"
11
+ ref="mainNavigationItems" :data-group-key="groupKey" :data-local-index="localIndex">
12
+ <NuxtLink class="main-navigation-link" :to="link.path">{{ link.name }}</NuxtLink>
13
+ </li>
14
+ <li v-else class="main-navigation-item"
15
+ :class="{ 'visually-hidden': !mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.visible }"
16
+ :style="{ '--_main-navigation-item-width': mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.width + 'px' }"
17
+ ref="mainNavigationItems" :data-group-key="groupKey" :data-local-index="localIndex">
18
+ <details class="main-navigation-details" name="navigation-group" ref="navigationDetails">
19
+ <summary @mouseover="handleSummaryHover($event)" @focusin="handleSummaryHover($event)"
20
+ class="main-navigation-details-summary has-toggle-icon">
21
+ <Icon name="mdi:chevron-down" class="icon" />
22
+ {{ link.childLinksTitle }}
23
+ </summary>
24
+ <div class="main-navigation-sub-nav">
25
+ <ul class="main-navigation-sub-nav-list">
26
+ <li class="main-navigation-sub-nav-item" v-for="childLink in link.childLinks" :key="childLink.name">
27
+ <NuxtLink :to="childLink.path" class="main-navigation-sub-nav-link">{{ childLink.name }}</NuxtLink>
28
+ </li>
29
+ </ul>
30
+ </div>
31
+ </details>
32
+ </li>
33
+ </template>
34
+ </ul>
35
+
36
+ </nav>
37
+ <nav class="secondary-navigation" ref="secondaryNav">
38
+ <details class="overflow-details" :class="[{ 'visually-hidden': !navLoaded || !showOverflowDetails }]"
39
+ ref="overflowDetails" name="overflow-group">
40
+ <summary class="overflow-details-summary has-toggle-icon">
41
+ <Icon name="gravity-ui:ellipsis" class="icon" />
42
+ </summary>
43
+ <div class="overflow-details-nav">
44
+ <NavigationItems :main-navigation-state="mainNavigationState" />
45
+ </div>
46
+ </details>
47
+ <ul class="secondary-navigation-list">
48
+ <li class="secondary-navigation-item">
49
+ <NuxtLink class="secondary-navigation-link" to="/">
50
+ <Icon name="material-symbols:settings-outline-rounded" class="icon" />
51
+ </NuxtLink>
52
+ </li>
53
+ </ul>
54
+ </nav>
55
+ </div>
56
+
57
+
58
+ <LayoutRow tag="div" variant="full" :style-class-passthrough="['mb-20', 'debug-grid']">
76
59
  <ClientOnly>
77
60
  <div>
78
61
  <h2 class="heading-4">navigationWrapperRects</h2>
@@ -303,21 +286,8 @@ watch(
303
286
  </script>
304
287
 
305
288
  <style lang="css">
306
- .responsive-header {
307
- display: grid;
308
- grid-template-columns: auto 1fr;
309
- gap: 24px;
310
- align-items: center;
311
- padding-block: 12px;
312
- padding-inline: 24px;
313
-
314
- /* Make sure always on top of page content */
315
- position: relative;
316
- z-index: 999999;
317
-
318
- h1 {
319
- text-wrap-mode: nowrap;
320
- }
289
+
290
+ .navigation {
321
291
 
322
292
  ul,
323
293
  ol {
@@ -333,241 +303,249 @@ watch(
333
303
  }
334
304
  }
335
305
 
336
- details {
337
- --_icon-transform: scaleY(1);
338
-
339
- &[open] {
340
- --_icon-transform: scaleY(-1);
341
- }
342
-
343
- .has-toggle-icon {
344
- display: flex;
345
- gap: 6px;
346
- text-wrap-mode: nowrap;
306
+ --_link-visibility-transition: none;
347
307
 
348
- .icon {
349
- display: block;
350
- transform: var(--_icon-transform);
351
- transition: transform 0.2s ease-in-out;
352
- }
353
- }
308
+ &.loaded {
309
+ --_link-visibility-transition: all 0.2s ease-in-out;
354
310
  }
355
311
 
356
- .navigation {
357
- --_link-visibility-transition: none;
312
+ display: grid;
313
+ grid-template-areas: 'navStack';
358
314
 
359
- &.loaded {
360
- --_link-visibility-transition: all 0.2s ease-in-out;
361
- }
315
+ margin: 12px;
316
+ border-radius: 8px;
317
+ background-color: #efefef05;
318
+ border: 1px solid #efefef75;
319
+ padding: 12px;
362
320
 
321
+ .main-navigation {
322
+ grid-area: navStack;
323
+ display: flex;
324
+ flex-wrap: nowrap;
325
+ flex-grow: 1;
326
+ justify-content: space-between;
327
+ gap: 60px;
363
328
 
364
- display: grid;
365
- grid-template-areas: 'navStack';
329
+ overflow-x: hidden;
330
+ margin-inline-end: v-bind(`${mainNavigationMarginBlockEnd}px`);
366
331
 
367
- margin: 12px;
368
- border-radius: 8px;
369
- background-color: #efefef05;
370
- border: 1px solid #efefef75;
371
- padding: 12px;
332
+ &.collapsed {
333
+ justify-content: flex-start;
334
+ }
372
335
 
373
- /*
374
- * .main-navigation-link & .main-navigation-details placed here they can also exist within
375
- */
376
- .main-navigation-link {
336
+ .main-navigation-list {
377
337
  display: flex;
378
- text-wrap-mode: nowrap;
379
- color: inherit;
380
- text-decoration: none;
381
- }
338
+ flex-wrap: nowrap;
382
339
 
383
- .main-navigation-details {
384
- .main-navigation-link {
385
- list-style: none;
340
+ &:nth-of-type(1) {
341
+ gap: 30px;
386
342
  }
387
343
 
388
- summary::-webkit-details-marker,
389
- summary::marker {
390
- display: none;
344
+ &:nth-of-type(2) {
345
+ gap: 30px;
391
346
  }
392
347
 
393
- summary:hover {
394
- cursor: pointer;
395
- }
348
+ .main-navigation-item {
396
349
 
397
- .main-navigation-sub-nav {
398
- position: absolute;
399
- padding: 12px;
400
- border: 1px solid #efefef75;
401
- border-radius: 8px;
402
- background-color: #000;
403
- translate: 0 12px;
350
+ width: var(--_main-navigation-item-width);
351
+ overflow: hidden;
352
+ transition:
353
+ opacity 0.2s ease-in-out,
354
+ visibility 0.2s ease-in-out;
404
355
 
405
- min-width: var(--_main-navigation-item-width);
356
+ .main-navigation-link {
357
+ display: flex;
358
+ text-wrap-mode: nowrap;
359
+ color: inherit;
360
+ text-decoration: none;
361
+ margin-inline-start: 0;
362
+ transition: var(--_link-visibility-transition);
363
+ }
406
364
 
407
- .main-navigation-sub-nav-list {
365
+ .main-navigation-details {
408
366
 
409
- display: grid;
410
- grid-template-columns: repeat(2, auto);
411
- gap: 12px;
367
+ --_icon-transform: scaleY(1);
412
368
 
413
- .main-navigation-sub-nav-item {
414
- margin-bottom: 8px;
369
+ margin-inline-start: 0;
370
+ transition: var(--_link-visibility-transition);
415
371
 
416
- &:last-child {
417
- margin-bottom: 0;
418
- }
372
+ &[open] {
373
+ --_icon-transform: scaleY(-1);
374
+ }
375
+
376
+ .has-toggle-icon {
377
+ display: flex;
378
+ gap: 6px;
379
+ text-wrap-mode: nowrap;
419
380
 
420
- .main-navigation-sub-nav-link {
381
+ .icon {
421
382
  display: block;
422
- text-wrap-mode: nowrap;
423
- text-decoration: none;
424
- color: inherit;
383
+ transform: var(--_icon-transform);
384
+ transition: transform 0.2s ease-in-out;
425
385
  }
426
386
  }
427
- }
428
- }
429
- }
430
387
 
431
- .main-navigation {
432
- grid-area: navStack;
433
- display: flex;
434
- flex-wrap: nowrap;
435
- flex-grow: 1;
436
- justify-content: space-between;
437
- gap: 60px;
388
+ .main-navigation-details-summary {
438
389
 
439
- overflow-x: hidden;
440
- margin-inline-end: v-bind(`${mainNavigationMarginBlockEnd}px`);
390
+ &::-webkit-details-marker,
391
+ &::marker {
392
+ display: none;
393
+ }
441
394
 
442
- &.collapsed {
443
- justify-content: flex-start;
444
- }
395
+ &:hover {
396
+ cursor: pointer;
397
+ }
445
398
 
446
- .main-navigation-list {
447
- display: flex;
448
- flex-wrap: nowrap;
399
+ }
449
400
 
450
- &:nth-of-type(1) {
451
- gap: 30px;
452
- }
401
+ .main-navigation-sub-nav {
402
+ position: absolute;
403
+ padding: 12px;
404
+ border: 1px solid #efefef75;
405
+ border-radius: 8px;
406
+ background-color: #000;
407
+ translate: 0 12px;
453
408
 
454
- &:nth-of-type(2) {
455
- gap: 30px;
456
- }
409
+ min-width: var(--_main-navigation-item-width);
457
410
 
458
- .main-navigation-item {
459
- width: var(--_main-navigation-item-width);
460
- overflow: hidden;
461
- transition:
462
- opacity 0.2s ease-in-out,
463
- visibility 0.2s ease-in-out;
411
+ .main-navigation-sub-nav-list {
464
412
 
465
- .main-navigation-details,
466
- .main-navigation-link {
467
- margin-inline-start: 0;
468
- transition: var(--_link-visibility-transition);
469
- }
413
+ display: grid;
414
+ grid-template-columns: repeat(2, auto);
415
+ gap: 12px;
470
416
 
471
- &.visually-hidden {
472
- visibility: hidden;
473
- opacity: 0;
417
+ .main-navigation-sub-nav-item {
418
+ margin-bottom: 8px;
474
419
 
475
- .main-navigation-details,
476
- .main-navigation-link {
477
- margin-inline-start: var(--_main-navigation-item-width);
420
+ &:last-child {
421
+ margin-bottom: 0;
422
+ }
423
+
424
+ .main-navigation-sub-nav-link {
425
+ display: block;
426
+ text-wrap-mode: nowrap;
427
+ text-decoration: none;
428
+ color: inherit;
429
+ }
430
+ }
478
431
  }
479
432
  }
480
433
  }
481
- }
482
- }
483
434
 
484
- .secondary-navigation {
485
- grid-area: navStack;
486
- justify-self: end;
487
-
488
- display: flex;
489
- gap: 12px;
490
- align-items: center;
491
-
492
- > a {
493
- /* display: none; */
435
+ &.visually-hidden {
436
+ visibility: hidden;
437
+ opacity: 0;
494
438
 
495
- .icon {
496
- height: 1.35em;
497
- width: 1.35em;
439
+ .main-navigation-details,
440
+ .main-navigation-link {
441
+ margin-inline-start: var(--_main-navigation-item-width);
442
+ }
498
443
  }
499
444
  }
445
+ }
446
+ }
500
447
 
501
- .overflow-details {
502
- list-style: none;
503
- padding: 0;
504
- margin: 0;
505
- position: relative;
506
- cursor: pointer;
507
- width: fit-content;
508
- /* overflow: hidden; */
448
+ .secondary-navigation {
449
+ grid-area: navStack;
450
+ justify-self: end;
509
451
 
510
- transition: all 0.2s ease-in-out;
452
+ display: flex;
453
+ gap: 12px;
454
+ align-items: center;
511
455
 
512
- &.visually-hidden {
513
- opacity: 0;
514
- visibility: hidden;
515
- /* width: 0; */
516
- }
456
+ .secondary-navigation-list {
517
457
 
518
- .overflow-details-summary {
519
- --_icon-zoom: 1;
458
+ .secondary-navigation-item {
459
+
460
+ .secondary-navigation-link {
520
461
  display: flex;
521
462
  align-items: center;
522
- justify-content: center;
523
- padding-inline: 5px;
524
- text-wrap: nowrap;
463
+ font: inherit;
464
+ color: inherit;
465
+
466
+ .icon {
467
+ height: 1.35em;
468
+ width: 1.35em;
469
+ }
470
+ }
471
+ }
472
+ }
525
473
 
526
- aspect-ratio: 1;
527
- border-radius: 4px;
528
- border: 1px solid #ffffff90;
529
- outline: 1px solid #ffffff10;
530
- background-color: Canvas;
474
+ .main-navigation-link {
475
+ .icon {
476
+ height: 1.35em;
477
+ width: 1.35em;
478
+ }
479
+ }
531
480
 
532
- width: 28px;
533
- overflow: hidden;
481
+ .overflow-details {
482
+ list-style: none;
483
+ padding: 0;
484
+ margin: 0;
485
+ position: relative;
486
+ cursor: pointer;
487
+ width: fit-content;
488
+ /* overflow: hidden; */
489
+
490
+ transition: all 0.2s ease-in-out;
491
+
492
+ &.visually-hidden {
493
+ opacity: 0;
494
+ visibility: hidden;
495
+ /* width: 0; */
496
+ }
534
497
 
498
+ .overflow-details-summary {
499
+ --_icon-zoom: 1;
500
+ display: flex;
501
+ align-items: center;
502
+ justify-content: center;
503
+ padding-inline: 5px;
504
+ text-wrap: nowrap;
535
505
 
536
- &::-webkit-details-marker,
537
- &::marker {
538
- display: none;
539
- }
506
+ aspect-ratio: 1;
507
+ border-radius: 4px;
508
+ border: 1px solid #ffffff90;
509
+ outline: 1px solid #ffffff10;
510
+ background-color: Canvas;
540
511
 
541
- &:hover {
542
- --_icon-zoom: 1.2;
543
- outline: 1px solid #ffffff;
544
- }
512
+ width: 28px;
513
+ overflow: hidden;
545
514
 
546
- .icon {
547
- scale: var(--_icon-zoom);
548
- transition: scale 0.2s ease-in-out;
549
- }
515
+
516
+ &::-webkit-details-marker,
517
+ &::marker {
518
+ display: none;
550
519
  }
551
520
 
521
+ &:hover {
522
+ --_icon-zoom: 1.2;
523
+ outline: 1px solid #ffffff;
524
+ }
552
525
 
553
- .overflow-details-nav {
554
- position: absolute;
555
- top: 135%;
556
- right: 0;
557
- background-color: #000;
558
- border: 1px solid #ffffff90;
559
- border-radius: 8px;
560
- padding: 12px;
561
- margin: 0;
562
- z-index: 999;
563
- min-width: var(--_overflow-drop-down-width, fit-content);
564
-
565
- display: grid;
566
- grid-auto-flow: row;
567
- gap: 8px;
526
+ .icon {
527
+ scale: var(--_icon-zoom);
528
+ transition: scale 0.2s ease-in-out;
568
529
  }
569
530
  }
570
531
 
532
+
533
+ .overflow-details-nav {
534
+ position: absolute;
535
+ top: 135%;
536
+ right: 0;
537
+ background-color: #000;
538
+ border: 1px solid #ffffff90;
539
+ border-radius: 8px;
540
+ padding: 12px;
541
+ margin: 0;
542
+ z-index: 999;
543
+ min-width: var(--_overflow-drop-down-width, fit-content);
544
+
545
+ display: grid;
546
+ grid-auto-flow: row;
547
+ gap: 8px;
548
+ }
571
549
  }
572
550
  }
573
551
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "srcdev-nuxt-components",
3
3
  "type": "module",
4
- "version": "2.5.0",
4
+ "version": "2.5.1",
5
5
  "main": "nuxt.config.ts",
6
6
  "scripts": {
7
7
  "clean": "rm -rf .nuxt && rm -rf .output && rm -rf .playground/.nuxt && rm -rf .playground/.output",