@filip.mazev/blocks 1.2.34 → 1.2.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blocks/schematics/ng-add/schema.json +6 -1
- package/core/styles/_index.scss +1 -0
- package/core/styles/_palettes.scss +31 -2
- package/core/styles/_theme-engine.scss +38 -30
- package/core/styles/themes/_cyberpunk-theme.scss +4 -0
- package/core/styles/themes/_high-contrast-theme.scss +6 -2
- package/fesm2022/filip.mazev-blocks-core.mjs +218 -44
- package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-forms.mjs +341 -6
- package/fesm2022/filip.mazev-blocks-forms.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-icons.mjs +2 -2
- package/fesm2022/filip.mazev-blocks-icons.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-modal.mjs +8 -8
- package/fesm2022/filip.mazev-blocks-modal.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-navigation.mjs +4 -55
- package/fesm2022/filip.mazev-blocks-navigation.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-primitives.mjs +245 -0
- package/fesm2022/filip.mazev-blocks-primitives.mjs.map +1 -0
- package/fesm2022/filip.mazev-blocks-toastr.mjs +4 -4
- package/fesm2022/filip.mazev-blocks-toastr.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks.mjs +1 -1
- package/fesm2022/filip.mazev-blocks.mjs.map +1 -1
- package/package.json +5 -1
- package/schematics/ng-add/index.d.ts +1 -1
- package/schematics/ng-add/schema.json +6 -1
- package/types/filip.mazev-blocks-core.d.ts +73 -21
- package/types/filip.mazev-blocks-forms.d.ts +153 -3
- package/types/filip.mazev-blocks-navigation.d.ts +2 -25
- package/types/filip.mazev-blocks-primitives.d.ts +85 -0
- package/types/filip.mazev-blocks.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks-navigation.mjs","sources":["../../../projects/blocks/navigation/tokens/navigation-config.token.ts","../../../projects/blocks/navigation/tokens/navigation-access-adapter.token.ts","../../../projects/blocks/navigation/services/navigation.service.ts","../../../projects/blocks/navigation/components/breadcrumbs/breadcrumbs.ts","../../../projects/blocks/navigation/components/breadcrumbs/breadcrumbs.html","../../../projects/blocks/navigation/components/menu/menu.ts","../../../projects/blocks/navigation/components/menu/menu.html","../../../projects/blocks/navigation/components/menu-item/menu-item.ts","../../../projects/blocks/navigation/components/menu-item/menu-item.html","../../../projects/blocks/navigation/helpers/navigation-functions.ts","../../../projects/blocks/navigation/public-api.ts","../../../projects/blocks/navigation/filip.mazev-blocks-navigation.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { INavigationConfig } from \"../interfaces/inavigation-config.interface\";\n\nexport const NAVIGATION_CONFIG = new InjectionToken<INavigationConfig>('NAVIGATION_CONFIG');","import { InjectionToken } from \"@angular/core\";\nimport { INavigationAccessAdapter } from \"../interfaces/inavigation-access-adapter.interface\";\n\nexport const NAVIGATION_ACCESS_ADAPTER = new InjectionToken<INavigationAccessAdapter>('NAVIGATION_ACCESS_ADAPTER');","import { computed, inject, Injectable, Signal } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, NavigationEnd, Router, Routes } from \"@angular/router\";\nimport { NAVIGATION_CONFIG } from \"../tokens/navigation-config.token\";\nimport { IResolvedNavigation } from \"../interfaces/iresolved-navigation.interface\";\nimport { filter } from \"rxjs\";\nimport { IBreadcrumbItem } from \"../interfaces/ibreadcrumb-item.interface\";\nimport { INavMeta } from \"../interfaces/inav-meta.interface\";\nimport { INavigationItem } from \"../interfaces/inavigation-item.interface\";\nimport { NAVIGATION_ACCESS_ADAPTER } from \"../tokens/navigation-access-adapter.token\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\nimport { INavContext } from \"../interfaces/inav-context.interface\";\nimport { BX_I18N, isTextWithKey, ResolvableText } from \"@filip.mazev/blocks/core\";\nimport { NavText } from \"../types/navigation.types\";\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly router = inject(Router);\n private readonly config = inject(NAVIGATION_CONFIG, { optional: true });\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly accessAdapter = inject(NAVIGATION_ACCESS_ADAPTER, { optional: true });\n\n private readonly navEnd = toSignal(\n this.router.events.pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n );\n\n public readonly current = computed<IResolvedNavigation>(() => {\n this.navEnd(); \n this.i18n?.version?.();\n return this.resolveCurrent(this.router.routerState.snapshot.root);\n });\n\n public readonly routeBase = computed<string | undefined>(() => {\n return this.accessAdapter?.resolveBaseRoute();\n });\n\n public readonly routes: Signal<INavigationItem[]> = computed(() => {\n this.i18n?.version?.();\n return this.extractRoutes(this.router.config);\n });\n\n public readonly baseRoute = computed<string | undefined>(() => {\n const viewableRoutes = this.routes();\n \n const primaryPrefix = this.routeBase(); \n\n let firstFoundRoot: string | undefined;\n\n const findRootRoute = (items: INavigationItem[]): string | undefined => {\n for (const item of items) {\n if (item.data?.root) {\n if (!firstFoundRoot) {\n firstFoundRoot = item.route;\n }\n\n if (primaryPrefix && item.route.startsWith(primaryPrefix)) {\n return item.route;\n }\n }\n \n if (item.children?.length) {\n const childRoot = findRootRoute(item.children);\n if (childRoot) return childRoot;\n }\n }\n return undefined;\n };\n\n const perfectMatch = findRootRoute(viewableRoutes);\n\n return perfectMatch ?? firstFoundRoot ?? primaryPrefix;\n });\n\n public readonly menu = computed(() => this.buildMenu(this.routes()));\n\n public navigateBack(): void {\n const breadcrumbs = this.current().breadcrumbs;\n \n if (breadcrumbs.length > 1) {\n const previousBreadcrumb = breadcrumbs[breadcrumbs.length - 2];\n this.router.navigateByUrl(previousBreadcrumb.route);\n } else {\n this.router.navigateByUrl(this.routeBase() ?? '/');\n }\n }\n\n //#region Helpers\n\n private extractRoutes(routes: Routes, parentSegment: string[] = []): INavigationItem[] {\n const items: INavigationItem[] = [];\n\n for(const route of routes) {\n if(route.redirectTo) continue;\n\n if (this.accessAdapter && !this.accessAdapter.canAccessMenu(route.data ?? {})) {\n continue;\n }\n\n const ownPath = route.path ?? '';\n \n const fullSegments = ownPath \n ? [...parentSegment, ownPath] \n : [...parentSegment];\n\n const fullRoute = '/' + fullSegments.filter(Boolean).join('/');\n\n const children = route.children?.length\n ? this.extractRoutes(route.children, fullSegments)\n : [];\n \n const nav = route.data?.['nav'] as INavMeta | undefined;\n\n if(!nav) {\n items.push(...children);\n continue;\n }\n\n const item = {\n id: fullRoute,\n route: fullRoute,\n label: this.resolveNavText(nav.label, { snapshot: undefined }) ?? '',\n icon: nav.icon,\n section: nav.section,\n visible: nav.visible ? nav.visible() : true,\n data: nav,\n children\n };\n\n items.push(item);\n }\n\n return this.sortNavigationItems(items);\n }\n\n private resolveCurrent(root: ActivatedRouteSnapshot): IResolvedNavigation {\n let currentNode: ActivatedRouteSnapshot | null = root;\n let finalSnapshot: ActivatedRouteSnapshot | undefined;\n\n while (currentNode) {\n const next: ActivatedRouteSnapshot | null = currentNode.children.find(child => child.outlet === 'primary') ?? null;\n if (!next) {\n finalSnapshot = currentNode;\n break;\n }\n currentNode = next;\n }\n\n if (!finalSnapshot) return { breadcrumbs: [] };\n\n const urlSegments = finalSnapshot.pathFromRoot\n .flatMap(s => s.url.map(u => u.path))\n .filter(Boolean);\n\n const breadcrumbs: IBreadcrumbItem[] = [];\n const allItems = this.flattenRoutes(this.routes());\n let currentUrl = '';\n\n for (const segment of urlSegments) {\n currentUrl += '/' + segment;\n \n const matchingItem = this.matchRouteToUrl(allItems, currentUrl);\n\n if (matchingItem && matchingItem.data && !matchingItem.data.hidden) {\n const ctx: INavContext = { snapshot: finalSnapshot };\n \n const label = this.resolveNavText(matchingItem.data.breadcrumb, ctx) \n ?? this.resolveNavText(matchingItem.data.label, ctx);\n \n if (label && breadcrumbs[breadcrumbs.length - 1]?.label !== label) {\n breadcrumbs.push({ label, route: currentUrl });\n }\n }\n }\n\n const leafNav = finalSnapshot.routeConfig?.data?.['nav'] as INavMeta | undefined;\n const fullUrl = '/' + urlSegments.join('/');\n \n let current: INavigationItem | undefined;\n\n if (leafNav && !leafNav.hidden) {\n current = {\n id: fullUrl,\n route: fullUrl,\n label: this.resolveNavText(leafNav.label, { snapshot: finalSnapshot }) ?? '',\n icon: leafNav.icon,\n section: leafNav.section,\n visible: leafNav.visible ? leafNav.visible() : true,\n data: leafNav\n };\n }\n\n return { current, breadcrumbs };\n }\n\n private buildMenu(items: INavigationItem[]): INavigationItem[] {\n return items\n .map((item): INavigationItem | null => {\n const children = this.buildMenu(item.children ?? []);\n const includeSelf = item.visible && item.data?.menu !== false;\n\n if (!includeSelf && !children.length) {\n return null;\n }\n\n return {\n ...item,\n children\n };\n }) \n .filter((item): item is INavigationItem => item !== null);\n }\n\n private sortNavigationItems(items: INavigationItem[]): INavigationItem[] {\n const customSort = this.config?.sortItems;\n\n return [...items].sort((a, b) => {\n if(customSort) {\n return customSort(a, b);\n }\n\n const orderA = a.data?.order ?? Number.POSITIVE_INFINITY;\n const orderB = b.data?.order ?? Number.POSITIVE_INFINITY;\n\n if(orderA !== orderB) return orderA - orderB;\n return a.label.localeCompare(b.label);\n });\n }\n\n private matchRouteToUrl(items: INavigationItem[], url: string): INavigationItem | undefined {\n const exactMatch = items.find(i => i.route === url);\n if (exactMatch) return exactMatch;\n\n return items.find(i => {\n if (!i.route.includes(':')) return false;\n const routeRegex = new RegExp('^' + i.route.replace(/:[^\\s/]+/g, '([^/]+)') + '$');\n return routeRegex.test(url);\n });\n }\n\n private flattenRoutes(items: INavigationItem[]): INavigationItem[] {\n return items.reduce((acc, item) => {\n acc.push(item);\n if (item.children) acc.push(...this.flattenRoutes(item.children));\n return acc;\n }, [] as INavigationItem[]);\n }\n\n private resolveNavText(textDef: NavText | undefined, ctx: INavContext): string | undefined {\n if (!textDef) return undefined;\n\n const text: ResolvableText = typeof textDef === 'function' \n ? textDef(ctx) \n : textDef;\n \n if (isTextWithKey(text)) {\n return this.i18n?.translate(text.key, { route: ctx.snapshot });\n }\n\n return text;\n }\n\n //#endregion\n}","import { Component, computed, inject, input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgClass } from '@angular/common';\nimport { NavigationService } from '../../services/navigation.service';\nimport { Icon, IconName } from '@filip.mazev/blocks/icons';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-breadcrumbs',\n imports: [NgClass, Icon],\n templateUrl: './breadcrumbs.html',\n styleUrl: './breadcrumbs.scss'\n})\nexport class Breadcrumbs {\n private readonly navigationService = inject(NavigationService);\n private readonly router = inject(Router);\n private readonly a11y = inject(BxA11yService);\n \n protected readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n \n public readonly minimumBreadcrumbs = input<number>(2);\n public readonly divider = input<IconName>('chevron-right');\n\n protected showBreadcumbs = computed(() => {\n const minimum = Math.max(1, this.minimumBreadcrumbs());\n return this.current().breadcrumbs.length >= minimum;\n });\n\n protected ariaLabel = computed(() => {\n const labels = this.current().breadcrumbs.map(crumb => crumb.label).join(' > ');\n return `Breadcrumbs: ${labels}`;\n });\n\n protected current = this.navigationService.current;\n\n protected navigateTo(url: string) {\n this.router.navigateByUrl(url);\n }\n}\n","@if(showBreadcumbs()) {\n<nav class=\"breadcrumbs\" [aria-label]=\"ariaLabel()\">\n @for (crumb of current().breadcrumbs; track crumb.route; let i = $index) {\n <button class=\"crumb\" (click)=\"navigateTo(crumb.route)\" [ngClass]=\"{\n 'last': i === current().breadcrumbs.length - 1,\n 'breadcrumb-on-appear': i === current().breadcrumbs.length - 1 && current().breadcrumbs.length > 1\n }\" [style.--crumb-index]=\"i\" [class.bx-breadcrumb-animated]=\"isAnimated()\">\n {{ crumb.label }}\n </button>\n\n @if (i !== current().breadcrumbs.length - 1) {\n <bx-icon [name]=\"divider()\" size=\"16\" class=\"breadcrumb-separator\" />\n }\n }\n</nav>\n}","import { Component, computed, inject } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-menu',\n imports: [],\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n})\nexport class Menu {\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n}\n","<div class=\"bx-menu-wrapper\" [class.bx-menu-animated]=\"isAnimated()\">\n <ng-content></ng-content>\n</div>","import { Component, computed, inject, input, output } from \"@angular/core\";\nimport { Icon, IconName } from \"@filip.mazev/blocks/icons\";\nimport { BX_I18N, BxA11yService, isTextWithKey, ResolvableText } from \"@filip.mazev/blocks/core\";\n\n@Component({\n selector: 'bx-menu-item',\n imports: [Icon],\n templateUrl: './menu-item.html',\n styleUrl: './menu-item.scss'\n})\nexport class MenuItem {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n\n public readonly icon = input<IconName | undefined>(undefined);\n public readonly endIcon = input<IconName | undefined>(undefined);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly disabled = input(false);\n \n public readonly danger = input(false); \n\n public readonly action = output<MouseEvent>();\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.(); \n \n const label = this.label();\n if (!label) return undefined;\n \n if (isTextWithKey(label)) {\n return this.i18n?.translate(label.key) ?? label.key;\n }\n \n return label;\n });\n\n protected onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.action.emit(event);\n }\n}","<button class=\"bx-menu-item-btn\" [class.is-disabled]=\"disabled()\" [class.is-danger]=\"danger()\"\n [class.bx-menu-item-animated]=\"isAnimated()\" (click)=\"onClick($event)\">\n\n @if (icon()) {\n <bx-icon class=\"bx-icon-pos-start\" [name]=\"icon()!\" size=\"20\" />\n }\n\n <span class=\"bx-menu-item-content\">\n @if (resolvedLabel()) {\n {{ resolvedLabel() }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n @if (endIcon()) {\n <bx-icon class=\"bx-icon-pos-end\" [name]=\"endIcon()!\" size=\"20\" />\n }\n</button>","import { Strict } from \"@filip.mazev/blocks/core\";\nimport { INavMeta } from \"../interfaces/inav-meta.interface\";\nimport { INavigationConfig } from \"../interfaces/inavigation-config.interface\";\nimport { NAVIGATION_CONFIG } from \"../tokens/navigation-config.token\";\nimport { Route } from \"@angular/router\";\n\n/**\n * \n * @param config \n * This function is a helper to provide the navigation configuration in your Angular application. \n * It takes an `INavigationConfig` object as an argument and returns an array of providers that can be used in the `providers` array of your Angular module. \n * By using this function, you can easily set up the navigation configuration for your application without having to manually create the provider object each time.\n */\nexport function provideNavigation(config: INavigationConfig) {\n return [\n {\n provide: NAVIGATION_CONFIG,\n useValue: config\n }\n ];\n};\n\n/**\n * \n * @param route \n * @param nav \n * This function is a helper to attach navigation metadata to Angular routes. It takes an Angular `Route` object and a navigation metadata object of type `Strict<T, INavMeta>`, where `T` \n * is a generic type that can be used to enforce specific properties on the navigation metadata. \n * The function returns a new `Route` object with the provided navigation metadata merged into the existing route data under the 'nav' property. \n * This allows you to easily associate navigation information with your routes, which can then be used by navigation components to generate menus, breadcrumbs, etc.\n */\nexport function withNav<T>(route: Route, nav: Strict<T, INavMeta>): Route {\n const existingNav = (route.data?.['nav'] as INavMeta | undefined) ?? {};\n\n return {\n ...route,\n data: {\n ...(route.data ?? {}),\n nav: {\n ...existingNav,\n ...nav\n }\n }\n };\n}","/*\n * Public API Surface of toastr\n */\n\nexport * from './components/breadcrumbs/breadcrumbs';\nexport * from './components/menu/menu';\nexport * from './components/menu-item/menu-item';\n\nexport * from './interfaces/ibreadcrumb-item.interface';\nexport * from './interfaces/inav-context.interface';\nexport * from './interfaces/inav-meta.interface';\nexport * from './interfaces/inav-route-data.interface';\nexport * from './interfaces/inavigation-access-adapter.interface';\nexport * from './interfaces/inavigation-config.interface';\nexport * from './interfaces/inavigation-item.interface';\nexport * from './interfaces/inavigation-section-config.interface';\nexport * from './interfaces/iresolved-navigation.interface';\n\nexport * from './helpers/navigation-functions';\n\nexport * from './services/navigation.service';\n\nexport * from './types/navigation.types';\n\nexport * from './tokens/navigation-access-adapter.token';\nexport * from './tokens/navigation-config.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks-navigation.mjs","sources":["../../../projects/blocks/navigation/tokens/navigation-config.token.ts","../../../projects/blocks/navigation/tokens/navigation-access-adapter.token.ts","../../../projects/blocks/navigation/services/navigation.service.ts","../../../projects/blocks/navigation/components/breadcrumbs/breadcrumbs.ts","../../../projects/blocks/navigation/components/breadcrumbs/breadcrumbs.html","../../../projects/blocks/navigation/helpers/navigation-functions.ts","../../../projects/blocks/navigation/public-api.ts","../../../projects/blocks/navigation/filip.mazev-blocks-navigation.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { INavigationConfig } from \"../interfaces/inavigation-config.interface\";\n\nexport const NAVIGATION_CONFIG = new InjectionToken<INavigationConfig>('NAVIGATION_CONFIG');","import { InjectionToken } from \"@angular/core\";\nimport { INavigationAccessAdapter } from \"../interfaces/inavigation-access-adapter.interface\";\n\nexport const NAVIGATION_ACCESS_ADAPTER = new InjectionToken<INavigationAccessAdapter>('NAVIGATION_ACCESS_ADAPTER');","import { computed, inject, Injectable, Signal } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, NavigationEnd, Router, Routes } from \"@angular/router\";\nimport { NAVIGATION_CONFIG } from \"../tokens/navigation-config.token\";\nimport { IResolvedNavigation } from \"../interfaces/iresolved-navigation.interface\";\nimport { filter } from \"rxjs\";\nimport { IBreadcrumbItem } from \"../interfaces/ibreadcrumb-item.interface\";\nimport { INavMeta } from \"../interfaces/inav-meta.interface\";\nimport { INavigationItem } from \"../interfaces/inavigation-item.interface\";\nimport { NAVIGATION_ACCESS_ADAPTER } from \"../tokens/navigation-access-adapter.token\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\nimport { INavContext } from \"../interfaces/inav-context.interface\";\nimport { BX_I18N, isTextWithKey, ResolvableText } from \"@filip.mazev/blocks/core\";\nimport { NavText } from \"../types/navigation.types\";\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly router = inject(Router);\n private readonly config = inject(NAVIGATION_CONFIG, { optional: true });\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly accessAdapter = inject(NAVIGATION_ACCESS_ADAPTER, { optional: true });\n\n private readonly navEnd = toSignal(\n this.router.events.pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n );\n\n public readonly current = computed<IResolvedNavigation>(() => {\n this.navEnd(); \n this.i18n?.version?.();\n return this.resolveCurrent(this.router.routerState.snapshot.root);\n });\n\n public readonly routeBase = computed<string | undefined>(() => {\n return this.accessAdapter?.resolveBaseRoute();\n });\n\n public readonly routes: Signal<INavigationItem[]> = computed(() => {\n this.i18n?.version?.();\n return this.extractRoutes(this.router.config);\n });\n\n public readonly baseRoute = computed<string | undefined>(() => {\n const viewableRoutes = this.routes();\n \n const primaryPrefix = this.routeBase(); \n\n let firstFoundRoot: string | undefined;\n\n const findRootRoute = (items: INavigationItem[]): string | undefined => {\n for (const item of items) {\n if (item.data?.root) {\n if (!firstFoundRoot) {\n firstFoundRoot = item.route;\n }\n\n if (primaryPrefix && item.route.startsWith(primaryPrefix)) {\n return item.route;\n }\n }\n \n if (item.children?.length) {\n const childRoot = findRootRoute(item.children);\n if (childRoot) return childRoot;\n }\n }\n return undefined;\n };\n\n const perfectMatch = findRootRoute(viewableRoutes);\n\n return perfectMatch ?? firstFoundRoot ?? primaryPrefix;\n });\n\n public readonly menu = computed(() => this.buildMenu(this.routes()));\n\n public navigateBack(): void {\n const breadcrumbs = this.current().breadcrumbs;\n \n if (breadcrumbs.length > 1) {\n const previousBreadcrumb = breadcrumbs[breadcrumbs.length - 2];\n this.router.navigateByUrl(previousBreadcrumb.route);\n } else {\n this.router.navigateByUrl(this.routeBase() ?? '/');\n }\n }\n\n //#region Helpers\n\n private extractRoutes(routes: Routes, parentSegment: string[] = []): INavigationItem[] {\n const items: INavigationItem[] = [];\n\n for(const route of routes) {\n if(route.redirectTo) continue;\n\n if (this.accessAdapter && !this.accessAdapter.canAccessMenu(route.data ?? {})) {\n continue;\n }\n\n const ownPath = route.path ?? '';\n \n const fullSegments = ownPath \n ? [...parentSegment, ownPath] \n : [...parentSegment];\n\n const fullRoute = '/' + fullSegments.filter(Boolean).join('/');\n\n const children = route.children?.length\n ? this.extractRoutes(route.children, fullSegments)\n : [];\n \n const nav = route.data?.['nav'] as INavMeta | undefined;\n\n if(!nav) {\n items.push(...children);\n continue;\n }\n\n const item = {\n id: fullRoute,\n route: fullRoute,\n label: this.resolveNavText(nav.label, { snapshot: undefined }) ?? '',\n icon: nav.icon,\n section: nav.section,\n visible: nav.visible ? nav.visible() : true,\n data: nav,\n children\n };\n\n items.push(item);\n }\n\n return this.sortNavigationItems(items);\n }\n\n private resolveCurrent(root: ActivatedRouteSnapshot): IResolvedNavigation {\n let currentNode: ActivatedRouteSnapshot | null = root;\n let finalSnapshot: ActivatedRouteSnapshot | undefined;\n\n while (currentNode) {\n const next: ActivatedRouteSnapshot | null = currentNode.children.find(child => child.outlet === 'primary') ?? null;\n if (!next) {\n finalSnapshot = currentNode;\n break;\n }\n currentNode = next;\n }\n\n if (!finalSnapshot) return { breadcrumbs: [] };\n\n const urlSegments = finalSnapshot.pathFromRoot\n .flatMap(s => s.url.map(u => u.path))\n .filter(Boolean);\n\n const breadcrumbs: IBreadcrumbItem[] = [];\n const allItems = this.flattenRoutes(this.routes());\n let currentUrl = '';\n\n for (const segment of urlSegments) {\n currentUrl += '/' + segment;\n \n const matchingItem = this.matchRouteToUrl(allItems, currentUrl);\n\n if (matchingItem && matchingItem.data && !matchingItem.data.hidden) {\n const ctx: INavContext = { snapshot: finalSnapshot };\n \n const label = this.resolveNavText(matchingItem.data.breadcrumb, ctx) \n ?? this.resolveNavText(matchingItem.data.label, ctx);\n \n if (label && breadcrumbs[breadcrumbs.length - 1]?.label !== label) {\n breadcrumbs.push({ label, route: currentUrl });\n }\n }\n }\n\n const leafNav = finalSnapshot.routeConfig?.data?.['nav'] as INavMeta | undefined;\n const fullUrl = '/' + urlSegments.join('/');\n \n let current: INavigationItem | undefined;\n\n if (leafNav && !leafNav.hidden) {\n current = {\n id: fullUrl,\n route: fullUrl,\n label: this.resolveNavText(leafNav.label, { snapshot: finalSnapshot }) ?? '',\n icon: leafNav.icon,\n section: leafNav.section,\n visible: leafNav.visible ? leafNav.visible() : true,\n data: leafNav\n };\n }\n\n return { current, breadcrumbs };\n }\n\n private buildMenu(items: INavigationItem[]): INavigationItem[] {\n return items\n .map((item): INavigationItem | null => {\n const children = this.buildMenu(item.children ?? []);\n const includeSelf = item.visible && item.data?.menu !== false;\n\n if (!includeSelf && !children.length) {\n return null;\n }\n\n return {\n ...item,\n children\n };\n }) \n .filter((item): item is INavigationItem => item !== null);\n }\n\n private sortNavigationItems(items: INavigationItem[]): INavigationItem[] {\n const customSort = this.config?.sortItems;\n\n return [...items].sort((a, b) => {\n if(customSort) {\n return customSort(a, b);\n }\n\n const orderA = a.data?.order ?? Number.POSITIVE_INFINITY;\n const orderB = b.data?.order ?? Number.POSITIVE_INFINITY;\n\n if(orderA !== orderB) return orderA - orderB;\n return a.label.localeCompare(b.label);\n });\n }\n\n private matchRouteToUrl(items: INavigationItem[], url: string): INavigationItem | undefined {\n const exactMatch = items.find(i => i.route === url);\n if (exactMatch) return exactMatch;\n\n return items.find(i => {\n if (!i.route.includes(':')) return false;\n const routeRegex = new RegExp('^' + i.route.replace(/:[^\\s/]+/g, '([^/]+)') + '$');\n return routeRegex.test(url);\n });\n }\n\n private flattenRoutes(items: INavigationItem[]): INavigationItem[] {\n return items.reduce((acc, item) => {\n acc.push(item);\n if (item.children) acc.push(...this.flattenRoutes(item.children));\n return acc;\n }, [] as INavigationItem[]);\n }\n\n private resolveNavText(textDef: NavText | undefined, ctx: INavContext): string | undefined {\n if (!textDef) return undefined;\n\n const text: ResolvableText = typeof textDef === 'function' \n ? textDef(ctx) \n : textDef;\n \n if (isTextWithKey(text)) {\n return this.i18n?.translate(text.key, { route: ctx.snapshot });\n }\n\n return text;\n }\n\n //#endregion\n}","import { Component, computed, inject, input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgClass } from '@angular/common';\nimport { NavigationService } from '../../services/navigation.service';\nimport { Icon, IconName } from '@filip.mazev/blocks/icons';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-breadcrumbs',\n imports: [NgClass, Icon],\n templateUrl: './breadcrumbs.html',\n styleUrl: './breadcrumbs.scss'\n})\nexport class Breadcrumbs {\n private readonly navigationService = inject(NavigationService);\n private readonly router = inject(Router);\n private readonly a11y = inject(BxA11yService);\n \n protected readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n \n public readonly minimumBreadcrumbs = input<number>(2);\n public readonly divider = input<IconName>('chevron-right');\n\n protected showBreadcumbs = computed(() => {\n const minimum = Math.max(1, this.minimumBreadcrumbs());\n return this.current().breadcrumbs.length >= minimum;\n });\n\n protected ariaLabel = computed(() => {\n const labels = this.current().breadcrumbs.map(crumb => crumb.label).join(' > ');\n return `Breadcrumbs: ${labels}`;\n });\n\n protected current = this.navigationService.current;\n\n protected navigateTo(url: string) {\n this.router.navigateByUrl(url);\n }\n}\n","@if(showBreadcumbs()) {\n<nav class=\"breadcrumbs\" [aria-label]=\"ariaLabel()\">\n @for (crumb of current().breadcrumbs; track crumb.route; let i = $index) {\n <button class=\"crumb\" (click)=\"navigateTo(crumb.route)\" [ngClass]=\"{\n 'last': i === current().breadcrumbs.length - 1,\n 'breadcrumb-on-appear': i === current().breadcrumbs.length - 1 && current().breadcrumbs.length > 1\n }\" [style.--crumb-index]=\"i\" [class.bx-breadcrumb-animated]=\"isAnimated()\">\n {{ crumb.label }}\n </button>\n\n @if (i !== current().breadcrumbs.length - 1) {\n <bx-icon [name]=\"divider()\" size=\"16\" class=\"breadcrumb-separator\" />\n }\n }\n</nav>\n}","import { Strict } from \"@filip.mazev/blocks/core\";\nimport { INavMeta } from \"../interfaces/inav-meta.interface\";\nimport { INavigationConfig } from \"../interfaces/inavigation-config.interface\";\nimport { NAVIGATION_CONFIG } from \"../tokens/navigation-config.token\";\nimport { Route } from \"@angular/router\";\n\n/**\n * \n * @param config \n * This function is a helper to provide the navigation configuration in your Angular application. \n * It takes an `INavigationConfig` object as an argument and returns an array of providers that can be used in the `providers` array of your Angular module. \n * By using this function, you can easily set up the navigation configuration for your application without having to manually create the provider object each time.\n */\nexport function provideNavigation(config: INavigationConfig) {\n return [\n {\n provide: NAVIGATION_CONFIG,\n useValue: config\n }\n ];\n};\n\n/**\n * \n * @param route \n * @param nav \n * This function is a helper to attach navigation metadata to Angular routes. It takes an Angular `Route` object and a navigation metadata object of type `Strict<T, INavMeta>`, where `T` \n * is a generic type that can be used to enforce specific properties on the navigation metadata. \n * The function returns a new `Route` object with the provided navigation metadata merged into the existing route data under the 'nav' property. \n * This allows you to easily associate navigation information with your routes, which can then be used by navigation components to generate menus, breadcrumbs, etc.\n */\nexport function withNav<T>(route: Route, nav: Strict<T, INavMeta>): Route {\n const existingNav = (route.data?.['nav'] as INavMeta | undefined) ?? {};\n\n return {\n ...route,\n data: {\n ...(route.data ?? {}),\n nav: {\n ...existingNav,\n ...nav\n }\n }\n };\n}","/*\n * Public API Surface of toastr\n */\n\nexport * from './components/breadcrumbs/breadcrumbs';\n\nexport * from './interfaces/ibreadcrumb-item.interface';\nexport * from './interfaces/inav-context.interface';\nexport * from './interfaces/inav-meta.interface';\nexport * from './interfaces/inav-route-data.interface';\nexport * from './interfaces/inavigation-access-adapter.interface';\nexport * from './interfaces/inavigation-config.interface';\nexport * from './interfaces/inavigation-item.interface';\nexport * from './interfaces/inavigation-section-config.interface';\nexport * from './interfaces/iresolved-navigation.interface';\n\nexport * from './helpers/navigation-functions';\n\nexport * from './services/navigation.service';\n\nexport * from './types/navigation.types';\n\nexport * from './tokens/navigation-access-adapter.token';\nexport * from './tokens/navigation-config.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|