@stacknav/angular 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -127,6 +127,13 @@ provideStackNav({
127
127
  A strategy receives `{ from, to, trigger, historyDelta, hint, stack }`, where
128
128
  `from` and `to` carry `{ key, segments, level, data, snapshot }`.
129
129
 
130
+ Because `data` is the route's own data, a strategy can work off metadata your
131
+ routes already carry. An app that names its routes the way Angular's
132
+ route-transition recipe does (`data: { animation: 'Thread' }`) keeps those names
133
+ and adds one strategy that looks the from/to pair up in a
134
+ `transition('Inbox => Thread')`-style table; see the Mail demo's
135
+ [`animation.ts`](../../apps/angular-demo/src/app/demos/mail/animation.ts).
136
+
130
137
  ### Back buttons
131
138
 
132
139
  A back button is `Location.back()`. After a deep link there is nothing to go back
@@ -174,6 +181,11 @@ Outputs: `activate`, `deactivate`, `attach`, `detach` (as on `router-outlet`) an
174
181
  Properties: `stack` (the core `NavigationStack`, for `progress` events), `pages`
175
182
  (kept pages, bottom to top), `canPop`, `lastDirection`.
176
183
 
184
+ Chrome that only has to move with the pages does not need `progress` at all: the
185
+ outlet carries `--sn-t` and `--sn-e` while a phase is in flight, and the two
186
+ pages taking part carry `sn-page-upper` and `sn-page-lower`, so a header or a tab
187
+ bar can transition off them and stay on the compositor with them.
188
+
177
189
  Component inputs are bound when the router is configured with
178
190
  `withComponentInputBinding()`: query params, params and data, in that order of
179
191
  precedence, with unmatched inputs set to `undefined`. The router only binds
@@ -301,7 +301,12 @@ class StackNavOutlet {
301
301
  router = inject(Router);
302
302
  browserLocation = inject(Location);
303
303
  document = inject(DOCUMENT);
304
- /** The underlying core stack. Subscribe to `progress` to drive your own chrome. */
304
+ /**
305
+ * The underlying core stack. Chrome that just has to move with the pages is
306
+ * usually best driven from CSS, off `--sn-t` / `--sn-e` and the
307
+ * `sn-page-upper` / `sn-page-lower` classes; subscribe to `progress` when
308
+ * you need the number itself.
309
+ */
305
310
  stack;
306
311
  /** The direction of the last activation. */
307
312
  lastDirection = null;
@@ -1 +1 @@
1
- {"version":3,"file":"stacknav-angular.mjs","sources":["../../src/lib/activated-route-proxy.ts","../../src/lib/config.ts","../../src/lib/history.ts","../../src/lib/outlet.ts","../../src/lib/route-reuse-strategy.ts","../../src/stacknav-angular.ts"],"sourcesContent":["import type { ActivatedRoute, ActivatedRouteSnapshot, Data, ParamMap, Params, Route, UrlSegment } from '@angular/router';\nimport { BehaviorSubject, type Observable, switchMap } from 'rxjs';\n\n/**\n * The `ActivatedRoute` a page component injects. When a page kept alive beneath\n * the stack is reached again, the router hands it a new route object. This\n * proxy keeps the component's subscriptions valid by switching them to whichever\n * route is current.\n */\nexport class StackNavActivatedRoute {\n private readonly current$: BehaviorSubject<ActivatedRoute>;\n\n readonly url: Observable<UrlSegment[]>;\n readonly params: Observable<Params>;\n readonly queryParams: Observable<Params>;\n readonly fragment: Observable<string | null>;\n readonly data: Observable<Data>;\n readonly title: Observable<string | undefined>;\n readonly paramMap: Observable<ParamMap>;\n readonly queryParamMap: Observable<ParamMap>;\n\n constructor(route: ActivatedRoute) {\n this.current$ = new BehaviorSubject(route);\n const of = <T>(pick: (r: ActivatedRoute) => Observable<T>) => this.current$.pipe(switchMap(pick));\n this.url = of((r) => r.url);\n this.params = of((r) => r.params);\n this.queryParams = of((r) => r.queryParams);\n this.fragment = of((r) => r.fragment);\n this.data = of((r) => r.data);\n this.title = of((r) => r.title);\n this.paramMap = of((r) => r.paramMap);\n this.queryParamMap = of((r) => r.queryParamMap);\n }\n\n /** The router's route object behind the proxy right now. */\n get actual(): ActivatedRoute {\n return this.current$.value;\n }\n /** @internal */\n swap(route: ActivatedRoute): void {\n if (route !== this.current$.value) this.current$.next(route);\n }\n\n get snapshot(): ActivatedRouteSnapshot {\n return this.actual.snapshot;\n }\n get outlet(): string {\n return this.actual.outlet;\n }\n get component(): ActivatedRoute['component'] {\n return this.actual.component;\n }\n get routeConfig(): Route | null {\n return this.actual.routeConfig;\n }\n get root(): ActivatedRoute {\n return this.actual.root;\n }\n get parent(): ActivatedRoute | null {\n return this.actual.parent;\n }\n get firstChild(): ActivatedRoute | null {\n return this.actual.firstChild;\n }\n get children(): ActivatedRoute[] {\n return this.actual.children;\n }\n get pathFromRoot(): ActivatedRoute[] {\n return this.actual.pathFromRoot;\n }\n toString(): string {\n return this.actual.toString();\n }\n}\n","import { InjectionToken, type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport type { ActivatedRouteSnapshot } from '@angular/router';\nimport {\n createDirectionResolver,\n defaultStrategies,\n type Direction,\n type DirectionResolver,\n type DirectionStrategy,\n type EdgePanGestureOptions,\n type IOSTransitionOptions,\n} from '@stacknav/core';\n\n/** Everything `provideStackNav()` accepts. All optional. */\nexport interface StackNavConfig {\n /**\n * Strategies that decide push / pop / replace for a navigation, in priority\n * order. Defaults to the core's `defaultStrategies()`: an explicit hint, then\n * browser history, then the kept stack, then route numbering\n * (`data.stackLevel`), then the route tree. Pass a resolver function to\n * replace the whole mechanism.\n */\n direction?: readonly DirectionStrategy[] | DirectionResolver;\n /** The direction to use when no strategy has an answer. Default `push`. */\n fallbackDirection?: Direction;\n /**\n * Where a route's number comes from, for the numbering strategy.\n * Default: `snapshot.data['stackLevel']`.\n */\n levelOf?: (snapshot: ActivatedRouteSnapshot) => number | null | undefined;\n /**\n * What identifies a page, so that a later navigation to the same key pops\n * back to the kept page. Default: the route's full URL path, including matrix\n * params.\n */\n keyOf?: (snapshot: ActivatedRouteSnapshot) => string;\n /**\n * The key under which a navigation's `info` carries a hint for this library:\n * `router.navigate(cmds, { info: { stacknav: 'pop' } })`. Default `stacknav`.\n */\n infoKey?: string;\n /** Defaults for every outlet's transition. An outlet's `transition` input overrides these per key. */\n transition?: Partial<IOSTransitionOptions>;\n /** Defaults for every outlet's swipe-back gesture. `false` disables it. */\n gesture?: Partial<EdgePanGestureOptions> | false;\n /**\n * Detaches change detection from pages hidden beneath the top and reattaches\n * it when they are shown again. Saves work on deep stacks. Off by default.\n */\n detachInactiveViews?: boolean;\n /** Inserts the engine's stylesheet at runtime. Default true. Turn it off if you import `stacknav.css`. */\n injectStyles?: boolean;\n /** Whether to animate at all. Default true. `prefers-reduced-motion` is honoured either way. */\n animated?: boolean;\n}\n\nexport interface ResolvedStackNavConfig {\n resolve: DirectionResolver;\n levelOf: (snapshot: ActivatedRouteSnapshot) => number | null | undefined;\n keyOf: (snapshot: ActivatedRouteSnapshot) => string;\n infoKey: string;\n transition: Partial<IOSTransitionOptions>;\n gesture: Partial<EdgePanGestureOptions> | false;\n detachInactiveViews: boolean;\n injectStyles: boolean;\n animated: boolean;\n}\n\nexport const STACKNAV_CONFIG = /*#__PURE__*/ new InjectionToken<ResolvedStackNavConfig>('STACKNAV_CONFIG', {\n providedIn: 'root',\n factory: () => resolveConfig({}),\n});\n\nexport function defaultLevelOf(snapshot: ActivatedRouteSnapshot): number | null | undefined {\n const v = snapshot.data?.['stackLevel'];\n return typeof v === 'number' ? v : undefined;\n}\n\n/** The route's URL path from the root down to and including this route, e.g. `items/42;view=full`. */\nexport function defaultKeyOf(snapshot: ActivatedRouteSnapshot): string {\n return snapshot.pathFromRoot\n .flatMap((s) => s.url.map((u) => u.toString()))\n .join('/');\n}\n\nexport function resolveConfig(c: StackNavConfig): ResolvedStackNavConfig {\n const resolve =\n typeof c.direction === 'function'\n ? c.direction\n : createDirectionResolver(c.direction ?? defaultStrategies(), c.fallbackDirection ?? 'push');\n return {\n resolve,\n levelOf: c.levelOf ?? defaultLevelOf,\n keyOf: c.keyOf ?? defaultKeyOf,\n infoKey: c.infoKey ?? 'stacknav',\n transition: c.transition ?? {},\n gesture: c.gesture ?? {},\n detachInactiveViews: c.detachInactiveViews ?? false,\n injectStyles: c.injectStyles ?? true,\n animated: c.animated ?? true,\n };\n}\n\n/**\n * Configures the outlets. Add it next to `provideRouter()`. It changes no\n * router configuration.\n *\n * ```ts\n * bootstrapApplication(App, { providers: [provideRouter(routes), provideStackNav()] });\n * ```\n */\nexport function provideStackNav(config: StackNavConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: STACKNAV_CONFIG, useValue: resolveConfig(config) }]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, ROUTER_CONFIGURATION, Router } from '@angular/router';\nimport type { Direction, DirectionOpinion, NavigationTrigger } from '@stacknav/core';\nimport { STACKNAV_CONFIG } from './config';\n\n/**\n * What a navigation can say to the outlet through the router's own\n * `NavigationExtras.info`, under the configured key (default `stacknav`):\n *\n * ```ts\n * router.navigate(['/items', 2], { info: { stacknav: 'push' } });\n * router.navigate(['/login'], { info: { stacknav: { direction: 'replace', animated: false } } });\n * ```\n */\nexport type StackNavHint = Direction | { direction?: DirectionOpinion; animated?: boolean };\n\nexport interface NavigationInfo {\n id: number;\n trigger: NavigationTrigger;\n /** negative = back, positive = forward, undefined when unknown */\n historyDelta: number | undefined;\n hint: DirectionOpinion;\n animated: boolean | undefined;\n replaceUrl: boolean;\n skipLocationChange: boolean;\n restoredId: number | null;\n}\n\ninterface Entry {\n id: number;\n url: string;\n}\n\n/**\n * A model of the browser's history as the router walks it: which entry is\n * current, and which came before. It answers two questions for the outlet: is\n * this navigation going back or forward, and is the previous history entry the\n * page beneath the top? Everything comes from public router events, so it needs\n * no router configuration. Internal to the outlet.\n */\n@Injectable({ providedIn: 'root' })\nexport class StackNavHistory {\n private readonly router = inject(Router);\n private readonly config = inject(STACKNAV_CONFIG);\n private readonly cancelResolution = inject(ROUTER_CONFIGURATION, { optional: true })?.canceledNavigationResolution ?? 'replace';\n private entries: Entry[] = [];\n private cursor = -1;\n private pending: NavigationInfo | null = null;\n\n constructor() {\n this.router.events.subscribe((e) => {\n if (e instanceof NavigationStart) this.onStart(e);\n else if (e instanceof NavigationEnd) this.onEnd(e);\n else if (e instanceof NavigationCancel || e instanceof NavigationError) this.onAbort();\n else if (e instanceof NavigationSkipped) this.pending = null;\n });\n }\n\n /** The navigation in flight, if any. Valid while the router activates routes. */\n get current(): NavigationInfo | null {\n return this.pending;\n }\n\n /** URL of the history entry before the current one, or null. */\n get previousUrl(): string | null {\n return this.cursor > 0 ? this.entries[this.cursor - 1].url : null;\n }\n\n get currentUrl(): string | null {\n return this.cursor >= 0 ? this.entries[this.cursor].url : null;\n }\n\n get canGoBack(): boolean {\n return this.cursor > 0;\n }\n\n private onStart(e: NavigationStart): void {\n const nav = this.router.getCurrentNavigation();\n const isHistory = e.navigationTrigger === 'popstate' || e.navigationTrigger === 'hashchange';\n const restoredId = e.restoredState?.navigationId ?? null;\n let historyDelta: number | undefined;\n if (isHistory) {\n const idx = this.indexOf(restoredId);\n if (idx >= 0 && this.cursor >= 0) historyDelta = idx - this.cursor;\n else if (restoredId != null && this.cursor >= 0) historyDelta = restoredId < this.entries[this.cursor].id ? -1 : 1;\n }\n const hint = isHistory ? undefined : readHint(nav?.extras.info, this.config.infoKey);\n this.pending = {\n id: e.id,\n trigger: isHistory ? 'history' : 'imperative',\n historyDelta,\n hint: hint?.direction,\n animated: hint?.animated,\n replaceUrl: !!nav?.extras.replaceUrl,\n skipLocationChange: !!nav?.extras.skipLocationChange,\n restoredId,\n };\n }\n\n private onEnd(e: NavigationEnd): void {\n const p = this.pending;\n this.pending = null;\n const entry: Entry = { id: e.id, url: e.urlAfterRedirects };\n if (!p || this.cursor < 0) {\n this.entries = [entry];\n this.cursor = 0;\n return;\n }\n if (p.trigger === 'history') {\n const idx = this.indexOf(p.restoredId);\n if (idx >= 0) {\n this.cursor = idx;\n this.entries[idx] = entry; // the router rewrites the entry's navigationId on popstate\n } else {\n this.entries = [entry];\n this.cursor = 0;\n }\n return;\n }\n if (p.skipLocationChange) return;\n if (p.replaceUrl) {\n this.entries[this.cursor] = entry;\n return;\n }\n this.entries.splice(this.cursor + 1);\n this.entries.push(entry);\n this.cursor++;\n }\n\n /**\n * Handles a history navigation the router refused. With\n * `canceledNavigationResolution: 'computed'` the router walks the browser back\n * to where it was, so nothing changes here. With the default `'replace'` it\n * overwrites the entry the browser landed on with the current URL and the last\n * successful id.\n */\n private onAbort(): void {\n const p = this.pending;\n this.pending = null;\n if (!p || p.trigger !== 'history' || this.cursor < 0 || this.cancelResolution === 'computed') return;\n const idx = this.indexOf(p.restoredId);\n if (idx < 0) return;\n this.entries[idx] = { ...this.entries[this.cursor] };\n this.cursor = idx;\n }\n\n /** The entry carrying `id`, preferring the nearest one that is not the current entry. */\n private indexOf(id: number | null): number {\n if (id == null) return -1;\n let best = -1;\n for (let i = 0; i < this.entries.length; i++) {\n if (this.entries[i].id !== id) continue;\n if (best < 0 || best === this.cursor || (i !== this.cursor && Math.abs(i - this.cursor) < Math.abs(best - this.cursor))) best = i;\n }\n return best;\n }\n}\n\nfunction readHint(info: unknown, key: string): { direction?: DirectionOpinion; animated?: boolean } | undefined {\n if (info == null || typeof info !== 'object') return undefined;\n const v = (info as Record<string, unknown>)[key] as StackNavHint | undefined;\n if (v == null) return undefined;\n return typeof v === 'string' ? { direction: v } : v;\n}\n","import { DOCUMENT, Location } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n Output,\n ViewContainerRef,\n inject,\n input,\n reflectComponentType,\n type ComponentRef,\n type EnvironmentInjector,\n type OnDestroy,\n type OnInit,\n type Type,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n ChildrenOutletContexts,\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationSkipped,\n PRIMARY_OUTLET,\n ROUTER_OUTLET_DATA,\n Router,\n type ActivatedRouteSnapshot,\n type OutletContext,\n type RouterOutletContract,\n} from '@angular/router';\nimport {\n createIOSStack,\n injectStyles,\n segmentsOf,\n type Direction,\n type EdgePanGestureOptions,\n type IOSStack,\n type IOSTransitionOptions,\n type NavigationSource,\n type RouteRef,\n type StackEntry,\n} from '@stacknav/core';\nimport { Subscription, combineLatest, from, of, switchMap } from 'rxjs';\nimport { StackNavActivatedRoute } from './activated-route-proxy';\nimport { STACKNAV_CONFIG } from './config';\nimport { StackNavHistory } from './history';\n\n/** What the outlet knows about a page, passed to direction strategies. */\nexport interface StackNavRouteRef extends RouteRef {\n snapshot: ActivatedRouteSnapshot;\n}\n\n/** A page the outlet keeps alive. */\nexport interface StackNavView {\n readonly ref: ComponentRef<unknown>;\n readonly el: HTMLElement;\n readonly key: string;\n readonly routeRef: StackNavRouteRef;\n /** the full app URL when the page was last active */\n url: string;\n route: ActivatedRoute;\n}\n\ninterface View extends StackNavView {\n routeRef: StackNavRouteRef;\n proxy: StackNavActivatedRoute | null;\n savedContexts: Map<string, OutletContext> | null;\n /** popped by the swipe gesture, waiting for the router to catch up */\n pendingRemoval: boolean;\n inputs: Subscription | null;\n}\n\nexport interface StackNavActivation {\n view: StackNavView;\n direction: Direction;\n animated: boolean;\n reused: boolean;\n}\n\n/**\n * A router outlet (`RouterOutletContract`) that keeps a stack of pages and moves\n * between them with the iOS push/pop transition. Use it where you would use\n * `<router-outlet>`. The router drives it the same way:\n *\n * ```html\n * <sn-outlet />\n * ```\n *\n * Pages beneath the top stay alive, keeping scroll position, form state and\n * subscriptions. A swipe from the leading edge pops interactively, and the\n * direction of every navigation is decided by the strategies configured in\n * `provideStackNav()`. The element needs a height; it is the pages' scroll\n * container.\n */\n@Directive({\n selector: 'sn-outlet',\n exportAs: 'snOutlet',\n host: { style: 'display: block' },\n})\nexport class StackNavOutlet implements RouterOutletContract, OnInit, OnDestroy {\n /** Outlet name, as on `router-outlet`. Static. */\n @Input() name: string = PRIMARY_OUTLET;\n /** Per-outlet transition options, merged over `provideStackNav({ transition })`. */\n @Input() transition: Partial<IOSTransitionOptions> | undefined;\n /** Per-outlet gesture options, merged over `provideStackNav({ gesture })`. `false` disables the swipe. */\n @Input() gesture: Partial<EdgePanGestureOptions> | false | undefined;\n /** Same as on `router-outlet`: available to pages through `ROUTER_OUTLET_DATA`. */\n readonly routerOutletData = input<unknown>(undefined);\n\n /** A page component was created. */\n @Output('activate') activateEvents = new EventEmitter<unknown>();\n /** A page component was destroyed. */\n @Output('deactivate') deactivateEvents = new EventEmitter<unknown>();\n /** A kept page was shown again, or a detached one re-attached. */\n @Output('attach') attachEvents = new EventEmitter<unknown>();\n @Output('detach') detachEvents = new EventEmitter<unknown>();\n /** Every activation, with the direction that was resolved for it. */\n @Output('navigated') navigatedEvents = new EventEmitter<StackNavActivation>();\n\n private readonly parentContexts = inject(ChildrenOutletContexts);\n private readonly location = inject(ViewContainerRef);\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly config = inject(STACKNAV_CONFIG);\n private readonly history = inject(StackNavHistory);\n private readonly router = inject(Router);\n private readonly browserLocation = inject(Location);\n private readonly document = inject(DOCUMENT);\n\n /** The underlying core stack. Subscribe to `progress` to drive your own chrome. */\n stack!: IOSStack;\n /** The direction of the last activation. */\n lastDirection: Direction | null = null;\n\n /** Inputs are bound when the router was configured with `withComponentInputBinding()`. */\n readonly supportsBindingToComponentInputs?: true;\n\n private views: View[] = [];\n private readonly byEl = new Map<HTMLElement, View>();\n private readonly detached = new Map<ComponentRef<unknown>, View>();\n private activeView: View | null = null;\n private leaving: View | null = null;\n private activated: ComponentRef<unknown> | null = null;\n private _activatedRoute: ActivatedRoute | null = null;\n private subs = new Subscription();\n\n constructor() {\n if (this.router.componentInputBindingEnabled) this.supportsBindingToComponentInputs = true;\n }\n\n // ------------------------------------------------------------- lifecycle\n ngOnInit(): void {\n const gesture = this.gesture === false || this.config.gesture === false ? false : { ...(this.config.gesture || {}), ...(this.gesture || {}) };\n this.stack = createIOSStack({\n container: this.host,\n transition: { ...this.config.transition, ...(this.transition || {}) },\n gesture: gesture || {},\n });\n if (gesture === false) this.stack.gesture.detach();\n if (this.config.injectStyles) injectStyles(this.document);\n\n this.stack.on('pop', (e) => this.onStackRemoved(e.removed, e.source));\n this.stack.on('replace', (e) => this.onStackRemoved(e.removed, e.source));\n this.stack.on('reset', (e) => this.onStackRemoved(e.removed, e.source));\n if (this.config.detachInactiveViews) {\n this.stack.on('transitionstart', ({ lower, upper }) => {\n for (const entry of [lower, upper]) {\n const view = entry && this.byEl.get(entry.el);\n if (view) view.ref.changeDetectorRef.reattach();\n }\n });\n for (const event of ['push', 'pop', 'replace', 'reset'] as const) this.stack.on(event, () => this.syncChangeDetection());\n }\n this.subs.add(\n this.router.events.subscribe((e) => {\n if (e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped) this.restorePending();\n else if (e instanceof NavigationEnd && this.activeView) this.activeView.url = e.urlAfterRedirects;\n }),\n );\n\n this.parentContexts.onChildOutletCreated(this.name, this);\n const context = this.parentContexts.getContext(this.name);\n if (context?.route) {\n if (context.attachRef) this.attach(context.attachRef, context.route);\n else this.activateWith(context.route, context.injector);\n }\n }\n\n ngOnDestroy(): void {\n if (this.parentContexts.getContext(this.name)?.outlet === this) this.parentContexts.onChildOutletDestroyed(this.name);\n this.subs.unsubscribe();\n for (const view of this.byEl.values()) view.inputs?.unsubscribe();\n this.stack?.destroy();\n }\n\n // -------------------------------------------------------- outlet contract\n get isActivated(): boolean {\n return !!this.activated;\n }\n get component(): object {\n if (!this.activated) throw new Error('Outlet is not activated');\n return this.activated.instance as object;\n }\n get activatedComponentRef(): ComponentRef<unknown> | null {\n return this.activated;\n }\n get activatedRoute(): ActivatedRoute {\n if (!this.activated) throw new Error('Outlet is not activated');\n return this._activatedRoute!;\n }\n get activatedRouteData(): Record<string, unknown> {\n return this._activatedRoute ? this._activatedRoute.snapshot.data : {};\n }\n\n /** Pages currently kept, bottom to top. The last one is on screen. */\n get pages(): readonly StackNavView[] {\n return this.views;\n }\n /** Whether a swipe has a kept page to reveal. */\n get canPop(): boolean {\n return this.views.length > 1;\n }\n\n activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector): void {\n if (this.activated) throw new Error('Cannot activate an already activated outlet');\n const snapshot = activatedRoute.snapshot;\n const key = this.config.keyOf(snapshot);\n const leaving = this.takeLeaving();\n let existing = this.views.find((v) => v.key === key) ?? null;\n if (existing === leaving) existing = null;\n const view = existing ?? this.createView(snapshot.component!, activatedRoute, environmentInjector, key);\n this.show(view, activatedRoute, leaving, !!existing);\n }\n\n deactivate(): void {\n if (!this.activated) return;\n const view = this.activeView!;\n this.unbindInputs(view);\n const context = this.parentContexts.getContext(this.name);\n if (context) view.savedContexts = (context.children as unknown as { contexts: Map<string, OutletContext> }).contexts;\n this.activated = null;\n this._activatedRoute = null;\n this.activeView = null;\n if (view.pendingRemoval) {\n this.destroyView(view);\n return;\n }\n // The router deactivates before it activates, synchronously. If no\n // activation follows, the outlet is really empty.\n this.leaving = view;\n queueMicrotask(() => {\n if (this.leaving !== view) return;\n this.leaving = null;\n this.views = [];\n void this.stack.reset([]);\n });\n }\n\n detach(): ComponentRef<unknown> {\n if (!this.activated) throw new Error('Outlet is not activated');\n const view = this.activeView!;\n const ref = view.ref;\n this.unbindInputs(view);\n this.activated = null;\n this._activatedRoute = null;\n this.activeView = null;\n this.byEl.delete(view.el);\n this.views = this.views.filter((v) => v !== view);\n this.detached.set(ref, view);\n void this.stack.remove(view.el);\n const i = this.location.indexOf(ref.hostView);\n if (i >= 0) this.location.detach(i);\n this.detachEvents.emit(ref.instance);\n return ref;\n }\n\n attach(ref: ComponentRef<unknown>, activatedRoute: ActivatedRoute): void {\n const key = this.config.keyOf(activatedRoute.snapshot);\n let view = this.detached.get(ref) ?? null;\n this.detached.delete(ref);\n if (!view) view = this.wrap(ref, activatedRoute, key, null);\n this.location.insert(ref.hostView);\n this.park(view.el);\n this.byEl.set(view.el, view);\n const leaving = this.takeLeaving();\n this.show(view, activatedRoute, leaving, true);\n }\n\n // -------------------------------------------------------------- internals\n private takeLeaving(): View | null {\n const leaving = this.leaving;\n this.leaving = null;\n return leaving;\n }\n\n /** Decides the direction, places the page in the stack, and makes it active. */\n private show(view: View, activatedRoute: ActivatedRoute, leaving: View | null, reused: boolean): void {\n const nav = this.history.current;\n const from = leaving ?? this.views[this.views.length - 1] ?? null;\n // Resolvers may have rerun, and a custom keyOf may group several snapshots, so the old snapshot cannot be trusted.\n view.routeRef = this.routeRefOf(activatedRoute.snapshot, view.key);\n const alreadyOnScreen = reused && !this.stack.busy && this.stack.top?.el === view.el;\n let direction = this.config.resolve({\n from: from?.routeRef ?? null,\n to: view.routeRef,\n trigger: nav?.trigger ?? 'imperative',\n historyDelta: nav?.historyDelta,\n hint: nav?.hint,\n stack: this.views.map((v) => v.key),\n });\n // After a swipe the page beneath is already showing and the one that left\n // is gone. A pop onto anything else has nothing to pop, so just show the page.\n if (!leaving && this.stack.top && direction === 'pop' && !reused) direction = 'replace';\n const animated = this.config.animated && (nav?.animated ?? true) && (this.views.length > 0 || !!leaving);\n\n view.route = activatedRoute;\n view.proxy?.swap(activatedRoute);\n const current = this.router.getCurrentNavigation();\n view.url = current ? this.router.serializeUrl(current.finalUrl ?? current.extractedUrl) : this.router.url;\n if (view.savedContexts) {\n this.parentContexts.getOrCreateContext(this.name).children.onOutletReAttached(view.savedContexts);\n view.savedContexts = null;\n }\n\n this.activated = view.ref;\n this._activatedRoute = activatedRoute;\n this.activeView = view;\n this.lastDirection = direction;\n this.place(view, direction, leaving);\n if (!alreadyOnScreen) {\n void this.stack.present(view.el, direction, { key: view.key, animated, source: sourceOf(nav?.trigger) });\n }\n this.changeDetector.markForCheck();\n this.bindInputs(view);\n // An animated page renders off screen during its first frames. A page that\n // appears immediately (no animation, or a replace, which the stack never\n // animates) would otherwise be blank until the next scheduled tick.\n if ((!animated || direction === 'replace') && !alreadyOnScreen) view.ref.changeDetectorRef.detectChanges();\n (reused ? this.attachEvents : this.activateEvents).emit(view.ref.instance);\n this.navigatedEvents.emit({ view, direction, animated, reused });\n }\n\n /** Mirrors what the stack will do, synchronously, so `pages` and the next direction stay correct. */\n private place(view: View, direction: Direction, leaving: View | null): void {\n const views = this.views;\n const drop = (v: View | null) => {\n const i = v ? views.indexOf(v) : -1;\n if (i >= 0) views.splice(i, 1);\n };\n if (direction === 'pop' && views.includes(view)) {\n views.splice(views.indexOf(view) + 1);\n return;\n }\n if (direction !== 'push') drop(leaving);\n drop(view);\n views.push(view);\n }\n\n private createView(component: Type<unknown>, route: ActivatedRoute, environmentInjector: EnvironmentInjector, key: string): View {\n const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n const proxy = new StackNavActivatedRoute(route);\n const injector = Injector.create({\n providers: [\n { provide: ActivatedRoute, useValue: proxy },\n { provide: ChildrenOutletContexts, useValue: childContexts },\n { provide: ROUTER_OUTLET_DATA, useValue: this.routerOutletData },\n ],\n parent: this.location.injector,\n });\n const ref = this.location.createComponent(component, { index: this.location.length, injector, environmentInjector });\n const view = this.wrap(ref, route, key, proxy);\n this.park(view.el);\n this.byEl.set(view.el, view);\n return view;\n }\n\n private wrap(ref: ComponentRef<unknown>, route: ActivatedRoute, key: string, proxy: StackNavActivatedRoute | null): View {\n const el = ref.location.nativeElement as HTMLElement;\n return { ref, el, key, routeRef: this.routeRefOf(route.snapshot, key), url: '', route, proxy, savedContexts: null, pendingRemoval: false, inputs: null };\n }\n\n /** Hidden inside the container until the stack shows it, never a visible sibling of the outlet. */\n private park(el: HTMLElement): void {\n el.classList.add(this.stack.pageClass);\n if (el.parentElement !== this.host) this.host.append(el);\n }\n\n private routeRefOf(snapshot: ActivatedRouteSnapshot, key: string): StackNavRouteRef {\n return { key, segments: segmentsOf(key), level: this.config.levelOf(snapshot), data: snapshot.data, snapshot };\n }\n\n private onStackRemoved(removed: StackEntry[], source: NavigationSource): void {\n for (const entry of removed) {\n const view = this.byEl.get(entry.el);\n if (!view) continue;\n if (source === 'gesture') {\n view.pendingRemoval = true;\n this.views = this.views.filter((v) => v !== view);\n this.navigateBackAfterGesture();\n } else {\n this.destroyView(view);\n }\n }\n }\n\n /** The swipe already revealed the page beneath. Bring the router in line with it. */\n private navigateBackAfterGesture(): void {\n const lower = this.views[this.views.length - 1];\n if (!lower) return;\n const previous = this.history.previousUrl;\n if (previous != null && this.sameUrl(previous, lower.url)) {\n this.browserLocation.back();\n } else {\n void this.router.navigateByUrl(lower.url, { info: { [this.config.infoKey]: { direction: 'pop', animated: false } } });\n }\n }\n\n private sameUrl(a: string, b: string): boolean {\n const norm = (u: string) => this.router.serializeUrl(this.router.parseUrl(u));\n return norm(a) === norm(b);\n }\n\n /** The router refused the navigation the swipe asked for, so put the page back. */\n private restorePending(): void {\n for (const view of this.byEl.values()) {\n if (!view.pendingRemoval) continue;\n view.pendingRemoval = false;\n this.views.push(view);\n void this.stack.push(view.el, { animated: false, key: view.key, source: 'restore' });\n }\n }\n\n private destroyView(view: View): void {\n this.byEl.delete(view.el);\n this.views = this.views.filter((v) => v !== view);\n this.unbindInputs(view);\n if (this.activeView === view) {\n this.activeView = null;\n this.activated = null;\n this._activatedRoute = null;\n }\n const instance = view.ref.instance;\n view.ref.destroy();\n this.deactivateEvents.emit(instance);\n }\n\n private bindInputs(view: View): void {\n if (!this.router.componentInputBindingEnabled) return;\n const mirror = reflectComponentType(view.ref.componentType);\n if (!mirror) return;\n const route = view.route;\n view.inputs = combineLatest([route.queryParams, route.params, route.data])\n .pipe(switchMap(([queryParams, params, data], i) => (i === 0 ? of({ ...queryParams, ...params, ...data }) : from(Promise.resolve({ ...queryParams, ...params, ...data })))))\n .subscribe((data) => {\n if (this.activeView !== view) return;\n for (const { templateName } of mirror.inputs) view.ref.setInput(templateName, data[templateName]);\n });\n }\n private unbindInputs(view: View): void {\n view.inputs?.unsubscribe();\n view.inputs = null;\n }\n\n private syncChangeDetection(): void {\n const top = this.stack.top?.el;\n for (const view of this.byEl.values()) {\n if (view.el === top || view.pendingRemoval) view.ref.changeDetectorRef.reattach();\n else view.ref.changeDetectorRef.detach();\n }\n }\n}\n\nfunction sourceOf(trigger: 'imperative' | 'history' | undefined): NavigationSource {\n return trigger === 'history' ? 'history' : 'api';\n}\n","import { Injectable } from '@angular/core';\nimport { BaseRouteReuseStrategy, type ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * The router's default strategy reuses a component when only the params change\n * (`/items/1` → `/items/2`), so no outlet activation happens and no transition\n * can run. This strategy asks for a fresh page whenever the URL of the matched\n * route differs, which is what a navigation stack expects. Routes opt out with\n * `data: { reuseRoute: true }`.\n *\n * It is not installed automatically. Provide it like any other strategy to get\n * this behaviour:\n *\n * ```ts\n * { provide: RouteReuseStrategy, useClass: StackNavRouteReuseStrategy }\n * ```\n */\n@Injectable()\nexport class StackNavRouteReuseStrategy extends BaseRouteReuseStrategy {\n override shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n if (future.routeConfig !== curr.routeConfig) return false;\n if (future.data?.['reuseRoute'] === true) return true;\n return urlOf(future) === urlOf(curr);\n }\n}\n\nfunction urlOf(s: ActivatedRouteSnapshot): string {\n return s.url.map((u) => u.toString()).join('/');\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":"stacknav-angular.mjs","sources":["../../src/lib/activated-route-proxy.ts","../../src/lib/config.ts","../../src/lib/history.ts","../../src/lib/outlet.ts","../../src/lib/route-reuse-strategy.ts","../../src/stacknav-angular.ts"],"sourcesContent":["import type { ActivatedRoute, ActivatedRouteSnapshot, Data, ParamMap, Params, Route, UrlSegment } from '@angular/router';\nimport { BehaviorSubject, type Observable, switchMap } from 'rxjs';\n\n/**\n * The `ActivatedRoute` a page component injects. When a page kept alive beneath\n * the stack is reached again, the router hands it a new route object. This\n * proxy keeps the component's subscriptions valid by switching them to whichever\n * route is current.\n */\nexport class StackNavActivatedRoute {\n private readonly current$: BehaviorSubject<ActivatedRoute>;\n\n readonly url: Observable<UrlSegment[]>;\n readonly params: Observable<Params>;\n readonly queryParams: Observable<Params>;\n readonly fragment: Observable<string | null>;\n readonly data: Observable<Data>;\n readonly title: Observable<string | undefined>;\n readonly paramMap: Observable<ParamMap>;\n readonly queryParamMap: Observable<ParamMap>;\n\n constructor(route: ActivatedRoute) {\n this.current$ = new BehaviorSubject(route);\n const of = <T>(pick: (r: ActivatedRoute) => Observable<T>) => this.current$.pipe(switchMap(pick));\n this.url = of((r) => r.url);\n this.params = of((r) => r.params);\n this.queryParams = of((r) => r.queryParams);\n this.fragment = of((r) => r.fragment);\n this.data = of((r) => r.data);\n this.title = of((r) => r.title);\n this.paramMap = of((r) => r.paramMap);\n this.queryParamMap = of((r) => r.queryParamMap);\n }\n\n /** The router's route object behind the proxy right now. */\n get actual(): ActivatedRoute {\n return this.current$.value;\n }\n /** @internal */\n swap(route: ActivatedRoute): void {\n if (route !== this.current$.value) this.current$.next(route);\n }\n\n get snapshot(): ActivatedRouteSnapshot {\n return this.actual.snapshot;\n }\n get outlet(): string {\n return this.actual.outlet;\n }\n get component(): ActivatedRoute['component'] {\n return this.actual.component;\n }\n get routeConfig(): Route | null {\n return this.actual.routeConfig;\n }\n get root(): ActivatedRoute {\n return this.actual.root;\n }\n get parent(): ActivatedRoute | null {\n return this.actual.parent;\n }\n get firstChild(): ActivatedRoute | null {\n return this.actual.firstChild;\n }\n get children(): ActivatedRoute[] {\n return this.actual.children;\n }\n get pathFromRoot(): ActivatedRoute[] {\n return this.actual.pathFromRoot;\n }\n toString(): string {\n return this.actual.toString();\n }\n}\n","import { InjectionToken, type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport type { ActivatedRouteSnapshot } from '@angular/router';\nimport {\n createDirectionResolver,\n defaultStrategies,\n type Direction,\n type DirectionResolver,\n type DirectionStrategy,\n type EdgePanGestureOptions,\n type IOSTransitionOptions,\n} from '@stacknav/core';\n\n/** Everything `provideStackNav()` accepts. All optional. */\nexport interface StackNavConfig {\n /**\n * Strategies that decide push / pop / replace for a navigation, in priority\n * order. Defaults to the core's `defaultStrategies()`: an explicit hint, then\n * browser history, then the kept stack, then route numbering\n * (`data.stackLevel`), then the route tree. Pass a resolver function to\n * replace the whole mechanism.\n */\n direction?: readonly DirectionStrategy[] | DirectionResolver;\n /** The direction to use when no strategy has an answer. Default `push`. */\n fallbackDirection?: Direction;\n /**\n * Where a route's number comes from, for the numbering strategy.\n * Default: `snapshot.data['stackLevel']`.\n */\n levelOf?: (snapshot: ActivatedRouteSnapshot) => number | null | undefined;\n /**\n * What identifies a page, so that a later navigation to the same key pops\n * back to the kept page. Default: the route's full URL path, including matrix\n * params.\n */\n keyOf?: (snapshot: ActivatedRouteSnapshot) => string;\n /**\n * The key under which a navigation's `info` carries a hint for this library:\n * `router.navigate(cmds, { info: { stacknav: 'pop' } })`. Default `stacknav`.\n */\n infoKey?: string;\n /** Defaults for every outlet's transition. An outlet's `transition` input overrides these per key. */\n transition?: Partial<IOSTransitionOptions>;\n /** Defaults for every outlet's swipe-back gesture. `false` disables it. */\n gesture?: Partial<EdgePanGestureOptions> | false;\n /**\n * Detaches change detection from pages hidden beneath the top and reattaches\n * it when they are shown again. Saves work on deep stacks. Off by default.\n */\n detachInactiveViews?: boolean;\n /** Inserts the engine's stylesheet at runtime. Default true. Turn it off if you import `stacknav.css`. */\n injectStyles?: boolean;\n /** Whether to animate at all. Default true. `prefers-reduced-motion` is honoured either way. */\n animated?: boolean;\n}\n\nexport interface ResolvedStackNavConfig {\n resolve: DirectionResolver;\n levelOf: (snapshot: ActivatedRouteSnapshot) => number | null | undefined;\n keyOf: (snapshot: ActivatedRouteSnapshot) => string;\n infoKey: string;\n transition: Partial<IOSTransitionOptions>;\n gesture: Partial<EdgePanGestureOptions> | false;\n detachInactiveViews: boolean;\n injectStyles: boolean;\n animated: boolean;\n}\n\nexport const STACKNAV_CONFIG = /*#__PURE__*/ new InjectionToken<ResolvedStackNavConfig>('STACKNAV_CONFIG', {\n providedIn: 'root',\n factory: () => resolveConfig({}),\n});\n\nexport function defaultLevelOf(snapshot: ActivatedRouteSnapshot): number | null | undefined {\n const v = snapshot.data?.['stackLevel'];\n return typeof v === 'number' ? v : undefined;\n}\n\n/** The route's URL path from the root down to and including this route, e.g. `items/42;view=full`. */\nexport function defaultKeyOf(snapshot: ActivatedRouteSnapshot): string {\n return snapshot.pathFromRoot\n .flatMap((s) => s.url.map((u) => u.toString()))\n .join('/');\n}\n\nexport function resolveConfig(c: StackNavConfig): ResolvedStackNavConfig {\n const resolve =\n typeof c.direction === 'function'\n ? c.direction\n : createDirectionResolver(c.direction ?? defaultStrategies(), c.fallbackDirection ?? 'push');\n return {\n resolve,\n levelOf: c.levelOf ?? defaultLevelOf,\n keyOf: c.keyOf ?? defaultKeyOf,\n infoKey: c.infoKey ?? 'stacknav',\n transition: c.transition ?? {},\n gesture: c.gesture ?? {},\n detachInactiveViews: c.detachInactiveViews ?? false,\n injectStyles: c.injectStyles ?? true,\n animated: c.animated ?? true,\n };\n}\n\n/**\n * Configures the outlets. Add it next to `provideRouter()`. It changes no\n * router configuration.\n *\n * ```ts\n * bootstrapApplication(App, { providers: [provideRouter(routes), provideStackNav()] });\n * ```\n */\nexport function provideStackNav(config: StackNavConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: STACKNAV_CONFIG, useValue: resolveConfig(config) }]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, ROUTER_CONFIGURATION, Router } from '@angular/router';\nimport type { Direction, DirectionOpinion, NavigationTrigger } from '@stacknav/core';\nimport { STACKNAV_CONFIG } from './config';\n\n/**\n * What a navigation can say to the outlet through the router's own\n * `NavigationExtras.info`, under the configured key (default `stacknav`):\n *\n * ```ts\n * router.navigate(['/items', 2], { info: { stacknav: 'push' } });\n * router.navigate(['/login'], { info: { stacknav: { direction: 'replace', animated: false } } });\n * ```\n */\nexport type StackNavHint = Direction | { direction?: DirectionOpinion; animated?: boolean };\n\nexport interface NavigationInfo {\n id: number;\n trigger: NavigationTrigger;\n /** negative = back, positive = forward, undefined when unknown */\n historyDelta: number | undefined;\n hint: DirectionOpinion;\n animated: boolean | undefined;\n replaceUrl: boolean;\n skipLocationChange: boolean;\n restoredId: number | null;\n}\n\ninterface Entry {\n id: number;\n url: string;\n}\n\n/**\n * A model of the browser's history as the router walks it: which entry is\n * current, and which came before. It answers two questions for the outlet: is\n * this navigation going back or forward, and is the previous history entry the\n * page beneath the top? Everything comes from public router events, so it needs\n * no router configuration. Internal to the outlet.\n */\n@Injectable({ providedIn: 'root' })\nexport class StackNavHistory {\n private readonly router = inject(Router);\n private readonly config = inject(STACKNAV_CONFIG);\n private readonly cancelResolution = inject(ROUTER_CONFIGURATION, { optional: true })?.canceledNavigationResolution ?? 'replace';\n private entries: Entry[] = [];\n private cursor = -1;\n private pending: NavigationInfo | null = null;\n\n constructor() {\n this.router.events.subscribe((e) => {\n if (e instanceof NavigationStart) this.onStart(e);\n else if (e instanceof NavigationEnd) this.onEnd(e);\n else if (e instanceof NavigationCancel || e instanceof NavigationError) this.onAbort();\n else if (e instanceof NavigationSkipped) this.pending = null;\n });\n }\n\n /** The navigation in flight, if any. Valid while the router activates routes. */\n get current(): NavigationInfo | null {\n return this.pending;\n }\n\n /** URL of the history entry before the current one, or null. */\n get previousUrl(): string | null {\n return this.cursor > 0 ? this.entries[this.cursor - 1].url : null;\n }\n\n get currentUrl(): string | null {\n return this.cursor >= 0 ? this.entries[this.cursor].url : null;\n }\n\n get canGoBack(): boolean {\n return this.cursor > 0;\n }\n\n private onStart(e: NavigationStart): void {\n const nav = this.router.getCurrentNavigation();\n const isHistory = e.navigationTrigger === 'popstate' || e.navigationTrigger === 'hashchange';\n const restoredId = e.restoredState?.navigationId ?? null;\n let historyDelta: number | undefined;\n if (isHistory) {\n const idx = this.indexOf(restoredId);\n if (idx >= 0 && this.cursor >= 0) historyDelta = idx - this.cursor;\n else if (restoredId != null && this.cursor >= 0) historyDelta = restoredId < this.entries[this.cursor].id ? -1 : 1;\n }\n const hint = isHistory ? undefined : readHint(nav?.extras.info, this.config.infoKey);\n this.pending = {\n id: e.id,\n trigger: isHistory ? 'history' : 'imperative',\n historyDelta,\n hint: hint?.direction,\n animated: hint?.animated,\n replaceUrl: !!nav?.extras.replaceUrl,\n skipLocationChange: !!nav?.extras.skipLocationChange,\n restoredId,\n };\n }\n\n private onEnd(e: NavigationEnd): void {\n const p = this.pending;\n this.pending = null;\n const entry: Entry = { id: e.id, url: e.urlAfterRedirects };\n if (!p || this.cursor < 0) {\n this.entries = [entry];\n this.cursor = 0;\n return;\n }\n if (p.trigger === 'history') {\n const idx = this.indexOf(p.restoredId);\n if (idx >= 0) {\n this.cursor = idx;\n this.entries[idx] = entry; // the router rewrites the entry's navigationId on popstate\n } else {\n this.entries = [entry];\n this.cursor = 0;\n }\n return;\n }\n if (p.skipLocationChange) return;\n if (p.replaceUrl) {\n this.entries[this.cursor] = entry;\n return;\n }\n this.entries.splice(this.cursor + 1);\n this.entries.push(entry);\n this.cursor++;\n }\n\n /**\n * Handles a history navigation the router refused. With\n * `canceledNavigationResolution: 'computed'` the router walks the browser back\n * to where it was, so nothing changes here. With the default `'replace'` it\n * overwrites the entry the browser landed on with the current URL and the last\n * successful id.\n */\n private onAbort(): void {\n const p = this.pending;\n this.pending = null;\n if (!p || p.trigger !== 'history' || this.cursor < 0 || this.cancelResolution === 'computed') return;\n const idx = this.indexOf(p.restoredId);\n if (idx < 0) return;\n this.entries[idx] = { ...this.entries[this.cursor] };\n this.cursor = idx;\n }\n\n /** The entry carrying `id`, preferring the nearest one that is not the current entry. */\n private indexOf(id: number | null): number {\n if (id == null) return -1;\n let best = -1;\n for (let i = 0; i < this.entries.length; i++) {\n if (this.entries[i].id !== id) continue;\n if (best < 0 || best === this.cursor || (i !== this.cursor && Math.abs(i - this.cursor) < Math.abs(best - this.cursor))) best = i;\n }\n return best;\n }\n}\n\nfunction readHint(info: unknown, key: string): { direction?: DirectionOpinion; animated?: boolean } | undefined {\n if (info == null || typeof info !== 'object') return undefined;\n const v = (info as Record<string, unknown>)[key] as StackNavHint | undefined;\n if (v == null) return undefined;\n return typeof v === 'string' ? { direction: v } : v;\n}\n","import { DOCUMENT, Location } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n Output,\n ViewContainerRef,\n inject,\n input,\n reflectComponentType,\n type ComponentRef,\n type EnvironmentInjector,\n type OnDestroy,\n type OnInit,\n type Type,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n ChildrenOutletContexts,\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationSkipped,\n PRIMARY_OUTLET,\n ROUTER_OUTLET_DATA,\n Router,\n type ActivatedRouteSnapshot,\n type OutletContext,\n type RouterOutletContract,\n} from '@angular/router';\nimport {\n createIOSStack,\n injectStyles,\n segmentsOf,\n type Direction,\n type EdgePanGestureOptions,\n type IOSStack,\n type IOSTransitionOptions,\n type NavigationSource,\n type RouteRef,\n type StackEntry,\n} from '@stacknav/core';\nimport { Subscription, combineLatest, from, of, switchMap } from 'rxjs';\nimport { StackNavActivatedRoute } from './activated-route-proxy';\nimport { STACKNAV_CONFIG } from './config';\nimport { StackNavHistory } from './history';\n\n/** What the outlet knows about a page, passed to direction strategies. */\nexport interface StackNavRouteRef extends RouteRef {\n snapshot: ActivatedRouteSnapshot;\n}\n\n/** A page the outlet keeps alive. */\nexport interface StackNavView {\n readonly ref: ComponentRef<unknown>;\n readonly el: HTMLElement;\n readonly key: string;\n readonly routeRef: StackNavRouteRef;\n /** the full app URL when the page was last active */\n url: string;\n route: ActivatedRoute;\n}\n\ninterface View extends StackNavView {\n routeRef: StackNavRouteRef;\n proxy: StackNavActivatedRoute | null;\n savedContexts: Map<string, OutletContext> | null;\n /** popped by the swipe gesture, waiting for the router to catch up */\n pendingRemoval: boolean;\n inputs: Subscription | null;\n}\n\nexport interface StackNavActivation {\n view: StackNavView;\n direction: Direction;\n animated: boolean;\n reused: boolean;\n}\n\n/**\n * A router outlet (`RouterOutletContract`) that keeps a stack of pages and moves\n * between them with the iOS push/pop transition. Use it where you would use\n * `<router-outlet>`. The router drives it the same way:\n *\n * ```html\n * <sn-outlet />\n * ```\n *\n * Pages beneath the top stay alive, keeping scroll position, form state and\n * subscriptions. A swipe from the leading edge pops interactively, and the\n * direction of every navigation is decided by the strategies configured in\n * `provideStackNav()`. The element needs a height; it is the pages' scroll\n * container.\n */\n@Directive({\n selector: 'sn-outlet',\n exportAs: 'snOutlet',\n host: { style: 'display: block' },\n})\nexport class StackNavOutlet implements RouterOutletContract, OnInit, OnDestroy {\n /** Outlet name, as on `router-outlet`. Static. */\n @Input() name: string = PRIMARY_OUTLET;\n /** Per-outlet transition options, merged over `provideStackNav({ transition })`. */\n @Input() transition: Partial<IOSTransitionOptions> | undefined;\n /** Per-outlet gesture options, merged over `provideStackNav({ gesture })`. `false` disables the swipe. */\n @Input() gesture: Partial<EdgePanGestureOptions> | false | undefined;\n /** Same as on `router-outlet`: available to pages through `ROUTER_OUTLET_DATA`. */\n readonly routerOutletData = input<unknown>(undefined);\n\n /** A page component was created. */\n @Output('activate') activateEvents = new EventEmitter<unknown>();\n /** A page component was destroyed. */\n @Output('deactivate') deactivateEvents = new EventEmitter<unknown>();\n /** A kept page was shown again, or a detached one re-attached. */\n @Output('attach') attachEvents = new EventEmitter<unknown>();\n @Output('detach') detachEvents = new EventEmitter<unknown>();\n /** Every activation, with the direction that was resolved for it. */\n @Output('navigated') navigatedEvents = new EventEmitter<StackNavActivation>();\n\n private readonly parentContexts = inject(ChildrenOutletContexts);\n private readonly location = inject(ViewContainerRef);\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly config = inject(STACKNAV_CONFIG);\n private readonly history = inject(StackNavHistory);\n private readonly router = inject(Router);\n private readonly browserLocation = inject(Location);\n private readonly document = inject(DOCUMENT);\n\n /**\n * The underlying core stack. Chrome that just has to move with the pages is\n * usually best driven from CSS, off `--sn-t` / `--sn-e` and the\n * `sn-page-upper` / `sn-page-lower` classes; subscribe to `progress` when\n * you need the number itself.\n */\n stack!: IOSStack;\n /** The direction of the last activation. */\n lastDirection: Direction | null = null;\n\n /** Inputs are bound when the router was configured with `withComponentInputBinding()`. */\n readonly supportsBindingToComponentInputs?: true;\n\n private views: View[] = [];\n private readonly byEl = new Map<HTMLElement, View>();\n private readonly detached = new Map<ComponentRef<unknown>, View>();\n private activeView: View | null = null;\n private leaving: View | null = null;\n private activated: ComponentRef<unknown> | null = null;\n private _activatedRoute: ActivatedRoute | null = null;\n private subs = new Subscription();\n\n constructor() {\n if (this.router.componentInputBindingEnabled) this.supportsBindingToComponentInputs = true;\n }\n\n // ------------------------------------------------------------- lifecycle\n ngOnInit(): void {\n const gesture = this.gesture === false || this.config.gesture === false ? false : { ...(this.config.gesture || {}), ...(this.gesture || {}) };\n this.stack = createIOSStack({\n container: this.host,\n transition: { ...this.config.transition, ...(this.transition || {}) },\n gesture: gesture || {},\n });\n if (gesture === false) this.stack.gesture.detach();\n if (this.config.injectStyles) injectStyles(this.document);\n\n this.stack.on('pop', (e) => this.onStackRemoved(e.removed, e.source));\n this.stack.on('replace', (e) => this.onStackRemoved(e.removed, e.source));\n this.stack.on('reset', (e) => this.onStackRemoved(e.removed, e.source));\n if (this.config.detachInactiveViews) {\n this.stack.on('transitionstart', ({ lower, upper }) => {\n for (const entry of [lower, upper]) {\n const view = entry && this.byEl.get(entry.el);\n if (view) view.ref.changeDetectorRef.reattach();\n }\n });\n for (const event of ['push', 'pop', 'replace', 'reset'] as const) this.stack.on(event, () => this.syncChangeDetection());\n }\n this.subs.add(\n this.router.events.subscribe((e) => {\n if (e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped) this.restorePending();\n else if (e instanceof NavigationEnd && this.activeView) this.activeView.url = e.urlAfterRedirects;\n }),\n );\n\n this.parentContexts.onChildOutletCreated(this.name, this);\n const context = this.parentContexts.getContext(this.name);\n if (context?.route) {\n if (context.attachRef) this.attach(context.attachRef, context.route);\n else this.activateWith(context.route, context.injector);\n }\n }\n\n ngOnDestroy(): void {\n if (this.parentContexts.getContext(this.name)?.outlet === this) this.parentContexts.onChildOutletDestroyed(this.name);\n this.subs.unsubscribe();\n for (const view of this.byEl.values()) view.inputs?.unsubscribe();\n this.stack?.destroy();\n }\n\n // -------------------------------------------------------- outlet contract\n get isActivated(): boolean {\n return !!this.activated;\n }\n get component(): object {\n if (!this.activated) throw new Error('Outlet is not activated');\n return this.activated.instance as object;\n }\n get activatedComponentRef(): ComponentRef<unknown> | null {\n return this.activated;\n }\n get activatedRoute(): ActivatedRoute {\n if (!this.activated) throw new Error('Outlet is not activated');\n return this._activatedRoute!;\n }\n get activatedRouteData(): Record<string, unknown> {\n return this._activatedRoute ? this._activatedRoute.snapshot.data : {};\n }\n\n /** Pages currently kept, bottom to top. The last one is on screen. */\n get pages(): readonly StackNavView[] {\n return this.views;\n }\n /** Whether a swipe has a kept page to reveal. */\n get canPop(): boolean {\n return this.views.length > 1;\n }\n\n activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector): void {\n if (this.activated) throw new Error('Cannot activate an already activated outlet');\n const snapshot = activatedRoute.snapshot;\n const key = this.config.keyOf(snapshot);\n const leaving = this.takeLeaving();\n let existing = this.views.find((v) => v.key === key) ?? null;\n if (existing === leaving) existing = null;\n const view = existing ?? this.createView(snapshot.component!, activatedRoute, environmentInjector, key);\n this.show(view, activatedRoute, leaving, !!existing);\n }\n\n deactivate(): void {\n if (!this.activated) return;\n const view = this.activeView!;\n this.unbindInputs(view);\n const context = this.parentContexts.getContext(this.name);\n if (context) view.savedContexts = (context.children as unknown as { contexts: Map<string, OutletContext> }).contexts;\n this.activated = null;\n this._activatedRoute = null;\n this.activeView = null;\n if (view.pendingRemoval) {\n this.destroyView(view);\n return;\n }\n // The router deactivates before it activates, synchronously. If no\n // activation follows, the outlet is really empty.\n this.leaving = view;\n queueMicrotask(() => {\n if (this.leaving !== view) return;\n this.leaving = null;\n this.views = [];\n void this.stack.reset([]);\n });\n }\n\n detach(): ComponentRef<unknown> {\n if (!this.activated) throw new Error('Outlet is not activated');\n const view = this.activeView!;\n const ref = view.ref;\n this.unbindInputs(view);\n this.activated = null;\n this._activatedRoute = null;\n this.activeView = null;\n this.byEl.delete(view.el);\n this.views = this.views.filter((v) => v !== view);\n this.detached.set(ref, view);\n void this.stack.remove(view.el);\n const i = this.location.indexOf(ref.hostView);\n if (i >= 0) this.location.detach(i);\n this.detachEvents.emit(ref.instance);\n return ref;\n }\n\n attach(ref: ComponentRef<unknown>, activatedRoute: ActivatedRoute): void {\n const key = this.config.keyOf(activatedRoute.snapshot);\n let view = this.detached.get(ref) ?? null;\n this.detached.delete(ref);\n if (!view) view = this.wrap(ref, activatedRoute, key, null);\n this.location.insert(ref.hostView);\n this.park(view.el);\n this.byEl.set(view.el, view);\n const leaving = this.takeLeaving();\n this.show(view, activatedRoute, leaving, true);\n }\n\n // -------------------------------------------------------------- internals\n private takeLeaving(): View | null {\n const leaving = this.leaving;\n this.leaving = null;\n return leaving;\n }\n\n /** Decides the direction, places the page in the stack, and makes it active. */\n private show(view: View, activatedRoute: ActivatedRoute, leaving: View | null, reused: boolean): void {\n const nav = this.history.current;\n const from = leaving ?? this.views[this.views.length - 1] ?? null;\n // Resolvers may have rerun, and a custom keyOf may group several snapshots, so the old snapshot cannot be trusted.\n view.routeRef = this.routeRefOf(activatedRoute.snapshot, view.key);\n const alreadyOnScreen = reused && !this.stack.busy && this.stack.top?.el === view.el;\n let direction = this.config.resolve({\n from: from?.routeRef ?? null,\n to: view.routeRef,\n trigger: nav?.trigger ?? 'imperative',\n historyDelta: nav?.historyDelta,\n hint: nav?.hint,\n stack: this.views.map((v) => v.key),\n });\n // After a swipe the page beneath is already showing and the one that left\n // is gone. A pop onto anything else has nothing to pop, so just show the page.\n if (!leaving && this.stack.top && direction === 'pop' && !reused) direction = 'replace';\n const animated = this.config.animated && (nav?.animated ?? true) && (this.views.length > 0 || !!leaving);\n\n view.route = activatedRoute;\n view.proxy?.swap(activatedRoute);\n const current = this.router.getCurrentNavigation();\n view.url = current ? this.router.serializeUrl(current.finalUrl ?? current.extractedUrl) : this.router.url;\n if (view.savedContexts) {\n this.parentContexts.getOrCreateContext(this.name).children.onOutletReAttached(view.savedContexts);\n view.savedContexts = null;\n }\n\n this.activated = view.ref;\n this._activatedRoute = activatedRoute;\n this.activeView = view;\n this.lastDirection = direction;\n this.place(view, direction, leaving);\n if (!alreadyOnScreen) {\n void this.stack.present(view.el, direction, { key: view.key, animated, source: sourceOf(nav?.trigger) });\n }\n this.changeDetector.markForCheck();\n this.bindInputs(view);\n // An animated page renders off screen during its first frames. A page that\n // appears immediately (no animation, or a replace, which the stack never\n // animates) would otherwise be blank until the next scheduled tick.\n if ((!animated || direction === 'replace') && !alreadyOnScreen) view.ref.changeDetectorRef.detectChanges();\n (reused ? this.attachEvents : this.activateEvents).emit(view.ref.instance);\n this.navigatedEvents.emit({ view, direction, animated, reused });\n }\n\n /** Mirrors what the stack will do, synchronously, so `pages` and the next direction stay correct. */\n private place(view: View, direction: Direction, leaving: View | null): void {\n const views = this.views;\n const drop = (v: View | null) => {\n const i = v ? views.indexOf(v) : -1;\n if (i >= 0) views.splice(i, 1);\n };\n if (direction === 'pop' && views.includes(view)) {\n views.splice(views.indexOf(view) + 1);\n return;\n }\n if (direction !== 'push') drop(leaving);\n drop(view);\n views.push(view);\n }\n\n private createView(component: Type<unknown>, route: ActivatedRoute, environmentInjector: EnvironmentInjector, key: string): View {\n const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n const proxy = new StackNavActivatedRoute(route);\n const injector = Injector.create({\n providers: [\n { provide: ActivatedRoute, useValue: proxy },\n { provide: ChildrenOutletContexts, useValue: childContexts },\n { provide: ROUTER_OUTLET_DATA, useValue: this.routerOutletData },\n ],\n parent: this.location.injector,\n });\n const ref = this.location.createComponent(component, { index: this.location.length, injector, environmentInjector });\n const view = this.wrap(ref, route, key, proxy);\n this.park(view.el);\n this.byEl.set(view.el, view);\n return view;\n }\n\n private wrap(ref: ComponentRef<unknown>, route: ActivatedRoute, key: string, proxy: StackNavActivatedRoute | null): View {\n const el = ref.location.nativeElement as HTMLElement;\n return { ref, el, key, routeRef: this.routeRefOf(route.snapshot, key), url: '', route, proxy, savedContexts: null, pendingRemoval: false, inputs: null };\n }\n\n /** Hidden inside the container until the stack shows it, never a visible sibling of the outlet. */\n private park(el: HTMLElement): void {\n el.classList.add(this.stack.pageClass);\n if (el.parentElement !== this.host) this.host.append(el);\n }\n\n private routeRefOf(snapshot: ActivatedRouteSnapshot, key: string): StackNavRouteRef {\n return { key, segments: segmentsOf(key), level: this.config.levelOf(snapshot), data: snapshot.data, snapshot };\n }\n\n private onStackRemoved(removed: StackEntry[], source: NavigationSource): void {\n for (const entry of removed) {\n const view = this.byEl.get(entry.el);\n if (!view) continue;\n if (source === 'gesture') {\n view.pendingRemoval = true;\n this.views = this.views.filter((v) => v !== view);\n this.navigateBackAfterGesture();\n } else {\n this.destroyView(view);\n }\n }\n }\n\n /** The swipe already revealed the page beneath. Bring the router in line with it. */\n private navigateBackAfterGesture(): void {\n const lower = this.views[this.views.length - 1];\n if (!lower) return;\n const previous = this.history.previousUrl;\n if (previous != null && this.sameUrl(previous, lower.url)) {\n this.browserLocation.back();\n } else {\n void this.router.navigateByUrl(lower.url, { info: { [this.config.infoKey]: { direction: 'pop', animated: false } } });\n }\n }\n\n private sameUrl(a: string, b: string): boolean {\n const norm = (u: string) => this.router.serializeUrl(this.router.parseUrl(u));\n return norm(a) === norm(b);\n }\n\n /** The router refused the navigation the swipe asked for, so put the page back. */\n private restorePending(): void {\n for (const view of this.byEl.values()) {\n if (!view.pendingRemoval) continue;\n view.pendingRemoval = false;\n this.views.push(view);\n void this.stack.push(view.el, { animated: false, key: view.key, source: 'restore' });\n }\n }\n\n private destroyView(view: View): void {\n this.byEl.delete(view.el);\n this.views = this.views.filter((v) => v !== view);\n this.unbindInputs(view);\n if (this.activeView === view) {\n this.activeView = null;\n this.activated = null;\n this._activatedRoute = null;\n }\n const instance = view.ref.instance;\n view.ref.destroy();\n this.deactivateEvents.emit(instance);\n }\n\n private bindInputs(view: View): void {\n if (!this.router.componentInputBindingEnabled) return;\n const mirror = reflectComponentType(view.ref.componentType);\n if (!mirror) return;\n const route = view.route;\n view.inputs = combineLatest([route.queryParams, route.params, route.data])\n .pipe(switchMap(([queryParams, params, data], i) => (i === 0 ? of({ ...queryParams, ...params, ...data }) : from(Promise.resolve({ ...queryParams, ...params, ...data })))))\n .subscribe((data) => {\n if (this.activeView !== view) return;\n for (const { templateName } of mirror.inputs) view.ref.setInput(templateName, data[templateName]);\n });\n }\n private unbindInputs(view: View): void {\n view.inputs?.unsubscribe();\n view.inputs = null;\n }\n\n private syncChangeDetection(): void {\n const top = this.stack.top?.el;\n for (const view of this.byEl.values()) {\n if (view.el === top || view.pendingRemoval) view.ref.changeDetectorRef.reattach();\n else view.ref.changeDetectorRef.detach();\n }\n }\n}\n\nfunction sourceOf(trigger: 'imperative' | 'history' | undefined): NavigationSource {\n return trigger === 'history' ? 'history' : 'api';\n}\n","import { Injectable } from '@angular/core';\nimport { BaseRouteReuseStrategy, type ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * The router's default strategy reuses a component when only the params change\n * (`/items/1` → `/items/2`), so no outlet activation happens and no transition\n * can run. This strategy asks for a fresh page whenever the URL of the matched\n * route differs, which is what a navigation stack expects. Routes opt out with\n * `data: { reuseRoute: true }`.\n *\n * It is not installed automatically. Provide it like any other strategy to get\n * this behaviour:\n *\n * ```ts\n * { provide: RouteReuseStrategy, useClass: StackNavRouteReuseStrategy }\n * ```\n */\n@Injectable()\nexport class StackNavRouteReuseStrategy extends BaseRouteReuseStrategy {\n override shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n if (future.routeConfig !== curr.routeConfig) return false;\n if (future.data?.['reuseRoute'] === true) return true;\n return urlOf(future) === urlOf(curr);\n }\n}\n\nfunction urlOf(s: ActivatedRouteSnapshot): string {\n return s.url.map((u) => u.toString()).join('/');\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stacknav/angular",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Angular router outlet with iOS-style push/pop transitions and interactive swipe back, built on @stacknav/core.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "tslib": "^2.8.0",
24
- "@stacknav/core": "^0.2.0"
24
+ "@stacknav/core": "^0.3.1"
25
25
  },
26
26
  "sideEffects": false,
27
27
  "type": "module",
@@ -66,7 +66,12 @@ declare class StackNavOutlet implements RouterOutletContract, OnInit, OnDestroy
66
66
  private readonly router;
67
67
  private readonly browserLocation;
68
68
  private readonly document;
69
- /** The underlying core stack. Subscribe to `progress` to drive your own chrome. */
69
+ /**
70
+ * The underlying core stack. Chrome that just has to move with the pages is
71
+ * usually best driven from CSS, off `--sn-t` / `--sn-e` and the
72
+ * `sn-page-upper` / `sn-page-lower` classes; subscribe to `progress` when
73
+ * you need the number itself.
74
+ */
70
75
  stack: IOSStack;
71
76
  /** The direction of the last activation. */
72
77
  lastDirection: Direction | null;
@@ -1 +1 @@
1
- {"version":3,"file":"stacknav-angular.d.ts","sources":["../../src/lib/outlet.ts","../../src/lib/history.ts","../../src/lib/config.ts","../../src/lib/route-reuse-strategy.ts","../../src/lib/activated-route-proxy.ts"],"mappings":";;;;;;AAkDA;AACM,UAAW,gBAAiB,SAAQ,QAAQ;cACtC,sBAAsB;AACjC;AAED;UACiB,YAAY;AAC3B,kBAAc,YAAY;AAC1B,iBAAa,WAAW;AACxB;AACA,uBAAmB,gBAAgB;;;WAG5B,cAAc;AACtB;UAWgB,kBAAkB;UAC3B,YAAY;eACP,SAAS;;;AAGrB;AAED;;;;;;;;;;;;;;AAcG;AACH,cAKa,cAAe,YAAW,oBAAoB,EAAE,MAAM,EAAE,SAAS;;;;AAInE,gBAAY,OAAO,CAAC,oBAAoB;;aAE/B,OAAO,CAAC,qBAAqB;;+BAEtBA,EAAA,CAAA,WAAA;;AAGL,oBAAc,YAAA;;AAEZ,sBAAgB,YAAA;;AAEpB,kBAAY,YAAA;AACZ,kBAAY,YAAA;;AAET,qBAAe,YAAA,CAAA,kBAAA;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;WAGQ,QAAQ;;AAEhB,mBAAe,SAAS;;AAGxB;;AAGA;AACA;;;;;;;AAYA;AAqCA;;;iCAe6B,YAAY;0BAGnB,cAAc;8BAIV,MAAM;;AAKhC,0BAAsB,YAAY;;;iCAQL,cAAc,uBAAuB,mBAAmB;AAWrF;AAwBA,cAAU,YAAY;AAkBtB,gBAAY,YAAY,2BAA2B,cAAc;AAajE;;AAOA;;AA+CA;AAeA;AAkBA;;AAMA;AAKA;AAIA;;AAeA;AAWA;;AAMA;AASA;AAcA;AAYA;AAKA;yCA5WW,cAAc;2CAAd,cAAc;AAmX1B;;ACpdD;;;;;;;;AAQG;AACG,KAAM,YAAY,GAAG,SAAS;gBAAiB,gBAAgB;;;;ACFrE;UACiB,cAAc;AAC7B;;;;;;AAMG;AACH,yBAAqB,iBAAiB,KAAK,iBAAiB;;wBAExC,SAAS;AAC7B;;;AAGG;AACH,yBAAqB,sBAAsB;AAC3C;;;;AAIG;uBACgB,sBAAsB;AACzC;;;AAGG;;;AAGH,iBAAa,OAAO,CAAC,oBAAoB;;cAE/B,OAAO,CAAC,qBAAqB;AACvC;;;AAGG;;;;;;AAMJ;UAEgB,sBAAsB;aAC5B,iBAAiB;wBACN,sBAAsB;AAC1C,sBAAkB,sBAAsB;;AAExC,gBAAY,OAAO,CAAC,oBAAoB;AACxC,aAAS,OAAO,CAAC,qBAAqB;;;;AAIvC;AAED,cAAa,eAAe,EAAA,cAAA,CAAA,sBAAA;AAK5B,iBAAgB,cAAc,WAAW,sBAAsB;AAK/D;AACA,iBAAgB,YAAY,WAAW,sBAAsB;AAM7D,iBAAgB,aAAa,IAAI,cAAc,GAAG,sBAAsB;AAkBxE;;;;;;;AAOG;AACH,iBAAgB,eAAe,UAAS,cAAmB,GAAG,oBAAoB;;AC3GlF;;;;;;;;;;;;;AAaG;AACH,cACa,0BAA2B,SAAQ,sBAAsB;6BAClC,sBAAsB,QAAQ,sBAAsB;yCAD3E,0BAA0B;;AAMtC;;ACrBD;;;;;AAKG;AACH,cAAa,sBAAsB;AACjC;kBAEc,UAAU,CAAC,UAAU;AACnC,qBAAiB,UAAU,CAAC,MAAM;AAClC,0BAAsB,UAAU,CAAC,MAAM;uBACpB,UAAU;AAC7B,mBAAe,UAAU,CAAC,IAAI;oBACd,UAAU;AAC1B,uBAAmB,UAAU,CAAC,QAAQ;AACtC,4BAAwB,UAAU,CAAC,QAAQ;AAE/B,uBAAO,cAAc;;kBAcnB,cAAc;;AAI5B,gBAAY,cAAc;oBAIV,sBAAsB;;AAMtC,qBAAiB,cAAc;AAG/B,uBAAmB,KAAK;gBAGZ,cAAc;AAG1B,kBAAc,cAAc;AAG5B,sBAAkB,cAAc;AAGhC,oBAAgB,cAAc;AAG9B,wBAAoB,cAAc;AAGlC;AAGD;;","names":["_angular_core"]}
1
+ {"version":3,"file":"stacknav-angular.d.ts","sources":["../../src/lib/outlet.ts","../../src/lib/history.ts","../../src/lib/config.ts","../../src/lib/route-reuse-strategy.ts","../../src/lib/activated-route-proxy.ts"],"mappings":";;;;;;AAkDA;AACM,UAAW,gBAAiB,SAAQ,QAAQ;cACtC,sBAAsB;AACjC;AAED;UACiB,YAAY;AAC3B,kBAAc,YAAY;AAC1B,iBAAa,WAAW;AACxB;AACA,uBAAmB,gBAAgB;;;WAG5B,cAAc;AACtB;UAWgB,kBAAkB;UAC3B,YAAY;eACP,SAAS;;;AAGrB;AAED;;;;;;;;;;;;;;AAcG;AACH,cAKa,cAAe,YAAW,oBAAoB,EAAE,MAAM,EAAE,SAAS;;;;AAInE,gBAAY,OAAO,CAAC,oBAAoB;;aAE/B,OAAO,CAAC,qBAAqB;;+BAEtBA,EAAA,CAAA,WAAA;;AAGL,oBAAc,YAAA;;AAEZ,sBAAgB,YAAA;;AAEpB,kBAAY,YAAA;AACZ,kBAAY,YAAA;;AAET,qBAAe,YAAA,CAAA,kBAAA;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;AAKG;WACK,QAAQ;;AAEhB,mBAAe,SAAS;;AAGxB;;AAGA;AACA;;;;;;;AAYA;AAqCA;;;iCAe6B,YAAY;0BAGnB,cAAc;8BAIV,MAAM;;AAKhC,0BAAsB,YAAY;;;iCAQL,cAAc,uBAAuB,mBAAmB;AAWrF;AAwBA,cAAU,YAAY;AAkBtB,gBAAY,YAAY,2BAA2B,cAAc;AAajE;;AAOA;;AA+CA;AAeA;AAkBA;;AAMA;AAKA;AAIA;;AAeA;AAWA;;AAMA;AASA;AAcA;AAYA;AAKA;yCAjXW,cAAc;2CAAd,cAAc;AAwX1B;;ACzdD;;;;;;;;AAQG;AACG,KAAM,YAAY,GAAG,SAAS;gBAAiB,gBAAgB;;;;ACFrE;UACiB,cAAc;AAC7B;;;;;;AAMG;AACH,yBAAqB,iBAAiB,KAAK,iBAAiB;;wBAExC,SAAS;AAC7B;;;AAGG;AACH,yBAAqB,sBAAsB;AAC3C;;;;AAIG;uBACgB,sBAAsB;AACzC;;;AAGG;;;AAGH,iBAAa,OAAO,CAAC,oBAAoB;;cAE/B,OAAO,CAAC,qBAAqB;AACvC;;;AAGG;;;;;;AAMJ;UAEgB,sBAAsB;aAC5B,iBAAiB;wBACN,sBAAsB;AAC1C,sBAAkB,sBAAsB;;AAExC,gBAAY,OAAO,CAAC,oBAAoB;AACxC,aAAS,OAAO,CAAC,qBAAqB;;;;AAIvC;AAED,cAAa,eAAe,EAAA,cAAA,CAAA,sBAAA;AAK5B,iBAAgB,cAAc,WAAW,sBAAsB;AAK/D;AACA,iBAAgB,YAAY,WAAW,sBAAsB;AAM7D,iBAAgB,aAAa,IAAI,cAAc,GAAG,sBAAsB;AAkBxE;;;;;;;AAOG;AACH,iBAAgB,eAAe,UAAS,cAAmB,GAAG,oBAAoB;;AC3GlF;;;;;;;;;;;;;AAaG;AACH,cACa,0BAA2B,SAAQ,sBAAsB;6BAClC,sBAAsB,QAAQ,sBAAsB;yCAD3E,0BAA0B;;AAMtC;;ACrBD;;;;;AAKG;AACH,cAAa,sBAAsB;AACjC;kBAEc,UAAU,CAAC,UAAU;AACnC,qBAAiB,UAAU,CAAC,MAAM;AAClC,0BAAsB,UAAU,CAAC,MAAM;uBACpB,UAAU;AAC7B,mBAAe,UAAU,CAAC,IAAI;oBACd,UAAU;AAC1B,uBAAmB,UAAU,CAAC,QAAQ;AACtC,4BAAwB,UAAU,CAAC,QAAQ;AAE/B,uBAAO,cAAc;;kBAcnB,cAAc;;AAI5B,gBAAY,cAAc;oBAIV,sBAAsB;;AAMtC,qBAAiB,cAAc;AAG/B,uBAAmB,KAAK;gBAGZ,cAAc;AAG1B,kBAAc,cAAc;AAG5B,sBAAkB,cAAc;AAGhC,oBAAgB,cAAc;AAG9B,wBAAoB,cAAc;AAGlC;AAGD;;","names":["_angular_core"]}