@ojiepermana/angular 0.0.3 → 0.1.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.
Files changed (41) hide show
  1. package/README.md +55 -9
  2. package/fesm2022/ojiepermana-angular-internal.mjs +433 -2
  3. package/fesm2022/ojiepermana-angular-internal.mjs.map +1 -1
  4. package/fesm2022/ojiepermana-angular-layout.mjs +52 -59
  5. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  6. package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs +721 -0
  7. package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs.map +1 -0
  8. package/fesm2022/ojiepermana-angular-navigation-vertical.mjs +1647 -0
  9. package/fesm2022/ojiepermana-angular-navigation-vertical.mjs.map +1 -0
  10. package/fesm2022/ojiepermana-angular-navigation.mjs +472 -0
  11. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -0
  12. package/fesm2022/ojiepermana-angular-shell.mjs +6 -1
  13. package/fesm2022/ojiepermana-angular-shell.mjs.map +1 -1
  14. package/fesm2022/ojiepermana-angular-theme-component.mjs +12 -26
  15. package/fesm2022/ojiepermana-angular-theme-component.mjs.map +1 -1
  16. package/fesm2022/ojiepermana-angular-theme-service.mjs +2 -6
  17. package/fesm2022/ojiepermana-angular-theme-service.mjs.map +1 -1
  18. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  19. package/layout/README.md +3 -3
  20. package/{theme/styles/layout → layout/src/component/horizontal}/horizontal.css +39 -26
  21. package/{theme/styles/layout → layout/src/component/vertical}/vertical.css +10 -12
  22. package/{theme/styles/layout/index.css → layout/src/layout.css} +0 -3
  23. package/navigation/README.md +301 -0
  24. package/navigation/horizontal/README.md +49 -0
  25. package/navigation/vertical/README.md +0 -0
  26. package/package.json +13 -1
  27. package/shell/README.md +5 -1
  28. package/styles/index.css +1 -1
  29. package/theme/README.md +3 -6
  30. package/theme/styles/adapters/material-ui/index.css +1 -5
  31. package/theme/styles/presets/styles/flat.css +3 -6
  32. package/theme/styles/presets/styles/glass.css +1 -7
  33. package/theme/styles/presets/styles/index.css +1 -1
  34. package/theme/styles/roles/index.css +18 -0
  35. package/theme/styles/tokens/foundation.css +4 -7
  36. package/types/ojiepermana-angular-internal.d.ts +65 -1
  37. package/types/ojiepermana-angular-layout.d.ts +1 -1
  38. package/types/ojiepermana-angular-navigation-horizontal.d.ts +81 -0
  39. package/types/ojiepermana-angular-navigation-vertical.d.ts +262 -0
  40. package/types/ojiepermana-angular-navigation.d.ts +228 -0
  41. package/types/ojiepermana-angular-shell.d.ts +2 -0
@@ -0,0 +1,1647 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ChangeDetectorRef, DOCUMENT, ElementRef, Renderer2, EventEmitter, ViewChild, Output, Input, Directive, ChangeDetectionStrategy, ViewEncapsulation, Component, forwardRef } from '@angular/core';
3
+ import { Router, NavigationEnd, RouterLink, RouterLinkActive } from '@angular/router';
4
+ import { ReplaySubject, Subject, filter, takeUntil } from 'rxjs';
5
+ import { NavigationService, shouldRenderNavigationItem, getNavigationItemAction, isNavigationRoutableItem } from '@ojiepermana/angular/navigation';
6
+ import { trackNavigationTreeItem, NavigationItemContent, hasActiveNavigationDescendant, isNavigationTreeDescendant, NavigationTreeOutlet } from '@ojiepermana/angular/internal';
7
+ import { NgClass, NgTemplateOutlet } from '@angular/common';
8
+ import * as i1 from '@angular/material/tooltip';
9
+ import { MatTooltipModule } from '@angular/material/tooltip';
10
+
11
+ class VerticalNavigationBaseComponent {
12
+ _changeDetectorRef = inject(ChangeDetectorRef);
13
+ _document = inject(DOCUMENT);
14
+ _elementRef = inject(ElementRef);
15
+ _renderer2 = inject(Renderer2);
16
+ _router = inject(Router);
17
+ _navigationService = inject(NavigationService);
18
+ autoCollapse = true;
19
+ inner = false;
20
+ mode = 'side';
21
+ navigation = [];
22
+ opened = true;
23
+ position = 'left';
24
+ transparentOverlay = false;
25
+ appearanceChanged = new EventEmitter();
26
+ modeChanged = new EventEmitter();
27
+ openedChanged = new EventEmitter();
28
+ positionChanged = new EventEmitter();
29
+ _navigationContentEl;
30
+ activeAsideItemId = null;
31
+ onCollapsableItemCollapsed = new ReplaySubject(1);
32
+ onCollapsableItemExpanded = new ReplaySubject(1);
33
+ onRefreshed = new ReplaySubject(1);
34
+ _animationsEnabled = false;
35
+ _asideOverlay = null;
36
+ _hovered = false;
37
+ _mutationObserver;
38
+ _overlay = null;
39
+ _pendingTimeouts = [];
40
+ _unsubscribeAll = new Subject();
41
+ _overlayClickHandler = () => this.close();
42
+ _asideOverlayClickHandler = () => this.closeAside();
43
+ get hostClasses() {
44
+ return {
45
+ [`${this._componentPrefix}-animations-enabled`]: this._animationsEnabled,
46
+ [`${this._componentPrefix}-appearance-${this.appearance}`]: true,
47
+ [`${this._componentPrefix}-hover`]: this._hovered,
48
+ [`${this._componentPrefix}-inner`]: this.inner,
49
+ [`${this._componentPrefix}-mode-over`]: this.mode === 'over',
50
+ [`${this._componentPrefix}-mode-side`]: this.mode === 'side',
51
+ [`${this._componentPrefix}-opened`]: this.opened,
52
+ [`${this._componentPrefix}-position-left`]: this.position === 'left',
53
+ [`${this._componentPrefix}-position-right`]: this.position === 'right',
54
+ };
55
+ }
56
+ get asideWrapperClass() {
57
+ return this._asideWrapperClass;
58
+ }
59
+ activeAsideNavigationItem() {
60
+ if (!this.activeAsideItemId) {
61
+ return null;
62
+ }
63
+ const item = this._navigationService.getItem(this.activeAsideItemId, this.navigation);
64
+ return item?.type === 'aside' ? item : null;
65
+ }
66
+ shouldRenderItem(item) {
67
+ return shouldRenderNavigationItem(item);
68
+ }
69
+ onMouseenter() {
70
+ this._enableAnimations();
71
+ this._hovered = true;
72
+ }
73
+ onMouseleave() {
74
+ this._enableAnimations();
75
+ this._hovered = false;
76
+ }
77
+ ngOnChanges(changes) {
78
+ if ('appearance' in changes) {
79
+ this.appearanceChanged.emit(changes['appearance'].currentValue);
80
+ }
81
+ if ('mode' in changes) {
82
+ const currentMode = changes['mode'].currentValue;
83
+ const previousMode = changes['mode'].previousValue;
84
+ this._disableAnimations();
85
+ if (previousMode === 'over' && currentMode === 'side') {
86
+ this._hideOverlay();
87
+ }
88
+ if (previousMode === 'side' && currentMode === 'over') {
89
+ this.closeAside();
90
+ if (this.opened) {
91
+ this._showOverlay();
92
+ }
93
+ }
94
+ this.modeChanged.emit(currentMode);
95
+ this._setTimeout(() => {
96
+ this._enableAnimations();
97
+ }, 500);
98
+ }
99
+ if ('navigation' in changes) {
100
+ this._changeDetectorRef.markForCheck();
101
+ }
102
+ if ('opened' in changes) {
103
+ this._toggleOpened(changes['opened'].currentValue);
104
+ }
105
+ if ('position' in changes) {
106
+ this.positionChanged.emit(changes['position'].currentValue);
107
+ }
108
+ }
109
+ ngOnInit() {
110
+ this._router.events
111
+ .pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
112
+ .subscribe(() => {
113
+ if (this.mode === 'over' && this.opened) {
114
+ this.close();
115
+ }
116
+ if (this.mode === 'side' && this.activeAsideItemId) {
117
+ this.closeAside();
118
+ }
119
+ });
120
+ }
121
+ ngAfterViewInit() {
122
+ this._mutationObserver = new MutationObserver((mutations) => {
123
+ mutations.forEach((mutation) => {
124
+ const mutationTarget = mutation.target;
125
+ if (mutation.attributeName === 'class') {
126
+ if (mutationTarget.classList.contains('cdk-global-scrollblock')) {
127
+ const top = parseInt(mutationTarget.style.top, 10);
128
+ this._renderer2.setStyle(this._elementRef.nativeElement, 'margin-top', `${Math.abs(top)}px`);
129
+ }
130
+ else {
131
+ this._renderer2.setStyle(this._elementRef.nativeElement, 'margin-top', null);
132
+ }
133
+ }
134
+ });
135
+ });
136
+ this._mutationObserver.observe(this._document.documentElement, {
137
+ attributes: true,
138
+ attributeFilter: ['class'],
139
+ });
140
+ this._setTimeout(() => {
141
+ if (!this._navigationContentEl) {
142
+ return;
143
+ }
144
+ const activeItem = this._navigationContentEl.nativeElement.querySelector('.kit-navigation-item-active');
145
+ if (activeItem) {
146
+ activeItem.scrollIntoView({ behavior: 'smooth', block: 'center' });
147
+ }
148
+ });
149
+ }
150
+ ngOnDestroy() {
151
+ if (this._mutationObserver) {
152
+ this._mutationObserver.disconnect();
153
+ }
154
+ // Clear all pending timeouts to prevent memory leaks
155
+ for (const id of this._pendingTimeouts) {
156
+ clearTimeout(id);
157
+ }
158
+ this._pendingTimeouts = [];
159
+ // Remove overlays synchronously on destroy
160
+ this._removeOverlayElement(this._overlay, this._overlayClickHandler);
161
+ this._overlay = null;
162
+ this._removeOverlayElement(this._asideOverlay, this._asideOverlayClickHandler);
163
+ this._asideOverlay = null;
164
+ this._unsubscribeAll.next();
165
+ this._unsubscribeAll.complete();
166
+ this.onCollapsableItemCollapsed.complete();
167
+ this.onCollapsableItemExpanded.complete();
168
+ this.onRefreshed.complete();
169
+ }
170
+ refresh() {
171
+ this._changeDetectorRef.markForCheck();
172
+ this.onRefreshed.next(true);
173
+ }
174
+ open() {
175
+ if (this.opened) {
176
+ return;
177
+ }
178
+ this._toggleOpened(true);
179
+ }
180
+ close() {
181
+ if (!this.opened) {
182
+ return;
183
+ }
184
+ this.closeAside();
185
+ this._toggleOpened(false);
186
+ }
187
+ toggle() {
188
+ if (this.opened) {
189
+ this.close();
190
+ }
191
+ else {
192
+ this.open();
193
+ }
194
+ }
195
+ openAside(item) {
196
+ if (item.disabled || !item.id) {
197
+ return;
198
+ }
199
+ this.activeAsideItemId = item.id;
200
+ this._showAsideOverlay();
201
+ this._changeDetectorRef.markForCheck();
202
+ }
203
+ closeAside() {
204
+ this.activeAsideItemId = null;
205
+ this._hideAsideOverlay();
206
+ this._changeDetectorRef.markForCheck();
207
+ }
208
+ toggleAside(item) {
209
+ if (this.activeAsideItemId === item.id) {
210
+ this.closeAside();
211
+ }
212
+ else {
213
+ this.openAside(item);
214
+ }
215
+ }
216
+ trackByFn(index, item) {
217
+ return trackNavigationTreeItem(index, item);
218
+ }
219
+ _enableAnimations() {
220
+ if (this._animationsEnabled) {
221
+ return;
222
+ }
223
+ this._animationsEnabled = true;
224
+ }
225
+ _disableAnimations() {
226
+ if (!this._animationsEnabled) {
227
+ return;
228
+ }
229
+ this._animationsEnabled = false;
230
+ }
231
+ _showOverlay() {
232
+ if (this._overlay) {
233
+ return;
234
+ }
235
+ this._overlay = this._renderer2.createElement('div');
236
+ if (this._overlay) {
237
+ this._overlay.classList.add(`${this._componentPrefix}-overlay`);
238
+ if (this.transparentOverlay) {
239
+ this._overlay.classList.add(`${this._componentPrefix}-overlay-transparent`);
240
+ }
241
+ this._renderer2.setStyle(this._overlay, 'opacity', '0');
242
+ this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);
243
+ this._overlay.addEventListener('click', this._overlayClickHandler);
244
+ this._setTimeout(() => {
245
+ if (this._overlay) {
246
+ this._renderer2.setStyle(this._overlay, 'opacity', '1');
247
+ }
248
+ }, 10);
249
+ }
250
+ }
251
+ _hideOverlay() {
252
+ if (!this._overlay) {
253
+ return;
254
+ }
255
+ this._renderer2.setStyle(this._overlay, 'opacity', '0');
256
+ this._setTimeout(() => {
257
+ if (this._overlay) {
258
+ this._overlay.removeEventListener('click', this._overlayClickHandler);
259
+ if (this._overlay.parentNode) {
260
+ this._overlay.parentNode.removeChild(this._overlay);
261
+ }
262
+ this._overlay = null;
263
+ }
264
+ }, 300);
265
+ }
266
+ _showAsideOverlay() {
267
+ if (this._asideOverlay) {
268
+ return;
269
+ }
270
+ this._asideOverlay = this._renderer2.createElement('div');
271
+ if (this._asideOverlay) {
272
+ this._asideOverlay.classList.add(`${this._componentPrefix}-aside-overlay`);
273
+ this._renderer2.setStyle(this._asideOverlay, 'opacity', '0');
274
+ this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);
275
+ this._asideOverlay.addEventListener('click', this._asideOverlayClickHandler);
276
+ this._setTimeout(() => {
277
+ if (this._asideOverlay) {
278
+ this._renderer2.setStyle(this._asideOverlay, 'opacity', '1');
279
+ }
280
+ }, 10);
281
+ }
282
+ }
283
+ _hideAsideOverlay() {
284
+ if (!this._asideOverlay) {
285
+ return;
286
+ }
287
+ this._renderer2.setStyle(this._asideOverlay, 'opacity', '0');
288
+ this._setTimeout(() => {
289
+ if (this._asideOverlay) {
290
+ this._asideOverlay.removeEventListener('click', this._asideOverlayClickHandler);
291
+ if (this._asideOverlay.parentNode) {
292
+ this._asideOverlay.parentNode.removeChild(this._asideOverlay);
293
+ }
294
+ this._asideOverlay = null;
295
+ }
296
+ }, 300);
297
+ }
298
+ _setTimeout(fn, delay) {
299
+ const id = setTimeout(() => {
300
+ const index = this._pendingTimeouts.indexOf(id);
301
+ if (index > -1) {
302
+ this._pendingTimeouts.splice(index, 1);
303
+ }
304
+ fn();
305
+ }, delay);
306
+ this._pendingTimeouts.push(id);
307
+ }
308
+ _removeOverlayElement(overlay, clickHandler) {
309
+ if (!overlay) {
310
+ return;
311
+ }
312
+ overlay.removeEventListener('click', clickHandler);
313
+ if (overlay.parentNode) {
314
+ overlay.parentNode.removeChild(overlay);
315
+ }
316
+ }
317
+ _toggleOpened(open) {
318
+ this.opened = open;
319
+ this._enableAnimations();
320
+ if (this.mode === 'over') {
321
+ if (this.opened) {
322
+ this._showOverlay();
323
+ }
324
+ else {
325
+ this._hideOverlay();
326
+ }
327
+ }
328
+ this.openedChanged.emit(open);
329
+ }
330
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
331
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: VerticalNavigationBaseComponent, isStandalone: true, inputs: { autoCollapse: "autoCollapse", inner: "inner", mode: "mode", navigation: "navigation", opened: "opened", position: "position", transparentOverlay: "transparentOverlay" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", positionChanged: "positionChanged" }, viewQueries: [{ propertyName: "_navigationContentEl", first: true, predicate: ["navigationContent"], descendants: true }], usesOnChanges: true, ngImport: i0 });
332
+ }
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationBaseComponent, decorators: [{
334
+ type: Directive
335
+ }], propDecorators: { autoCollapse: [{
336
+ type: Input
337
+ }], inner: [{
338
+ type: Input
339
+ }], mode: [{
340
+ type: Input
341
+ }], navigation: [{
342
+ type: Input
343
+ }], opened: [{
344
+ type: Input
345
+ }], position: [{
346
+ type: Input
347
+ }], transparentOverlay: [{
348
+ type: Input
349
+ }], appearanceChanged: [{
350
+ type: Output
351
+ }], modeChanged: [{
352
+ type: Output
353
+ }], openedChanged: [{
354
+ type: Output
355
+ }], positionChanged: [{
356
+ type: Output
357
+ }], _navigationContentEl: [{
358
+ type: ViewChild,
359
+ args: ['navigationContent']
360
+ }] } });
361
+
362
+ class VerticalNavigationBasicItemComponent {
363
+ _changeDetectorRef = inject(ChangeDetectorRef);
364
+ _navigationComponent = inject(VerticalNavigationBaseComponent);
365
+ _navigationService = inject(NavigationService);
366
+ item;
367
+ isActiveMatchOptions = {
368
+ paths: 'subset',
369
+ queryParams: 'subset',
370
+ fragment: 'ignored',
371
+ matrixParams: 'ignored',
372
+ };
373
+ _unsubscribeAll = new Subject();
374
+ /**
375
+ * On init
376
+ */
377
+ ngOnInit() {
378
+ // Set the "isActiveMatchOptions" either from item's
379
+ // "isActiveMatchOptions" or the equivalent form of
380
+ // item's "exactMatch" option
381
+ this.isActiveMatchOptions =
382
+ this.item.isActiveMatchOptions ??
383
+ (this.item.exactMatch
384
+ ? { paths: 'exact', queryParams: 'exact', fragment: 'ignored', matrixParams: 'ignored' }
385
+ : { paths: 'subset', queryParams: 'subset', fragment: 'ignored', matrixParams: 'ignored' });
386
+ // Subscribe to onRefreshed on the navigation component
387
+ this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {
388
+ // Mark for check
389
+ this._changeDetectorRef.markForCheck();
390
+ });
391
+ }
392
+ /**
393
+ * On destroy
394
+ */
395
+ ngOnDestroy() {
396
+ // Unsubscribe from all subscriptions
397
+ this._unsubscribeAll.next();
398
+ this._unsubscribeAll.complete();
399
+ }
400
+ hasAction() {
401
+ return !!getNavigationItemAction(this.item);
402
+ }
403
+ markActive() {
404
+ if (!this.item.id) {
405
+ return;
406
+ }
407
+ this._navigationService.setActiveItem(this.item.id);
408
+ }
409
+ triggerAction() {
410
+ this.markActive();
411
+ getNavigationItemAction(this.item)?.(this.item);
412
+ }
413
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationBasicItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
414
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: VerticalNavigationBasicItemComponent, isStandalone: true, selector: "vertical-navigation-basic-item", inputs: { item: "item" }, ngImport: i0, template: `
415
+ <!-- Item wrapper -->
416
+ <div
417
+ class="vertical-navigation-item-wrapper"
418
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
419
+ [ngClass]="item.classes?.wrapper">
420
+ <!-- Item with an internal link -->
421
+ @if (item.link && !item.externalLink && !hasAction() && !item.disabled) {
422
+ <a
423
+ class="kit-navigation-item"
424
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
425
+ [routerLink]="[item.link]"
426
+ [fragment]="item.fragment"
427
+ [preserveFragment]="item.preserveFragment ?? false"
428
+ [queryParams]="item.queryParams ?? null"
429
+ [queryParamsHandling]="item.queryParamsHandling ?? null"
430
+ [routerLinkActive]="'kit-navigation-item-active'"
431
+ [routerLinkActiveOptions]="isActiveMatchOptions"
432
+ [matTooltip]="item.tooltip || ''"
433
+ (click)="markActive()">
434
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
435
+ </a>
436
+ }
437
+
438
+ <!-- Item with an external link -->
439
+ @if (item.link && item.externalLink && !hasAction() && !item.disabled) {
440
+ <a
441
+ class="kit-navigation-item"
442
+ [href]="item.link"
443
+ [target]="item.target || '_blank'"
444
+ [matTooltip]="item.tooltip || ''"
445
+ (click)="markActive()">
446
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
447
+ </a>
448
+ }
449
+
450
+ <!-- Item with a function -->
451
+ @if (!item.link && hasAction() && !item.disabled) {
452
+ <div
453
+ class="kit-navigation-item"
454
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
455
+ [matTooltip]="item.tooltip || ''"
456
+ role="button"
457
+ tabindex="0"
458
+ (click)="triggerAction()"
459
+ (keydown.enter)="triggerAction()"
460
+ (keydown.space)="$event.preventDefault(); triggerAction()">
461
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
462
+ </div>
463
+ }
464
+
465
+ <!-- Item with an internal link and function -->
466
+ @if (item.link && !item.externalLink && hasAction() && !item.disabled) {
467
+ <a
468
+ class="kit-navigation-item"
469
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
470
+ [routerLink]="[item.link]"
471
+ [fragment]="item.fragment"
472
+ [preserveFragment]="item.preserveFragment ?? false"
473
+ [queryParams]="item.queryParams ?? null"
474
+ [queryParamsHandling]="item.queryParamsHandling ?? null"
475
+ [routerLinkActive]="'kit-navigation-item-active'"
476
+ [routerLinkActiveOptions]="isActiveMatchOptions"
477
+ [matTooltip]="item.tooltip || ''"
478
+ (click)="triggerAction()">
479
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
480
+ </a>
481
+ }
482
+
483
+ <!-- Item with an external link and function -->
484
+ @if (item.link && item.externalLink && hasAction() && !item.disabled) {
485
+ <a
486
+ class="kit-navigation-item"
487
+ [href]="item.link"
488
+ [target]="item.target || '_blank'"
489
+ [matTooltip]="item.tooltip || ''"
490
+ (click)="triggerAction()">
491
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
492
+ </a>
493
+ }
494
+
495
+ <!-- Item with no link and no function -->
496
+ @if (!item.link && !hasAction() && !item.disabled) {
497
+ <div
498
+ class="kit-navigation-item"
499
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
500
+ [matTooltip]="item.tooltip || ''">
501
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
502
+ </div>
503
+ }
504
+
505
+ <!-- Item is disabled -->
506
+ @if (item.disabled) {
507
+ <div class="kit-navigation-item kit-navigation-item-disabled" [matTooltip]="item.tooltip || ''">
508
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
509
+ </div>
510
+ }
511
+ </div>
512
+
513
+ <!-- Item template -->
514
+ <ng-template #itemTemplate>
515
+ <navigation-item-content [item]="item" variant="vertical"></navigation-item-content>
516
+ </ng-template>
517
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: NavigationItemContent, selector: "navigation-item-content", inputs: ["item", "level", "variant"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
518
+ }
519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationBasicItemComponent, decorators: [{
520
+ type: Component,
521
+ args: [{
522
+ selector: 'vertical-navigation-basic-item',
523
+ template: `
524
+ <!-- Item wrapper -->
525
+ <div
526
+ class="vertical-navigation-item-wrapper"
527
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
528
+ [ngClass]="item.classes?.wrapper">
529
+ <!-- Item with an internal link -->
530
+ @if (item.link && !item.externalLink && !hasAction() && !item.disabled) {
531
+ <a
532
+ class="kit-navigation-item"
533
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
534
+ [routerLink]="[item.link]"
535
+ [fragment]="item.fragment"
536
+ [preserveFragment]="item.preserveFragment ?? false"
537
+ [queryParams]="item.queryParams ?? null"
538
+ [queryParamsHandling]="item.queryParamsHandling ?? null"
539
+ [routerLinkActive]="'kit-navigation-item-active'"
540
+ [routerLinkActiveOptions]="isActiveMatchOptions"
541
+ [matTooltip]="item.tooltip || ''"
542
+ (click)="markActive()">
543
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
544
+ </a>
545
+ }
546
+
547
+ <!-- Item with an external link -->
548
+ @if (item.link && item.externalLink && !hasAction() && !item.disabled) {
549
+ <a
550
+ class="kit-navigation-item"
551
+ [href]="item.link"
552
+ [target]="item.target || '_blank'"
553
+ [matTooltip]="item.tooltip || ''"
554
+ (click)="markActive()">
555
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
556
+ </a>
557
+ }
558
+
559
+ <!-- Item with a function -->
560
+ @if (!item.link && hasAction() && !item.disabled) {
561
+ <div
562
+ class="kit-navigation-item"
563
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
564
+ [matTooltip]="item.tooltip || ''"
565
+ role="button"
566
+ tabindex="0"
567
+ (click)="triggerAction()"
568
+ (keydown.enter)="triggerAction()"
569
+ (keydown.space)="$event.preventDefault(); triggerAction()">
570
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
571
+ </div>
572
+ }
573
+
574
+ <!-- Item with an internal link and function -->
575
+ @if (item.link && !item.externalLink && hasAction() && !item.disabled) {
576
+ <a
577
+ class="kit-navigation-item"
578
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
579
+ [routerLink]="[item.link]"
580
+ [fragment]="item.fragment"
581
+ [preserveFragment]="item.preserveFragment ?? false"
582
+ [queryParams]="item.queryParams ?? null"
583
+ [queryParamsHandling]="item.queryParamsHandling ?? null"
584
+ [routerLinkActive]="'kit-navigation-item-active'"
585
+ [routerLinkActiveOptions]="isActiveMatchOptions"
586
+ [matTooltip]="item.tooltip || ''"
587
+ (click)="triggerAction()">
588
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
589
+ </a>
590
+ }
591
+
592
+ <!-- Item with an external link and function -->
593
+ @if (item.link && item.externalLink && hasAction() && !item.disabled) {
594
+ <a
595
+ class="kit-navigation-item"
596
+ [href]="item.link"
597
+ [target]="item.target || '_blank'"
598
+ [matTooltip]="item.tooltip || ''"
599
+ (click)="triggerAction()">
600
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
601
+ </a>
602
+ }
603
+
604
+ <!-- Item with no link and no function -->
605
+ @if (!item.link && !hasAction() && !item.disabled) {
606
+ <div
607
+ class="kit-navigation-item"
608
+ [ngClass]="{ 'kit-navigation-item-active-forced': item.active }"
609
+ [matTooltip]="item.tooltip || ''">
610
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
611
+ </div>
612
+ }
613
+
614
+ <!-- Item is disabled -->
615
+ @if (item.disabled) {
616
+ <div class="kit-navigation-item kit-navigation-item-disabled" [matTooltip]="item.tooltip || ''">
617
+ <ng-container *ngTemplateOutlet="itemTemplate"></ng-container>
618
+ </div>
619
+ }
620
+ </div>
621
+
622
+ <!-- Item template -->
623
+ <ng-template #itemTemplate>
624
+ <navigation-item-content [item]="item" variant="vertical"></navigation-item-content>
625
+ </ng-template>
626
+ `,
627
+ encapsulation: ViewEncapsulation.None,
628
+ changeDetection: ChangeDetectionStrategy.OnPush,
629
+ imports: [NgClass, NgTemplateOutlet, RouterLink, RouterLinkActive, NavigationItemContent, MatTooltipModule],
630
+ }]
631
+ }], propDecorators: { item: [{
632
+ type: Input
633
+ }] } });
634
+
635
+ class VerticalNavigationDividerItemComponent {
636
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationDividerItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
637
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: VerticalNavigationDividerItemComponent, isStandalone: true, selector: "vertical-navigation-divider-item", ngImport: i0, template: '<div class="vertical-navigation-divider"></div>', isInline: true, styles: [".vertical-navigation-divider{height:1px;margin:12px 16px;background:rgb(var(--border))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
638
+ }
639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationDividerItemComponent, decorators: [{
640
+ type: Component,
641
+ args: [{ selector: 'vertical-navigation-divider-item', template: '<div class="vertical-navigation-divider"></div>', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".vertical-navigation-divider{height:1px;margin:12px 16px;background:rgb(var(--border))}\n"] }]
642
+ }] });
643
+
644
+ class VerticalNavigationSpacerItemComponent {
645
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationSpacerItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
646
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: VerticalNavigationSpacerItemComponent, isStandalone: true, selector: "vertical-navigation-spacer-item", ngImport: i0, template: '<div class="vertical-navigation-spacer"></div>', isInline: true, styles: [".vertical-navigation-spacer{flex:1 1 auto;min-height:24px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
647
+ }
648
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationSpacerItemComponent, decorators: [{
649
+ type: Component,
650
+ args: [{ selector: 'vertical-navigation-spacer-item', template: '<div class="vertical-navigation-spacer"></div>', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".vertical-navigation-spacer{flex:1 1 auto;min-height:24px}\n"] }]
651
+ }] });
652
+
653
+ class VerticalNavigationCollapsableItemComponent {
654
+ _changeDetectorRef = inject(ChangeDetectorRef);
655
+ _navigationComponent = inject(VerticalNavigationBaseComponent);
656
+ _navigationService = inject(NavigationService);
657
+ _router = inject(Router);
658
+ autoCollapse = true;
659
+ item;
660
+ isCollapsed = true;
661
+ treeTrackByFn = trackNavigationTreeItem;
662
+ treeShouldRenderItemFn = shouldRenderNavigationItem;
663
+ get isExpanded() {
664
+ return !this.isCollapsed;
665
+ }
666
+ _unsubscribeAll = new Subject();
667
+ /**
668
+ * On init
669
+ */
670
+ ngOnInit() {
671
+ if (this._shouldExpand()) {
672
+ this.expand();
673
+ }
674
+ // Otherwise...
675
+ else {
676
+ // If the autoCollapse is on, collapse...
677
+ if (this.autoCollapse) {
678
+ this.collapse();
679
+ }
680
+ }
681
+ // Listen for the onCollapsableItemCollapsed from the service
682
+ this._navigationComponent.onCollapsableItemCollapsed
683
+ .pipe(takeUntil(this._unsubscribeAll))
684
+ .subscribe((collapsedItem) => {
685
+ // Check if the collapsed item is null
686
+ if (collapsedItem === null) {
687
+ return;
688
+ }
689
+ // Collapse if this is a children of the collapsed item
690
+ if (this._isChildrenOf(collapsedItem, this.item)) {
691
+ this.collapse();
692
+ }
693
+ });
694
+ // Listen for the onCollapsableItemExpanded from the service if the autoCollapse is on
695
+ if (this.autoCollapse) {
696
+ this._navigationComponent.onCollapsableItemExpanded
697
+ .pipe(takeUntil(this._unsubscribeAll))
698
+ .subscribe((expandedItem) => {
699
+ // Check if the expanded item is null
700
+ if (expandedItem === null) {
701
+ return;
702
+ }
703
+ // Check if this is a parent of the expanded item
704
+ if (this._isChildrenOf(this.item, expandedItem)) {
705
+ return;
706
+ }
707
+ // Check if this has a children with a matching url with the current active url
708
+ if (this._hasActiveChild(this.item)) {
709
+ return;
710
+ }
711
+ // Check if this is the expanded item
712
+ if (this.item === expandedItem) {
713
+ return;
714
+ }
715
+ // If none of the above conditions are matched, collapse this item
716
+ this.collapse();
717
+ });
718
+ }
719
+ // Attach a listener to the NavigationEnd event
720
+ this._router.events
721
+ .pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
722
+ .subscribe(() => {
723
+ if (this._shouldExpand()) {
724
+ this.expand();
725
+ }
726
+ // Otherwise...
727
+ else {
728
+ // If the autoCollapse is on, collapse...
729
+ if (this.autoCollapse) {
730
+ this.collapse();
731
+ }
732
+ }
733
+ });
734
+ // Subscribe to onRefreshed on the navigation component
735
+ this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {
736
+ // Mark for check
737
+ this._changeDetectorRef.markForCheck();
738
+ });
739
+ }
740
+ /**
741
+ * On destroy
742
+ */
743
+ ngOnDestroy() {
744
+ // Unsubscribe from all subscriptions
745
+ this._unsubscribeAll.next();
746
+ this._unsubscribeAll.complete();
747
+ }
748
+ /**
749
+ * Collapse
750
+ */
751
+ collapse() {
752
+ // Return if the item is disabled
753
+ if (this.item.disabled) {
754
+ return;
755
+ }
756
+ // Return if the item is already collapsed
757
+ if (this.isCollapsed) {
758
+ return;
759
+ }
760
+ // Collapse it
761
+ this.isCollapsed = true;
762
+ if (this.item.id) {
763
+ this._navigationService.collapseItem(this.item.id);
764
+ }
765
+ // Mark for check
766
+ this._changeDetectorRef.markForCheck();
767
+ // Execute the observable
768
+ this._navigationComponent.onCollapsableItemCollapsed.next(this.item);
769
+ }
770
+ /**
771
+ * Expand
772
+ */
773
+ expand() {
774
+ // Return if the item is disabled
775
+ if (this.item.disabled) {
776
+ return;
777
+ }
778
+ // Return if the item is already expanded
779
+ if (!this.isCollapsed) {
780
+ return;
781
+ }
782
+ // Expand it
783
+ this.isCollapsed = false;
784
+ if (this.item.id) {
785
+ this._navigationService.expandItem(this.item.id);
786
+ }
787
+ // Mark for check
788
+ this._changeDetectorRef.markForCheck();
789
+ // Execute the observable
790
+ this._navigationComponent.onCollapsableItemExpanded.next(this.item);
791
+ }
792
+ /**
793
+ * Toggle collapsable
794
+ */
795
+ toggleCollapsable() {
796
+ // Toggle collapse/expand
797
+ if (this.isCollapsed) {
798
+ this.expand();
799
+ }
800
+ else {
801
+ this.collapse();
802
+ }
803
+ }
804
+ /**
805
+ * Track by function for ngFor loops
806
+ */
807
+ trackByFn(index, item) {
808
+ return trackNavigationTreeItem(index, item);
809
+ }
810
+ shouldRenderItem(item) {
811
+ return shouldRenderNavigationItem(item);
812
+ }
813
+ get treeTemplateData() {
814
+ return { autoCollapse: this.autoCollapse };
815
+ }
816
+ /**
817
+ * Check if the given item has the given url in one of its children
818
+ */
819
+ _hasActiveChild(item) {
820
+ return hasActiveNavigationDescendant(item, (child) => isNavigationRoutableItem(child) && !!child.link && this._router.isActive(child.link, child.exactMatch || false));
821
+ }
822
+ _shouldExpand() {
823
+ return this._hasActiveChild(this.item) || (!!this.item.id && this._navigationService.isItemExpanded(this.item.id));
824
+ }
825
+ /**
826
+ * Check if this is a children of the given item
827
+ */
828
+ _isChildrenOf(parent, item) {
829
+ return isNavigationTreeDescendant(parent, item);
830
+ }
831
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationCollapsableItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
832
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: VerticalNavigationCollapsableItemComponent, isStandalone: true, selector: "vertical-navigation-collapsable-item", inputs: { autoCollapse: "autoCollapse", item: "item" }, host: { properties: { "class.vertical-navigation-item-collapsed": "isCollapsed", "class.vertical-navigation-item-expanded": "isExpanded" } }, ngImport: i0, template: `
833
+ <div
834
+ class="vertical-navigation-item-wrapper"
835
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
836
+ [ngClass]="item.classes?.wrapper">
837
+ <div
838
+ class="kit-navigation-item"
839
+ [ngClass]="{
840
+ 'kit-navigation-item-disabled': item.disabled,
841
+ 'kit-navigation-item-expanded': isExpanded,
842
+ }"
843
+ [matTooltip]="item.tooltip || ''"
844
+ role="button"
845
+ tabindex="0"
846
+ (click)="toggleCollapsable()"
847
+ (keydown.enter)="toggleCollapsable()"
848
+ (keydown.space)="$event.preventDefault(); toggleCollapsable()">
849
+ <navigation-item-content [item]="item" variant="vertical"></navigation-item-content>
850
+ <!-- State dot -->
851
+ <span class="kit-navigation-item-dot" aria-hidden="true"></span>
852
+ </div>
853
+ </div>
854
+
855
+ <!-- Children (with CSS transition instead of animation) -->
856
+ <div
857
+ class="kit-navigation-item-children"
858
+ [class.kit-navigation-item-children-expanded]="!isCollapsed"
859
+ [class.kit-navigation-item-children-collapsed]="isCollapsed">
860
+ @if (!isCollapsed) {
861
+ <navigation-tree-outlet
862
+ [items]="item.children"
863
+ [data]="treeTemplateData"
864
+ [branchTemplate]="branchItem"
865
+ [leafTemplate]="leafItem"
866
+ [groupTemplate]="groupItem"
867
+ [dividerTemplate]="dividerItem"
868
+ [spacerTemplate]="spacerItem"
869
+ [trackByFn]="treeTrackByFn"
870
+ [shouldRenderItemFn]="treeShouldRenderItemFn" />
871
+ }
872
+ </div>
873
+
874
+ <ng-template #branchItem let-child let-data="data">
875
+ @if (child.type === 'aside') {
876
+ <vertical-navigation-aside-item [item]="child" [autoCollapse]="data?.['autoCollapse'] === true">
877
+ </vertical-navigation-aside-item>
878
+ } @else {
879
+ <vertical-navigation-collapsable-item [item]="child" [autoCollapse]="data?.['autoCollapse'] !== false">
880
+ </vertical-navigation-collapsable-item>
881
+ }
882
+ </ng-template>
883
+
884
+ <ng-template #leafItem let-child>
885
+ <vertical-navigation-basic-item [item]="child"></vertical-navigation-basic-item>
886
+ </ng-template>
887
+
888
+ <ng-template #groupItem let-child let-data="data">
889
+ <div
890
+ class="vertical-navigation-item-wrapper"
891
+ [class.vertical-navigation-item-has-subtitle]="!!child.subtitle"
892
+ [ngClass]="child.classes?.wrapper">
893
+ <div class="kit-navigation-group-header">
894
+ <navigation-item-content [item]="child" variant="vertical-group"></navigation-item-content>
895
+ </div>
896
+ </div>
897
+ </ng-template>
898
+
899
+ <ng-template #dividerItem>
900
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
901
+ </ng-template>
902
+
903
+ <ng-template #spacerItem>
904
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
905
+ </ng-template>
906
+ `, isInline: true, styles: [".kit-navigation-item-dot{margin-left:auto;width:.5rem;height:.5rem;flex-shrink:0;border-radius:9999px;background:#9ca3af;opacity:.85;transition:background-color .18s ease,transform .18s ease,opacity .18s ease}.kit-navigation-item:hover .kit-navigation-item-dot{opacity:1}.kit-navigation-item.kit-navigation-item-expanded .kit-navigation-item-dot{background:#16a34a;opacity:1;transform:scale(1.1)}.kit-navigation-item-children{overflow:hidden;max-height:0;opacity:0;transition:max-height .3s cubic-bezier(.25,.8,.25,1),opacity .3s cubic-bezier(.25,.8,.25,1)}.kit-navigation-item-children-expanded{max-height:2000px;opacity:1}.kit-navigation-item-children-collapsed{max-height:0;opacity:0}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => VerticalNavigationCollapsableItemComponent), selector: "vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item"] }, { kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatTooltipModule) }, { kind: "directive", type: i0.forwardRef(() => i1.MatTooltip), selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i0.forwardRef(() => NavigationItemContent), selector: "navigation-item-content", inputs: ["item", "level", "variant"] }, { kind: "component", type: i0.forwardRef(() => NavigationTreeOutlet), selector: "navigation-tree-outlet", inputs: ["items", "level", "parentKey", "data", "branchTemplate", "leafTemplate", "groupTemplate", "dividerTemplate", "spacerTemplate", "trackByFn", "shouldRenderItemFn", "hasChildrenFn", "resolveParentKeyFn"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationAsideItemComponent), selector: "vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "skipChildren"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationBasicItemComponent), selector: "vertical-navigation-basic-item", inputs: ["item"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationDividerItemComponent), selector: "vertical-navigation-divider-item" }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationSpacerItemComponent), selector: "vertical-navigation-spacer-item" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
907
+ }
908
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationCollapsableItemComponent, decorators: [{
909
+ type: Component,
910
+ args: [{ selector: 'vertical-navigation-collapsable-item', template: `
911
+ <div
912
+ class="vertical-navigation-item-wrapper"
913
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
914
+ [ngClass]="item.classes?.wrapper">
915
+ <div
916
+ class="kit-navigation-item"
917
+ [ngClass]="{
918
+ 'kit-navigation-item-disabled': item.disabled,
919
+ 'kit-navigation-item-expanded': isExpanded,
920
+ }"
921
+ [matTooltip]="item.tooltip || ''"
922
+ role="button"
923
+ tabindex="0"
924
+ (click)="toggleCollapsable()"
925
+ (keydown.enter)="toggleCollapsable()"
926
+ (keydown.space)="$event.preventDefault(); toggleCollapsable()">
927
+ <navigation-item-content [item]="item" variant="vertical"></navigation-item-content>
928
+ <!-- State dot -->
929
+ <span class="kit-navigation-item-dot" aria-hidden="true"></span>
930
+ </div>
931
+ </div>
932
+
933
+ <!-- Children (with CSS transition instead of animation) -->
934
+ <div
935
+ class="kit-navigation-item-children"
936
+ [class.kit-navigation-item-children-expanded]="!isCollapsed"
937
+ [class.kit-navigation-item-children-collapsed]="isCollapsed">
938
+ @if (!isCollapsed) {
939
+ <navigation-tree-outlet
940
+ [items]="item.children"
941
+ [data]="treeTemplateData"
942
+ [branchTemplate]="branchItem"
943
+ [leafTemplate]="leafItem"
944
+ [groupTemplate]="groupItem"
945
+ [dividerTemplate]="dividerItem"
946
+ [spacerTemplate]="spacerItem"
947
+ [trackByFn]="treeTrackByFn"
948
+ [shouldRenderItemFn]="treeShouldRenderItemFn" />
949
+ }
950
+ </div>
951
+
952
+ <ng-template #branchItem let-child let-data="data">
953
+ @if (child.type === 'aside') {
954
+ <vertical-navigation-aside-item [item]="child" [autoCollapse]="data?.['autoCollapse'] === true">
955
+ </vertical-navigation-aside-item>
956
+ } @else {
957
+ <vertical-navigation-collapsable-item [item]="child" [autoCollapse]="data?.['autoCollapse'] !== false">
958
+ </vertical-navigation-collapsable-item>
959
+ }
960
+ </ng-template>
961
+
962
+ <ng-template #leafItem let-child>
963
+ <vertical-navigation-basic-item [item]="child"></vertical-navigation-basic-item>
964
+ </ng-template>
965
+
966
+ <ng-template #groupItem let-child let-data="data">
967
+ <div
968
+ class="vertical-navigation-item-wrapper"
969
+ [class.vertical-navigation-item-has-subtitle]="!!child.subtitle"
970
+ [ngClass]="child.classes?.wrapper">
971
+ <div class="kit-navigation-group-header">
972
+ <navigation-item-content [item]="child" variant="vertical-group"></navigation-item-content>
973
+ </div>
974
+ </div>
975
+ </ng-template>
976
+
977
+ <ng-template #dividerItem>
978
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
979
+ </ng-template>
980
+
981
+ <ng-template #spacerItem>
982
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
983
+ </ng-template>
984
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
985
+ NgClass,
986
+ MatTooltipModule,
987
+ NavigationItemContent,
988
+ NavigationTreeOutlet,
989
+ forwardRef(() => VerticalNavigationAsideItemComponent),
990
+ VerticalNavigationBasicItemComponent,
991
+ forwardRef(() => VerticalNavigationCollapsableItemComponent),
992
+ VerticalNavigationDividerItemComponent,
993
+ VerticalNavigationSpacerItemComponent,
994
+ ], host: {
995
+ '[class.vertical-navigation-item-collapsed]': 'isCollapsed',
996
+ '[class.vertical-navigation-item-expanded]': 'isExpanded',
997
+ }, styles: [".kit-navigation-item-dot{margin-left:auto;width:.5rem;height:.5rem;flex-shrink:0;border-radius:9999px;background:#9ca3af;opacity:.85;transition:background-color .18s ease,transform .18s ease,opacity .18s ease}.kit-navigation-item:hover .kit-navigation-item-dot{opacity:1}.kit-navigation-item.kit-navigation-item-expanded .kit-navigation-item-dot{background:#16a34a;opacity:1;transform:scale(1.1)}.kit-navigation-item-children{overflow:hidden;max-height:0;opacity:0;transition:max-height .3s cubic-bezier(.25,.8,.25,1),opacity .3s cubic-bezier(.25,.8,.25,1)}.kit-navigation-item-children-expanded{max-height:2000px;opacity:1}.kit-navigation-item-children-collapsed{max-height:0;opacity:0}\n"] }]
998
+ }], propDecorators: { autoCollapse: [{
999
+ type: Input
1000
+ }], item: [{
1001
+ type: Input
1002
+ }] } });
1003
+
1004
+ class VerticalNavigationAsideItemComponent {
1005
+ _changeDetectorRef = inject(ChangeDetectorRef);
1006
+ _navigationComponent = inject(VerticalNavigationBaseComponent);
1007
+ _router = inject(Router);
1008
+ activeItemId;
1009
+ autoCollapse = true;
1010
+ item;
1011
+ skipChildren = false;
1012
+ active = false;
1013
+ treeTrackByFn = trackNavigationTreeItem;
1014
+ treeShouldRenderItemFn = shouldRenderNavigationItem;
1015
+ _unsubscribeAll = new Subject();
1016
+ /**
1017
+ * On changes
1018
+ */
1019
+ ngOnChanges(changes) {
1020
+ // Active item id
1021
+ if ('activeItemId' in changes) {
1022
+ // Mark if active
1023
+ this._markIfActive();
1024
+ }
1025
+ }
1026
+ /**
1027
+ * On init
1028
+ */
1029
+ ngOnInit() {
1030
+ // Mark if active
1031
+ this._markIfActive();
1032
+ // Attach a listener to the NavigationEnd event
1033
+ this._router.events
1034
+ .pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
1035
+ .subscribe(() => {
1036
+ // Mark if active
1037
+ this._markIfActive();
1038
+ });
1039
+ // Subscribe to onRefreshed on the navigation component
1040
+ this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {
1041
+ // Mark for check
1042
+ this._changeDetectorRef.markForCheck();
1043
+ });
1044
+ }
1045
+ /**
1046
+ * On destroy
1047
+ */
1048
+ ngOnDestroy() {
1049
+ // Unsubscribe from all subscriptions
1050
+ this._unsubscribeAll.next();
1051
+ this._unsubscribeAll.complete();
1052
+ }
1053
+ /**
1054
+ * Track by function for ngFor loops
1055
+ */
1056
+ trackByFn(index, item) {
1057
+ return trackNavigationTreeItem(index, item);
1058
+ }
1059
+ shouldRenderItem(item) {
1060
+ return shouldRenderNavigationItem(item);
1061
+ }
1062
+ get treeTemplateData() {
1063
+ return { autoCollapse: this.autoCollapse };
1064
+ }
1065
+ /**
1066
+ * Check if the given item has the given url in one of its children
1067
+ */
1068
+ _hasActiveChild(item) {
1069
+ return hasActiveNavigationDescendant(item, (child) => child.type === 'basic' && !!child.link && this._router.isActive(child.link, child.exactMatch || false));
1070
+ }
1071
+ /**
1072
+ * Decide and mark if the item is active
1073
+ */
1074
+ _markIfActive() {
1075
+ // Check if the activeItemId is equals to this item id
1076
+ this.active = this.activeItemId === this.item.id;
1077
+ // If the aside has a children that is active, always mark it as active
1078
+ if (this._hasActiveChild(this.item)) {
1079
+ this.active = true;
1080
+ }
1081
+ // Mark for check
1082
+ this._changeDetectorRef.markForCheck();
1083
+ }
1084
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationAsideItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1085
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: VerticalNavigationAsideItemComponent, isStandalone: true, selector: "vertical-navigation-aside-item", inputs: { activeItemId: "activeItemId", autoCollapse: "autoCollapse", item: "item", skipChildren: "skipChildren" }, usesOnChanges: true, ngImport: i0, template: `
1086
+ <div
1087
+ class="vertical-navigation-item-wrapper"
1088
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
1089
+ [ngClass]="item.classes?.wrapper">
1090
+ <div
1091
+ class="kit-navigation-item"
1092
+ [ngClass]="{
1093
+ 'kit-navigation-item-active': active,
1094
+ 'kit-navigation-item-disabled': item.disabled,
1095
+ 'kit-navigation-item-active-forced': item.active,
1096
+ }"
1097
+ [matTooltip]="item.tooltip || ''">
1098
+ <navigation-item-content [item]="item" variant="vertical"></navigation-item-content>
1099
+ </div>
1100
+ </div>
1101
+
1102
+ <!-- Children -->
1103
+ @if (!skipChildren) {
1104
+ <div class="kit-navigation-item-children">
1105
+ <navigation-tree-outlet
1106
+ [items]="item.children"
1107
+ [data]="treeTemplateData"
1108
+ [branchTemplate]="branchItem"
1109
+ [leafTemplate]="leafItem"
1110
+ [groupTemplate]="groupItem"
1111
+ [dividerTemplate]="dividerItem"
1112
+ [spacerTemplate]="spacerItem"
1113
+ [trackByFn]="treeTrackByFn"
1114
+ [shouldRenderItemFn]="treeShouldRenderItemFn" />
1115
+ </div>
1116
+ }
1117
+
1118
+ <ng-template #branchItem let-child let-data="data">
1119
+ @if (child.type === 'aside') {
1120
+ <vertical-navigation-aside-item [item]="child" [autoCollapse]="data?.['autoCollapse'] === true">
1121
+ </vertical-navigation-aside-item>
1122
+ } @else {
1123
+ <vertical-navigation-collapsable-item [item]="child" [autoCollapse]="data?.['autoCollapse'] !== false">
1124
+ </vertical-navigation-collapsable-item>
1125
+ }
1126
+ </ng-template>
1127
+
1128
+ <ng-template #leafItem let-child>
1129
+ <vertical-navigation-basic-item [item]="child"></vertical-navigation-basic-item>
1130
+ </ng-template>
1131
+
1132
+ <ng-template #groupItem let-child>
1133
+ <div
1134
+ class="vertical-navigation-item-wrapper"
1135
+ [class.vertical-navigation-item-has-subtitle]="!!child.subtitle"
1136
+ [ngClass]="child.classes?.wrapper">
1137
+ <div class="kit-navigation-group-header">
1138
+ <navigation-item-content [item]="child" variant="vertical-group"></navigation-item-content>
1139
+ </div>
1140
+ </div>
1141
+ </ng-template>
1142
+
1143
+ <ng-template #dividerItem>
1144
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
1145
+ </ng-template>
1146
+
1147
+ <ng-template #spacerItem>
1148
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
1149
+ </ng-template>
1150
+ `, isInline: true, dependencies: [{ kind: "component", type: i0.forwardRef(() => VerticalNavigationAsideItemComponent), selector: "vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "skipChildren"] }, { kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatTooltipModule) }, { kind: "directive", type: i0.forwardRef(() => i1.MatTooltip), selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i0.forwardRef(() => NavigationItemContent), selector: "navigation-item-content", inputs: ["item", "level", "variant"] }, { kind: "component", type: i0.forwardRef(() => NavigationTreeOutlet), selector: "navigation-tree-outlet", inputs: ["items", "level", "parentKey", "data", "branchTemplate", "leafTemplate", "groupTemplate", "dividerTemplate", "spacerTemplate", "trackByFn", "shouldRenderItemFn", "hasChildrenFn", "resolveParentKeyFn"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationBasicItemComponent), selector: "vertical-navigation-basic-item", inputs: ["item"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationCollapsableItemComponent), selector: "vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationDividerItemComponent), selector: "vertical-navigation-divider-item" }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationSpacerItemComponent), selector: "vertical-navigation-spacer-item" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1151
+ }
1152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationAsideItemComponent, decorators: [{
1153
+ type: Component,
1154
+ args: [{
1155
+ selector: 'vertical-navigation-aside-item',
1156
+ template: `
1157
+ <div
1158
+ class="vertical-navigation-item-wrapper"
1159
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
1160
+ [ngClass]="item.classes?.wrapper">
1161
+ <div
1162
+ class="kit-navigation-item"
1163
+ [ngClass]="{
1164
+ 'kit-navigation-item-active': active,
1165
+ 'kit-navigation-item-disabled': item.disabled,
1166
+ 'kit-navigation-item-active-forced': item.active,
1167
+ }"
1168
+ [matTooltip]="item.tooltip || ''">
1169
+ <navigation-item-content [item]="item" variant="vertical"></navigation-item-content>
1170
+ </div>
1171
+ </div>
1172
+
1173
+ <!-- Children -->
1174
+ @if (!skipChildren) {
1175
+ <div class="kit-navigation-item-children">
1176
+ <navigation-tree-outlet
1177
+ [items]="item.children"
1178
+ [data]="treeTemplateData"
1179
+ [branchTemplate]="branchItem"
1180
+ [leafTemplate]="leafItem"
1181
+ [groupTemplate]="groupItem"
1182
+ [dividerTemplate]="dividerItem"
1183
+ [spacerTemplate]="spacerItem"
1184
+ [trackByFn]="treeTrackByFn"
1185
+ [shouldRenderItemFn]="treeShouldRenderItemFn" />
1186
+ </div>
1187
+ }
1188
+
1189
+ <ng-template #branchItem let-child let-data="data">
1190
+ @if (child.type === 'aside') {
1191
+ <vertical-navigation-aside-item [item]="child" [autoCollapse]="data?.['autoCollapse'] === true">
1192
+ </vertical-navigation-aside-item>
1193
+ } @else {
1194
+ <vertical-navigation-collapsable-item [item]="child" [autoCollapse]="data?.['autoCollapse'] !== false">
1195
+ </vertical-navigation-collapsable-item>
1196
+ }
1197
+ </ng-template>
1198
+
1199
+ <ng-template #leafItem let-child>
1200
+ <vertical-navigation-basic-item [item]="child"></vertical-navigation-basic-item>
1201
+ </ng-template>
1202
+
1203
+ <ng-template #groupItem let-child>
1204
+ <div
1205
+ class="vertical-navigation-item-wrapper"
1206
+ [class.vertical-navigation-item-has-subtitle]="!!child.subtitle"
1207
+ [ngClass]="child.classes?.wrapper">
1208
+ <div class="kit-navigation-group-header">
1209
+ <navigation-item-content [item]="child" variant="vertical-group"></navigation-item-content>
1210
+ </div>
1211
+ </div>
1212
+ </ng-template>
1213
+
1214
+ <ng-template #dividerItem>
1215
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
1216
+ </ng-template>
1217
+
1218
+ <ng-template #spacerItem>
1219
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
1220
+ </ng-template>
1221
+ `,
1222
+ encapsulation: ViewEncapsulation.None,
1223
+ changeDetection: ChangeDetectionStrategy.OnPush,
1224
+ imports: [
1225
+ NgClass,
1226
+ MatTooltipModule,
1227
+ NavigationItemContent,
1228
+ NavigationTreeOutlet,
1229
+ VerticalNavigationBasicItemComponent,
1230
+ forwardRef(() => VerticalNavigationCollapsableItemComponent),
1231
+ VerticalNavigationDividerItemComponent,
1232
+ VerticalNavigationSpacerItemComponent,
1233
+ ],
1234
+ }]
1235
+ }], propDecorators: { activeItemId: [{
1236
+ type: Input
1237
+ }], autoCollapse: [{
1238
+ type: Input
1239
+ }], item: [{
1240
+ type: Input
1241
+ }], skipChildren: [{
1242
+ type: Input
1243
+ }] } });
1244
+
1245
+ class VerticalNavigationGroupItemComponent {
1246
+ _changeDetectorRef = inject(ChangeDetectorRef);
1247
+ _navigationComponent = inject(VerticalNavigationBaseComponent);
1248
+ autoCollapse = true;
1249
+ item;
1250
+ _unsubscribeAll = new Subject();
1251
+ treeTrackByFn = trackNavigationTreeItem;
1252
+ treeShouldRenderItemFn = shouldRenderNavigationItem;
1253
+ /**
1254
+ * On init
1255
+ */
1256
+ ngOnInit() {
1257
+ // Subscribe to onRefreshed on the navigation component
1258
+ this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {
1259
+ // Mark for check
1260
+ this._changeDetectorRef.markForCheck();
1261
+ });
1262
+ }
1263
+ /**
1264
+ * On destroy
1265
+ */
1266
+ ngOnDestroy() {
1267
+ // Unsubscribe from all subscriptions
1268
+ this._unsubscribeAll.next();
1269
+ this._unsubscribeAll.complete();
1270
+ }
1271
+ /**
1272
+ * Track by function for ngFor loops
1273
+ */
1274
+ trackByFn(index, item) {
1275
+ return trackNavigationTreeItem(index, item);
1276
+ }
1277
+ shouldRenderItem(item) {
1278
+ return shouldRenderNavigationItem(item);
1279
+ }
1280
+ get treeTemplateData() {
1281
+ return { autoCollapse: this.autoCollapse };
1282
+ }
1283
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationGroupItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1284
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: VerticalNavigationGroupItemComponent, isStandalone: true, selector: "vertical-navigation-group-item", inputs: { autoCollapse: "autoCollapse", item: "item" }, ngImport: i0, template: `
1285
+ <!-- Item wrapper -->
1286
+ <div
1287
+ class="vertical-navigation-item-wrapper"
1288
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
1289
+ [ngClass]="item.classes?.wrapper">
1290
+ <div class="kit-navigation-group-header">
1291
+ <navigation-item-content [item]="item" variant="vertical-group"></navigation-item-content>
1292
+ </div>
1293
+ </div>
1294
+
1295
+ <navigation-tree-outlet
1296
+ [items]="item.children"
1297
+ [data]="treeTemplateData"
1298
+ [branchTemplate]="branchItem"
1299
+ [leafTemplate]="leafItem"
1300
+ [groupTemplate]="groupItem"
1301
+ [dividerTemplate]="dividerItem"
1302
+ [spacerTemplate]="spacerItem"
1303
+ [trackByFn]="treeTrackByFn"
1304
+ [shouldRenderItemFn]="treeShouldRenderItemFn" />
1305
+
1306
+ <ng-template #branchItem let-child let-data="data">
1307
+ @if (child.type === 'aside') {
1308
+ <vertical-navigation-aside-item [item]="child" [autoCollapse]="data?.['autoCollapse'] === true">
1309
+ </vertical-navigation-aside-item>
1310
+ } @else {
1311
+ <vertical-navigation-collapsable-item [item]="child" [autoCollapse]="data?.['autoCollapse'] !== false">
1312
+ </vertical-navigation-collapsable-item>
1313
+ }
1314
+ </ng-template>
1315
+
1316
+ <ng-template #leafItem let-child>
1317
+ <vertical-navigation-basic-item [item]="child"></vertical-navigation-basic-item>
1318
+ </ng-template>
1319
+
1320
+ <ng-template #groupItem let-child>
1321
+ <div
1322
+ class="vertical-navigation-item-wrapper"
1323
+ [class.vertical-navigation-item-has-subtitle]="!!child.subtitle"
1324
+ [ngClass]="child.classes?.wrapper">
1325
+ <div class="kit-navigation-group-header">
1326
+ <navigation-item-content [item]="child" variant="vertical-group"></navigation-item-content>
1327
+ </div>
1328
+ </div>
1329
+ </ng-template>
1330
+
1331
+ <ng-template #dividerItem>
1332
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
1333
+ </ng-template>
1334
+
1335
+ <ng-template #spacerItem>
1336
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
1337
+ </ng-template>
1338
+ `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i0.forwardRef(() => NavigationItemContent), selector: "navigation-item-content", inputs: ["item", "level", "variant"] }, { kind: "component", type: i0.forwardRef(() => NavigationTreeOutlet), selector: "navigation-tree-outlet", inputs: ["items", "level", "parentKey", "data", "branchTemplate", "leafTemplate", "groupTemplate", "dividerTemplate", "spacerTemplate", "trackByFn", "shouldRenderItemFn", "hasChildrenFn", "resolveParentKeyFn"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationAsideItemComponent), selector: "vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "skipChildren"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationBasicItemComponent), selector: "vertical-navigation-basic-item", inputs: ["item"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationCollapsableItemComponent), selector: "vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item"] }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationDividerItemComponent), selector: "vertical-navigation-divider-item" }, { kind: "component", type: i0.forwardRef(() => VerticalNavigationSpacerItemComponent), selector: "vertical-navigation-spacer-item" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1339
+ }
1340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationGroupItemComponent, decorators: [{
1341
+ type: Component,
1342
+ args: [{
1343
+ selector: 'vertical-navigation-group-item',
1344
+ template: `
1345
+ <!-- Item wrapper -->
1346
+ <div
1347
+ class="vertical-navigation-item-wrapper"
1348
+ [class.vertical-navigation-item-has-subtitle]="!!item.subtitle"
1349
+ [ngClass]="item.classes?.wrapper">
1350
+ <div class="kit-navigation-group-header">
1351
+ <navigation-item-content [item]="item" variant="vertical-group"></navigation-item-content>
1352
+ </div>
1353
+ </div>
1354
+
1355
+ <navigation-tree-outlet
1356
+ [items]="item.children"
1357
+ [data]="treeTemplateData"
1358
+ [branchTemplate]="branchItem"
1359
+ [leafTemplate]="leafItem"
1360
+ [groupTemplate]="groupItem"
1361
+ [dividerTemplate]="dividerItem"
1362
+ [spacerTemplate]="spacerItem"
1363
+ [trackByFn]="treeTrackByFn"
1364
+ [shouldRenderItemFn]="treeShouldRenderItemFn" />
1365
+
1366
+ <ng-template #branchItem let-child let-data="data">
1367
+ @if (child.type === 'aside') {
1368
+ <vertical-navigation-aside-item [item]="child" [autoCollapse]="data?.['autoCollapse'] === true">
1369
+ </vertical-navigation-aside-item>
1370
+ } @else {
1371
+ <vertical-navigation-collapsable-item [item]="child" [autoCollapse]="data?.['autoCollapse'] !== false">
1372
+ </vertical-navigation-collapsable-item>
1373
+ }
1374
+ </ng-template>
1375
+
1376
+ <ng-template #leafItem let-child>
1377
+ <vertical-navigation-basic-item [item]="child"></vertical-navigation-basic-item>
1378
+ </ng-template>
1379
+
1380
+ <ng-template #groupItem let-child>
1381
+ <div
1382
+ class="vertical-navigation-item-wrapper"
1383
+ [class.vertical-navigation-item-has-subtitle]="!!child.subtitle"
1384
+ [ngClass]="child.classes?.wrapper">
1385
+ <div class="kit-navigation-group-header">
1386
+ <navigation-item-content [item]="child" variant="vertical-group"></navigation-item-content>
1387
+ </div>
1388
+ </div>
1389
+ </ng-template>
1390
+
1391
+ <ng-template #dividerItem>
1392
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
1393
+ </ng-template>
1394
+
1395
+ <ng-template #spacerItem>
1396
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
1397
+ </ng-template>
1398
+ `,
1399
+ encapsulation: ViewEncapsulation.None,
1400
+ changeDetection: ChangeDetectionStrategy.OnPush,
1401
+ imports: [
1402
+ NgClass,
1403
+ NavigationItemContent,
1404
+ NavigationTreeOutlet,
1405
+ forwardRef(() => VerticalNavigationAsideItemComponent),
1406
+ VerticalNavigationBasicItemComponent,
1407
+ forwardRef(() => VerticalNavigationCollapsableItemComponent),
1408
+ VerticalNavigationDividerItemComponent,
1409
+ VerticalNavigationSpacerItemComponent,
1410
+ ],
1411
+ }]
1412
+ }], propDecorators: { autoCollapse: [{
1413
+ type: Input
1414
+ }], item: [{
1415
+ type: Input
1416
+ }] } });
1417
+
1418
+ const VERTICAL_NAVIGATION_TEMPLATE = `
1419
+ <div class="vertical-navigation-wrapper">
1420
+ <div class="vertical-navigation-header">
1421
+ <ng-content select="[verticalNavigationHeader]"></ng-content>
1422
+ </div>
1423
+
1424
+ <div class="vertical-navigation-content" #navigationContent>
1425
+ <div class="vertical-navigation-content-header">
1426
+ <ng-content select="[verticalNavigationContentHeader]"></ng-content>
1427
+ </div>
1428
+
1429
+ @for (item of navigation; track trackByFn($index, item)) {
1430
+ @if (shouldRenderItem(item)) {
1431
+ @switch (item.type) {
1432
+ @case ('aside') {
1433
+ <vertical-navigation-aside-item
1434
+ [item]="item"
1435
+ [activeItemId]="activeAsideItemId"
1436
+ [autoCollapse]="autoCollapse"
1437
+ [skipChildren]="true"
1438
+ (click)="toggleAside(item)"
1439
+ >
1440
+ </vertical-navigation-aside-item>
1441
+ }
1442
+
1443
+ @case ('basic') {
1444
+ <vertical-navigation-basic-item [item]="item">
1445
+ </vertical-navigation-basic-item>
1446
+ }
1447
+
1448
+ @case ('collapsable') {
1449
+ <vertical-navigation-collapsable-item
1450
+ [item]="item"
1451
+ [autoCollapse]="autoCollapse"
1452
+ >
1453
+ </vertical-navigation-collapsable-item>
1454
+ }
1455
+
1456
+ @case ('divider') {
1457
+ <vertical-navigation-divider-item></vertical-navigation-divider-item>
1458
+ }
1459
+
1460
+ @case ('group') {
1461
+ <vertical-navigation-group-item
1462
+ [item]="item"
1463
+ [autoCollapse]="autoCollapse"
1464
+ >
1465
+ </vertical-navigation-group-item>
1466
+ }
1467
+
1468
+ @case ('spacer') {
1469
+ <vertical-navigation-spacer-item></vertical-navigation-spacer-item>
1470
+ }
1471
+ }
1472
+ }
1473
+ }
1474
+
1475
+ <div class="vertical-navigation-content-footer">
1476
+ <ng-content select="[verticalNavigationContentFooter]"></ng-content>
1477
+ </div>
1478
+ </div>
1479
+
1480
+ <div class="vertical-navigation-footer">
1481
+ <ng-content select="[verticalNavigationFooter]"></ng-content>
1482
+ </div>
1483
+ </div>
1484
+
1485
+ @if (activeAsideNavigationItem(); as activeAsideItem) {
1486
+ <div [class]="asideWrapperClass">
1487
+ <vertical-navigation-aside-item
1488
+ [item]="activeAsideItem"
1489
+ [autoCollapse]="autoCollapse"
1490
+ >
1491
+ </vertical-navigation-aside-item>
1492
+ </div>
1493
+ }
1494
+ `;
1495
+ const VERTICAL_NAVIGATION_IMPORTS = [
1496
+ VerticalNavigationAsideItemComponent,
1497
+ VerticalNavigationBasicItemComponent,
1498
+ VerticalNavigationCollapsableItemComponent,
1499
+ VerticalNavigationDividerItemComponent,
1500
+ VerticalNavigationGroupItemComponent,
1501
+ VerticalNavigationSpacerItemComponent,
1502
+ ];
1503
+ const VERTICAL_NAVIGATION_HOST = {
1504
+ '[class]': 'hostClasses',
1505
+ '[style.visibility]': 'opened ? "visible" : "hidden"',
1506
+ '(mouseenter)': 'onMouseenter()',
1507
+ '(mouseleave)': 'onMouseleave()',
1508
+ };
1509
+ function provideVerticalNavigationComponent(component) {
1510
+ return {
1511
+ provide: VerticalNavigationBaseComponent,
1512
+ useExisting: forwardRef(() => component),
1513
+ };
1514
+ }
1515
+
1516
+ class VerticalNavigationDefaultComponent extends VerticalNavigationBaseComponent {
1517
+ _componentPrefix = 'vertical-navigation';
1518
+ _asideWrapperClass = 'vertical-navigation-aside-wrapper';
1519
+ appearance = 'default';
1520
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationDefaultComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1521
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: VerticalNavigationDefaultComponent, isStandalone: true, selector: "vertical-navigation", inputs: { appearance: "appearance" }, host: { listeners: { "mouseenter": "onMouseenter()", "mouseleave": "onMouseleave()" }, properties: { "class": "hostClasses", "style.visibility": "opened ? \"visible\" : \"hidden\"" } }, providers: [provideVerticalNavigationComponent(VerticalNavigationDefaultComponent)], exportAs: ["verticalNavigationDefault"], usesInheritance: true, ngImport: i0, template: "\n <div class=\"vertical-navigation-wrapper\">\n <div class=\"vertical-navigation-header\">\n <ng-content select=\"[verticalNavigationHeader]\"></ng-content>\n </div>\n\n <div class=\"vertical-navigation-content\" #navigationContent>\n <div class=\"vertical-navigation-content-header\">\n <ng-content select=\"[verticalNavigationContentHeader]\"></ng-content>\n </div>\n\n @for (item of navigation; track trackByFn($index, item)) {\n @if (shouldRenderItem(item)) {\n @switch (item.type) {\n @case ('aside') {\n <vertical-navigation-aside-item\n [item]=\"item\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n (click)=\"toggleAside(item)\"\n >\n </vertical-navigation-aside-item>\n }\n\n @case ('basic') {\n <vertical-navigation-basic-item [item]=\"item\">\n </vertical-navigation-basic-item>\n }\n\n @case ('collapsable') {\n <vertical-navigation-collapsable-item\n [item]=\"item\"\n [autoCollapse]=\"autoCollapse\"\n >\n </vertical-navigation-collapsable-item>\n }\n\n @case ('divider') {\n <vertical-navigation-divider-item></vertical-navigation-divider-item>\n }\n\n @case ('group') {\n <vertical-navigation-group-item\n [item]=\"item\"\n [autoCollapse]=\"autoCollapse\"\n >\n </vertical-navigation-group-item>\n }\n\n @case ('spacer') {\n <vertical-navigation-spacer-item></vertical-navigation-spacer-item>\n }\n }\n }\n }\n\n <div class=\"vertical-navigation-content-footer\">\n <ng-content select=\"[verticalNavigationContentFooter]\"></ng-content>\n </div>\n </div>\n\n <div class=\"vertical-navigation-footer\">\n <ng-content select=\"[verticalNavigationFooter]\"></ng-content>\n </div>\n </div>\n\n @if (activeAsideNavigationItem(); as activeAsideItem) {\n <div [class]=\"asideWrapperClass\">\n <vertical-navigation-aside-item\n [item]=\"activeAsideItem\"\n [autoCollapse]=\"autoCollapse\"\n >\n </vertical-navigation-aside-item>\n </div>\n }\n", isInline: true, styles: [":root{--vertical-navigation-width: 280px}vertical-navigation{position:sticky;display:flex;flex-direction:column;flex:1 0 auto;top:0;width:var(--vertical-navigation-width);min-width:var(--vertical-navigation-width);max-width:var(--vertical-navigation-width);height:100%;min-height:0;max-height:100%;z-index:200}vertical-navigation.vertical-navigation-animations-enabled{transition-duration:.4s;transition-timing-function:cubic-bezier(.25,.8,.25,1);transition-property:visibility,margin-left,margin-right,transform,width,max-width,min-width}vertical-navigation.vertical-navigation-animations-enabled .vertical-navigation-wrapper{transition-duration:.4s;transition-timing-function:cubic-bezier(.25,.8,.25,1);transition-property:width,max-width,min-width}vertical-navigation.vertical-navigation-mode-over{position:fixed;top:0;bottom:0;height:100vh;min-height:100vh;max-height:100vh}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-side{margin-left:calc(var(--vertical-navigation-width) * -1)}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-side.vertical-navigation-opened{margin-left:0}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-over{left:0;transform:translate3d(-100%,0,0)}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-over.vertical-navigation-opened{transform:translateZ(0)}vertical-navigation.vertical-navigation-position-left .vertical-navigation-wrapper{left:0}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-side{margin-right:calc(var(--vertical-navigation-width) * -1)}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-side.vertical-navigation-opened{margin-right:0}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-over{right:0;transform:translate3d(100%,0,0)}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-over.vertical-navigation-opened{transform:translateZ(0)}vertical-navigation.vertical-navigation-position-right .vertical-navigation-wrapper{right:0}vertical-navigation.vertical-navigation-inner{position:relative;width:auto;min-width:0;max-width:none;height:auto;min-height:0;max-height:none;box-shadow:none}vertical-navigation.vertical-navigation-inner .vertical-navigation-wrapper{position:relative;overflow:visible;height:auto}vertical-navigation.vertical-navigation-inner .vertical-navigation-wrapper .vertical-navigation-content{overflow:visible!important}.vertical-navigation-wrapper{display:flex;flex-direction:column;width:100%;height:100%;z-index:10;background:var(--background)}.vertical-navigation-header{flex:0 0 auto;background:var(--background);z-index:11}.vertical-navigation-content{flex:1 1 0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;min-height:0}.vertical-navigation-content>vertical-navigation-divider-item{margin:24px 0}.vertical-navigation-footer{flex:0 0 auto;background:var(--background);z-index:11}.vertical-navigation-aside-wrapper{position:absolute;display:flex;flex:1 1 auto;flex-direction:column;top:0;bottom:0;left:var(--vertical-navigation-width);width:var(--vertical-navigation-width);height:100%;z-index:5;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;transition-duration:.4s;transition-property:left,right;transition-timing-function:cubic-bezier(.25,.8,.25,1);background:var(--background)}.vertical-navigation-aside-wrapper>vertical-navigation-aside-item{padding:24px 0}.vertical-navigation-aside-wrapper>vertical-navigation-aside-item>.vertical-navigation-item-wrapper{display:none!important}vertical-navigation.vertical-navigation-position-right .vertical-navigation-aside-wrapper{left:auto;right:var(--vertical-navigation-width)}vertical-navigation-aside-item,vertical-navigation-basic-item,vertical-navigation-collapsable-item,vertical-navigation-divider-item,vertical-navigation-spacer-item{display:flex;flex-direction:column;flex:1 0 auto;-webkit-user-select:none;user-select:none}vertical-navigation-group-item{display:block;-webkit-user-select:none;user-select:none}.kit-navigation-item,.kit-navigation-group-header{font-family:var(--nav-font-family)}vertical-navigation-aside-item .vertical-navigation-item-wrapper .kit-navigation-item,vertical-navigation-basic-item .vertical-navigation-item-wrapper .kit-navigation-item,vertical-navigation-collapsable-item .vertical-navigation-item-wrapper .kit-navigation-item,vertical-navigation-group-item .vertical-navigation-item-wrapper .kit-navigation-item{position:relative;display:flex;align-items:center;justify-content:flex-start;padding:10px 16px;font-size:var(--nav-item-font-size);font-weight:var(--nav-item-font-weight);line-height:var(--nav-item-line-height);text-decoration:none;border-radius:6px;color:var(--foreground)}.kit-navigation-item.kit-navigation-item-disabled{cursor:default;opacity:.4}.kit-navigation-item-icon{margin-right:8px;opacity:.6;color:currentColor}.kit-navigation-item-subtitle{font-size:var(--nav-subtitle-font-size);font-weight:var(--nav-subtitle-font-weight);line-height:var(--nav-subtitle-line-height);opacity:.5;color:currentColor}.kit-navigation-item-badge{margin-left:auto}.kit-navigation-item-badge-content{display:flex;align-items:center;justify-content:center;font-size:var(--nav-badge-font-size);font-weight:var(--nav-badge-font-weight);line-height:var(--nav-badge-line-height);white-space:nowrap;height:20px}vertical-navigation-aside-item>.vertical-navigation-item-wrapper,vertical-navigation-basic-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper{margin-bottom:-2px}vertical-navigation-aside-item .kit-navigation-item,vertical-navigation-basic-item .kit-navigation-item,vertical-navigation-collapsable-item .kit-navigation-item{cursor:pointer}vertical-navigation-aside-item .kit-navigation-item:not(.kit-navigation-item-active-forced):not(.kit-navigation-item-active):not(.kit-navigation-item-disabled):hover,vertical-navigation-basic-item .kit-navigation-item:not(.kit-navigation-item-active-forced):not(.kit-navigation-item-active):not(.kit-navigation-item-disabled):hover,vertical-navigation-collapsable-item .kit-navigation-item:not(.kit-navigation-item-active-forced):not(.kit-navigation-item-active):not(.kit-navigation-item-disabled):hover{background-color:color-mix(in oklch,var(--accent) 10%,transparent)}vertical-navigation-aside-item .kit-navigation-item:hover .kit-navigation-item-icon,vertical-navigation-basic-item .kit-navigation-item:hover .kit-navigation-item-icon,vertical-navigation-collapsable-item .kit-navigation-item:hover .kit-navigation-item-icon{opacity:1}vertical-navigation-aside-item .kit-navigation-item:hover .kit-navigation-item-title,vertical-navigation-basic-item .kit-navigation-item:hover .kit-navigation-item-title,vertical-navigation-collapsable-item .kit-navigation-item:hover .kit-navigation-item-title{opacity:1}vertical-navigation-aside-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active,vertical-navigation-aside-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active-forced,vertical-navigation-basic-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active,vertical-navigation-basic-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active-forced,vertical-navigation-collapsable-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active,vertical-navigation-collapsable-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active-forced{color:var(--primary);font-weight:var(--nav-item-active-font-weight)}vertical-navigation-aside-item .kit-navigation-item-active .kit-navigation-item-icon,vertical-navigation-basic-item .kit-navigation-item-active .kit-navigation-item-icon,vertical-navigation-collapsable-item .kit-navigation-item-active .kit-navigation-item-icon{opacity:1}vertical-navigation-aside-item .kit-navigation-item-active .kit-navigation-item-title,vertical-navigation-basic-item .kit-navigation-item-active .kit-navigation-item-title,vertical-navigation-collapsable-item .kit-navigation-item-active .kit-navigation-item-title{opacity:1}vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper .kit-navigation-item .kit-navigation-item-badge+.kit-navigation-item-dot{margin-left:8px}vertical-navigation-collapsable-item.vertical-navigation-item-expanded>.vertical-navigation-item-wrapper .kit-navigation-item .kit-navigation-item-icon,vertical-navigation-collapsable-item.vertical-navigation-item-expanded>.vertical-navigation-item-wrapper .kit-navigation-item .kit-navigation-item-title{opacity:1}vertical-navigation-collapsable-item>.kit-navigation-item-children>*:first-child,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>*:first-child{margin-top:6px}vertical-navigation-collapsable-item>.kit-navigation-item-children>*:last-child,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>*:last-child{margin-bottom:6px!important}vertical-navigation-collapsable-item>.kit-navigation-item-children .kit-navigation-item{padding:10px 16px}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item .kit-navigation-item-icon{display:none}vertical-navigation-collapsable-item .kit-navigation-item-children{position:relative}vertical-navigation-collapsable-item>.kit-navigation-item-children{margin-left:28px!important;padding-left:20px!important;position:relative!important;padding-bottom:0!important}vertical-navigation-collapsable-item>.kit-navigation-item-children:before{content:\"\"!important;position:absolute!important;left:0!important;top:0!important;height:calc(100% - 26px)!important;width:1px!important;background:repeating-linear-gradient(to bottom,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:1!important;border-radius:0!important}vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-basic-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-basic-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper{position:relative}vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before{content:\"\"!important;position:absolute!important;left:-22px!important;top:50%!important;transform:translateY(-.5px)!important;width:22px!important;height:1px!important;background:repeating-linear-gradient(to right,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:2!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children{margin-left:10px!important;padding-left:15px!important;padding-bottom:0!important;position:relative!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children:before{content:\"\"!important;position:absolute!important;left:0!important;top:0!important;height:calc(100% - 26px)!important;width:1px!important;background:repeating-linear-gradient(to bottom,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:1!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>*:last-child,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>navigation-tree-outlet>*:last-child{margin-bottom:6px!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before{content:\"\"!important;position:absolute!important;left:-17px!important;top:50%!important;transform:translateY(-.5px)!important;width:17px!important;height:1px!important;background:repeating-linear-gradient(to right,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:2!important}vertical-navigation-collapsable-item .kit-navigation-item-children{overflow:visible!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item{padding-left:8px!important;margin:0!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item{padding-left:72px}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item{padding-left:88px}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item{padding-left:104px}vertical-navigation-divider-item{margin:12px 0}vertical-navigation-group-item{position:relative;margin-top:24px}vertical-navigation-group-item:first-of-type{margin-top:0}vertical-navigation-group-item>.vertical-navigation-item-wrapper{position:relative}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;padding:16px;margin:0;max-height:49px;background:var(--background)}vertical-navigation-group-item>.vertical-navigation-item-wrapper>vertical-navigation-basic-item:first-of-type,vertical-navigation-group-item>.vertical-navigation-item-wrapper>vertical-navigation-collapsable-item:first-of-type{margin-top:12px}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-item-title-wrapper{flex:1}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-item-badge,vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-item-icon{display:none!important}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-group-title{font-size:var(--nav-group-title-font-size);font-weight:var(--nav-group-title-font-weight);letter-spacing:var(--nav-group-title-letter-spacing);text-transform:uppercase;color:var(--primary);opacity:1;line-height:var(--nav-group-title-line-height)}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-group-subtitle{font-size:var(--nav-group-subtitle-font-size);font-weight:var(--nav-group-subtitle-font-weight);line-height:var(--nav-group-subtitle-line-height);color:var(--muted-foreground);opacity:.7;text-transform:none;letter-spacing:normal;margin-top:0}vertical-navigation-spacer-item{margin:6px 0}.vertical-navigation-overlay{position:absolute;inset:0;z-index:170;opacity:0;background-color:#0009;transition:opacity .3s cubic-bezier(.25,.8,.25,1)}.vertical-navigation-overlay+.vertical-navigation-aside-overlay{background-color:transparent}.vertical-navigation-aside-overlay{position:absolute;inset:0;z-index:169;opacity:0;background-color:#0000004d;transition:opacity .3s cubic-bezier(.25,.8,.25,1)}\n"], dependencies: [{ kind: "component", type: VerticalNavigationAsideItemComponent, selector: "vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "skipChildren"] }, { kind: "component", type: VerticalNavigationBasicItemComponent, selector: "vertical-navigation-basic-item", inputs: ["item"] }, { kind: "component", type: VerticalNavigationCollapsableItemComponent, selector: "vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item"] }, { kind: "component", type: VerticalNavigationDividerItemComponent, selector: "vertical-navigation-divider-item" }, { kind: "component", type: VerticalNavigationGroupItemComponent, selector: "vertical-navigation-group-item", inputs: ["autoCollapse", "item"] }, { kind: "component", type: VerticalNavigationSpacerItemComponent, selector: "vertical-navigation-spacer-item" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1522
+ }
1523
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationDefaultComponent, decorators: [{
1524
+ type: Component,
1525
+ args: [{ selector: 'vertical-navigation', template: VERTICAL_NAVIGATION_TEMPLATE, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'verticalNavigationDefault', imports: VERTICAL_NAVIGATION_IMPORTS, host: VERTICAL_NAVIGATION_HOST, providers: [provideVerticalNavigationComponent(VerticalNavigationDefaultComponent)], styles: [":root{--vertical-navigation-width: 280px}vertical-navigation{position:sticky;display:flex;flex-direction:column;flex:1 0 auto;top:0;width:var(--vertical-navigation-width);min-width:var(--vertical-navigation-width);max-width:var(--vertical-navigation-width);height:100%;min-height:0;max-height:100%;z-index:200}vertical-navigation.vertical-navigation-animations-enabled{transition-duration:.4s;transition-timing-function:cubic-bezier(.25,.8,.25,1);transition-property:visibility,margin-left,margin-right,transform,width,max-width,min-width}vertical-navigation.vertical-navigation-animations-enabled .vertical-navigation-wrapper{transition-duration:.4s;transition-timing-function:cubic-bezier(.25,.8,.25,1);transition-property:width,max-width,min-width}vertical-navigation.vertical-navigation-mode-over{position:fixed;top:0;bottom:0;height:100vh;min-height:100vh;max-height:100vh}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-side{margin-left:calc(var(--vertical-navigation-width) * -1)}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-side.vertical-navigation-opened{margin-left:0}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-over{left:0;transform:translate3d(-100%,0,0)}vertical-navigation.vertical-navigation-position-left.vertical-navigation-mode-over.vertical-navigation-opened{transform:translateZ(0)}vertical-navigation.vertical-navigation-position-left .vertical-navigation-wrapper{left:0}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-side{margin-right:calc(var(--vertical-navigation-width) * -1)}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-side.vertical-navigation-opened{margin-right:0}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-over{right:0;transform:translate3d(100%,0,0)}vertical-navigation.vertical-navigation-position-right.vertical-navigation-mode-over.vertical-navigation-opened{transform:translateZ(0)}vertical-navigation.vertical-navigation-position-right .vertical-navigation-wrapper{right:0}vertical-navigation.vertical-navigation-inner{position:relative;width:auto;min-width:0;max-width:none;height:auto;min-height:0;max-height:none;box-shadow:none}vertical-navigation.vertical-navigation-inner .vertical-navigation-wrapper{position:relative;overflow:visible;height:auto}vertical-navigation.vertical-navigation-inner .vertical-navigation-wrapper .vertical-navigation-content{overflow:visible!important}.vertical-navigation-wrapper{display:flex;flex-direction:column;width:100%;height:100%;z-index:10;background:var(--background)}.vertical-navigation-header{flex:0 0 auto;background:var(--background);z-index:11}.vertical-navigation-content{flex:1 1 0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;min-height:0}.vertical-navigation-content>vertical-navigation-divider-item{margin:24px 0}.vertical-navigation-footer{flex:0 0 auto;background:var(--background);z-index:11}.vertical-navigation-aside-wrapper{position:absolute;display:flex;flex:1 1 auto;flex-direction:column;top:0;bottom:0;left:var(--vertical-navigation-width);width:var(--vertical-navigation-width);height:100%;z-index:5;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;transition-duration:.4s;transition-property:left,right;transition-timing-function:cubic-bezier(.25,.8,.25,1);background:var(--background)}.vertical-navigation-aside-wrapper>vertical-navigation-aside-item{padding:24px 0}.vertical-navigation-aside-wrapper>vertical-navigation-aside-item>.vertical-navigation-item-wrapper{display:none!important}vertical-navigation.vertical-navigation-position-right .vertical-navigation-aside-wrapper{left:auto;right:var(--vertical-navigation-width)}vertical-navigation-aside-item,vertical-navigation-basic-item,vertical-navigation-collapsable-item,vertical-navigation-divider-item,vertical-navigation-spacer-item{display:flex;flex-direction:column;flex:1 0 auto;-webkit-user-select:none;user-select:none}vertical-navigation-group-item{display:block;-webkit-user-select:none;user-select:none}.kit-navigation-item,.kit-navigation-group-header{font-family:var(--nav-font-family)}vertical-navigation-aside-item .vertical-navigation-item-wrapper .kit-navigation-item,vertical-navigation-basic-item .vertical-navigation-item-wrapper .kit-navigation-item,vertical-navigation-collapsable-item .vertical-navigation-item-wrapper .kit-navigation-item,vertical-navigation-group-item .vertical-navigation-item-wrapper .kit-navigation-item{position:relative;display:flex;align-items:center;justify-content:flex-start;padding:10px 16px;font-size:var(--nav-item-font-size);font-weight:var(--nav-item-font-weight);line-height:var(--nav-item-line-height);text-decoration:none;border-radius:6px;color:var(--foreground)}.kit-navigation-item.kit-navigation-item-disabled{cursor:default;opacity:.4}.kit-navigation-item-icon{margin-right:8px;opacity:.6;color:currentColor}.kit-navigation-item-subtitle{font-size:var(--nav-subtitle-font-size);font-weight:var(--nav-subtitle-font-weight);line-height:var(--nav-subtitle-line-height);opacity:.5;color:currentColor}.kit-navigation-item-badge{margin-left:auto}.kit-navigation-item-badge-content{display:flex;align-items:center;justify-content:center;font-size:var(--nav-badge-font-size);font-weight:var(--nav-badge-font-weight);line-height:var(--nav-badge-line-height);white-space:nowrap;height:20px}vertical-navigation-aside-item>.vertical-navigation-item-wrapper,vertical-navigation-basic-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper{margin-bottom:-2px}vertical-navigation-aside-item .kit-navigation-item,vertical-navigation-basic-item .kit-navigation-item,vertical-navigation-collapsable-item .kit-navigation-item{cursor:pointer}vertical-navigation-aside-item .kit-navigation-item:not(.kit-navigation-item-active-forced):not(.kit-navigation-item-active):not(.kit-navigation-item-disabled):hover,vertical-navigation-basic-item .kit-navigation-item:not(.kit-navigation-item-active-forced):not(.kit-navigation-item-active):not(.kit-navigation-item-disabled):hover,vertical-navigation-collapsable-item .kit-navigation-item:not(.kit-navigation-item-active-forced):not(.kit-navigation-item-active):not(.kit-navigation-item-disabled):hover{background-color:color-mix(in oklch,var(--accent) 10%,transparent)}vertical-navigation-aside-item .kit-navigation-item:hover .kit-navigation-item-icon,vertical-navigation-basic-item .kit-navigation-item:hover .kit-navigation-item-icon,vertical-navigation-collapsable-item .kit-navigation-item:hover .kit-navigation-item-icon{opacity:1}vertical-navigation-aside-item .kit-navigation-item:hover .kit-navigation-item-title,vertical-navigation-basic-item .kit-navigation-item:hover .kit-navigation-item-title,vertical-navigation-collapsable-item .kit-navigation-item:hover .kit-navigation-item-title{opacity:1}vertical-navigation-aside-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active,vertical-navigation-aside-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active-forced,vertical-navigation-basic-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active,vertical-navigation-basic-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active-forced,vertical-navigation-collapsable-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active,vertical-navigation-collapsable-item .kit-navigation-item:not(.kit-navigation-item-disabled).kit-navigation-item-active-forced{color:var(--primary);font-weight:var(--nav-item-active-font-weight)}vertical-navigation-aside-item .kit-navigation-item-active .kit-navigation-item-icon,vertical-navigation-basic-item .kit-navigation-item-active .kit-navigation-item-icon,vertical-navigation-collapsable-item .kit-navigation-item-active .kit-navigation-item-icon{opacity:1}vertical-navigation-aside-item .kit-navigation-item-active .kit-navigation-item-title,vertical-navigation-basic-item .kit-navigation-item-active .kit-navigation-item-title,vertical-navigation-collapsable-item .kit-navigation-item-active .kit-navigation-item-title{opacity:1}vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper .kit-navigation-item .kit-navigation-item-badge+.kit-navigation-item-dot{margin-left:8px}vertical-navigation-collapsable-item.vertical-navigation-item-expanded>.vertical-navigation-item-wrapper .kit-navigation-item .kit-navigation-item-icon,vertical-navigation-collapsable-item.vertical-navigation-item-expanded>.vertical-navigation-item-wrapper .kit-navigation-item .kit-navigation-item-title{opacity:1}vertical-navigation-collapsable-item>.kit-navigation-item-children>*:first-child,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>*:first-child{margin-top:6px}vertical-navigation-collapsable-item>.kit-navigation-item-children>*:last-child,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>*:last-child{margin-bottom:6px!important}vertical-navigation-collapsable-item>.kit-navigation-item-children .kit-navigation-item{padding:10px 16px}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item .kit-navigation-item-icon{display:none}vertical-navigation-collapsable-item .kit-navigation-item-children{position:relative}vertical-navigation-collapsable-item>.kit-navigation-item-children{margin-left:28px!important;padding-left:20px!important;position:relative!important;padding-bottom:0!important}vertical-navigation-collapsable-item>.kit-navigation-item-children:before{content:\"\"!important;position:absolute!important;left:0!important;top:0!important;height:calc(100% - 26px)!important;width:1px!important;background:repeating-linear-gradient(to bottom,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:1!important;border-radius:0!important}vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-basic-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-basic-item>.vertical-navigation-item-wrapper,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper{position:relative}vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item>.kit-navigation-item-children>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item>.kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before{content:\"\"!important;position:absolute!important;left:-22px!important;top:50%!important;transform:translateY(-.5px)!important;width:22px!important;height:1px!important;background:repeating-linear-gradient(to right,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:2!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children{margin-left:10px!important;padding-left:15px!important;padding-bottom:0!important;position:relative!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children:before{content:\"\"!important;position:absolute!important;left:0!important;top:0!important;height:calc(100% - 26px)!important;width:1px!important;background:repeating-linear-gradient(to bottom,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:1!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>*:last-child,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>navigation-tree-outlet>*:last-child{margin-bottom:6px!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-basic-item>.vertical-navigation-item-wrapper:before,vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children>navigation-tree-outlet>vertical-navigation-collapsable-item>.vertical-navigation-item-wrapper:before{content:\"\"!important;position:absolute!important;left:-17px!important;top:50%!important;transform:translateY(-.5px)!important;width:17px!important;height:1px!important;background:repeating-linear-gradient(to right,color-mix(in oklch,var(--foreground) 20%,transparent) 0,color-mix(in oklch,var(--foreground) 20%,transparent) 2px,transparent 2px,transparent 4px)!important;z-index:2!important}vertical-navigation-collapsable-item .kit-navigation-item-children{overflow:visible!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item{padding-left:8px!important;margin:0!important}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item{padding-left:72px}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item{padding-left:88px}vertical-navigation-collapsable-item .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item-children .kit-navigation-item{padding-left:104px}vertical-navigation-divider-item{margin:12px 0}vertical-navigation-group-item{position:relative;margin-top:24px}vertical-navigation-group-item:first-of-type{margin-top:0}vertical-navigation-group-item>.vertical-navigation-item-wrapper{position:relative}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;padding:16px;margin:0;max-height:49px;background:var(--background)}vertical-navigation-group-item>.vertical-navigation-item-wrapper>vertical-navigation-basic-item:first-of-type,vertical-navigation-group-item>.vertical-navigation-item-wrapper>vertical-navigation-collapsable-item:first-of-type{margin-top:12px}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-item-title-wrapper{flex:1}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-item-badge,vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-item-icon{display:none!important}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-group-title{font-size:var(--nav-group-title-font-size);font-weight:var(--nav-group-title-font-weight);letter-spacing:var(--nav-group-title-letter-spacing);text-transform:uppercase;color:var(--primary);opacity:1;line-height:var(--nav-group-title-line-height)}vertical-navigation-group-item>.vertical-navigation-item-wrapper .kit-navigation-group-header .kit-navigation-group-subtitle{font-size:var(--nav-group-subtitle-font-size);font-weight:var(--nav-group-subtitle-font-weight);line-height:var(--nav-group-subtitle-line-height);color:var(--muted-foreground);opacity:.7;text-transform:none;letter-spacing:normal;margin-top:0}vertical-navigation-spacer-item{margin:6px 0}.vertical-navigation-overlay{position:absolute;inset:0;z-index:170;opacity:0;background-color:#0009;transition:opacity .3s cubic-bezier(.25,.8,.25,1)}.vertical-navigation-overlay+.vertical-navigation-aside-overlay{background-color:transparent}.vertical-navigation-aside-overlay{position:absolute;inset:0;z-index:169;opacity:0;background-color:#0000004d;transition:opacity .3s cubic-bezier(.25,.8,.25,1)}\n"] }]
1526
+ }], propDecorators: { appearance: [{
1527
+ type: Input
1528
+ }] } });
1529
+
1530
+ class VerticalNavigationCollapsibleComponent {
1531
+ navigationComponent;
1532
+ autoCollapse = true;
1533
+ appearance = 'collapsible';
1534
+ inner = false;
1535
+ mode = 'side';
1536
+ navigation = [];
1537
+ opened = true;
1538
+ position = 'left';
1539
+ transparentOverlay = false;
1540
+ appearanceChanged = new EventEmitter();
1541
+ modeChanged = new EventEmitter();
1542
+ openedChanged = new EventEmitter();
1543
+ positionChanged = new EventEmitter();
1544
+ renderedAppearance = 'default';
1545
+ refresh() {
1546
+ this.navigationComponent?.refresh();
1547
+ }
1548
+ open() {
1549
+ this.navigationComponent?.open();
1550
+ }
1551
+ close() {
1552
+ this.navigationComponent?.close();
1553
+ }
1554
+ toggle() {
1555
+ this.navigationComponent?.toggle();
1556
+ }
1557
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationCollapsibleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1558
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: VerticalNavigationCollapsibleComponent, isStandalone: true, selector: "vertical-navigation-collapsible", inputs: { autoCollapse: "autoCollapse", appearance: "appearance", inner: "inner", mode: "mode", navigation: "navigation", opened: "opened", position: "position", transparentOverlay: "transparentOverlay" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", positionChanged: "positionChanged" }, viewQueries: [{ propertyName: "navigationComponent", first: true, predicate: ["navigationInstance"], descendants: true }], exportAs: ["verticalNavigationCollapsible"], ngImport: i0, template: `
1559
+ <vertical-navigation
1560
+ #navigationInstance
1561
+ [autoCollapse]="autoCollapse"
1562
+ [appearance]="renderedAppearance"
1563
+ [inner]="inner"
1564
+ [mode]="mode"
1565
+ [navigation]="navigation"
1566
+ [opened]="opened"
1567
+ [position]="position"
1568
+ [transparentOverlay]="transparentOverlay"
1569
+ (appearanceChanged)="appearanceChanged.emit(appearance)"
1570
+ (modeChanged)="modeChanged.emit($event)"
1571
+ (openedChanged)="openedChanged.emit($event)"
1572
+ (positionChanged)="positionChanged.emit($event)">
1573
+ <ng-content select="[verticalNavigationHeader]"></ng-content>
1574
+ <ng-content select="[verticalNavigationContentHeader]"></ng-content>
1575
+ <ng-content select="[verticalNavigationContentFooter]"></ng-content>
1576
+ <ng-content select="[verticalNavigationFooter]"></ng-content>
1577
+ </vertical-navigation>
1578
+ `, isInline: true, dependencies: [{ kind: "component", type: VerticalNavigationDefaultComponent, selector: "vertical-navigation", inputs: ["appearance"], exportAs: ["verticalNavigationDefault"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1579
+ }
1580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: VerticalNavigationCollapsibleComponent, decorators: [{
1581
+ type: Component,
1582
+ args: [{
1583
+ selector: 'vertical-navigation-collapsible',
1584
+ imports: [VerticalNavigationDefaultComponent],
1585
+ template: `
1586
+ <vertical-navigation
1587
+ #navigationInstance
1588
+ [autoCollapse]="autoCollapse"
1589
+ [appearance]="renderedAppearance"
1590
+ [inner]="inner"
1591
+ [mode]="mode"
1592
+ [navigation]="navigation"
1593
+ [opened]="opened"
1594
+ [position]="position"
1595
+ [transparentOverlay]="transparentOverlay"
1596
+ (appearanceChanged)="appearanceChanged.emit(appearance)"
1597
+ (modeChanged)="modeChanged.emit($event)"
1598
+ (openedChanged)="openedChanged.emit($event)"
1599
+ (positionChanged)="positionChanged.emit($event)">
1600
+ <ng-content select="[verticalNavigationHeader]"></ng-content>
1601
+ <ng-content select="[verticalNavigationContentHeader]"></ng-content>
1602
+ <ng-content select="[verticalNavigationContentFooter]"></ng-content>
1603
+ <ng-content select="[verticalNavigationFooter]"></ng-content>
1604
+ </vertical-navigation>
1605
+ `,
1606
+ changeDetection: ChangeDetectionStrategy.OnPush,
1607
+ exportAs: 'verticalNavigationCollapsible',
1608
+ }]
1609
+ }], propDecorators: { navigationComponent: [{
1610
+ type: ViewChild,
1611
+ args: ['navigationInstance']
1612
+ }], autoCollapse: [{
1613
+ type: Input
1614
+ }], appearance: [{
1615
+ type: Input
1616
+ }], inner: [{
1617
+ type: Input
1618
+ }], mode: [{
1619
+ type: Input
1620
+ }], navigation: [{
1621
+ type: Input
1622
+ }], opened: [{
1623
+ type: Input
1624
+ }], position: [{
1625
+ type: Input
1626
+ }], transparentOverlay: [{
1627
+ type: Input
1628
+ }], appearanceChanged: [{
1629
+ type: Output
1630
+ }], modeChanged: [{
1631
+ type: Output
1632
+ }], openedChanged: [{
1633
+ type: Output
1634
+ }], positionChanged: [{
1635
+ type: Output
1636
+ }] } });
1637
+
1638
+ /**
1639
+ * Vertical Navigation Components barrel export
1640
+ */
1641
+
1642
+ /**
1643
+ * Generated bundle index. Do not edit.
1644
+ */
1645
+
1646
+ export { VerticalNavigationAsideItemComponent, VerticalNavigationBasicItemComponent, VerticalNavigationCollapsableItemComponent, VerticalNavigationCollapsibleComponent, VerticalNavigationDefaultComponent, VerticalNavigationDividerItemComponent, VerticalNavigationGroupItemComponent, VerticalNavigationSpacerItemComponent };
1647
+ //# sourceMappingURL=ojiepermana-angular-navigation-vertical.mjs.map