@ojiepermana/angular 0.0.2 → 0.1.0

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 (42) hide show
  1. package/README.md +50 -7
  2. package/fesm2022/ojiepermana-angular-internal.mjs +417 -2
  3. package/fesm2022/ojiepermana-angular-internal.mjs.map +1 -1
  4. package/fesm2022/ojiepermana-angular-layout.mjs +8 -18
  5. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  6. package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs +785 -0
  7. package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs.map +1 -0
  8. package/fesm2022/ojiepermana-angular-navigation-vertical.mjs +1568 -0
  9. package/fesm2022/ojiepermana-angular-navigation-vertical.mjs.map +1 -0
  10. package/fesm2022/ojiepermana-angular-navigation.mjs +176 -0
  11. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -0
  12. package/fesm2022/ojiepermana-angular-theme-component.mjs +14 -28
  13. package/fesm2022/ojiepermana-angular-theme-component.mjs.map +1 -1
  14. package/fesm2022/ojiepermana-angular-theme-service.mjs +5 -7
  15. package/fesm2022/ojiepermana-angular-theme-service.mjs.map +1 -1
  16. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  17. package/layout/README.md +2 -1
  18. package/navigation/README.md +215 -0
  19. package/package.json +13 -1
  20. package/styles/index.css +1 -1
  21. package/theme/README.md +1 -4
  22. package/theme/styles/adapters/material-ui/index.css +1 -6
  23. package/theme/styles/layout/horizontal.css +109 -0
  24. package/theme/styles/layout/index.css +19 -1
  25. package/theme/styles/layout/vertical.css +75 -0
  26. package/theme/styles/presets/colors/blue.css +35 -0
  27. package/theme/styles/presets/colors/brand.css +41 -0
  28. package/theme/styles/presets/colors/cyan.css +35 -0
  29. package/theme/styles/presets/colors/green.css +35 -0
  30. package/theme/styles/presets/colors/orange.css +35 -0
  31. package/theme/styles/presets/colors/purple.css +35 -0
  32. package/theme/styles/presets/colors/red.css +35 -0
  33. package/theme/styles/presets/styles/flat.css +51 -20
  34. package/theme/styles/presets/styles/glass.css +1 -7
  35. package/theme/styles/presets/styles/index.css +1 -1
  36. package/theme/styles/roles/index.css +18 -0
  37. package/theme/styles/tokens/foundation.css +4 -7
  38. package/types/ojiepermana-angular-internal.d.ts +64 -1
  39. package/types/ojiepermana-angular-navigation-horizontal.d.ts +77 -0
  40. package/types/ojiepermana-angular-navigation-vertical.d.ts +260 -0
  41. package/types/ojiepermana-angular-navigation.d.ts +182 -0
  42. package/layout/styles/index.css +0 -157
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-navigation-vertical.mjs","sources":["../../../projects/library/navigation/vertical/vertical-navigation.base.ts","../../../projects/library/navigation/vertical/types/basic.ts","../../../projects/library/navigation/vertical/types/divider.ts","../../../projects/library/navigation/vertical/types/spacer.ts","../../../projects/library/navigation/vertical/types/collapsable.ts","../../../projects/library/navigation/vertical/types/aside.ts","../../../projects/library/navigation/vertical/types/group.ts","../../../projects/library/navigation/vertical/vertical-navigation.shared.ts","../../../projects/library/navigation/vertical/vertical-default.ts","../../../projects/library/navigation/vertical/vertical-compact.ts","../../../projects/library/navigation/vertical/vertical-dense.ts","../../../projects/library/navigation/vertical/vertical-thin.ts","../../../projects/library/navigation/vertical/index.ts","../../../projects/library/navigation/vertical/ojiepermana-angular-navigation-vertical.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild,\n DOCUMENT,\n} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, ReplaySubject, Subject, takeUntil } from 'rxjs';\nimport {\n NavigationService,\n NavigationAsideItem,\n NavigationItem,\n VerticalNavigationAppearance,\n VerticalNavigationMode,\n VerticalNavigationPosition,\n shouldRenderNavigationItem,\n} from '@ojiepermana/angular/navigation';\nimport { trackNavigationTreeItem } from '@ojiepermana/angular/internal';\n\n@Directive()\nexport abstract class VerticalNavigationBaseComponent implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n protected _changeDetectorRef = inject(ChangeDetectorRef);\n protected _document = inject(DOCUMENT);\n protected _elementRef = inject(ElementRef);\n protected _renderer2 = inject(Renderer2);\n protected _router = inject(Router);\n protected _navigationService = inject(NavigationService);\n\n @Input() autoCollapse = true;\n @Input() inner = false;\n @Input() mode: VerticalNavigationMode = 'side';\n @Input() navigation: NavigationItem[] = [];\n @Input() opened = true;\n @Input() position: VerticalNavigationPosition = 'left';\n @Input() transparentOverlay = false;\n\n @Output() readonly appearanceChanged = new EventEmitter<VerticalNavigationAppearance>();\n @Output() readonly modeChanged = new EventEmitter<VerticalNavigationMode>();\n @Output() readonly openedChanged = new EventEmitter<boolean>();\n @Output() readonly positionChanged = new EventEmitter<VerticalNavigationPosition>();\n\n @ViewChild('navigationContent') protected _navigationContentEl?: ElementRef;\n\n activeAsideItemId: string | null = null;\n onCollapsableItemCollapsed = new ReplaySubject<NavigationItem>(1);\n onCollapsableItemExpanded = new ReplaySubject<NavigationItem>(1);\n onRefreshed = new ReplaySubject<boolean>(1);\n\n protected _animationsEnabled = false;\n protected _asideOverlay: HTMLElement | null = null;\n protected _hovered = false;\n protected _mutationObserver?: MutationObserver;\n protected _overlay: HTMLElement | null = null;\n protected _pendingTimeouts: ReturnType<typeof setTimeout>[] = [];\n protected _unsubscribeAll = new Subject<void>();\n\n protected abstract _componentPrefix: string;\n protected abstract _asideWrapperClass: string;\n private readonly _overlayClickHandler = (): void => this.close();\n private readonly _asideOverlayClickHandler = (): void => this.closeAside();\n\n // Abstract input for appearance since it has different default values\n abstract appearance: VerticalNavigationAppearance;\n\n get hostClasses(): Record<string, boolean> {\n return {\n [`${this._componentPrefix}-animations-enabled`]: this._animationsEnabled,\n [`${this._componentPrefix}-appearance-${this.appearance}`]: true,\n [`${this._componentPrefix}-hover`]: this._hovered,\n [`${this._componentPrefix}-inner`]: this.inner,\n [`${this._componentPrefix}-mode-over`]: this.mode === 'over',\n [`${this._componentPrefix}-mode-side`]: this.mode === 'side',\n [`${this._componentPrefix}-opened`]: this.opened,\n [`${this._componentPrefix}-position-left`]: this.position === 'left',\n [`${this._componentPrefix}-position-right`]: this.position === 'right',\n };\n }\n\n get asideWrapperClass(): string {\n return this._asideWrapperClass;\n }\n\n activeAsideNavigationItem(): NavigationAsideItem | null {\n if (!this.activeAsideItemId) {\n return null;\n }\n\n const item = this._navigationService.getItem(this.activeAsideItemId, this.navigation);\n\n return item?.type === 'aside' ? item : null;\n }\n\n shouldRenderItem(item: NavigationItem): boolean {\n return shouldRenderNavigationItem(item);\n }\n\n onMouseenter(): void {\n this._enableAnimations();\n this._hovered = true;\n }\n\n onMouseleave(): void {\n this._enableAnimations();\n this._hovered = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('appearance' in changes) {\n this.appearanceChanged.emit(changes['appearance'].currentValue);\n }\n\n if ('mode' in changes) {\n const currentMode = changes['mode'].currentValue;\n const previousMode = changes['mode'].previousValue;\n\n this._disableAnimations();\n\n if (previousMode === 'over' && currentMode === 'side') {\n this._hideOverlay();\n }\n\n if (previousMode === 'side' && currentMode === 'over') {\n this.closeAside();\n if (this.opened) {\n this._showOverlay();\n }\n }\n\n this.modeChanged.emit(currentMode);\n\n this._setTimeout(() => {\n this._enableAnimations();\n }, 500);\n }\n\n if ('navigation' in changes) {\n this._changeDetectorRef.markForCheck();\n }\n\n if ('opened' in changes) {\n this._toggleOpened(changes['opened'].currentValue);\n }\n\n if ('position' in changes) {\n this.positionChanged.emit(changes['position'].currentValue);\n }\n }\n\n ngOnInit(): void {\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll),\n )\n .subscribe(() => {\n if (this.mode === 'over' && this.opened) {\n this.close();\n }\n if (this.mode === 'side' && this.activeAsideItemId) {\n this.closeAside();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this._mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n const mutationTarget = mutation.target as HTMLElement;\n if (mutation.attributeName === 'class') {\n if (mutationTarget.classList.contains('cdk-global-scrollblock')) {\n const top = parseInt(mutationTarget.style.top, 10);\n this._renderer2.setStyle(this._elementRef.nativeElement, 'margin-top', `${Math.abs(top)}px`);\n } else {\n this._renderer2.setStyle(this._elementRef.nativeElement, 'margin-top', null);\n }\n }\n });\n });\n this._mutationObserver.observe(this._document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n this._setTimeout(() => {\n if (!this._navigationContentEl) {\n return;\n }\n\n const activeItem = this._navigationContentEl.nativeElement.querySelector('.kit-navigation-item-active');\n\n if (activeItem) {\n activeItem.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this._mutationObserver) {\n this._mutationObserver.disconnect();\n }\n\n // Clear all pending timeouts to prevent memory leaks\n for (const id of this._pendingTimeouts) {\n clearTimeout(id);\n }\n this._pendingTimeouts = [];\n\n // Remove overlays synchronously on destroy\n this._removeOverlayElement(this._overlay, this._overlayClickHandler);\n this._overlay = null;\n this._removeOverlayElement(this._asideOverlay, this._asideOverlayClickHandler);\n this._asideOverlay = null;\n\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n\n this.onCollapsableItemCollapsed.complete();\n this.onCollapsableItemExpanded.complete();\n this.onRefreshed.complete();\n }\n\n refresh(): void {\n this._changeDetectorRef.markForCheck();\n this.onRefreshed.next(true);\n }\n\n open(): void {\n if (this.opened) {\n return;\n }\n this._toggleOpened(true);\n }\n\n close(): void {\n if (!this.opened) {\n return;\n }\n this.closeAside();\n this._toggleOpened(false);\n }\n\n toggle(): void {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n openAside(item: NavigationItem): void {\n if (item.disabled || !item.id) {\n return;\n }\n\n this.activeAsideItemId = item.id;\n this._showAsideOverlay();\n this._changeDetectorRef.markForCheck();\n }\n\n closeAside(): void {\n this.activeAsideItemId = null;\n this._hideAsideOverlay();\n this._changeDetectorRef.markForCheck();\n }\n\n toggleAside(item: NavigationItem): void {\n if (this.activeAsideItemId === item.id) {\n this.closeAside();\n } else {\n this.openAside(item);\n }\n }\n\n trackByFn(index: number, item: NavigationItem): string | number | undefined {\n return trackNavigationTreeItem(index, item);\n }\n\n protected _enableAnimations(): void {\n if (this._animationsEnabled) {\n return;\n }\n this._animationsEnabled = true;\n }\n\n protected _disableAnimations(): void {\n if (!this._animationsEnabled) {\n return;\n }\n this._animationsEnabled = false;\n }\n\n protected _showOverlay(): void {\n if (this._overlay) {\n return;\n }\n\n this._overlay = this._renderer2.createElement('div');\n\n if (this._overlay) {\n this._overlay.classList.add(`${this._componentPrefix}-overlay`);\n\n if (this.transparentOverlay) {\n this._overlay.classList.add(`${this._componentPrefix}-overlay-transparent`);\n }\n\n this._renderer2.setStyle(this._overlay, 'opacity', '0');\n\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);\n\n this._overlay.addEventListener('click', this._overlayClickHandler);\n\n this._setTimeout(() => {\n if (this._overlay) {\n this._renderer2.setStyle(this._overlay, 'opacity', '1');\n }\n }, 10);\n }\n }\n\n protected _hideOverlay(): void {\n if (!this._overlay) {\n return;\n }\n\n this._renderer2.setStyle(this._overlay, 'opacity', '0');\n\n this._setTimeout(() => {\n if (this._overlay) {\n this._overlay.removeEventListener('click', this._overlayClickHandler);\n if (this._overlay.parentNode) {\n this._overlay.parentNode.removeChild(this._overlay);\n }\n this._overlay = null;\n }\n }, 300);\n }\n\n protected _showAsideOverlay(): void {\n if (this._asideOverlay) {\n return;\n }\n\n this._asideOverlay = this._renderer2.createElement('div');\n\n if (this._asideOverlay) {\n this._asideOverlay.classList.add(`${this._componentPrefix}-aside-overlay`);\n\n this._renderer2.setStyle(this._asideOverlay, 'opacity', '0');\n\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);\n\n this._asideOverlay.addEventListener('click', this._asideOverlayClickHandler);\n\n this._setTimeout(() => {\n if (this._asideOverlay) {\n this._renderer2.setStyle(this._asideOverlay, 'opacity', '1');\n }\n }, 10);\n }\n }\n\n protected _hideAsideOverlay(): void {\n if (!this._asideOverlay) {\n return;\n }\n\n this._renderer2.setStyle(this._asideOverlay, 'opacity', '0');\n\n this._setTimeout(() => {\n if (this._asideOverlay) {\n this._asideOverlay.removeEventListener('click', this._asideOverlayClickHandler);\n if (this._asideOverlay.parentNode) {\n this._asideOverlay.parentNode.removeChild(this._asideOverlay);\n }\n this._asideOverlay = null;\n }\n }, 300);\n }\n\n protected _setTimeout(fn: () => void, delay?: number): void {\n const id = setTimeout(() => {\n const index = this._pendingTimeouts.indexOf(id);\n if (index > -1) {\n this._pendingTimeouts.splice(index, 1);\n }\n fn();\n }, delay);\n this._pendingTimeouts.push(id);\n }\n\n private _removeOverlayElement(overlay: HTMLElement | null, clickHandler: () => void): void {\n if (!overlay) {\n return;\n }\n overlay.removeEventListener('click', clickHandler);\n if (overlay.parentNode) {\n overlay.parentNode.removeChild(overlay);\n }\n }\n\n protected _toggleOpened(open: boolean): void {\n this.opened = open;\n this._enableAnimations();\n\n if (this.mode === 'over') {\n if (this.opened) {\n this._showOverlay();\n } else {\n this._hideOverlay();\n }\n }\n\n this.openedChanged.emit(open);\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { IsActiveMatchOptions, RouterLink, RouterLinkActive } from '@angular/router';\nimport { NavigationBasicItem, getNavigationItemAction } from '@ojiepermana/angular/navigation';\nimport { NavigationItemContent } from '@ojiepermana/angular/internal';\nimport { Subject, takeUntil } from 'rxjs';\nimport { VerticalNavigationBaseComponent } from '../vertical-navigation.base';\n\n@Component({\n selector: 'vertical-navigation-basic-item',\n template: `\n <!-- Item wrapper -->\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\">\n <!-- Item with an internal link -->\n @if (item.link && !item.externalLink && !hasAction() && !item.disabled) {\n <a\n class=\"kit-navigation-item\"\n [ngClass]=\"{ 'kit-navigation-item-active-forced': item.active }\"\n [routerLink]=\"[item.link]\"\n [fragment]=\"item.fragment\"\n [preserveFragment]=\"item.preserveFragment ?? false\"\n [queryParams]=\"item.queryParams ?? null\"\n [queryParamsHandling]=\"item.queryParamsHandling ?? null\"\n [routerLinkActive]=\"'kit-navigation-item-active'\"\n [routerLinkActiveOptions]=\"isActiveMatchOptions\"\n [matTooltip]=\"item.tooltip || ''\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n }\n\n <!-- Item with an external link -->\n @if (item.link && item.externalLink && !hasAction() && !item.disabled) {\n <a\n class=\"kit-navigation-item\"\n [href]=\"item.link\"\n [target]=\"item.target || '_blank'\"\n [matTooltip]=\"item.tooltip || ''\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n }\n\n <!-- Item with a function -->\n @if (!item.link && hasAction() && !item.disabled) {\n <div\n class=\"kit-navigation-item\"\n [ngClass]=\"{ 'kit-navigation-item-active-forced': item.active }\"\n [matTooltip]=\"item.tooltip || ''\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"triggerAction()\"\n (keydown.enter)=\"triggerAction()\"\n (keydown.space)=\"$event.preventDefault(); triggerAction()\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n }\n\n <!-- Item with an internal link and function -->\n @if (item.link && !item.externalLink && hasAction() && !item.disabled) {\n <a\n class=\"kit-navigation-item\"\n [ngClass]=\"{ 'kit-navigation-item-active-forced': item.active }\"\n [routerLink]=\"[item.link]\"\n [fragment]=\"item.fragment\"\n [preserveFragment]=\"item.preserveFragment ?? false\"\n [queryParams]=\"item.queryParams ?? null\"\n [queryParamsHandling]=\"item.queryParamsHandling ?? null\"\n [routerLinkActive]=\"'kit-navigation-item-active'\"\n [routerLinkActiveOptions]=\"isActiveMatchOptions\"\n [matTooltip]=\"item.tooltip || ''\"\n (click)=\"triggerAction()\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n }\n\n <!-- Item with an external link and function -->\n @if (item.link && item.externalLink && hasAction() && !item.disabled) {\n <a\n class=\"kit-navigation-item\"\n [href]=\"item.link\"\n [target]=\"item.target || '_blank'\"\n [matTooltip]=\"item.tooltip || ''\"\n (click)=\"triggerAction()\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n }\n\n <!-- Item with no link and no function -->\n @if (!item.link && !hasAction() && !item.disabled) {\n <div\n class=\"kit-navigation-item\"\n [ngClass]=\"{ 'kit-navigation-item-active-forced': item.active }\"\n [matTooltip]=\"item.tooltip || ''\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n }\n\n <!-- Item is disabled -->\n @if (item.disabled) {\n <div class=\"kit-navigation-item kit-navigation-item-disabled\" [matTooltip]=\"item.tooltip || ''\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n }\n </div>\n\n <!-- Item template -->\n <ng-template #itemTemplate>\n <navigation-item-content [item]=\"item\" variant=\"vertical\"></navigation-item-content>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass, NgTemplateOutlet, RouterLink, RouterLinkActive, NavigationItemContent, MatTooltipModule],\n})\nexport class VerticalNavigationBasicItemComponent implements OnInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _navigationComponent = inject(VerticalNavigationBaseComponent);\n\n @Input() item!: NavigationBasicItem;\n\n isActiveMatchOptions: IsActiveMatchOptions = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n };\n\n private _unsubscribeAll = new Subject<void>();\n\n /**\n * On init\n */\n ngOnInit(): void {\n // Set the \"isActiveMatchOptions\" either from item's\n // \"isActiveMatchOptions\" or the equivalent form of\n // item's \"exactMatch\" option\n this.isActiveMatchOptions =\n this.item.isActiveMatchOptions ??\n (this.item.exactMatch\n ? { paths: 'exact', queryParams: 'exact', fragment: 'ignored', matrixParams: 'ignored' }\n : { paths: 'subset', queryParams: 'subset', fragment: 'ignored', matrixParams: 'ignored' });\n\n // Subscribe to onRefreshed on the navigation component\n this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n hasAction(): boolean {\n return !!getNavigationItemAction(this.item);\n }\n\n triggerAction(): void {\n getNavigationItemAction(this.item)?.(this.item);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'vertical-navigation-divider-item',\n template: '<div class=\"vertical-navigation-divider\"></div>',\n styles: [\n `\n .vertical-navigation-divider {\n height: 1px;\n margin: 12px 16px;\n background: rgb(var(--border));\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VerticalNavigationDividerItemComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'vertical-navigation-spacer-item',\n template: '<div class=\"vertical-navigation-spacer\"></div>',\n styles: [\n `\n .vertical-navigation-spacer {\n flex: 1 1 auto;\n min-height: 24px;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VerticalNavigationSpacerItemComponent {}\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NavigationEnd, Router } from '@angular/router';\nimport {\n NavigationCollapsableItem,\n NavigationItem,\n NavigationService,\n isNavigationRoutableItem,\n shouldRenderNavigationItem,\n} from '@ojiepermana/angular/navigation';\nimport {\n NavigationItemContent,\n NavigationTreeOutlet,\n hasActiveNavigationDescendant,\n isNavigationTreeDescendant,\n trackNavigationTreeItem,\n} from '@ojiepermana/angular/internal';\nimport { VerticalNavigationBasicItemComponent } from './basic';\nimport { VerticalNavigationAsideItemComponent } from './aside';\nimport { VerticalNavigationDividerItemComponent } from './divider';\nimport { VerticalNavigationSpacerItemComponent } from './spacer';\nimport { Subject, filter, takeUntil } from 'rxjs';\nimport { VerticalNavigationBaseComponent } from '../vertical-navigation.base';\n\n@Component({\n selector: 'vertical-navigation-collapsable-item',\n template: `\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\">\n <div\n class=\"kit-navigation-item\"\n [ngClass]=\"{\n 'kit-navigation-item-disabled': item.disabled,\n 'kit-navigation-item-expanded': isExpanded,\n }\"\n [matTooltip]=\"item.tooltip || ''\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleCollapsable()\"\n (keydown.enter)=\"toggleCollapsable()\"\n (keydown.space)=\"$event.preventDefault(); toggleCollapsable()\">\n <navigation-item-content [item]=\"item\" variant=\"vertical\"></navigation-item-content>\n <!-- State dot -->\n <span class=\"kit-navigation-item-dot\" aria-hidden=\"true\"></span>\n </div>\n </div>\n\n <!-- Children (with CSS transition instead of animation) -->\n <div\n class=\"kit-navigation-item-children\"\n [class.kit-navigation-item-children-expanded]=\"!isCollapsed\"\n [class.kit-navigation-item-children-collapsed]=\"isCollapsed\">\n @if (!isCollapsed) {\n <navigation-tree-outlet\n [items]=\"item.children\"\n [data]=\"treeTemplateData\"\n [branchTemplate]=\"branchItem\"\n [leafTemplate]=\"leafItem\"\n [groupTemplate]=\"groupItem\"\n [dividerTemplate]=\"dividerItem\"\n [spacerTemplate]=\"spacerItem\"\n [trackByFn]=\"treeTrackByFn\"\n [shouldRenderItemFn]=\"treeShouldRenderItemFn\" />\n }\n </div>\n\n <ng-template #branchItem let-child let-data=\"data\">\n @if (child.type === 'aside') {\n <vertical-navigation-aside-item [item]=\"child\" [autoCollapse]=\"data?.['autoCollapse'] === true\">\n </vertical-navigation-aside-item>\n } @else {\n <vertical-navigation-collapsable-item [item]=\"child\" [autoCollapse]=\"data?.['autoCollapse'] !== false\">\n </vertical-navigation-collapsable-item>\n }\n </ng-template>\n\n <ng-template #leafItem let-child>\n <vertical-navigation-basic-item [item]=\"child\"></vertical-navigation-basic-item>\n </ng-template>\n\n <ng-template #groupItem let-child let-data=\"data\">\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!child.subtitle\"\n [ngClass]=\"child.classes?.wrapper\">\n <div class=\"kit-navigation-group-header\">\n <navigation-item-content [item]=\"child\" variant=\"vertical-group\"></navigation-item-content>\n </div>\n </div>\n </ng-template>\n\n <ng-template #dividerItem>\n <vertical-navigation-divider-item></vertical-navigation-divider-item>\n </ng-template>\n\n <ng-template #spacerItem>\n <vertical-navigation-spacer-item></vertical-navigation-spacer-item>\n </ng-template>\n `,\n styles: [\n `\n /* Collapsable item CSS transitions (NO Angular animations) */\n\n .kit-navigation-item-dot {\n margin-left: auto;\n width: 0.5rem;\n height: 0.5rem;\n flex-shrink: 0;\n border-radius: 9999px;\n background: #9ca3af;\n opacity: 0.85;\n transition:\n background-color 180ms ease,\n transform 180ms ease,\n opacity 180ms ease;\n }\n\n .kit-navigation-item:hover .kit-navigation-item-dot {\n opacity: 1;\n }\n\n .kit-navigation-item.kit-navigation-item-expanded .kit-navigation-item-dot {\n background: #16a34a;\n opacity: 1;\n transform: scale(1.1);\n }\n\n .kit-navigation-item-children {\n overflow: hidden;\n max-height: 0;\n opacity: 0;\n transition:\n max-height 300ms cubic-bezier(0.25, 0.8, 0.25, 1),\n opacity 300ms cubic-bezier(0.25, 0.8, 0.25, 1);\n }\n\n .kit-navigation-item-children-expanded {\n max-height: 2000px;\n opacity: 1;\n }\n\n .kit-navigation-item-children-collapsed {\n max-height: 0;\n opacity: 0;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n MatTooltipModule,\n NavigationItemContent,\n NavigationTreeOutlet,\n forwardRef(() => VerticalNavigationAsideItemComponent),\n VerticalNavigationBasicItemComponent,\n forwardRef(() => VerticalNavigationCollapsableItemComponent),\n VerticalNavigationDividerItemComponent,\n VerticalNavigationSpacerItemComponent,\n ],\n host: {\n '[class.vertical-navigation-item-collapsed]': 'isCollapsed',\n '[class.vertical-navigation-item-expanded]': 'isExpanded',\n },\n})\nexport class VerticalNavigationCollapsableItemComponent implements OnInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _navigationComponent = inject(VerticalNavigationBaseComponent);\n private _navigationService = inject(NavigationService);\n private _router = inject(Router);\n\n @Input() autoCollapse = true;\n @Input() item!: NavigationCollapsableItem;\n\n isCollapsed = true;\n readonly treeTrackByFn = trackNavigationTreeItem;\n readonly treeShouldRenderItemFn = shouldRenderNavigationItem;\n\n get isExpanded(): boolean {\n return !this.isCollapsed;\n }\n\n private _unsubscribeAll = new Subject<void>();\n\n /**\n * On init\n */\n ngOnInit(): void {\n // If the item has a children that has a matching url with the current url, expand...\n if (this._hasActiveChild(this.item)) {\n this.expand();\n }\n // Otherwise...\n else {\n // If the autoCollapse is on, collapse...\n if (this.autoCollapse) {\n this.collapse();\n }\n }\n\n // Listen for the onCollapsableItemCollapsed from the service\n this._navigationComponent.onCollapsableItemCollapsed\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((collapsedItem: NavigationItem) => {\n // Check if the collapsed item is null\n if (collapsedItem === null) {\n return;\n }\n\n // Collapse if this is a children of the collapsed item\n if (this._isChildrenOf(collapsedItem, this.item)) {\n this.collapse();\n }\n });\n\n // Listen for the onCollapsableItemExpanded from the service if the autoCollapse is on\n if (this.autoCollapse) {\n this._navigationComponent.onCollapsableItemExpanded\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((expandedItem: NavigationItem) => {\n // Check if the expanded item is null\n if (expandedItem === null) {\n return;\n }\n\n // Check if this is a parent of the expanded item\n if (this._isChildrenOf(this.item, expandedItem)) {\n return;\n }\n\n // Check if this has a children with a matching url with the current active url\n if (this._hasActiveChild(this.item)) {\n return;\n }\n\n // Check if this is the expanded item\n if (this.item === expandedItem) {\n return;\n }\n\n // If none of the above conditions are matched, collapse this item\n this.collapse();\n });\n }\n\n // Attach a listener to the NavigationEnd event\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll),\n )\n .subscribe(() => {\n // If the item has a children that has a matching url with the current url, expand...\n if (this._hasActiveChild(this.item)) {\n this.expand();\n }\n // Otherwise...\n else {\n // If the autoCollapse is on, collapse...\n if (this.autoCollapse) {\n this.collapse();\n }\n }\n });\n\n // Subscribe to onRefreshed on the navigation component\n this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n /**\n * Collapse\n */\n collapse(): void {\n // Return if the item is disabled\n if (this.item.disabled) {\n return;\n }\n\n // Return if the item is already collapsed\n if (this.isCollapsed) {\n return;\n }\n\n // Collapse it\n this.isCollapsed = true;\n if (this.item.id) {\n this._navigationService.collapseItem(this.item.id);\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this._navigationComponent.onCollapsableItemCollapsed.next(this.item);\n }\n\n /**\n * Expand\n */\n expand(): void {\n // Return if the item is disabled\n if (this.item.disabled) {\n return;\n }\n\n // Return if the item is already expanded\n if (!this.isCollapsed) {\n return;\n }\n\n // Expand it\n this.isCollapsed = false;\n if (this.item.id) {\n this._navigationService.expandItem(this.item.id);\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this._navigationComponent.onCollapsableItemExpanded.next(this.item);\n }\n\n /**\n * Toggle collapsable\n */\n toggleCollapsable(): void {\n // Toggle collapse/expand\n if (this.isCollapsed) {\n this.expand();\n } else {\n this.collapse();\n }\n }\n\n /**\n * Track by function for ngFor loops\n */\n trackByFn(index: number, item: NavigationItem): string | number | undefined {\n return trackNavigationTreeItem(index, item);\n }\n\n shouldRenderItem(item: NavigationItem): boolean {\n return shouldRenderNavigationItem(item);\n }\n\n get treeTemplateData(): { autoCollapse: boolean } {\n return { autoCollapse: this.autoCollapse };\n }\n\n /**\n * Check if the given item has the given url in one of its children\n */\n private _hasActiveChild(item: NavigationItem): boolean {\n return hasActiveNavigationDescendant(\n item,\n (child) =>\n isNavigationRoutableItem(child) && !!child.link && this._router.isActive(child.link, child.exactMatch || false),\n );\n }\n\n /**\n * Check if this is a children of the given item\n */\n private _isChildrenOf(parent: NavigationItem, item: NavigationItem): boolean {\n return isNavigationTreeDescendant(parent, item);\n }\n}\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { NavigationAsideItem, NavigationItem, shouldRenderNavigationItem } from '@ojiepermana/angular/navigation';\nimport {\n NavigationItemContent,\n NavigationTreeOutlet,\n hasActiveNavigationDescendant,\n trackNavigationTreeItem,\n} from '@ojiepermana/angular/internal';\nimport { VerticalNavigationBasicItemComponent } from './basic';\nimport { VerticalNavigationCollapsableItemComponent } from './collapsable';\nimport { VerticalNavigationDividerItemComponent } from './divider';\nimport { VerticalNavigationSpacerItemComponent } from './spacer';\nimport { Subject, filter, takeUntil } from 'rxjs';\nimport { VerticalNavigationBaseComponent } from '../vertical-navigation.base';\n\n@Component({\n selector: 'vertical-navigation-aside-item',\n template: `\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\">\n <div\n class=\"kit-navigation-item\"\n [ngClass]=\"{\n 'kit-navigation-item-active': active,\n 'kit-navigation-item-disabled': item.disabled,\n 'kit-navigation-item-active-forced': item.active,\n }\"\n [matTooltip]=\"item.tooltip || ''\">\n <navigation-item-content [item]=\"item\" variant=\"vertical\"></navigation-item-content>\n </div>\n </div>\n\n <!-- Children -->\n @if (!skipChildren) {\n <div class=\"kit-navigation-item-children\">\n <navigation-tree-outlet\n [items]=\"item.children\"\n [data]=\"treeTemplateData\"\n [branchTemplate]=\"branchItem\"\n [leafTemplate]=\"leafItem\"\n [groupTemplate]=\"groupItem\"\n [dividerTemplate]=\"dividerItem\"\n [spacerTemplate]=\"spacerItem\"\n [trackByFn]=\"treeTrackByFn\"\n [shouldRenderItemFn]=\"treeShouldRenderItemFn\" />\n </div>\n }\n\n <ng-template #branchItem let-child let-data=\"data\">\n @if (child.type === 'aside') {\n <vertical-navigation-aside-item [item]=\"child\" [autoCollapse]=\"data?.['autoCollapse'] === true\">\n </vertical-navigation-aside-item>\n } @else {\n <vertical-navigation-collapsable-item [item]=\"child\" [autoCollapse]=\"data?.['autoCollapse'] !== false\">\n </vertical-navigation-collapsable-item>\n }\n </ng-template>\n\n <ng-template #leafItem let-child>\n <vertical-navigation-basic-item [item]=\"child\"></vertical-navigation-basic-item>\n </ng-template>\n\n <ng-template #groupItem let-child>\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!child.subtitle\"\n [ngClass]=\"child.classes?.wrapper\">\n <div class=\"kit-navigation-group-header\">\n <navigation-item-content [item]=\"child\" variant=\"vertical-group\"></navigation-item-content>\n </div>\n </div>\n </ng-template>\n\n <ng-template #dividerItem>\n <vertical-navigation-divider-item></vertical-navigation-divider-item>\n </ng-template>\n\n <ng-template #spacerItem>\n <vertical-navigation-spacer-item></vertical-navigation-spacer-item>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n MatTooltipModule,\n NavigationItemContent,\n NavigationTreeOutlet,\n VerticalNavigationBasicItemComponent,\n forwardRef(() => VerticalNavigationCollapsableItemComponent),\n VerticalNavigationDividerItemComponent,\n VerticalNavigationSpacerItemComponent,\n ],\n})\nexport class VerticalNavigationAsideItemComponent implements OnChanges, OnInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _navigationComponent = inject(VerticalNavigationBaseComponent);\n private _router = inject(Router);\n\n @Input() activeItemId?: string | null;\n @Input() autoCollapse = true;\n @Input() item!: NavigationAsideItem;\n @Input() skipChildren = false;\n\n active = false;\n readonly treeTrackByFn = trackNavigationTreeItem;\n readonly treeShouldRenderItemFn = shouldRenderNavigationItem;\n\n private _unsubscribeAll = new Subject<void>();\n\n /**\n * On changes\n */\n ngOnChanges(changes: SimpleChanges): void {\n // Active item id\n if ('activeItemId' in changes) {\n // Mark if active\n this._markIfActive();\n }\n }\n\n /**\n * On init\n */\n ngOnInit(): void {\n // Mark if active\n this._markIfActive();\n\n // Attach a listener to the NavigationEnd event\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll),\n )\n .subscribe(() => {\n // Mark if active\n this._markIfActive();\n });\n\n // Subscribe to onRefreshed on the navigation component\n this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n /**\n * Track by function for ngFor loops\n */\n trackByFn(index: number, item: NavigationItem): string | number | undefined {\n return trackNavigationTreeItem(index, item);\n }\n\n shouldRenderItem(item: NavigationItem): boolean {\n return shouldRenderNavigationItem(item);\n }\n\n get treeTemplateData(): { autoCollapse: boolean } {\n return { autoCollapse: this.autoCollapse };\n }\n\n /**\n * Check if the given item has the given url in one of its children\n */\n private _hasActiveChild(item: NavigationItem): boolean {\n return hasActiveNavigationDescendant(\n item,\n (child) => child.type === 'basic' && !!child.link && this._router.isActive(child.link, child.exactMatch || false),\n );\n }\n\n /**\n * Decide and mark if the item is active\n */\n private _markIfActive(): void {\n // Check if the activeItemId is equals to this item id\n this.active = this.activeItemId === this.item.id;\n\n // If the aside has a children that is active, always mark it as active\n if (this._hasActiveChild(this.item)) {\n this.active = true;\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n}\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NavigationGroupItem, NavigationItem, shouldRenderNavigationItem } from '@ojiepermana/angular/navigation';\nimport { NavigationItemContent, NavigationTreeOutlet, trackNavigationTreeItem } from '@ojiepermana/angular/internal';\nimport { VerticalNavigationAsideItemComponent } from './aside';\nimport { VerticalNavigationBasicItemComponent } from './basic';\nimport { VerticalNavigationCollapsableItemComponent } from './collapsable';\nimport { VerticalNavigationDividerItemComponent } from './divider';\nimport { VerticalNavigationSpacerItemComponent } from './spacer';\nimport { Subject, takeUntil } from 'rxjs';\nimport { VerticalNavigationBaseComponent } from '../vertical-navigation.base';\n\n@Component({\n selector: 'vertical-navigation-group-item',\n template: `\n <!-- Item wrapper -->\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\">\n <div class=\"kit-navigation-group-header\">\n <navigation-item-content [item]=\"item\" variant=\"vertical-group\"></navigation-item-content>\n </div>\n </div>\n\n <navigation-tree-outlet\n [items]=\"item.children\"\n [data]=\"treeTemplateData\"\n [branchTemplate]=\"branchItem\"\n [leafTemplate]=\"leafItem\"\n [groupTemplate]=\"groupItem\"\n [dividerTemplate]=\"dividerItem\"\n [spacerTemplate]=\"spacerItem\"\n [trackByFn]=\"treeTrackByFn\"\n [shouldRenderItemFn]=\"treeShouldRenderItemFn\" />\n\n <ng-template #branchItem let-child let-data=\"data\">\n @if (child.type === 'aside') {\n <vertical-navigation-aside-item [item]=\"child\" [autoCollapse]=\"data?.['autoCollapse'] === true\">\n </vertical-navigation-aside-item>\n } @else {\n <vertical-navigation-collapsable-item [item]=\"child\" [autoCollapse]=\"data?.['autoCollapse'] !== false\">\n </vertical-navigation-collapsable-item>\n }\n </ng-template>\n\n <ng-template #leafItem let-child>\n <vertical-navigation-basic-item [item]=\"child\"></vertical-navigation-basic-item>\n </ng-template>\n\n <ng-template #groupItem let-child>\n <div\n class=\"vertical-navigation-item-wrapper\"\n [class.vertical-navigation-item-has-subtitle]=\"!!child.subtitle\"\n [ngClass]=\"child.classes?.wrapper\">\n <div class=\"kit-navigation-group-header\">\n <navigation-item-content [item]=\"child\" variant=\"vertical-group\"></navigation-item-content>\n </div>\n </div>\n </ng-template>\n\n <ng-template #dividerItem>\n <vertical-navigation-divider-item></vertical-navigation-divider-item>\n </ng-template>\n\n <ng-template #spacerItem>\n <vertical-navigation-spacer-item></vertical-navigation-spacer-item>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NavigationItemContent,\n NavigationTreeOutlet,\n forwardRef(() => VerticalNavigationAsideItemComponent),\n VerticalNavigationBasicItemComponent,\n forwardRef(() => VerticalNavigationCollapsableItemComponent),\n VerticalNavigationDividerItemComponent,\n VerticalNavigationSpacerItemComponent,\n ],\n})\nexport class VerticalNavigationGroupItemComponent implements OnInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _navigationComponent = inject(VerticalNavigationBaseComponent);\n\n @Input() autoCollapse = true;\n @Input() item!: NavigationGroupItem;\n\n private _unsubscribeAll = new Subject<void>();\n readonly treeTrackByFn = trackNavigationTreeItem;\n readonly treeShouldRenderItemFn = shouldRenderNavigationItem;\n\n /**\n * On init\n */\n ngOnInit(): void {\n // Subscribe to onRefreshed on the navigation component\n this._navigationComponent.onRefreshed.pipe(takeUntil(this._unsubscribeAll)).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n /**\n * Track by function for ngFor loops\n */\n trackByFn(index: number, item: NavigationItem): string | number | undefined {\n return trackNavigationTreeItem(index, item);\n }\n\n shouldRenderItem(item: NavigationItem): boolean {\n return shouldRenderNavigationItem(item);\n }\n\n get treeTemplateData(): { autoCollapse: boolean } {\n return { autoCollapse: this.autoCollapse };\n }\n}\n","import { forwardRef, Provider } from '@angular/core';\nimport { VerticalNavigationAsideItemComponent } from './types/aside';\nimport { VerticalNavigationBasicItemComponent } from './types/basic';\nimport { VerticalNavigationCollapsableItemComponent } from './types/collapsable';\nimport { VerticalNavigationDividerItemComponent } from './types/divider';\nimport { VerticalNavigationGroupItemComponent } from './types/group';\nimport { VerticalNavigationSpacerItemComponent } from './types/spacer';\nimport { VerticalNavigationBaseComponent } from './vertical-navigation.base';\n\nexport const VERTICAL_NAVIGATION_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`;\n\nexport const VERTICAL_NAVIGATION_IMPORTS = [\n VerticalNavigationAsideItemComponent,\n VerticalNavigationBasicItemComponent,\n VerticalNavigationCollapsableItemComponent,\n VerticalNavigationDividerItemComponent,\n VerticalNavigationGroupItemComponent,\n VerticalNavigationSpacerItemComponent,\n];\n\nexport const VERTICAL_NAVIGATION_HOST = {\n '[class]': 'hostClasses',\n '[style.visibility]': 'opened ? \"visible\" : \"hidden\"',\n '(mouseenter)': 'onMouseenter()',\n '(mouseleave)': 'onMouseleave()',\n} as const;\n\nexport function provideVerticalNavigationComponent<T>(component: new (...args: never[]) => T): Provider {\n return {\n provide: VerticalNavigationBaseComponent,\n useExisting: forwardRef(() => component),\n };\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VerticalNavigationAppearance } from '@ojiepermana/angular/navigation';\nimport { VerticalNavigationBaseComponent } from './vertical-navigation.base';\nimport {\n provideVerticalNavigationComponent,\n VERTICAL_NAVIGATION_HOST,\n VERTICAL_NAVIGATION_IMPORTS,\n VERTICAL_NAVIGATION_TEMPLATE,\n} from './vertical-navigation.shared';\n\n@Component({\n selector: 'vertical-navigation',\n template: VERTICAL_NAVIGATION_TEMPLATE,\n styleUrls: ['./vertical-default.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'verticalNavigationDefault',\n imports: VERTICAL_NAVIGATION_IMPORTS,\n host: VERTICAL_NAVIGATION_HOST,\n providers: [provideVerticalNavigationComponent(VerticalNavigationDefaultComponent)],\n})\nexport class VerticalNavigationDefaultComponent\n extends VerticalNavigationBaseComponent\n implements OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n protected _componentPrefix = 'vertical-navigation';\n protected _asideWrapperClass = 'vertical-navigation-aside-wrapper';\n @Input() override appearance: VerticalNavigationAppearance = 'default';\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VerticalNavigationAppearance } from '@ojiepermana/angular/navigation';\nimport { VerticalNavigationBaseComponent } from './vertical-navigation.base';\nimport {\n provideVerticalNavigationComponent,\n VERTICAL_NAVIGATION_HOST,\n VERTICAL_NAVIGATION_IMPORTS,\n VERTICAL_NAVIGATION_TEMPLATE,\n} from './vertical-navigation.shared';\n\n@Component({\n selector: 'vertical-navigation-compact',\n template: VERTICAL_NAVIGATION_TEMPLATE,\n styleUrls: ['./vertical-compact.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'verticalNavigationCompact',\n imports: VERTICAL_NAVIGATION_IMPORTS,\n host: VERTICAL_NAVIGATION_HOST,\n providers: [provideVerticalNavigationComponent(VerticalNavigationCompactComponent)],\n})\nexport class VerticalNavigationCompactComponent\n extends VerticalNavigationBaseComponent\n implements OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n protected _componentPrefix = 'vertical-navigation-compact';\n protected _asideWrapperClass = 'vertical-navigation-compact-aside-wrapper';\n @Input() override appearance: VerticalNavigationAppearance = 'compact';\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VerticalNavigationAppearance } from '@ojiepermana/angular/navigation';\nimport { VerticalNavigationBaseComponent } from './vertical-navigation.base';\nimport {\n provideVerticalNavigationComponent,\n VERTICAL_NAVIGATION_HOST,\n VERTICAL_NAVIGATION_IMPORTS,\n VERTICAL_NAVIGATION_TEMPLATE,\n} from './vertical-navigation.shared';\n\n@Component({\n selector: 'vertical-navigation-dense',\n template: VERTICAL_NAVIGATION_TEMPLATE,\n styleUrls: ['./vertical-dense.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'verticalNavigationDense',\n imports: VERTICAL_NAVIGATION_IMPORTS,\n host: VERTICAL_NAVIGATION_HOST,\n providers: [provideVerticalNavigationComponent(VerticalNavigationDenseComponent)],\n})\nexport class VerticalNavigationDenseComponent\n extends VerticalNavigationBaseComponent\n implements OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n protected _componentPrefix = 'vertical-navigation-dense';\n protected _asideWrapperClass = 'vertical-navigation-dense-aside-wrapper';\n @Input() override appearance: VerticalNavigationAppearance = 'dense';\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VerticalNavigationAppearance } from '@ojiepermana/angular/navigation';\nimport { VerticalNavigationBaseComponent } from './vertical-navigation.base';\nimport {\n provideVerticalNavigationComponent,\n VERTICAL_NAVIGATION_HOST,\n VERTICAL_NAVIGATION_IMPORTS,\n VERTICAL_NAVIGATION_TEMPLATE,\n} from './vertical-navigation.shared';\n\n@Component({\n selector: 'vertical-navigation-thin',\n template: VERTICAL_NAVIGATION_TEMPLATE,\n styleUrls: ['./vertical-thin.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'verticalNavigationThin',\n imports: VERTICAL_NAVIGATION_IMPORTS,\n host: VERTICAL_NAVIGATION_HOST,\n providers: [provideVerticalNavigationComponent(VerticalNavigationThinComponent)],\n})\nexport class VerticalNavigationThinComponent\n extends VerticalNavigationBaseComponent\n implements OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n protected _componentPrefix = 'vertical-navigation-thin';\n protected _asideWrapperClass = 'vertical-navigation-thin-aside-wrapper';\n @Input() override appearance: VerticalNavigationAppearance = 'thin';\n}\n","/**\n * Vertical Navigation Components barrel export\n */\nexport * from './vertical-default';\nexport * from './vertical-compact';\nexport * from './vertical-dense';\nexport * from './vertical-thin';\n\n// Vertical navigation types/sub-components\nexport * from './types/aside';\nexport * from './types/basic';\nexport * from './types/collapsable';\nexport * from './types/divider';\nexport * from './types/group';\nexport * from './types/spacer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.VerticalNavigationAsideItemComponent","i2.VerticalNavigationBasicItemComponent","i3.VerticalNavigationCollapsableItemComponent","i4.VerticalNavigationDividerItemComponent","i5.VerticalNavigationGroupItemComponent","i6.VerticalNavigationSpacerItemComponent"],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, Injectable } from '@angular/core';
3
+
4
+ function getNavigationItemAction(item) {
5
+ return isNavigationRoutableItem(item) ? item.action : undefined;
6
+ }
7
+ function getNavigationItemVisibilityHandler(item) {
8
+ return item.isHidden;
9
+ }
10
+ function isNavigationItemHidden(item) {
11
+ return !!getNavigationItemVisibilityHandler(item)?.(item);
12
+ }
13
+ function shouldRenderNavigationItem(item) {
14
+ return !isNavigationItemHidden(item);
15
+ }
16
+ function hasNavigationChildren(item) {
17
+ return Array.isArray(item.children) && item.children.length > 0;
18
+ }
19
+ function getNavigationChildren(item) {
20
+ return Array.isArray(item.children) ? item.children : [];
21
+ }
22
+ function isNavigationRoutableItem(item) {
23
+ return item.type === 'basic' || item.type === 'aside' || item.type === 'collapsable';
24
+ }
25
+
26
+ /**
27
+ * Navigation Service
28
+ *
29
+ * Service ini bertanggung jawab untuk:
30
+ * 1. Store dan retrieve navigation data
31
+ * 2. Menyediakan state aktif dan expanded item
32
+ * 3. Utility functions untuk navigation operations
33
+ */
34
+ class NavigationService {
35
+ _navigation = signal([], ...(ngDevMode ? [{ debugName: "_navigation" }] : /* istanbul ignore next */ []));
36
+ _activeItemId = signal(null, ...(ngDevMode ? [{ debugName: "_activeItemId" }] : /* istanbul ignore next */ []));
37
+ _expandedItemIds = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedItemIds" }] : /* istanbul ignore next */ []));
38
+ navigationItems = this._navigation.asReadonly();
39
+ activeItemId = this._activeItemId.asReadonly();
40
+ flatNavigation = computed(() => this.getFlatNavigation(this._navigation()), ...(ngDevMode ? [{ debugName: "flatNavigation" }] : /* istanbul ignore next */ []));
41
+ expandedItemIds = computed(() => Array.from(this._expandedItemIds()), ...(ngDevMode ? [{ debugName: "expandedItemIds" }] : /* istanbul ignore next */ []));
42
+ /**
43
+ * Store navigation data
44
+ * Biasanya dipanggil saat app initialization
45
+ */
46
+ storeNavigation(navigation) {
47
+ this._navigation.set(navigation);
48
+ }
49
+ /**
50
+ * Get navigation data dari storage
51
+ */
52
+ getNavigation() {
53
+ return this._navigation();
54
+ }
55
+ /**
56
+ * Delete navigation data dari storage
57
+ */
58
+ deleteNavigation() {
59
+ if (!this._navigation().length) {
60
+ return;
61
+ }
62
+ this._navigation.set([]);
63
+ this.clearActiveItem();
64
+ this.clearExpandedItems();
65
+ }
66
+ setActiveItem(id) {
67
+ this._activeItemId.set(id);
68
+ }
69
+ clearActiveItem() {
70
+ this._activeItemId.set(null);
71
+ }
72
+ getActiveItem(navigation = this._navigation()) {
73
+ const activeItemId = this._activeItemId();
74
+ if (!activeItemId) {
75
+ return null;
76
+ }
77
+ return this.getItem(activeItemId, navigation);
78
+ }
79
+ expandItem(id) {
80
+ this._expandedItemIds.update((expandedItemIds) => {
81
+ const nextExpandedItemIds = new Set(expandedItemIds);
82
+ nextExpandedItemIds.add(id);
83
+ return nextExpandedItemIds;
84
+ });
85
+ }
86
+ collapseItem(id) {
87
+ this._expandedItemIds.update((expandedItemIds) => {
88
+ if (!expandedItemIds.has(id)) {
89
+ return expandedItemIds;
90
+ }
91
+ const nextExpandedItemIds = new Set(expandedItemIds);
92
+ nextExpandedItemIds.delete(id);
93
+ return nextExpandedItemIds;
94
+ });
95
+ }
96
+ toggleItemExpanded(id) {
97
+ if (this.isItemExpanded(id)) {
98
+ this.collapseItem(id);
99
+ return;
100
+ }
101
+ this.expandItem(id);
102
+ }
103
+ isItemExpanded(id) {
104
+ return this._expandedItemIds().has(id);
105
+ }
106
+ clearExpandedItems() {
107
+ this._expandedItemIds.set(new Set());
108
+ }
109
+ /**
110
+ * Flatten navigation array
111
+ * Convert nested structure menjadi flat array (hanya basic items)
112
+ * Berguna untuk search, analytics, atau operations lainnya
113
+ */
114
+ getFlatNavigation(navigation, flatNavigation = []) {
115
+ for (const item of navigation) {
116
+ if (item.type === 'basic') {
117
+ flatNavigation.push(item);
118
+ }
119
+ if (hasNavigationChildren(item)) {
120
+ this.getFlatNavigation(getNavigationChildren(item), flatNavigation);
121
+ }
122
+ }
123
+ return flatNavigation;
124
+ }
125
+ /**
126
+ * Get item by ID dari navigation tree
127
+ * Recursive search untuk find item dengan id tertentu
128
+ */
129
+ getItem(id, navigation) {
130
+ for (const item of navigation) {
131
+ if (item.id === id) {
132
+ return item;
133
+ }
134
+ if (hasNavigationChildren(item)) {
135
+ const childItem = this.getItem(id, getNavigationChildren(item));
136
+ if (childItem) {
137
+ return childItem;
138
+ }
139
+ }
140
+ }
141
+ return null;
142
+ }
143
+ /**
144
+ * Get parent dari item dengan id tertentu
145
+ * Berguna untuk breadcrumb atau navigation path
146
+ */
147
+ getItemParent(id, navigation, parent) {
148
+ for (const item of navigation) {
149
+ if (item.id === id) {
150
+ return parent;
151
+ }
152
+ if (hasNavigationChildren(item)) {
153
+ const result = this.getItemParent(id, getNavigationChildren(item), item);
154
+ if (result) {
155
+ return result;
156
+ }
157
+ }
158
+ }
159
+ return null;
160
+ }
161
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
162
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationService, providedIn: 'root' });
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationService, decorators: [{
165
+ type: Injectable,
166
+ args: [{ providedIn: 'root' }]
167
+ }] });
168
+
169
+ /* Navigation state and utility exports. */
170
+
171
+ /**
172
+ * Generated bundle index. Do not edit.
173
+ */
174
+
175
+ export { NavigationService, getNavigationChildren, getNavigationItemAction, getNavigationItemVisibilityHandler, hasNavigationChildren, isNavigationItemHidden, isNavigationRoutableItem, shouldRenderNavigationItem };
176
+ //# sourceMappingURL=ojiepermana-angular-navigation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-navigation.mjs","sources":["../../../projects/library/navigation/navigation.utils.ts","../../../projects/library/navigation/navigation.service.ts","../../../projects/library/navigation/index.ts","../../../projects/library/navigation/ojiepermana-angular-navigation.ts"],"sourcesContent":["import {\n NavigationActionHandler,\n NavigationBranchItem,\n NavigationItem,\n NavigationRoutableItemBase,\n NavigationVisibilityHandler,\n} from './navigation.type';\n\nexport function getNavigationItemAction(item: NavigationItem): NavigationActionHandler | undefined {\n return isNavigationRoutableItem(item) ? item.action : undefined;\n}\n\nexport function getNavigationItemVisibilityHandler(item: NavigationItem): NavigationVisibilityHandler | undefined {\n return item.isHidden;\n}\n\nexport function isNavigationItemHidden(item: NavigationItem): boolean {\n return !!getNavigationItemVisibilityHandler(item)?.(item);\n}\n\nexport function shouldRenderNavigationItem(item: NavigationItem): boolean {\n return !isNavigationItemHidden(item);\n}\n\nexport function hasNavigationChildren(item: NavigationItem): item is NavigationBranchItem {\n return Array.isArray(item.children) && item.children.length > 0;\n}\n\nexport function getNavigationChildren(item: NavigationItem): NavigationItem[] {\n return Array.isArray(item.children) ? item.children : [];\n}\n\nexport function isNavigationRoutableItem(item: NavigationItem): item is NavigationItem & NavigationRoutableItemBase {\n return item.type === 'basic' || item.type === 'aside' || item.type === 'collapsable';\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { NavigationItem } from './navigation.type';\nimport { getNavigationChildren, hasNavigationChildren } from './navigation.utils';\n\n/**\n * Navigation Service\n *\n * Service ini bertanggung jawab untuk:\n * 1. Store dan retrieve navigation data\n * 2. Menyediakan state aktif dan expanded item\n * 3. Utility functions untuk navigation operations\n */\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private _navigation = signal<NavigationItem[]>([]);\n private _activeItemId = signal<string | null>(null);\n private _expandedItemIds = signal<Set<string>>(new Set());\n\n readonly navigationItems = this._navigation.asReadonly();\n readonly activeItemId = this._activeItemId.asReadonly();\n readonly flatNavigation = computed(() => this.getFlatNavigation(this._navigation()));\n\n readonly expandedItemIds = computed(() => Array.from(this._expandedItemIds()));\n\n /**\n * Store navigation data\n * Biasanya dipanggil saat app initialization\n */\n storeNavigation(navigation: NavigationItem[]): void {\n this._navigation.set(navigation);\n }\n\n /**\n * Get navigation data dari storage\n */\n getNavigation(): NavigationItem[] {\n return this._navigation();\n }\n\n /**\n * Delete navigation data dari storage\n */\n deleteNavigation(): void {\n if (!this._navigation().length) {\n return;\n }\n this._navigation.set([]);\n this.clearActiveItem();\n this.clearExpandedItems();\n }\n\n setActiveItem(id: string | null): void {\n this._activeItemId.set(id);\n }\n\n clearActiveItem(): void {\n this._activeItemId.set(null);\n }\n\n getActiveItem(navigation: NavigationItem[] = this._navigation()): NavigationItem | null {\n const activeItemId = this._activeItemId();\n if (!activeItemId) {\n return null;\n }\n\n return this.getItem(activeItemId, navigation);\n }\n\n expandItem(id: string): void {\n this._expandedItemIds.update((expandedItemIds) => {\n const nextExpandedItemIds = new Set(expandedItemIds);\n nextExpandedItemIds.add(id);\n return nextExpandedItemIds;\n });\n }\n\n collapseItem(id: string): void {\n this._expandedItemIds.update((expandedItemIds) => {\n if (!expandedItemIds.has(id)) {\n return expandedItemIds;\n }\n\n const nextExpandedItemIds = new Set(expandedItemIds);\n nextExpandedItemIds.delete(id);\n return nextExpandedItemIds;\n });\n }\n\n toggleItemExpanded(id: string): void {\n if (this.isItemExpanded(id)) {\n this.collapseItem(id);\n return;\n }\n\n this.expandItem(id);\n }\n\n isItemExpanded(id: string): boolean {\n return this._expandedItemIds().has(id);\n }\n\n clearExpandedItems(): void {\n this._expandedItemIds.set(new Set());\n }\n\n /**\n * Flatten navigation array\n * Convert nested structure menjadi flat array (hanya basic items)\n * Berguna untuk search, analytics, atau operations lainnya\n */\n getFlatNavigation(navigation: NavigationItem[], flatNavigation: NavigationItem[] = []): NavigationItem[] {\n for (const item of navigation) {\n if (item.type === 'basic') {\n flatNavigation.push(item);\n }\n\n if (hasNavigationChildren(item)) {\n this.getFlatNavigation(getNavigationChildren(item), flatNavigation);\n }\n }\n\n return flatNavigation;\n }\n\n /**\n * Get item by ID dari navigation tree\n * Recursive search untuk find item dengan id tertentu\n */\n getItem(id: string, navigation: NavigationItem[]): NavigationItem | null {\n for (const item of navigation) {\n if (item.id === id) {\n return item;\n }\n\n if (hasNavigationChildren(item)) {\n const childItem = this.getItem(id, getNavigationChildren(item));\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get parent dari item dengan id tertentu\n * Berguna untuk breadcrumb atau navigation path\n */\n getItemParent(\n id: string,\n navigation: NavigationItem[],\n parent: NavigationItem[] | NavigationItem,\n ): NavigationItem[] | NavigationItem | null {\n for (const item of navigation) {\n if (item.id === id) {\n return parent;\n }\n\n if (hasNavigationChildren(item)) {\n const result = this.getItemParent(id, getNavigationChildren(item), item);\n if (result) {\n return result;\n }\n }\n }\n\n return null;\n }\n}\n","/* Navigation state and utility exports. */\n\nexport * from './navigation.type';\nexport * from './navigation.utils';\nexport * from './navigation.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -22,8 +22,7 @@ class StyleSwitcherComponent {
22
22
  aria-label="Glass style"
23
23
  [attr.aria-pressed]="theme.style() === 'glass'"
24
24
  [matTooltip]="label()"
25
- (click)="toggle()"
26
- >
25
+ (click)="toggle()">
27
26
  @if (theme.style() === 'flat') {
28
27
  <svg lucideLayoutDashboard aria-hidden="true"></svg>
29
28
  } @else {
@@ -47,8 +46,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
47
46
  aria-label="Glass style"
48
47
  [attr.aria-pressed]="theme.style() === 'glass'"
49
48
  [matTooltip]="label()"
50
- (click)="toggle()"
51
- >
49
+ (click)="toggle()">
52
50
  @if (theme.style() === 'flat') {
53
51
  <svg lucideLayoutDashboard aria-hidden="true"></svg>
54
52
  } @else {
@@ -68,22 +66,18 @@ class ColorPickerComponent {
68
66
  @for (c of colors(); track c.value) {
69
67
  <button
70
68
  type="button"
71
- class="color-picker-button focus-ring inline-flex size-11 items-center justify-center rounded-full p-1.5 transition-transform duration-150 hover:-translate-y-px"
69
+ class="color-picker-button focus-ring inline-flex size-11 items-center justify-center rounded-full p-1.5"
72
70
  [class.color-picker-button-selected]="theme.color() === c.value"
73
71
  [attr.aria-label]="
74
- theme.color() === c.value
75
- ? 'Theme color: ' + c.label + ' (selected)'
76
- : 'Theme color: ' + c.label
72
+ theme.color() === c.value ? 'Theme color: ' + c.label + ' (selected)' : 'Theme color: ' + c.label
77
73
  "
78
74
  [attr.aria-pressed]="theme.color() === c.value"
79
75
  [matTooltip]="c.label"
80
- (click)="theme.setColor(c.value)"
81
- >
76
+ (click)="theme.setColor(c.value)">
82
77
  <span
83
78
  class="color-picker-swatch size-7 rounded-full border"
84
79
  [attr.data-theme-color]="c.value"
85
- aria-hidden="true"
86
- ></span>
80
+ aria-hidden="true"></span>
87
81
  </button>
88
82
  }
89
83
  </div>
@@ -96,22 +90,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
96
90
  @for (c of colors(); track c.value) {
97
91
  <button
98
92
  type="button"
99
- class="color-picker-button focus-ring inline-flex size-11 items-center justify-center rounded-full p-1.5 transition-transform duration-150 hover:-translate-y-px"
93
+ class="color-picker-button focus-ring inline-flex size-11 items-center justify-center rounded-full p-1.5"
100
94
  [class.color-picker-button-selected]="theme.color() === c.value"
101
95
  [attr.aria-label]="
102
- theme.color() === c.value
103
- ? 'Theme color: ' + c.label + ' (selected)'
104
- : 'Theme color: ' + c.label
96
+ theme.color() === c.value ? 'Theme color: ' + c.label + ' (selected)' : 'Theme color: ' + c.label
105
97
  "
106
98
  [attr.aria-pressed]="theme.color() === c.value"
107
99
  [matTooltip]="c.label"
108
- (click)="theme.setColor(c.value)"
109
- >
100
+ (click)="theme.setColor(c.value)">
110
101
  <span
111
102
  class="color-picker-swatch size-7 rounded-full border"
112
103
  [attr.data-theme-color]="c.value"
113
- aria-hidden="true"
114
- ></span>
104
+ aria-hidden="true"></span>
115
105
  </button>
116
106
  }
117
107
  </div>
@@ -134,8 +124,7 @@ class SchemeSwitcherComponent {
134
124
  mat-icon-button
135
125
  [attr.aria-label]="'Color scheme: ' + currentOption().label"
136
126
  [matTooltip]="'Color scheme: ' + currentOption().label"
137
- [matMenuTriggerFor]="menu"
138
- >
127
+ [matMenuTriggerFor]="menu">
139
128
  @switch (theme.scheme()) {
140
129
  @case ('light') {
141
130
  <svg lucideSun aria-hidden="true"></svg>
@@ -156,8 +145,7 @@ class SchemeSwitcherComponent {
156
145
  mat-menu-item
157
146
  role="menuitemradio"
158
147
  [attr.aria-checked]="theme.scheme() === option.value"
159
- (click)="theme.setScheme(option.value)"
160
- >
148
+ (click)="theme.setScheme(option.value)">
161
149
  @switch (option.value) {
162
150
  @case ('light') {
163
151
  <svg lucideSun aria-hidden="true"></svg>
@@ -198,8 +186,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
198
186
  mat-icon-button
199
187
  [attr.aria-label]="'Color scheme: ' + currentOption().label"
200
188
  [matTooltip]="'Color scheme: ' + currentOption().label"
201
- [matMenuTriggerFor]="menu"
202
- >
189
+ [matMenuTriggerFor]="menu">
203
190
  @switch (theme.scheme()) {
204
191
  @case ('light') {
205
192
  <svg lucideSun aria-hidden="true"></svg>
@@ -220,8 +207,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
220
207
  mat-menu-item
221
208
  role="menuitemradio"
222
209
  [attr.aria-checked]="theme.scheme() === option.value"
223
- (click)="theme.setScheme(option.value)"
224
- >
210
+ (click)="theme.setScheme(option.value)">
225
211
  @switch (option.value) {
226
212
  @case ('light') {
227
213
  <svg lucideSun aria-hidden="true"></svg>
@@ -1 +1 @@
1
- {"version":3,"file":"ojiepermana-angular-theme-component.mjs","sources":["../../../projects/library/theme/component/src/style-switcher.ts","../../../projects/library/theme/component/src/color-picker.ts","../../../projects/library/theme/component/src/scheme-switcher.ts","../../../projects/library/theme/component/ojiepermana-angular-theme-component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideBlend, LucideLayoutDashboard } from '@lucide/angular';\nimport { ThemeService } from '@ojiepermana/angular/theme/service';\n\n@Component({\n selector: 'style-switcher',\n imports: [MatIconButton, MatTooltip, LucideBlend, LucideLayoutDashboard],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n aria-label=\"Glass style\"\n [attr.aria-pressed]=\"theme.style() === 'glass'\"\n [matTooltip]=\"label()\"\n (click)=\"toggle()\"\n >\n @if (theme.style() === 'flat') {\n <svg lucideLayoutDashboard aria-hidden=\"true\"></svg>\n } @else {\n <svg lucideBlend aria-hidden=\"true\"></svg>\n }\n </button>\n `,\n})\nexport class StyleSwitcherComponent {\n protected readonly theme = inject(ThemeService);\n\n protected readonly label = computed(() =>\n this.theme.style() === 'glass' ? 'Glass style enabled' : 'Glass style disabled',\n );\n\n protected toggle(): void {\n this.theme.setStyle(this.theme.style() === 'flat' ? 'glass' : 'flat');\n }\n}","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ThemeService } from '@ojiepermana/angular/theme/service';\n\n@Component({\n selector: 'color-picker',\n imports: [MatTooltip],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n .color-picker-button {\n border: 1px solid transparent;\n background: transparent;\n }\n\n .color-picker-button-selected {\n border-color: color-mix(in oklab, var(--ring) 42%, var(--border));\n background: color-mix(in oklab, var(--accent) 60%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--ring) 26%, transparent);\n }\n\n .color-picker-swatch {\n background: var(--theme-primary);\n border-color: color-mix(in oklab, var(--theme-primary) 42%, white 58%);\n }\n `,\n template: `\n <div class=\"flex items-center gap-1\" role=\"group\" aria-label=\"Theme colors\">\n @for (c of colors(); track c.value) {\n <button\n type=\"button\"\n class=\"color-picker-button focus-ring inline-flex size-11 items-center justify-center rounded-full p-1.5 transition-transform duration-150 hover:-translate-y-px\"\n [class.color-picker-button-selected]=\"theme.color() === c.value\"\n [attr.aria-label]=\"\n theme.color() === c.value\n ? 'Theme color: ' + c.label + ' (selected)'\n : 'Theme color: ' + c.label\n \"\n [attr.aria-pressed]=\"theme.color() === c.value\"\n [matTooltip]=\"c.label\"\n (click)=\"theme.setColor(c.value)\"\n >\n <span\n class=\"color-picker-swatch size-7 rounded-full border\"\n [attr.data-theme-color]=\"c.value\"\n aria-hidden=\"true\"\n ></span>\n </button>\n }\n </div>\n `,\n})\nexport class ColorPickerComponent {\n protected readonly theme = inject(ThemeService);\n\n protected readonly colors = this.theme.colorOptions;\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideMonitorCog, LucideMoonStar, LucideSun } from '@lucide/angular';\nimport { ThemeService } from '@ojiepermana/angular/theme/service';\n\n@Component({\n selector: 'scheme-switcher',\n imports: [\n MatIconButton,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatTooltip,\n LucideSun,\n LucideMoonStar,\n LucideMonitorCog,\n ],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n [attr.aria-label]=\"'Color scheme: ' + currentOption().label\"\n [matTooltip]=\"'Color scheme: ' + currentOption().label\"\n [matMenuTriggerFor]=\"menu\"\n >\n @switch (theme.scheme()) {\n @case ('light') {\n <svg lucideSun aria-hidden=\"true\"></svg>\n }\n @case ('dark') {\n <svg lucideMoonStar aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideMonitorCog aria-hidden=\"true\"></svg>\n }\n }\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n mat-menu-item\n role=\"menuitemradio\"\n [attr.aria-checked]=\"theme.scheme() === option.value\"\n (click)=\"theme.setScheme(option.value)\"\n >\n @switch (option.value) {\n @case ('light') {\n <svg lucideSun aria-hidden=\"true\"></svg>\n }\n @case ('dark') {\n <svg lucideMoonStar aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideMonitorCog aria-hidden=\"true\"></svg>\n }\n }\n <span>{{ option.label }}</span>\n </button>\n }\n </mat-menu>\n `,\n})\nexport class SchemeSwitcherComponent {\n protected readonly theme = inject(ThemeService);\n\n protected readonly options = [\n { value: 'light' as const, label: 'Light' },\n { value: 'dark' as const, label: 'Dark' },\n { value: 'system' as const, label: 'System' },\n ];\n\n protected readonly currentOption = computed(\n () => this.options.find((option) => option.value === this.theme.scheme()) ?? this.options[2],\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ojiepermana-angular-theme-component.mjs","sources":["../../../projects/library/theme/component/src/style-switcher.ts","../../../projects/library/theme/component/src/color-picker.ts","../../../projects/library/theme/component/src/scheme-switcher.ts","../../../projects/library/theme/component/ojiepermana-angular-theme-component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideBlend, LucideLayoutDashboard } from '@lucide/angular';\nimport { ThemeService } from '@ojiepermana/angular/theme/service';\n\n@Component({\n selector: 'style-switcher',\n imports: [MatIconButton, MatTooltip, LucideBlend, LucideLayoutDashboard],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n aria-label=\"Glass style\"\n [attr.aria-pressed]=\"theme.style() === 'glass'\"\n [matTooltip]=\"label()\"\n (click)=\"toggle()\">\n @if (theme.style() === 'flat') {\n <svg lucideLayoutDashboard aria-hidden=\"true\"></svg>\n } @else {\n <svg lucideBlend aria-hidden=\"true\"></svg>\n }\n </button>\n `,\n})\nexport class StyleSwitcherComponent {\n protected readonly theme = inject(ThemeService);\n\n protected readonly label = computed(() =>\n this.theme.style() === 'glass' ? 'Glass style enabled' : 'Glass style disabled',\n );\n\n protected toggle(): void {\n this.theme.setStyle(this.theme.style() === 'flat' ? 'glass' : 'flat');\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ThemeService } from '@ojiepermana/angular/theme/service';\n\n@Component({\n selector: 'color-picker',\n imports: [MatTooltip],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n .color-picker-button {\n border: 1px solid transparent;\n background: transparent;\n }\n\n .color-picker-button-selected {\n border-color: color-mix(in oklab, var(--ring) 42%, var(--border));\n background: color-mix(in oklab, var(--accent) 60%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--ring) 26%, transparent);\n }\n\n .color-picker-swatch {\n background: var(--theme-primary);\n border-color: color-mix(in oklab, var(--theme-primary) 42%, white 58%);\n }\n `,\n template: `\n <div class=\"flex items-center gap-1\" role=\"group\" aria-label=\"Theme colors\">\n @for (c of colors(); track c.value) {\n <button\n type=\"button\"\n class=\"color-picker-button focus-ring inline-flex size-11 items-center justify-center rounded-full p-1.5\"\n [class.color-picker-button-selected]=\"theme.color() === c.value\"\n [attr.aria-label]=\"\n theme.color() === c.value ? 'Theme color: ' + c.label + ' (selected)' : 'Theme color: ' + c.label\n \"\n [attr.aria-pressed]=\"theme.color() === c.value\"\n [matTooltip]=\"c.label\"\n (click)=\"theme.setColor(c.value)\">\n <span\n class=\"color-picker-swatch size-7 rounded-full border\"\n [attr.data-theme-color]=\"c.value\"\n aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n `,\n})\nexport class ColorPickerComponent {\n protected readonly theme = inject(ThemeService);\n\n protected readonly colors = this.theme.colorOptions;\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideMonitorCog, LucideMoonStar, LucideSun } from '@lucide/angular';\nimport { ThemeService } from '@ojiepermana/angular/theme/service';\n\n@Component({\n selector: 'scheme-switcher',\n imports: [\n MatIconButton,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatTooltip,\n LucideSun,\n LucideMoonStar,\n LucideMonitorCog,\n ],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n [attr.aria-label]=\"'Color scheme: ' + currentOption().label\"\n [matTooltip]=\"'Color scheme: ' + currentOption().label\"\n [matMenuTriggerFor]=\"menu\">\n @switch (theme.scheme()) {\n @case ('light') {\n <svg lucideSun aria-hidden=\"true\"></svg>\n }\n @case ('dark') {\n <svg lucideMoonStar aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideMonitorCog aria-hidden=\"true\"></svg>\n }\n }\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n mat-menu-item\n role=\"menuitemradio\"\n [attr.aria-checked]=\"theme.scheme() === option.value\"\n (click)=\"theme.setScheme(option.value)\">\n @switch (option.value) {\n @case ('light') {\n <svg lucideSun aria-hidden=\"true\"></svg>\n }\n @case ('dark') {\n <svg lucideMoonStar aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideMonitorCog aria-hidden=\"true\"></svg>\n }\n }\n <span>{{ option.label }}</span>\n </button>\n }\n </mat-menu>\n `,\n})\nexport class SchemeSwitcherComponent {\n protected readonly theme = inject(ThemeService);\n\n protected readonly options = [\n { value: 'light' as const, label: 'Light' },\n { value: 'dark' as const, label: 'Dark' },\n { value: 'system' as const, label: 'System' },\n ];\n\n protected readonly currentOption = computed(\n () => this.options.find((option) => option.value === this.theme.scheme()) ?? this.options[2],\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}