@real-router/angular 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Oleg Ivanov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { signal, inject, DestroyRef, InjectionToken, makeEnvironmentProviders, input, TemplateRef, Directive, contentChildren, computed, Component, output, effect, ElementRef } from '@angular/core';
3
3
  import { getNavigator, UNKNOWN_ROUTE } from '@real-router/core';
4
- import { createRouteSource, createRouteNodeSource, createTransitionSource, createActiveRouteSource, createErrorSource } from '@real-router/sources';
4
+ import { createRouteSource, createRouteNodeSource, getTransitionSource, createActiveRouteSource, createDismissableError } from '@real-router/sources';
5
5
  import { getPluginApi } from '@real-router/core/api';
6
6
  import { getRouteUtils, startsWithSegment } from '@real-router/route-utils';
7
7
  import { NgTemplateOutlet } from '@angular/common';
@@ -73,7 +73,7 @@ function injectRouteUtils() {
73
73
 
74
74
  function injectRouterTransition() {
75
75
  const router = injectRouter();
76
- const source = createTransitionSource(router);
76
+ const source = getTransitionSource(router);
77
77
  return sourceToSignal(source);
78
78
  }
79
79
 
@@ -183,23 +183,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
183
183
  class RouterErrorBoundary {
184
184
  errorTemplate = input(...(ngDevMode ? [undefined, { debugName: "errorTemplate" }] : /* istanbul ignore next */ []));
185
185
  onError = output();
186
- visibleError = computed(() => {
187
- const snap = this.snapshot();
188
- return snap.version > this.dismissedVersion() ? snap.error : null;
189
- }, ...(ngDevMode ? [{ debugName: "visibleError" }] : /* istanbul ignore next */ []));
190
186
  errorContext = computed(() => {
191
- const error = this.visibleError();
192
- if (!error) {
187
+ const snap = this.snapshot();
188
+ if (!snap.error) {
193
189
  return null;
194
190
  }
195
191
  return {
196
- $implicit: error,
197
- resetError: this.resetError,
192
+ $implicit: snap.error,
193
+ resetError: snap.resetError,
198
194
  };
199
195
  }, ...(ngDevMode ? [{ debugName: "errorContext" }] : /* istanbul ignore next */ []));
200
196
  router = injectRouter();
201
- snapshot = sourceToSignal(createErrorSource(this.router));
202
- dismissedVersion = signal(-1, ...(ngDevMode ? [{ debugName: "dismissedVersion" }] : /* istanbul ignore next */ []));
197
+ snapshot = sourceToSignal(createDismissableError(this.router));
203
198
  constructor() {
204
199
  effect(() => {
205
200
  const snap = this.snapshot();
@@ -212,9 +207,6 @@ class RouterErrorBoundary {
212
207
  }
213
208
  });
214
209
  }
215
- resetError = () => {
216
- this.dismissedVersion.set(this.snapshot().version);
217
- };
218
210
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: RouterErrorBoundary, deps: [], target: i0.ɵɵFactoryTarget.Component });
219
211
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: RouterErrorBoundary, isStandalone: true, selector: "router-error-boundary", inputs: { errorTemplate: { classPropertyName: "errorTemplate", publicName: "errorTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onError: "onError" }, ngImport: i0, template: `
220
212
  <ng-content />
@@ -1 +1 @@
1
- {"version":3,"file":"real-router-angular.mjs","sources":["../../src/sourceToSignal.ts","../../src/providers.ts","../../src/functions/injectOrThrow.ts","../../src/functions/injectRouter.ts","../../src/functions/injectNavigator.ts","../../src/functions/injectRoute.ts","../../src/functions/injectRouteNode.ts","../../src/functions/injectRouteUtils.ts","../../src/functions/injectRouterTransition.ts","../../src/functions/injectIsActiveRoute.ts","../../src/directives/RouteMatch.ts","../../src/directives/RouteNotFound.ts","../../src/components/RouteView.ts","../../src/components/RouterErrorBoundary.ts","../../src/dom-utils/route-announcer.ts","../../src/dom-utils/link-utils.ts","../../src/components/NavigationAnnouncer.ts","../../src/directives/RealLink.ts","../../src/directives/RealLinkActive.ts","../../src/real-router-angular.ts"],"sourcesContent":["import { signal, type Signal, inject, DestroyRef } from \"@angular/core\";\n\nimport type { RouterSource } from \"@real-router/sources\";\n\n/** Must be called within an injection context (constructor, field initializer, runInInjectionContext). */\nexport function sourceToSignal<T>(source: RouterSource<T>): Signal<T> {\n const sig = signal<T>(source.getSnapshot());\n const destroyRef = inject(DestroyRef);\n\n const unsubscribe = source.subscribe(() => {\n sig.set(source.getSnapshot());\n });\n\n destroyRef.onDestroy(() => {\n unsubscribe();\n source.destroy();\n });\n\n return sig.asReadonly();\n}\n","import {\n InjectionToken,\n makeEnvironmentProviders,\n type EnvironmentProviders,\n} from \"@angular/core\";\nimport { getNavigator, type Router, type Navigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"./sourceToSignal\";\n\nimport type { RouteSignals } from \"./types\";\n\nexport const ROUTER = new InjectionToken<Router>(\"ROUTER\");\n\nexport const NAVIGATOR = new InjectionToken<Navigator>(\"NAVIGATOR\");\n\nexport const ROUTE = new InjectionToken<RouteSignals>(\"ROUTE\");\n\nexport function provideRealRouter(router: Router): EnvironmentProviders {\n const navigator = getNavigator(router);\n\n return makeEnvironmentProviders([\n { provide: ROUTER, useValue: router },\n { provide: NAVIGATOR, useValue: navigator },\n {\n provide: ROUTE,\n useFactory: (): RouteSignals => ({\n routeState: sourceToSignal(createRouteSource(router)),\n navigator,\n }),\n },\n ]);\n}\n","import { inject } from \"@angular/core\";\n\nimport type { InjectionToken } from \"@angular/core\";\n\nexport function injectOrThrow<T>(token: InjectionToken<T>, fnName: string): T {\n const value = inject(token, { optional: true });\n\n if (!value) {\n throw new Error(\n `${fnName} must be used within a provideRealRouter context`,\n );\n }\n\n return value;\n}\n","import { injectOrThrow } from \"./injectOrThrow\";\nimport { ROUTER } from \"../providers\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport function injectRouter(): Router {\n return injectOrThrow(ROUTER, \"injectRouter\");\n}\n","import { injectOrThrow } from \"./injectOrThrow\";\nimport { NAVIGATOR } from \"../providers\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport function injectNavigator(): Navigator {\n return injectOrThrow(NAVIGATOR, \"injectNavigator\");\n}\n","import { injectOrThrow } from \"./injectOrThrow\";\nimport { ROUTE } from \"../providers\";\n\nimport type { RouteSignals } from \"../types\";\n\nexport function injectRoute(): RouteSignals {\n return injectOrThrow(ROUTE, \"injectRoute\");\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"../sourceToSignal\";\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { RouteSignals } from \"../types\";\n\nexport function injectRouteNode(nodeName: string): RouteSignals {\n const router = injectRouter();\n const navigator = getNavigator(router);\n const source = createRouteNodeSource(router, nodeName);\n const routeState = sourceToSignal(source);\n\n return { routeState, navigator };\n}\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport function injectRouteUtils(): RouteUtils {\n const router = injectRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n}\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"../sourceToSignal\";\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { Signal } from \"@angular/core\";\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\n\nexport function injectRouterTransition(): Signal<RouterTransitionSnapshot> {\n const router = injectRouter();\n const source = createTransitionSource(router);\n\n return sourceToSignal(source);\n}\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"../sourceToSignal\";\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { Signal } from \"@angular/core\";\nimport type { Params } from \"@real-router/core\";\n\nexport function injectIsActiveRoute(\n routeName: string,\n params?: Params,\n options?: { strict?: boolean; ignoreQueryParams?: boolean },\n): Signal<boolean> {\n const router = injectRouter();\n const source = createActiveRouteSource(router, routeName, params, {\n strict: options?.strict ?? false,\n ignoreQueryParams: options?.ignoreQueryParams ?? true,\n });\n\n return sourceToSignal(source);\n}\n","import { Directive, TemplateRef, inject, input } from \"@angular/core\";\n\n@Directive({ selector: \"ng-template[routeMatch]\" })\nexport class RouteMatch {\n readonly routeMatch = input.required<string>();\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from \"@angular/core\";\n\n@Directive({ selector: \"ng-template[routeNotFound]\" })\nexport class RouteNotFound {\n readonly templateRef = inject(TemplateRef);\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport {\n Component,\n computed,\n contentChildren,\n inject,\n input,\n signal,\n DestroyRef,\n type OnInit,\n type TemplateRef,\n} from \"@angular/core\";\nimport { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\n\nimport { RouteMatch } from \"../directives/RouteMatch\";\nimport { RouteNotFound } from \"../directives/RouteNotFound\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\nimport type { RouteSnapshot } from \"@real-router/sources\";\n\nconst EMPTY_SNAPSHOT: RouteSnapshot = Object.freeze({\n route: undefined,\n previousRoute: undefined,\n});\n\n@Component({\n selector: \"route-view\",\n template: `\n @if (activeTemplate()) {\n <ng-container [ngTemplateOutlet]=\"activeTemplate()!\" />\n }\n `,\n imports: [NgTemplateOutlet],\n})\nexport class RouteView implements OnInit {\n readonly nodeName = input<string>(\"\", { alias: \"routeNode\" });\n\n readonly matches = contentChildren(RouteMatch, { descendants: true });\n readonly notFounds = contentChildren(RouteNotFound, { descendants: true });\n\n readonly activeTemplate = computed<TemplateRef<unknown> | null>(() => {\n const snapshot = this.routeState();\n const route = snapshot.route;\n\n if (!route) {\n return null;\n }\n\n const routeName = route.name;\n const entries = this.matchEntries();\n\n for (const { match, fullSegmentName } of entries) {\n if (startsWithSegment(routeName, fullSegmentName)) {\n return match.templateRef;\n }\n }\n\n if (routeName === UNKNOWN_ROUTE) {\n const last = this.notFounds().at(-1);\n\n if (last) {\n return last.templateRef;\n }\n }\n\n return null;\n });\n\n private readonly matchEntries = computed(() => {\n const nodeName = this.nodeName();\n\n return this.matches().map((match) => {\n const segment = match.routeMatch();\n\n return {\n match,\n fullSegmentName: nodeName ? `${nodeName}.${segment}` : segment,\n };\n });\n });\n\n private readonly router = injectRouter();\n private readonly destroyRef = inject(DestroyRef);\n private readonly routeState = signal<RouteSnapshot>(EMPTY_SNAPSHOT);\n\n ngOnInit(): void {\n const source = createRouteNodeSource(this.router, this.nodeName());\n\n this.routeState.set(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n this.routeState.set(source.getSnapshot());\n });\n\n this.destroyRef.onDestroy(() => {\n unsub();\n source.destroy();\n });\n }\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport {\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { createErrorSource } from \"@real-router/sources\";\n\nimport { injectRouter } from \"../functions/injectRouter\";\nimport { sourceToSignal } from \"../sourceToSignal\";\n\nimport type { TemplateRef } from \"@angular/core\";\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { RouterErrorSnapshot } from \"@real-router/sources\";\n\nexport interface ErrorContext {\n $implicit: RouterError;\n resetError: () => void;\n}\n\n@Component({\n selector: \"router-error-boundary\",\n template: `\n <ng-content />\n @if (errorContext() && errorTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"errorTemplate()!\"\n [ngTemplateOutletContext]=\"errorContext()!\"\n />\n }\n `,\n imports: [NgTemplateOutlet],\n})\nexport class RouterErrorBoundary {\n readonly errorTemplate = input<TemplateRef<ErrorContext>>();\n\n readonly onError = output<{\n error: RouterError;\n toRoute: State | null;\n fromRoute: State | null;\n }>();\n\n readonly visibleError = computed(() => {\n const snap = this.snapshot();\n\n return snap.version > this.dismissedVersion() ? snap.error : null;\n });\n\n readonly errorContext = computed<ErrorContext | null>(() => {\n const error = this.visibleError();\n\n if (!error) {\n return null;\n }\n\n return {\n $implicit: error,\n resetError: this.resetError,\n };\n });\n\n private readonly router = injectRouter();\n private readonly snapshot = sourceToSignal<RouterErrorSnapshot>(\n createErrorSource(this.router),\n );\n private readonly dismissedVersion = signal(-1);\n\n constructor() {\n effect(() => {\n const snap = this.snapshot();\n\n if (snap.error) {\n this.onError.emit({\n error: snap.error,\n toRoute: snap.toRoute,\n fromRoute: snap.fromRoute,\n });\n }\n });\n }\n\n private readonly resetError = (): void => {\n this.dismissedVersion.set(this.snapshot().version);\n };\n}\n","import type { Router, State } from \"@real-router/core\";\n\nconst CLEAR_DELAY = 7000;\nconst SAFARI_READY_DELAY = 100;\nconst ANNOUNCER_ATTR = \"data-real-router-announcer\";\nconst INTERNAL_ROUTE_PREFIX = \"@@\";\nconst VISUALLY_HIDDEN =\n \"position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0\";\n\nexport interface RouteAnnouncerOptions {\n prefix?: string;\n getAnnouncementText?: (route: State) => string;\n}\n\nexport function createRouteAnnouncer(\n router: Router,\n options?: RouteAnnouncerOptions,\n): { destroy: () => void } {\n const prefix = options?.prefix ?? \"Navigated to \";\n const getCustomText = options?.getAnnouncementText;\n\n let isInitialNavigation = true;\n let isReady = false;\n let isDestroyed = false;\n let lastAnnouncedText = \"\";\n let pendingText: string | null = null;\n let clearTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const announcer = getOrCreateAnnouncer();\n\n const doAnnounce = (text: string, h1: HTMLElement | null): void => {\n lastAnnouncedText = text;\n clearTimeout(clearTimeoutId);\n announcer.textContent = text;\n clearTimeoutId = setTimeout(() => {\n announcer.textContent = \"\";\n lastAnnouncedText = \"\";\n }, CLEAR_DELAY);\n\n manageFocus(h1);\n };\n\n // Safari-ready delay: announcing before VoiceOver wires up the aria-live region\n // causes the first announcement to be silently dropped. Wait SAFARI_READY_DELAY ms\n // before marking the announcer \"ready\" — any navigation during that window is\n // buffered in pendingText and flushed once the delay expires.\n const safariTimeoutId = setTimeout(() => {\n isReady = true;\n\n if (pendingText !== null && !isDestroyed) {\n const text = pendingText;\n\n pendingText = null;\n doAnnounce(text, document.querySelector<HTMLElement>(\"h1\"));\n }\n }, SAFARI_READY_DELAY);\n\n const unsubscribe = router.subscribe(({ route }) => {\n if (isInitialNavigation) {\n isInitialNavigation = false;\n\n return;\n }\n\n // Double rAF: waits for two paint frames so the incoming route's DOM\n // (including the new <h1>) is fully rendered before resolveText reads it.\n // Single rAF fires before the new route's template has been attached,\n // which would cause resolveText to pick up the OLD h1 or fall back to\n // document.title / route.name prematurely.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (isDestroyed) {\n return;\n }\n\n const h1 = document.querySelector<HTMLElement>(\"h1\");\n const text = resolveText(route, prefix, getCustomText, h1);\n\n if (!text || text === lastAnnouncedText) {\n return;\n }\n\n if (!isReady) {\n // Defer announcement until Safari-ready window elapses (see safariTimeoutId).\n pendingText = text;\n\n return;\n }\n\n doAnnounce(text, h1);\n });\n });\n });\n\n return {\n destroy() {\n isDestroyed = true;\n unsubscribe();\n clearTimeout(clearTimeoutId);\n clearTimeout(safariTimeoutId);\n removeAnnouncer();\n },\n };\n}\n\nfunction getOrCreateAnnouncer(): HTMLElement {\n const existing = document.querySelector<HTMLElement>(`[${ANNOUNCER_ATTR}]`);\n\n if (existing) {\n return existing;\n }\n\n const element = document.createElement(\"div\");\n\n element.setAttribute(\"style\", VISUALLY_HIDDEN);\n element.setAttribute(\"aria-live\", \"assertive\");\n element.setAttribute(\"aria-atomic\", \"true\");\n element.setAttribute(ANNOUNCER_ATTR, \"\");\n\n document.body.prepend(element);\n\n return element;\n}\n\nfunction removeAnnouncer(): void {\n document.querySelector(`[${ANNOUNCER_ATTR}]`)?.remove();\n}\n\nfunction resolveText(\n route: State,\n prefix: string,\n getCustomText: ((route: State) => string) | undefined,\n h1: HTMLElement | null,\n): string {\n if (getCustomText) {\n return getCustomText(route);\n }\n\n const h1Text = h1?.textContent.trim() ?? \"\";\n const routeName = route.name.startsWith(INTERNAL_ROUTE_PREFIX)\n ? \"\"\n : route.name;\n const rawText =\n h1Text || document.title || routeName || globalThis.location.pathname;\n\n return `${prefix}${rawText}`;\n}\n\nfunction manageFocus(h1: HTMLElement | null): void {\n if (!h1) {\n return;\n }\n\n if (!h1.hasAttribute(\"tabindex\")) {\n h1.setAttribute(\"tabindex\", \"-1\");\n }\n\n h1.focus({ preventScroll: true });\n}\n","import type { Router, Params } from \"@real-router/core\";\n\nexport function shouldNavigate(evt: MouseEvent): boolean {\n return (\n evt.button === 0 &&\n !evt.metaKey &&\n !evt.altKey &&\n !evt.ctrlKey &&\n !evt.shiftKey\n );\n}\n\ntype BuildUrlFn = (name: string, params: Params) => string | undefined;\n\nexport function buildHref(\n router: Router,\n routeName: string,\n routeParams: Params,\n): string | undefined {\n try {\n const buildUrl = router.buildUrl as BuildUrlFn | undefined;\n\n if (buildUrl) {\n const url = buildUrl(routeName, routeParams);\n\n if (url !== undefined) {\n return url;\n }\n }\n\n return router.buildPath(routeName, routeParams);\n } catch {\n console.error(\n `[real-router] Route \"${routeName}\" is not defined. The element will render without an href attribute.`,\n );\n\n return undefined;\n }\n}\n\nfunction parseTokens(value: string | undefined): string[] {\n return value ? (value.match(/\\S+/g) ?? []) : [];\n}\n\nexport function buildActiveClassName(\n isActive: boolean,\n activeClassName: string | undefined,\n baseClassName: string | undefined,\n): string | undefined {\n if (isActive && activeClassName) {\n const activeTokens = parseTokens(activeClassName);\n\n if (activeTokens.length === 0) {\n return baseClassName ?? undefined;\n }\n if (!baseClassName) {\n return activeTokens.join(\" \");\n }\n\n const baseTokens = parseTokens(baseClassName);\n const seen = new Set(baseTokens);\n\n for (const token of activeTokens) {\n if (!seen.has(token)) {\n seen.add(token);\n baseTokens.push(token);\n }\n }\n\n return baseTokens.join(\" \");\n }\n\n return baseClassName ?? undefined;\n}\n\nexport function shallowEqual(\n prev: object | undefined,\n next: object | undefined,\n): boolean {\n if (Object.is(prev, next)) {\n return true;\n }\n if (!prev || !next) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n\n if (prevKeys.length !== Object.keys(next).length) {\n return false;\n }\n\n const prevRecord = prev as Record<string, unknown>;\n const nextRecord = next as Record<string, unknown>;\n\n for (const key of prevKeys) {\n if (!Object.is(prevRecord[key], nextRecord[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function applyLinkA11y(element: HTMLElement | null | undefined): void {\n if (!element) {\n return;\n }\n if (\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLButtonElement\n ) {\n return;\n }\n if (!element.hasAttribute(\"role\")) {\n element.setAttribute(\"role\", \"link\");\n }\n if (!element.hasAttribute(\"tabindex\")) {\n element.setAttribute(\"tabindex\", \"0\");\n }\n}\n","import { Component, inject, DestroyRef } from \"@angular/core\";\n\nimport { createRouteAnnouncer } from \"../dom-utils\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\n@Component({\n selector: \"navigation-announcer\",\n template: \"\",\n})\nexport class NavigationAnnouncer {\n private readonly announcer = createRouteAnnouncer(injectRouter());\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.announcer.destroy();\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n DestroyRef,\n type OnInit,\n} from \"@angular/core\";\nimport { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { buildHref, shouldNavigate } from \"../dom-utils\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\n\n@Directive({\n selector: \"a[realLink]\",\n host: {\n \"(click)\": \"onClick($event)\",\n },\n})\nexport class RealLink implements OnInit {\n readonly routeName = input<string>(\"\");\n readonly routeParams = input<Params>({});\n readonly routeOptions = input<NavigationOptions>({});\n readonly activeClassName = input<string>(\"active\");\n readonly activeStrict = input(false);\n readonly ignoreQueryParams = input(true);\n\n private readonly router = injectRouter();\n private readonly destroyRef = inject(DestroyRef);\n private readonly anchor = inject(ElementRef)\n .nativeElement as HTMLAnchorElement;\n private readonly isActive = signal(false);\n private readonly href = computed(() =>\n buildHref(this.router, this.routeName(), this.routeParams()),\n );\n private prevActiveClass = \"\";\n\n ngOnInit(): void {\n const source = createActiveRouteSource(\n this.router,\n this.routeName(),\n this.routeParams(),\n {\n strict: this.activeStrict(),\n ignoreQueryParams: this.ignoreQueryParams(),\n },\n );\n\n this.isActive.set(source.getSnapshot());\n this.updateDom();\n\n const unsub = source.subscribe(() => {\n this.isActive.set(source.getSnapshot());\n this.updateDom();\n });\n\n this.destroyRef.onDestroy(() => {\n unsub();\n source.destroy();\n });\n }\n\n onClick(event: MouseEvent): void {\n if (!shouldNavigate(event) || this.anchor.target === \"_blank\") {\n return;\n }\n\n event.preventDefault();\n this.router\n .navigate(this.routeName(), this.routeParams(), this.routeOptions())\n .catch(() => {});\n }\n\n private updateDom(): void {\n const href = this.href();\n\n if (href !== undefined) {\n this.anchor.setAttribute(\"href\", href);\n }\n\n const activeClass = this.activeClassName();\n\n if (this.prevActiveClass && this.prevActiveClass !== activeClass) {\n this.anchor.classList.remove(this.prevActiveClass);\n }\n\n if (activeClass) {\n this.anchor.classList.toggle(activeClass, this.isActive());\n }\n\n this.prevActiveClass = activeClass;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n signal,\n DestroyRef,\n type OnInit,\n} from \"@angular/core\";\nimport { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { applyLinkA11y } from \"../dom-utils\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\nimport type { Params } from \"@real-router/core\";\n\n@Directive({ selector: \"[realLinkActive]\" })\nexport class RealLinkActive implements OnInit {\n readonly realLinkActive = input<string>(\"\");\n readonly routeName = input<string>(\"\");\n readonly routeParams = input<Params>({});\n readonly activeStrict = input(false);\n readonly ignoreQueryParams = input(true);\n\n private readonly router = injectRouter();\n private readonly destroyRef = inject(DestroyRef);\n private readonly element = inject(ElementRef).nativeElement as HTMLElement;\n private readonly isActive = signal(false);\n\n constructor() {\n applyLinkA11y(this.element);\n }\n\n ngOnInit(): void {\n const source = createActiveRouteSource(\n this.router,\n this.routeName(),\n this.routeParams(),\n {\n strict: this.activeStrict(),\n ignoreQueryParams: this.ignoreQueryParams(),\n },\n );\n\n this.isActive.set(source.getSnapshot());\n this.updateClass();\n\n const unsub = source.subscribe(() => {\n this.isActive.set(source.getSnapshot());\n this.updateClass();\n });\n\n this.destroyRef.onDestroy(() => {\n unsub();\n source.destroy();\n });\n }\n\n private updateClass(): void {\n const className = this.realLinkActive();\n\n if (!className) {\n return;\n }\n\n this.element.classList.toggle(className, this.isActive());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"real-router-angular.mjs","sources":["../../src/sourceToSignal.ts","../../src/providers.ts","../../src/functions/injectOrThrow.ts","../../src/functions/injectRouter.ts","../../src/functions/injectNavigator.ts","../../src/functions/injectRoute.ts","../../src/functions/injectRouteNode.ts","../../src/functions/injectRouteUtils.ts","../../src/functions/injectRouterTransition.ts","../../src/functions/injectIsActiveRoute.ts","../../src/directives/RouteMatch.ts","../../src/directives/RouteNotFound.ts","../../src/components/RouteView.ts","../../src/components/RouterErrorBoundary.ts","../../src/dom-utils/route-announcer.ts","../../src/dom-utils/link-utils.ts","../../src/components/NavigationAnnouncer.ts","../../src/directives/RealLink.ts","../../src/directives/RealLinkActive.ts","../../src/real-router-angular.ts"],"sourcesContent":["import { signal, type Signal, inject, DestroyRef } from \"@angular/core\";\n\nimport type { RouterSource } from \"@real-router/sources\";\n\n/** Must be called within an injection context (constructor, field initializer, runInInjectionContext). */\nexport function sourceToSignal<T>(source: RouterSource<T>): Signal<T> {\n const sig = signal<T>(source.getSnapshot());\n const destroyRef = inject(DestroyRef);\n\n const unsubscribe = source.subscribe(() => {\n sig.set(source.getSnapshot());\n });\n\n destroyRef.onDestroy(() => {\n unsubscribe();\n source.destroy();\n });\n\n return sig.asReadonly();\n}\n","import {\n InjectionToken,\n makeEnvironmentProviders,\n type EnvironmentProviders,\n} from \"@angular/core\";\nimport { getNavigator, type Router, type Navigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"./sourceToSignal\";\n\nimport type { RouteSignals } from \"./types\";\n\nexport const ROUTER = new InjectionToken<Router>(\"ROUTER\");\n\nexport const NAVIGATOR = new InjectionToken<Navigator>(\"NAVIGATOR\");\n\nexport const ROUTE = new InjectionToken<RouteSignals>(\"ROUTE\");\n\nexport function provideRealRouter(router: Router): EnvironmentProviders {\n const navigator = getNavigator(router);\n\n return makeEnvironmentProviders([\n { provide: ROUTER, useValue: router },\n { provide: NAVIGATOR, useValue: navigator },\n {\n provide: ROUTE,\n useFactory: (): RouteSignals => ({\n routeState: sourceToSignal(createRouteSource(router)),\n navigator,\n }),\n },\n ]);\n}\n","import { inject } from \"@angular/core\";\n\nimport type { InjectionToken } from \"@angular/core\";\n\nexport function injectOrThrow<T>(token: InjectionToken<T>, fnName: string): T {\n const value = inject(token, { optional: true });\n\n if (!value) {\n throw new Error(\n `${fnName} must be used within a provideRealRouter context`,\n );\n }\n\n return value;\n}\n","import { injectOrThrow } from \"./injectOrThrow\";\nimport { ROUTER } from \"../providers\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport function injectRouter(): Router {\n return injectOrThrow(ROUTER, \"injectRouter\");\n}\n","import { injectOrThrow } from \"./injectOrThrow\";\nimport { NAVIGATOR } from \"../providers\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport function injectNavigator(): Navigator {\n return injectOrThrow(NAVIGATOR, \"injectNavigator\");\n}\n","import { injectOrThrow } from \"./injectOrThrow\";\nimport { ROUTE } from \"../providers\";\n\nimport type { RouteSignals } from \"../types\";\n\nexport function injectRoute(): RouteSignals {\n return injectOrThrow(ROUTE, \"injectRoute\");\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"../sourceToSignal\";\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { RouteSignals } from \"../types\";\n\nexport function injectRouteNode(nodeName: string): RouteSignals {\n const router = injectRouter();\n const navigator = getNavigator(router);\n const source = createRouteNodeSource(router, nodeName);\n const routeState = sourceToSignal(source);\n\n return { routeState, navigator };\n}\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport function injectRouteUtils(): RouteUtils {\n const router = injectRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n}\n","import { getTransitionSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"../sourceToSignal\";\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { Signal } from \"@angular/core\";\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\n\nexport function injectRouterTransition(): Signal<RouterTransitionSnapshot> {\n const router = injectRouter();\n const source = getTransitionSource(router);\n\n return sourceToSignal(source);\n}\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { sourceToSignal } from \"../sourceToSignal\";\nimport { injectRouter } from \"./injectRouter\";\n\nimport type { Signal } from \"@angular/core\";\nimport type { Params } from \"@real-router/core\";\n\nexport function injectIsActiveRoute(\n routeName: string,\n params?: Params,\n options?: { strict?: boolean; ignoreQueryParams?: boolean },\n): Signal<boolean> {\n const router = injectRouter();\n const source = createActiveRouteSource(router, routeName, params, {\n strict: options?.strict ?? false,\n ignoreQueryParams: options?.ignoreQueryParams ?? true,\n });\n\n return sourceToSignal(source);\n}\n","import { Directive, TemplateRef, inject, input } from \"@angular/core\";\n\n@Directive({ selector: \"ng-template[routeMatch]\" })\nexport class RouteMatch {\n readonly routeMatch = input.required<string>();\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from \"@angular/core\";\n\n@Directive({ selector: \"ng-template[routeNotFound]\" })\nexport class RouteNotFound {\n readonly templateRef = inject(TemplateRef);\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport {\n Component,\n computed,\n contentChildren,\n inject,\n input,\n signal,\n DestroyRef,\n type OnInit,\n type TemplateRef,\n} from \"@angular/core\";\nimport { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\n\nimport { RouteMatch } from \"../directives/RouteMatch\";\nimport { RouteNotFound } from \"../directives/RouteNotFound\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\nimport type { RouteSnapshot } from \"@real-router/sources\";\n\nconst EMPTY_SNAPSHOT: RouteSnapshot = Object.freeze({\n route: undefined,\n previousRoute: undefined,\n});\n\n@Component({\n selector: \"route-view\",\n template: `\n @if (activeTemplate()) {\n <ng-container [ngTemplateOutlet]=\"activeTemplate()!\" />\n }\n `,\n imports: [NgTemplateOutlet],\n})\nexport class RouteView implements OnInit {\n readonly nodeName = input<string>(\"\", { alias: \"routeNode\" });\n\n readonly matches = contentChildren(RouteMatch, { descendants: true });\n readonly notFounds = contentChildren(RouteNotFound, { descendants: true });\n\n readonly activeTemplate = computed<TemplateRef<unknown> | null>(() => {\n const snapshot = this.routeState();\n const route = snapshot.route;\n\n if (!route) {\n return null;\n }\n\n const routeName = route.name;\n const entries = this.matchEntries();\n\n for (const { match, fullSegmentName } of entries) {\n if (startsWithSegment(routeName, fullSegmentName)) {\n return match.templateRef;\n }\n }\n\n if (routeName === UNKNOWN_ROUTE) {\n const last = this.notFounds().at(-1);\n\n if (last) {\n return last.templateRef;\n }\n }\n\n return null;\n });\n\n private readonly matchEntries = computed(() => {\n const nodeName = this.nodeName();\n\n return this.matches().map((match) => {\n const segment = match.routeMatch();\n\n return {\n match,\n fullSegmentName: nodeName ? `${nodeName}.${segment}` : segment,\n };\n });\n });\n\n private readonly router = injectRouter();\n private readonly destroyRef = inject(DestroyRef);\n private readonly routeState = signal<RouteSnapshot>(EMPTY_SNAPSHOT);\n\n ngOnInit(): void {\n const source = createRouteNodeSource(this.router, this.nodeName());\n\n this.routeState.set(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n this.routeState.set(source.getSnapshot());\n });\n\n this.destroyRef.onDestroy(() => {\n unsub();\n source.destroy();\n });\n }\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, computed, effect, input, output } from \"@angular/core\";\nimport { createDismissableError } from \"@real-router/sources\";\n\nimport { injectRouter } from \"../functions/injectRouter\";\nimport { sourceToSignal } from \"../sourceToSignal\";\n\nimport type { TemplateRef } from \"@angular/core\";\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { DismissableErrorSnapshot } from \"@real-router/sources\";\n\nexport interface ErrorContext {\n $implicit: RouterError;\n resetError: () => void;\n}\n\n@Component({\n selector: \"router-error-boundary\",\n template: `\n <ng-content />\n @if (errorContext() && errorTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"errorTemplate()!\"\n [ngTemplateOutletContext]=\"errorContext()!\"\n />\n }\n `,\n imports: [NgTemplateOutlet],\n})\nexport class RouterErrorBoundary {\n readonly errorTemplate = input<TemplateRef<ErrorContext>>();\n\n readonly onError = output<{\n error: RouterError;\n toRoute: State | null;\n fromRoute: State | null;\n }>();\n\n readonly errorContext = computed<ErrorContext | null>(() => {\n const snap = this.snapshot();\n\n if (!snap.error) {\n return null;\n }\n\n return {\n $implicit: snap.error,\n resetError: snap.resetError,\n };\n });\n\n private readonly router = injectRouter();\n private readonly snapshot = sourceToSignal<DismissableErrorSnapshot>(\n createDismissableError(this.router),\n );\n\n constructor() {\n effect(() => {\n const snap = this.snapshot();\n\n if (snap.error) {\n this.onError.emit({\n error: snap.error,\n toRoute: snap.toRoute,\n fromRoute: snap.fromRoute,\n });\n }\n });\n }\n}\n","import type { Router, State } from \"@real-router/core\";\n\nconst CLEAR_DELAY = 7000;\nconst SAFARI_READY_DELAY = 100;\nconst ANNOUNCER_ATTR = \"data-real-router-announcer\";\nconst INTERNAL_ROUTE_PREFIX = \"@@\";\nconst VISUALLY_HIDDEN =\n \"position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0\";\n\nexport interface RouteAnnouncerOptions {\n prefix?: string;\n getAnnouncementText?: (route: State) => string;\n}\n\nexport function createRouteAnnouncer(\n router: Router,\n options?: RouteAnnouncerOptions,\n): { destroy: () => void } {\n const prefix = options?.prefix ?? \"Navigated to \";\n const getCustomText = options?.getAnnouncementText;\n\n let isInitialNavigation = true;\n let isReady = false;\n let isDestroyed = false;\n let lastAnnouncedText = \"\";\n let pendingText: string | null = null;\n let clearTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const announcer = getOrCreateAnnouncer();\n\n const doAnnounce = (text: string, h1: HTMLElement | null): void => {\n lastAnnouncedText = text;\n clearTimeout(clearTimeoutId);\n announcer.textContent = text;\n clearTimeoutId = setTimeout(() => {\n announcer.textContent = \"\";\n lastAnnouncedText = \"\";\n }, CLEAR_DELAY);\n\n manageFocus(h1);\n };\n\n // Safari-ready delay: announcing before VoiceOver wires up the aria-live region\n // causes the first announcement to be silently dropped. Wait SAFARI_READY_DELAY ms\n // before marking the announcer \"ready\" — any navigation during that window is\n // buffered in pendingText and flushed once the delay expires.\n const safariTimeoutId = setTimeout(() => {\n isReady = true;\n\n if (pendingText !== null && !isDestroyed) {\n const text = pendingText;\n\n pendingText = null;\n doAnnounce(text, document.querySelector<HTMLElement>(\"h1\"));\n }\n }, SAFARI_READY_DELAY);\n\n const unsubscribe = router.subscribe(({ route }) => {\n if (isInitialNavigation) {\n isInitialNavigation = false;\n\n return;\n }\n\n // Double rAF: waits for two paint frames so the incoming route's DOM\n // (including the new <h1>) is fully rendered before resolveText reads it.\n // Single rAF fires before the new route's template has been attached,\n // which would cause resolveText to pick up the OLD h1 or fall back to\n // document.title / route.name prematurely.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (isDestroyed) {\n return;\n }\n\n const h1 = document.querySelector<HTMLElement>(\"h1\");\n const text = resolveText(route, prefix, getCustomText, h1);\n\n if (!text || text === lastAnnouncedText) {\n return;\n }\n\n if (!isReady) {\n // Defer announcement until Safari-ready window elapses (see safariTimeoutId).\n pendingText = text;\n\n return;\n }\n\n doAnnounce(text, h1);\n });\n });\n });\n\n return {\n destroy() {\n isDestroyed = true;\n unsubscribe();\n clearTimeout(clearTimeoutId);\n clearTimeout(safariTimeoutId);\n removeAnnouncer();\n },\n };\n}\n\nfunction getOrCreateAnnouncer(): HTMLElement {\n const existing = document.querySelector<HTMLElement>(`[${ANNOUNCER_ATTR}]`);\n\n if (existing) {\n return existing;\n }\n\n const element = document.createElement(\"div\");\n\n element.setAttribute(\"style\", VISUALLY_HIDDEN);\n element.setAttribute(\"aria-live\", \"assertive\");\n element.setAttribute(\"aria-atomic\", \"true\");\n element.setAttribute(ANNOUNCER_ATTR, \"\");\n\n document.body.prepend(element);\n\n return element;\n}\n\nfunction removeAnnouncer(): void {\n document.querySelector(`[${ANNOUNCER_ATTR}]`)?.remove();\n}\n\nfunction resolveText(\n route: State,\n prefix: string,\n getCustomText: ((route: State) => string) | undefined,\n h1: HTMLElement | null,\n): string {\n if (getCustomText) {\n return getCustomText(route);\n }\n\n const h1Text = h1?.textContent.trim() ?? \"\";\n const routeName = route.name.startsWith(INTERNAL_ROUTE_PREFIX)\n ? \"\"\n : route.name;\n const rawText =\n h1Text || document.title || routeName || globalThis.location.pathname;\n\n return `${prefix}${rawText}`;\n}\n\nfunction manageFocus(h1: HTMLElement | null): void {\n if (!h1) {\n return;\n }\n\n if (!h1.hasAttribute(\"tabindex\")) {\n h1.setAttribute(\"tabindex\", \"-1\");\n }\n\n h1.focus({ preventScroll: true });\n}\n","import type { Router, Params } from \"@real-router/core\";\n\nexport function shouldNavigate(evt: MouseEvent): boolean {\n return (\n evt.button === 0 &&\n !evt.metaKey &&\n !evt.altKey &&\n !evt.ctrlKey &&\n !evt.shiftKey\n );\n}\n\ntype BuildUrlFn = (name: string, params: Params) => string | undefined;\n\nexport function buildHref(\n router: Router,\n routeName: string,\n routeParams: Params,\n): string | undefined {\n try {\n const buildUrl = router.buildUrl as BuildUrlFn | undefined;\n\n if (buildUrl) {\n const url = buildUrl(routeName, routeParams);\n\n if (url !== undefined) {\n return url;\n }\n }\n\n return router.buildPath(routeName, routeParams);\n } catch {\n console.error(\n `[real-router] Route \"${routeName}\" is not defined. The element will render without an href attribute.`,\n );\n\n return undefined;\n }\n}\n\nfunction parseTokens(value: string | undefined): string[] {\n return value ? (value.match(/\\S+/g) ?? []) : [];\n}\n\nexport function buildActiveClassName(\n isActive: boolean,\n activeClassName: string | undefined,\n baseClassName: string | undefined,\n): string | undefined {\n if (isActive && activeClassName) {\n const activeTokens = parseTokens(activeClassName);\n\n if (activeTokens.length === 0) {\n return baseClassName ?? undefined;\n }\n if (!baseClassName) {\n return activeTokens.join(\" \");\n }\n\n const baseTokens = parseTokens(baseClassName);\n const seen = new Set(baseTokens);\n\n for (const token of activeTokens) {\n if (!seen.has(token)) {\n seen.add(token);\n baseTokens.push(token);\n }\n }\n\n return baseTokens.join(\" \");\n }\n\n return baseClassName ?? undefined;\n}\n\nexport function shallowEqual(\n prev: object | undefined,\n next: object | undefined,\n): boolean {\n if (Object.is(prev, next)) {\n return true;\n }\n if (!prev || !next) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n\n if (prevKeys.length !== Object.keys(next).length) {\n return false;\n }\n\n const prevRecord = prev as Record<string, unknown>;\n const nextRecord = next as Record<string, unknown>;\n\n for (const key of prevKeys) {\n if (!Object.is(prevRecord[key], nextRecord[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function applyLinkA11y(element: HTMLElement | null | undefined): void {\n if (!element) {\n return;\n }\n if (\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLButtonElement\n ) {\n return;\n }\n if (!element.hasAttribute(\"role\")) {\n element.setAttribute(\"role\", \"link\");\n }\n if (!element.hasAttribute(\"tabindex\")) {\n element.setAttribute(\"tabindex\", \"0\");\n }\n}\n","import { Component, inject, DestroyRef } from \"@angular/core\";\n\nimport { createRouteAnnouncer } from \"../dom-utils\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\n@Component({\n selector: \"navigation-announcer\",\n template: \"\",\n})\nexport class NavigationAnnouncer {\n private readonly announcer = createRouteAnnouncer(injectRouter());\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.announcer.destroy();\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n DestroyRef,\n type OnInit,\n} from \"@angular/core\";\nimport { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { buildHref, shouldNavigate } from \"../dom-utils\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\n\n@Directive({\n selector: \"a[realLink]\",\n host: {\n \"(click)\": \"onClick($event)\",\n },\n})\nexport class RealLink implements OnInit {\n readonly routeName = input<string>(\"\");\n readonly routeParams = input<Params>({});\n readonly routeOptions = input<NavigationOptions>({});\n readonly activeClassName = input<string>(\"active\");\n readonly activeStrict = input(false);\n readonly ignoreQueryParams = input(true);\n\n private readonly router = injectRouter();\n private readonly destroyRef = inject(DestroyRef);\n private readonly anchor = inject(ElementRef)\n .nativeElement as HTMLAnchorElement;\n private readonly isActive = signal(false);\n private readonly href = computed(() =>\n buildHref(this.router, this.routeName(), this.routeParams()),\n );\n private prevActiveClass = \"\";\n\n ngOnInit(): void {\n const source = createActiveRouteSource(\n this.router,\n this.routeName(),\n this.routeParams(),\n {\n strict: this.activeStrict(),\n ignoreQueryParams: this.ignoreQueryParams(),\n },\n );\n\n this.isActive.set(source.getSnapshot());\n this.updateDom();\n\n const unsub = source.subscribe(() => {\n this.isActive.set(source.getSnapshot());\n this.updateDom();\n });\n\n this.destroyRef.onDestroy(() => {\n unsub();\n source.destroy();\n });\n }\n\n onClick(event: MouseEvent): void {\n if (!shouldNavigate(event) || this.anchor.target === \"_blank\") {\n return;\n }\n\n event.preventDefault();\n this.router\n .navigate(this.routeName(), this.routeParams(), this.routeOptions())\n .catch(() => {});\n }\n\n private updateDom(): void {\n const href = this.href();\n\n if (href !== undefined) {\n this.anchor.setAttribute(\"href\", href);\n }\n\n const activeClass = this.activeClassName();\n\n if (this.prevActiveClass && this.prevActiveClass !== activeClass) {\n this.anchor.classList.remove(this.prevActiveClass);\n }\n\n if (activeClass) {\n this.anchor.classList.toggle(activeClass, this.isActive());\n }\n\n this.prevActiveClass = activeClass;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n signal,\n DestroyRef,\n type OnInit,\n} from \"@angular/core\";\nimport { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { applyLinkA11y } from \"../dom-utils\";\nimport { injectRouter } from \"../functions/injectRouter\";\n\nimport type { Params } from \"@real-router/core\";\n\n@Directive({ selector: \"[realLinkActive]\" })\nexport class RealLinkActive implements OnInit {\n readonly realLinkActive = input<string>(\"\");\n readonly routeName = input<string>(\"\");\n readonly routeParams = input<Params>({});\n readonly activeStrict = input(false);\n readonly ignoreQueryParams = input(true);\n\n private readonly router = injectRouter();\n private readonly destroyRef = inject(DestroyRef);\n private readonly element = inject(ElementRef).nativeElement as HTMLElement;\n private readonly isActive = signal(false);\n\n constructor() {\n applyLinkA11y(this.element);\n }\n\n ngOnInit(): void {\n const source = createActiveRouteSource(\n this.router,\n this.routeName(),\n this.routeParams(),\n {\n strict: this.activeStrict(),\n ignoreQueryParams: this.ignoreQueryParams(),\n },\n );\n\n this.isActive.set(source.getSnapshot());\n this.updateClass();\n\n const unsub = source.subscribe(() => {\n this.isActive.set(source.getSnapshot());\n this.updateClass();\n });\n\n this.destroyRef.onDestroy(() => {\n unsub();\n source.destroy();\n });\n }\n\n private updateClass(): void {\n const className = this.realLinkActive();\n\n if (!className) {\n return;\n }\n\n this.element.classList.toggle(className, this.isActive());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -74,13 +74,10 @@ declare class RouterErrorBoundary {
74
74
  toRoute: State | null;
75
75
  fromRoute: State | null;
76
76
  }>;
77
- readonly visibleError: _angular_core.Signal<RouterError | null>;
78
77
  readonly errorContext: _angular_core.Signal<ErrorContext | null>;
79
78
  private readonly router;
80
79
  private readonly snapshot;
81
- private readonly dismissedVersion;
82
80
  constructor();
83
- private readonly resetError;
84
81
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RouterErrorBoundary, never>;
85
82
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RouterErrorBoundary, "router-error-boundary", never, { "errorTemplate": { "alias": "errorTemplate"; "required": false; "isSignal": true; }; }, { "onError": "onError"; }, never, ["*"], true, never>;
86
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"real-router-angular.d.ts","sources":["../../src/types.ts","../../src/providers.ts","../../src/sourceToSignal.ts","../../src/functions/injectRouter.ts","../../src/functions/injectNavigator.ts","../../src/functions/injectRoute.ts","../../src/functions/injectRouteNode.ts","../../src/functions/injectRouteUtils.ts","../../src/functions/injectRouterTransition.ts","../../src/functions/injectIsActiveRoute.ts","../../src/directives/RouteMatch.ts","../../src/directives/RouteNotFound.ts","../../src/components/RouteView.ts","../../src/components/RouterErrorBoundary.ts","../../src/components/NavigationAnnouncer.ts","../../src/directives/RealLink.ts","../../src/directives/RealLinkActive.ts"],"mappings":";;;;;;;;UAIiB,YAAY;AAC3B,yBAAqB,MAAM,CAAC,aAAa;AACzC,wBAAoB,SAAS;AAC9B;;ACKD,cAAa,MAAM,EAAA,cAAA,CAAA,MAAA;AAEnB,cAAa,SAAS,EAAA,cAAA,CAAA,SAAA;AAEtB,cAAa,KAAK,EAAA,cAAA,CAAA,YAAA;AAElB,iBAAgB,iBAAiB,SAAS,MAAM,GAAG,oBAAoB;;ACdvE;AACA,iBAAgB,cAAc,YAAY,YAAY,MAAM,MAAM;;ACAlE,iBAAgB,YAAY,IAAI,MAAM;;ACAtC,iBAAgB,eAAe,IAAI,SAAS;;ACA5C,iBAAgB,WAAW,IAAI,YAAY;;ACG3C,iBAAgB,eAAe,oBAAoB,YAAY;;ACD/D,iBAAgB,gBAAgB,IAAI,UAAU;;ACC9C,iBAAgB,sBAAsB,IAAI,MAAM,CAAC,wBAAwB;;ACAzE,iBAAgB,mBAAmB,6BAExB,MAAM;;;AAC4C,IAC1D,MAAM;;ACVT,cACa,UAAU;yBACF,aAAA,CAAA,WAAA;0BACC,WAAA;oDAFT,UAAU;sDAAV,UAAU;AAGtB;;ACJD,cACa,aAAa;0BACJ,WAAA;oDADT,aAAa;sDAAb,aAAa;AAEzB;;ACsBD,cASa,SAAU,YAAW,MAAM;uBACrB,aAAA,CAAA,WAAA;sBAED,aAAA,CAAA,MAAA,UAAA,UAAA;wBACE,aAAA,CAAA,MAAA,UAAA,aAAA;6BAEK,aAAA,CAAA,MAAA,CAAA,WAAA;AA4BvB;AAaA;AACA;AACA;AAEA;oDAnDW,SAAS;sDAAT,SAAS;AAiErB;;UCnFgB,YAAY;eAChB,WAAW;;AAEvB;AAED,cAaa,mBAAmB;4BACR,aAAA,CAAA,WAAA,CAAA,WAAA,CAAA,YAAA;AAEtB,sBAAgB,aAAA,CAAA,gBAAA;eACP,WAAW;AACT,iBAAA,KAAK;AACH,mBAAA,KAAK;AACb;2BAEgB,aAAA,CAAA,MAAA,CAAA,WAAA;2BAMA,aAAA,CAAA,MAAA,CAAA,YAAA;AAarB;AACA;AAGA;;AAgBA;oDAhDW,mBAAmB;sDAAnB,mBAAmB;AAmD/B;;AClFD,cAIa,mBAAmB;AAC9B;;oDADW,mBAAmB;sDAAnB,mBAAmB;AAQ/B;;ACAD,cAMa,QAAS,YAAW,MAAM;wBACnB,aAAA,CAAA,WAAA;0BACE,aAAA,CAAA,WAAA,CAAA,MAAA;2BACC,aAAA,CAAA,WAAA,CAAA,iBAAA;8BACG,aAAA,CAAA,WAAA;2BACH,aAAA,CAAA,WAAA;gCACK,aAAA,CAAA,WAAA;AAE1B;AACA;AACA;AAEA;AACA;;AAKA;AAyBA,mBAAe,UAAU;AAWzB;oDAtDW,QAAQ;sDAAR,QAAQ;AAyEpB;;AChFD,cACa,cAAe,YAAW,MAAM;6BACpB,aAAA,CAAA,WAAA;wBACL,aAAA,CAAA,WAAA;0BACE,aAAA,CAAA,WAAA,CAAA,MAAA;2BACC,aAAA,CAAA,WAAA;gCACK,aAAA,CAAA,WAAA;AAE1B;AACA;AACA;AACA;;AAMA;AAyBA;oDAzCW,cAAc;sDAAd,cAAc;AAkD1B;;;;","names":[]}
1
+ {"version":3,"file":"real-router-angular.d.ts","sources":["../../src/types.ts","../../src/providers.ts","../../src/sourceToSignal.ts","../../src/functions/injectRouter.ts","../../src/functions/injectNavigator.ts","../../src/functions/injectRoute.ts","../../src/functions/injectRouteNode.ts","../../src/functions/injectRouteUtils.ts","../../src/functions/injectRouterTransition.ts","../../src/functions/injectIsActiveRoute.ts","../../src/directives/RouteMatch.ts","../../src/directives/RouteNotFound.ts","../../src/components/RouteView.ts","../../src/components/RouterErrorBoundary.ts","../../src/components/NavigationAnnouncer.ts","../../src/directives/RealLink.ts","../../src/directives/RealLinkActive.ts"],"mappings":";;;;;;;;UAIiB,YAAY;AAC3B,yBAAqB,MAAM,CAAC,aAAa;AACzC,wBAAoB,SAAS;AAC9B;;ACKD,cAAa,MAAM,EAAA,cAAA,CAAA,MAAA;AAEnB,cAAa,SAAS,EAAA,cAAA,CAAA,SAAA;AAEtB,cAAa,KAAK,EAAA,cAAA,CAAA,YAAA;AAElB,iBAAgB,iBAAiB,SAAS,MAAM,GAAG,oBAAoB;;ACdvE;AACA,iBAAgB,cAAc,YAAY,YAAY,MAAM,MAAM;;ACAlE,iBAAgB,YAAY,IAAI,MAAM;;ACAtC,iBAAgB,eAAe,IAAI,SAAS;;ACA5C,iBAAgB,WAAW,IAAI,YAAY;;ACG3C,iBAAgB,eAAe,oBAAoB,YAAY;;ACD/D,iBAAgB,gBAAgB,IAAI,UAAU;;ACC9C,iBAAgB,sBAAsB,IAAI,MAAM,CAAC,wBAAwB;;ACAzE,iBAAgB,mBAAmB,6BAExB,MAAM;;;AAC4C,IAC1D,MAAM;;ACVT,cACa,UAAU;yBACF,aAAA,CAAA,WAAA;0BACC,WAAA;oDAFT,UAAU;sDAAV,UAAU;AAGtB;;ACJD,cACa,aAAa;0BACJ,WAAA;oDADT,aAAa;sDAAb,aAAa;AAEzB;;ACsBD,cASa,SAAU,YAAW,MAAM;uBACrB,aAAA,CAAA,WAAA;sBAED,aAAA,CAAA,MAAA,UAAA,UAAA;wBACE,aAAA,CAAA,MAAA,UAAA,aAAA;6BAEK,aAAA,CAAA,MAAA,CAAA,WAAA;AA4BvB;AAaA;AACA;AACA;AAEA;oDAnDW,SAAS;sDAAT,SAAS;AAiErB;;UC1FgB,YAAY;eAChB,WAAW;;AAEvB;AAED,cAaa,mBAAmB;4BACR,aAAA,CAAA,WAAA,CAAA,WAAA,CAAA,YAAA;AAEtB,sBAAgB,aAAA,CAAA,gBAAA;eACP,WAAW;AACT,iBAAA,KAAK;AACH,mBAAA,KAAK;AACb;2BAEgB,aAAA,CAAA,MAAA,CAAA,YAAA;AAarB;AACA;;oDAvBW,mBAAmB;sDAAnB,mBAAmB;AAwC/B;;AChED,cAIa,mBAAmB;AAC9B;;oDADW,mBAAmB;sDAAnB,mBAAmB;AAQ/B;;ACAD,cAMa,QAAS,YAAW,MAAM;wBACnB,aAAA,CAAA,WAAA;0BACE,aAAA,CAAA,WAAA,CAAA,MAAA;2BACC,aAAA,CAAA,WAAA,CAAA,iBAAA;8BACG,aAAA,CAAA,WAAA;2BACH,aAAA,CAAA,WAAA;gCACK,aAAA,CAAA,WAAA;AAE1B;AACA;AACA;AAEA;AACA;;AAKA;AAyBA,mBAAe,UAAU;AAWzB;oDAtDW,QAAQ;sDAAR,QAAQ;AAyEpB;;AChFD,cACa,cAAe,YAAW,MAAM;6BACpB,aAAA,CAAA,WAAA;wBACL,aAAA,CAAA,WAAA;0BACE,aAAA,CAAA,WAAA,CAAA,MAAA;2BACC,aAAA,CAAA,WAAA;gCACK,aAAA,CAAA,WAAA;AAE1B;AACA;AACA;AACA;;AAMA;AAyBA;oDAzCW,cAAc;sDAAd,cAAc;AAkD1B;;;;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@real-router/angular",
3
- "version": "0.0.1",
3
+ "version": "0.1.1",
4
4
  "type": "commonjs",
5
5
  "description": "Angular 21 integration for Real-Router",
6
6
  "exports": {
@@ -19,14 +19,6 @@
19
19
  "type": "git",
20
20
  "url": "git+https://github.com/greydragon888/real-router.git"
21
21
  },
22
- "scripts": {
23
- "test": "vitest",
24
- "test:stress": "vitest -c vitest.config.stress.mts",
25
- "type-check": "tsc --noEmit",
26
- "lint": "eslint --cache src/ tests/ --fix --max-warnings 0",
27
- "prebundle": "rm -rf src/dom-utils && cp -r ../../shared/dom-utils src/dom-utils && perl -pi -e 's/\\.js\"/\"/g' src/dom-utils/*.ts",
28
- "bundle": "ng-packagr -p ng-package.json -c tsconfig.lib.json"
29
- },
30
22
  "keywords": [
31
23
  "router",
32
24
  "angular",
@@ -43,9 +35,9 @@
43
35
  "license": "MIT",
44
36
  "sideEffects": false,
45
37
  "dependencies": {
46
- "@real-router/core": "workspace:^",
47
- "@real-router/route-utils": "workspace:^",
48
- "@real-router/sources": "workspace:^"
38
+ "@real-router/core": "^0.48.0",
39
+ "@real-router/route-utils": "^0.2.1",
40
+ "@real-router/sources": "^0.6.0"
49
41
  },
50
42
  "devDependencies": {
51
43
  "@analogjs/vitest-angular": "2.4.7",
@@ -60,5 +52,13 @@
60
52
  "peerDependencies": {
61
53
  "@angular/common": ">=21.0.0",
62
54
  "@angular/core": ">=21.0.0"
55
+ },
56
+ "scripts": {
57
+ "test": "vitest",
58
+ "test:stress": "vitest -c vitest.config.stress.mts",
59
+ "type-check": "tsc --noEmit",
60
+ "lint": "eslint --cache src/ tests/ --fix --max-warnings 0",
61
+ "prebundle": "rm -rf src/dom-utils && cp -r ../../shared/dom-utils src/dom-utils && perl -pi -e 's/\\.js\"/\"/g' src/dom-utils/*.ts",
62
+ "bundle": "ng-packagr -p ng-package.json -c tsconfig.lib.json"
63
63
  }
64
- }
64
+ }
@@ -1,20 +1,13 @@
1
1
  import { NgTemplateOutlet } from "@angular/common";
2
- import {
3
- Component,
4
- computed,
5
- effect,
6
- input,
7
- output,
8
- signal,
9
- } from "@angular/core";
10
- import { createErrorSource } from "@real-router/sources";
2
+ import { Component, computed, effect, input, output } from "@angular/core";
3
+ import { createDismissableError } from "@real-router/sources";
11
4
 
12
5
  import { injectRouter } from "../functions/injectRouter";
13
6
  import { sourceToSignal } from "../sourceToSignal";
14
7
 
15
8
  import type { TemplateRef } from "@angular/core";
16
9
  import type { RouterError, State } from "@real-router/core";
17
- import type { RouterErrorSnapshot } from "@real-router/sources";
10
+ import type { DismissableErrorSnapshot } from "@real-router/sources";
18
11
 
19
12
  export interface ErrorContext {
20
13
  $implicit: RouterError;
@@ -43,30 +36,23 @@ export class RouterErrorBoundary {
43
36
  fromRoute: State | null;
44
37
  }>();
45
38
 
46
- readonly visibleError = computed(() => {
47
- const snap = this.snapshot();
48
-
49
- return snap.version > this.dismissedVersion() ? snap.error : null;
50
- });
51
-
52
39
  readonly errorContext = computed<ErrorContext | null>(() => {
53
- const error = this.visibleError();
40
+ const snap = this.snapshot();
54
41
 
55
- if (!error) {
42
+ if (!snap.error) {
56
43
  return null;
57
44
  }
58
45
 
59
46
  return {
60
- $implicit: error,
61
- resetError: this.resetError,
47
+ $implicit: snap.error,
48
+ resetError: snap.resetError,
62
49
  };
63
50
  });
64
51
 
65
52
  private readonly router = injectRouter();
66
- private readonly snapshot = sourceToSignal<RouterErrorSnapshot>(
67
- createErrorSource(this.router),
53
+ private readonly snapshot = sourceToSignal<DismissableErrorSnapshot>(
54
+ createDismissableError(this.router),
68
55
  );
69
- private readonly dismissedVersion = signal(-1);
70
56
 
71
57
  constructor() {
72
58
  effect(() => {
@@ -81,8 +67,4 @@ export class RouterErrorBoundary {
81
67
  }
82
68
  });
83
69
  }
84
-
85
- private readonly resetError = (): void => {
86
- this.dismissedVersion.set(this.snapshot().version);
87
- };
88
70
  }
@@ -1,4 +1,4 @@
1
- import { createTransitionSource } from "@real-router/sources";
1
+ import { getTransitionSource } from "@real-router/sources";
2
2
 
3
3
  import { sourceToSignal } from "../sourceToSignal";
4
4
  import { injectRouter } from "./injectRouter";
@@ -8,7 +8,7 @@ import type { RouterTransitionSnapshot } from "@real-router/sources";
8
8
 
9
9
  export function injectRouterTransition(): Signal<RouterTransitionSnapshot> {
10
10
  const router = injectRouter();
11
- const source = createTransitionSource(router);
11
+ const source = getTransitionSource(router);
12
12
 
13
13
  return sourceToSignal(source);
14
14
  }
@@ -1,76 +0,0 @@
1
- # shared/dom-utils — Stable Shared Sources
2
-
3
- > DOM helpers инлайнятся во все framework-адаптеры. Код **зрелый**, API устоялся.
4
-
5
- ## Status: stable
6
-
7
- Эти файлы — общий слой для 6 адаптеров (Preact, React, Solid, Vue, Svelte, Angular). Любое изменение здесь немедленно попадает в 6 публичных bundle'ов. Относиться как к low-level примитиву, а не к «просто утилитам».
8
-
9
- ## Правила работы
10
-
11
- ### 1. Отладка начинается в адаптере, а не здесь
12
-
13
- Перед правкой `shared/dom-utils/*.ts` убедись, что:
14
- - баг воспроизводится **минимум в 2 адаптерах** (иначе это adapter-specific проблема обёртки);
15
- - есть падающий тест в функциональном наборе соответствующего адаптера.
16
-
17
- Если баг живёт только в одном адаптере — правка идёт в адаптер, не сюда.
18
-
19
- ### 2. Оптимизаций «на глаз» не делать
20
-
21
- Функции уже прошли итерации:
22
- - `buildActiveClassName` — токен-дедупликация через `Set`, O(n+m);
23
- - `applyLinkA11y` — defensive null-guard + `hasAttribute` (не `getAttribute`);
24
- - `buildHref` — optional `buildUrl` + undefined-fallback на `buildPath`;
25
- - `createRouteAnnouncer` — double `requestAnimationFrame` + Safari-ready буферизация через `pendingText`.
26
-
27
- «Рефактор ради чистоты» здесь запрещён — микро-изменение ломает сразу 6 bundle'ов. Изменение кода требует: конкретный баг/юз-кейс, тест на него, прогон `pnpm build`.
28
-
29
- ### 3. Angular sync после любой правки
30
-
31
- `packages/angular/src/dom-utils/` — **git-tracked copy**, не symlink (ng-packagr не следует за symlinks как tsdown).
32
-
33
- После правки `shared/dom-utils/*.ts`:
34
-
35
- ```bash
36
- pnpm -F @real-router/angular bundle # пере-материализует копию через prebundle
37
- diff -r shared/dom-utils/ packages/angular/src/dom-utils/ | grep -v index.ts # должно быть пусто
38
- ```
39
-
40
- Коммитить нужно **оба** варианта: источник в `shared/` и копию в `packages/angular/src/dom-utils/`.
41
-
42
- ### 4. Валидация изменений
43
-
44
- Минимальный чек-лист перед коммитом:
45
-
46
- ```bash
47
- pnpm build # 207+ тасков, все адаптеры
48
- pnpm -F @real-router/react test:properties -- --run # property-тесты buildActiveClassName/buildHref
49
- pnpm -F @real-router/svelte test:properties -- --run # property-тесты (дублируют React, оба должны пройти)
50
- ```
51
-
52
- ## Консумеры
53
-
54
- | Источник | Как подключено | Пакеты |
55
- |---|---|---|
56
- | `shared/dom-utils/` | symlink → `src/dom-utils` | `preact`, `react`, `solid`, `svelte`, `vue` |
57
- | `shared/dom-utils/` | git-tracked copy (через `prebundle`) | `angular` |
58
-
59
- Проверка, что symlink цел: `readlink packages/preact/src/dom-utils` должен вернуть относительный путь к `shared/dom-utils/`.
60
-
61
- ## Публичный контракт
62
-
63
- | Функция | Используется в | Стабильность |
64
- |---|---|---|
65
- | `shouldNavigate(evt)` | все `Link` компоненты + directives/actions | frozen |
66
- | `buildHref(router, name, params)` | все `Link` компоненты + Angular directive | frozen |
67
- | `buildActiveClassName(isActive, active, base)` | все `Link` компоненты | frozen |
68
- | `applyLinkA11y(el)` | все `Link` компоненты + directives | frozen |
69
- | `createRouteAnnouncer(router, opts)` | все `RouterProvider` / `NavigationAnnouncer` | frozen |
70
-
71
- «Frozen» = сигнатура и поведение не меняются без мажорного release-цикла core. Новые фичи — отдельными функциями, не модификацией существующих.
72
-
73
- ## См. также
74
-
75
- - [../../CLAUDE.md](../../CLAUDE.md) — monorepo-level правила symlink-инфраструктуры
76
- - [../../IMPLEMENTATION_NOTES.md](../../IMPLEMENTATION_NOTES.md) — раздел "Shared Sources via Symlinks"