@ethlete/core 5.0.0-next.45 → 5.0.0-next.47

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ethlete-core.mjs","sources":["../../../../libs/core/src/lib/animations/animation-debug.ts","../../../../libs/core/src/lib/animations/animatable.directive.ts","../../../../libs/core/src/lib/utils/angular/component-id.ts","../../../../libs/core/src/lib/utils/angular/destroy.ts","../../../../libs/core/src/lib/utils/angular/di.ts","../../../../libs/core/src/lib/utils/angular/form.ts","../../../../libs/core/src/lib/utils/angular/host-listener.ts","../../../../libs/core/src/lib/utils/angular/query-list-changes.ts","../../../../libs/core/src/lib/utils/angular/set-input-signal.ts","../../../../libs/core/src/lib/utils/angular/validators.ts","../../../../libs/core/src/lib/utils/clipboard.ts","../../../../libs/core/src/lib/utils/comparison.ts","../../../../libs/core/src/lib/utils/cookie.ts","../../../../libs/core/src/lib/utils/key-press-manager.ts","../../../../libs/core/src/lib/providers/renderer.ts","../../../../libs/core/src/lib/signals/element.ts","../../../../libs/core/src/lib/signals/render-utils.ts","../../../../libs/core/src/lib/signals/element-dimensions.ts","../../../../libs/core/src/lib/signals/signal-data-utils.ts","../../../../libs/core/src/lib/signals/media-queries.ts","../../../../libs/core/src/lib/signals/animated-block-size.ts","../../../../libs/core/src/lib/signals/animated-number.ts","../../../../libs/core/src/lib/providers/breakpoint-observer.ts","../../../../libs/core/src/lib/signals/breakpoint-input.ts","../../../../libs/core/src/lib/signals/control-value.ts","../../../../libs/core/src/lib/signals/element-mutations.ts","../../../../libs/core/src/lib/signals/element-children.ts","../../../../libs/core/src/lib/signals/element-data-binding.ts","../../../../libs/core/src/lib/scrolling/scrollable.ts","../../../../libs/core/src/lib/scrolling/snap.ts","../../../../libs/core/src/lib/signals/element-intersection.ts","../../../../libs/core/src/lib/signals/element-scroll-direction.ts","../../../../libs/core/src/lib/signals/document-visibility.ts","../../../../libs/core/src/lib/signals/element-scroll-state.ts","../../../../libs/core/src/lib/signals/recipes/css-vars.ts","../../../../libs/core/src/lib/signals/recipes/cursor-drag-scroll.ts","../../../../libs/core/src/lib/signals/router.ts","../../../../libs/core/src/lib/signals/recipes/scroll-restoration.ts","../../../../libs/core/src/lib/utils/logger.ts","../../../../libs/core/src/lib/utils/markdown.ts","../../../../libs/core/src/lib/utils/math.ts","../../../../libs/core/src/lib/utils/object.ts","../../../../libs/core/src/lib/utils/object-url.ts","../../../../libs/core/src/lib/utils/runtime-error.ts","../../../../libs/core/src/lib/utils/session-memory.ts","../../../../libs/core/src/lib/utils/swipe.ts","../../../../libs/core/src/lib/utils/text-selection.ts","../../../../libs/core/src/lib/providers/angular-root-element.ts","../../../../libs/core/src/lib/providers/boundary-element.ts","../../../../libs/core/src/lib/providers/file-download.ts","../../../../libs/core/src/lib/providers/focus-visible-tracker.ts","../../../../libs/core/src/lib/providers/locale.ts","../../../../libs/core/src/lib/providers/labels.ts","../../../../libs/core/src/lib/providers/style-manager.ts","../../../../libs/core/src/lib/providers/user-consent.ts","../../../../libs/core/src/lib/animations/animation-utils.ts","../../../../libs/core/src/lib/animations/animated-lifecycle.directive.ts","../../../../libs/core/src/lib/animations/animated-if.directive.ts","../../../../libs/core/src/lib/animations/flip-animation.ts","../../../../libs/core/src/lib/directives/click-outside.directive.ts","../../../../libs/core/src/lib/directives/repeat.directive.ts","../../../../libs/core/src/lib/directives/restore-scroll.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer-end.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer-start.directive.ts","../../../../libs/core/src/lib/drag-handle/drag-gesture.ts","../../../../libs/core/src/lib/drag-handle/drag-handle.directive.ts","../../../../libs/core/src/lib/notifications/notification.types.ts","../../../../libs/core/src/lib/notifications/notifications.ts","../../../../libs/core/src/lib/overlay/overlay-focus.ts","../../../../libs/core/src/lib/overlay/overlay-position.ts","../../../../libs/core/src/lib/overlay/overlay-position-anchored.ts","../../../../libs/core/src/lib/overlay/overlay-position-anchored-extras.ts","../../../../libs/core/src/lib/overlay/overlay-runtime-ref.ts","../../../../libs/core/src/lib/overlay/overlay-runtime.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-game-result-type.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-state.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-participants.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-score.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-type.pipe.ts","../../../../libs/core/src/lib/pipes/html-to-markdown.pipe.ts","../../../../libs/core/src/lib/pipes/infer-mime-type.pipe.ts","../../../../libs/core/src/lib/pipes/initials.pipe.ts","../../../../libs/core/src/lib/pipes/markdown-to-html.pipe.ts","../../../../libs/core/src/lib/pipes/slugify.pipe.ts","../../../../libs/core/src/lib/pipes/to-array.pipe.ts","../../../../libs/core/src/lib/props/create-prop-handlers.ts","../../../../libs/core/src/lib/props/element-dictionary.ts","../../../../libs/core/src/lib/props/props-binding.ts","../../../../libs/core/src/lib/props/create-props.ts","../../../../libs/core/src/lib/props/create-setup.ts","../../../../libs/core/src/lib/props/dependency-stash.ts","../../../../libs/core/src/lib/props/props.directive.ts","../../../../libs/core/src/lib/props/template-input.ts","../../../../libs/core/src/lib/resize-handles/resize-handles.component.ts","../../../../libs/core/src/lib/seo/head-binding.ts","../../../../libs/core/src/lib/seo/favicon-binding.ts","../../../../libs/core/src/lib/seo/link-binding.ts","../../../../libs/core/src/lib/seo/title-binding.ts","../../../../libs/core/src/lib/seo/meta-binding.ts","../../../../libs/core/src/lib/seo/structured-data-binding.ts","../../../../libs/core/src/lib/seo/structured-data.component.ts","../../../../libs/core/src/lib/theming/color-interactive-styles.component.ts","../../../../libs/core/src/lib/theming/color-interactive-container.directive.ts","../../../../libs/core/src/lib/theming/color-interactive-exclude.directive.ts","../../../../libs/core/src/lib/theming/color-interactive-has-focus.directive.ts","../../../../libs/core/src/lib/theming/color-interactive.directive.ts","../../../../libs/core/src/lib/theming/surface-theme.util.ts","../../../../libs/core/src/lib/theming/provide-surface.directive.ts","../../../../libs/core/src/lib/theming/surface-context-tracker.ts","../../../../libs/core/src/lib/theming/auto-surface.directive.ts","../../../../libs/core/src/lib/theming/color-theme.util.ts","../../../../libs/core/src/lib/theming/legacy-theming.ts","../../../../libs/core/src/lib/theming/provide-color.directive.ts","../../../../libs/core/src/lib/theming/surface-interactive-styles.component.ts","../../../../libs/core/src/lib/theming/surface-interactive.directive.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-coordinator.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-source.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-tab.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-tracker.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-guard.ts","../../../../libs/core/src/lib/version.ts","../../../../libs/core/src/ethlete-core.ts"],"sourcesContent":["export const ANIMATION_DEBUG_STORAGE_KEY = 'et-overlay-debug';\n\nlet cachedEnabled: boolean | null = null;\n\n/**\n * Debug logging for overlay and animation lifecycle internals.\n * Enable via `localStorage.setItem('et-overlay-debug', 'true')` and reload.\n */\nexport const isAnimationDebugEnabled = () => {\n if (cachedEnabled === null) {\n try {\n cachedEnabled = globalThis.localStorage?.getItem(ANIMATION_DEBUG_STORAGE_KEY) === 'true';\n } catch {\n cachedEnabled = false;\n }\n }\n\n return cachedEnabled;\n};\n\nexport const animationDebugLog = (scope: string, ...args: unknown[]) => {\n if (!isAnimationDebugEnabled()) return;\n\n const timestamp = (globalThis.performance?.now() ?? 0).toFixed(1);\n\n console.log(`\\x1B[36m[et-overlay-debug ${timestamp}ms | ${scope}]\\x1B[m`, ...args);\n};\n","import { Directive, ElementRef, inject, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n Subject,\n tap,\n} from 'rxjs';\nimport { animationDebugLog } from './animation-debug';\n\nexport const ANIMATABLE_TOKEN = new InjectionToken<AnimatableDirective>('ANIMATABLE_DIRECTIVE_TOKEN');\n\nexport type AnimationEndEvent = {\n cancelled: boolean;\n transitionId?: string;\n};\n\n@Directive({\n selector: '[etAnimatable]',\n exportAs: 'etAnimatable',\n providers: [\n {\n provide: ANIMATABLE_TOKEN,\n useExisting: AnimatableDirective,\n },\n ],\n})\nexport class AnimatableDirective {\n private parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private animationStartSubject$ = new Subject<void>();\n private animationEndSubject$ = new Subject<AnimationEndEvent>();\n\n private activeAnimationCount = 0;\n private hostActiveAnimationCount$ = new BehaviorSubject<number>(0);\n\n private pendingTransitionIds: string[] = [];\n private activeBatchTransitionId: string | undefined;\n\n animationStart$ = this.animationStartSubject$.asObservable().pipe(debounceTime(0));\n animationEnd$ = this.animationEndSubject$.asObservable().pipe(debounceTime(0));\n\n totalActiveAnimationCount$: Observable<number> = this.parent\n ? combineLatest([this.parent.totalActiveAnimationCount$, this.hostActiveAnimationCount$]).pipe(\n map(([parentCount, hostCount]) => Math.max(0, parentCount + hostCount)),\n )\n : this.hostActiveAnimationCount$.pipe(map((count) => Math.max(0, count)));\n\n isAnimating$ = this.totalActiveAnimationCount$.pipe(map((count) => count > 0));\n\n constructor() {\n let didEmitStart = false;\n const el = this.elementRef.nativeElement;\n\n merge(\n merge(fromEvent<AnimationEvent>(el, 'animationstart'), fromEvent<TransitionEvent>(el, 'transitionrun')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'start' as const),\n ),\n merge(fromEvent<AnimationEvent>(el, 'animationend'), fromEvent<TransitionEvent>(el, 'transitionend')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'end' as const),\n ),\n merge(fromEvent<AnimationEvent>(el, 'animationcancel'), fromEvent<TransitionEvent>(el, 'transitioncancel')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'cancel' as const),\n ),\n )\n .pipe(\n tap((eventType) => {\n switch (eventType) {\n case 'start': {\n const startingNewBatch = this.activeAnimationCount === 0;\n this.updateActiveAnimationCount(1);\n\n if (startingNewBatch) {\n this.activeBatchTransitionId = this.pendingTransitionIds.shift();\n }\n\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `start (count ${this.activeAnimationCount}, batch \"${this.activeBatchTransitionId}\", pending [${this.pendingTransitionIds.join(', ')}])`,\n );\n\n if (!didEmitStart) {\n didEmitStart = true;\n this.animationStartSubject$.next();\n }\n\n break;\n }\n case 'end':\n case 'cancel': {\n if (this.activeAnimationCount > 0) {\n this.updateActiveAnimationCount(-1);\n\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `${eventType} (count ${this.activeAnimationCount}, batch \"${this.activeBatchTransitionId}\")`,\n );\n\n if (this.activeAnimationCount === 0 && didEmitStart) {\n didEmitStart = false;\n this.animationEndSubject$.next({\n cancelled: eventType === 'cancel',\n transitionId: this.activeBatchTransitionId,\n });\n this.activeBatchTransitionId = undefined;\n }\n } else {\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `${eventType} ignored - count already 0 (start ${didEmitStart ? '' : 'not '}emitted)`,\n );\n console.warn(\n `${el.tagName} received animation end/cancel event but activeAnimationCount is already 0. Start was ${didEmitStart ? '' : 'not '}emitted.`,\n );\n }\n break;\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n setTransitionId(id: string) {\n this.pendingTransitionIds.push(id);\n }\n\n private updateActiveAnimationCount(delta: number) {\n const newVal = this.activeAnimationCount + delta;\n const clampedVal = Math.max(0, newVal);\n\n this.activeAnimationCount = clampedVal;\n this.hostActiveAnimationCount$.next(clampedVal);\n }\n}\n","const componentIds = /* @__PURE__ */ new Map<string, number>();\n\nexport const createComponentId = (prefix: string) => {\n const id = componentIds.get(prefix) ?? 0;\n componentIds.set(prefix, id + 1);\n\n return `${prefix}-${id}`;\n};\n\nlet randomIdFallbackCounter = 0;\n\n/**\n * A unique id string. Uses `crypto.randomUUID()` when available, but falls back gracefully when it is\n * not - crucially in **insecure contexts** (a plain-HTTP page served from a LAN IP, not `localhost`),\n * where `crypto.randomUUID` is `undefined`. Calling it there throws, so anything using it during e.g.\n * an overlay/menu open would break on such hosts. Prefer this over `crypto.randomUUID()` directly.\n */\nexport const randomId = () => {\n const cryptoObj = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;\n\n if (typeof cryptoObj?.randomUUID === 'function') {\n return cryptoObj.randomUUID();\n }\n\n // `getRandomValues` is available even in insecure contexts - build an RFC-4122-ish v4 id from it.\n if (typeof cryptoObj?.getRandomValues === 'function') {\n const bytes = Array.from(cryptoObj.getRandomValues(new Uint8Array(16)));\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n const hex = bytes.map((byte) => (byte ?? 0).toString(16).padStart(2, '0'));\n\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n }\n\n // last resort: no Web Crypto at all - a session-unique (not cryptographic) id is enough for DOM ids\n return `et-id-${(randomIdFallbackCounter++).toString(36)}-${Date.now().toString(36)}`;\n};\n","import { DestroyRef, assertInInjectionContext, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport const createDestroy = () => {\n assertInInjectionContext(createDestroy);\n\n const destroy$ = new Subject<boolean>();\n\n const ref = inject(DestroyRef);\n\n ref.onDestroy(() => {\n destroy$.next(true);\n destroy$.complete();\n });\n\n return destroy$.asObservable();\n};\n","import { ElementRef, inject, InjectionToken, InjectOptions, Provider, TemplateRef } from '@angular/core';\nimport { createComponentId } from './component-id';\n\nexport const injectHostElement = <T = HTMLElement>() => inject<ElementRef<T>>(ElementRef).nativeElement;\n\nexport const injectTemplateRef = <C = unknown>() => inject<TemplateRef<C>>(TemplateRef);\n\nexport type ProviderDefinitionOptions = {\n /**\n * Optional name for the provider, useful for debugging.\n * If not provided, the name will be a generated string.\n */\n name?: string;\n\n /**\n * Optional existing InjectionToken to also provide the created provider under.\n */\n extraInjectionToken?: InjectionToken<unknown>;\n};\n\n/** The `inject`-shaped half of a provider definition: optional when asked, non-nullable otherwise. */\nexport type InjectFn<T> = {\n (): T;\n (options: InjectOptions & { optional?: false }): T;\n (options: InjectOptions): T | null;\n};\n\n/**\n * What {@link defineProvider} & co. return: the token plus the two functions a domain re-exports as its\n * `provideX` / `injectX` pair. Read the halves out with {@link toProvideFn}, {@link toInjectFn} and\n * {@link toToken} - never by destructuring, see {@link defineProvider}.\n */\nexport type ProviderDefinition<T> = {\n readonly provide: () => Provider[];\n readonly inject: InjectFn<T>;\n readonly token: InjectionToken<T>;\n};\n\n/** {@link ProviderDefinition} for a value provider, whose `provide` takes a partial override. */\nexport type StaticProviderDefinition<T> = {\n readonly provide: (valueOverride?: Partial<T>) => Provider[];\n readonly inject: InjectFn<T>;\n readonly token: InjectionToken<T>;\n};\n\nconst createInjectFunction = <T>(token: InjectionToken<T>): InjectFn<T> => {\n function injectFn(): T;\n function injectFn(options: InjectOptions & { optional?: false }): T;\n function injectFn(options: InjectOptions): T | null;\n function injectFn(options?: InjectOptions): T | null {\n return options ? inject(token, options) : inject(token);\n }\n return injectFn;\n};\n\nconst createProviders = <T>(\n token: InjectionToken<T>,\n factory: () => T,\n extraToken?: InjectionToken<unknown>,\n): Provider[] => [\n { provide: token, useFactory: factory },\n ...(extraToken ? [{ provide: extraToken, useExisting: token }] : []),\n];\n\n/**\n * Defines a provider that a subtree opts into - `provideX()` in some component's `providers`, then\n * `injectX()` below it. Nothing is created until the subtree provides it.\n *\n * Assign the result to one `const`, name the halves with {@link toProvideFn} / {@link toInjectFn} /\n * {@link toToken}, and put a `__PURE__` annotation comment on each of those declarations. Never destructure\n * the definition: that declaration cannot be tree-shaken, so it ships the factory's whole closure to\n * every consumer. Enforced by `ethlete/no-impure-top-level-provider`.\n */\nexport const defineProvider = <T>(factory: () => T, options?: ProviderDefinitionOptions): ProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('provider'));\n\n return {\n provide: () => createProviders(token, factory, options?.extraInjectionToken),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/**\n * Like {@link defineProvider}, but the factory also runs in the root injector, so `injectX()` works\n * without anyone calling `provideX()`. `provideX()` still exists, to give a subtree its own instance.\n */\nexport const defineRootProvider = <T>(factory: () => T, options?: ProviderDefinitionOptions): ProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('provider'), {\n providedIn: 'root',\n factory,\n });\n\n return {\n provide: () => createProviders(token, factory, options?.extraInjectionToken),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/**\n * Like {@link defineProvider} for a plain value rather than a factory: `provideX(override)` merges the\n * partial override over `defaultValue`, which is how every config object in the library is shaped.\n */\nexport const defineStaticProvider = <T>(\n defaultValue?: T,\n options?: ProviderDefinitionOptions,\n): StaticProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('static-provider'));\n\n return {\n provide: (valueOverride?: Partial<T>) => createValueProviders(token, defaultValue, valueOverride, options),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/**\n * {@link defineStaticProvider} whose default is also available in the root injector, so `injectX()`\n * resolves to `defaultValue` in an app that never provides it.\n */\nexport const defineStaticRootProvider = <T>(\n defaultValue?: T,\n options?: ProviderDefinitionOptions,\n): StaticProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('static-provider'), {\n providedIn: 'root',\n factory: () => defaultValue as T,\n });\n\n return {\n provide: (valueOverride?: Partial<T>) => createValueProviders(token, defaultValue, valueOverride, options),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/** The `provideX` half of a provider definition. A call, so a `__PURE__` annotation makes it droppable. */\nexport const toProvideFn = <TDefinition extends { readonly provide: unknown }>(\n definition: TDefinition,\n): TDefinition['provide'] => definition.provide;\n\n/** The `injectX` half of a provider definition. */\nexport const toInjectFn = <TDefinition extends { readonly inject: unknown }>(\n definition: TDefinition,\n): TDefinition['inject'] => definition.inject;\n\n/** The token behind a provider definition. */\nexport const toToken = <TDefinition extends { readonly token: unknown }>(\n definition: TDefinition,\n): TDefinition['token'] => definition.token;\n\nconst createValueProviders = <T>(\n token: InjectionToken<T>,\n defaultValue: T | undefined,\n valueOverride: Partial<T> | undefined,\n options: ProviderDefinitionOptions | undefined,\n): Provider[] => [\n { provide: token, useValue: maybeMergeValues(defaultValue, valueOverride) },\n ...(options?.extraInjectionToken ? [{ provide: options.extraInjectionToken, useExisting: token }] : []),\n];\n\nconst maybeMergeValues = <T>(defaultValue: T | undefined, valueOverride?: Partial<T>) => {\n if (valueOverride && defaultValue && typeof defaultValue === 'object') {\n return { ...defaultValue, ...valueOverride };\n }\n\n return valueOverride ?? defaultValue;\n};\n","import { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nexport const cloneFormGroup = <T extends FormGroup<any>>(formGroup: T) => {\n const cloneLevel = (group: FormGroup, cloneGroup: FormGroup) => {\n Object.entries(group.controls).forEach(([key, control]) => {\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n\n cloneGroup.addControl(key, cloneControl);\n\n cloneLevel(control, cloneControl);\n } else if (control instanceof FormArray) {\n const cloneArrayControl = new FormArray<any>([], control.validator, control.asyncValidator);\n\n control.controls.forEach((control) => {\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n const innerClone = cloneLevel(control, cloneControl);\n cloneArrayControl.push(innerClone);\n } else {\n const cloneControlItem = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n cloneArrayControl.push(cloneControlItem);\n }\n });\n\n cloneGroup.addControl(key, cloneArrayControl);\n } else {\n const cloneControl = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n\n cloneGroup.addControl(key, cloneControl);\n }\n });\n\n return cloneGroup;\n };\n\n const clonedForm = cloneLevel(formGroup, new FormGroup({}));\n clonedForm.setValue(formGroup.value);\n clonedForm.updateValueAndValidity();\n\n return clonedForm as T;\n};\n\nexport const getFormGroupValue = <T extends FormGroup>(formGroup: T) => {\n const value: Record<string, unknown> = {};\n\n Object.entries(formGroup.controls).forEach(([key, control]) => {\n if (control instanceof FormGroup) {\n value[key] = getFormGroupValue(control);\n } else if (control instanceof FormArray) {\n value[key] = control.controls.map((control) => {\n if (control instanceof FormGroup) {\n return getFormGroupValue(control);\n } else {\n return control.value ?? null;\n }\n });\n } else {\n value[key] = control.value ?? null;\n }\n });\n\n return value;\n};\n","import { ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\n\nexport const createRxHostListener = <K extends keyof HTMLElementEventMap>(\n eventName: K,\n options?: EventListenerOptions,\n) => {\n const element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement as EventTarget;\n\n const observable = options\n ? fromEvent<HTMLElementEventMap[K]>(element, eventName, options)\n : fromEvent<HTMLElementEventMap[K]>(element, eventName);\n\n return observable.pipe(takeUntilDestroyed());\n};\n\nexport const applyHostListener = <K extends keyof HTMLElementEventMap>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: EventListenerOptions,\n) => createRxHostListener(eventName, options).subscribe(handler);\n\nexport const applyHostListeners = (\n listeners: Partial<{\n [K in keyof HTMLElementEventMap]: (event: HTMLElementEventMap[K]) => void;\n }>,\n options?: EventListenerOptions,\n) => {\n for (const eventName in listeners) {\n const handler = listeners[eventName as keyof HTMLElementEventMap];\n\n if (handler) {\n applyHostListener(eventName as keyof HTMLElementEventMap, handler as any, options);\n }\n }\n};\n","import { QueryList } from '@angular/core';\nimport { Observable, of, startWith, switchMap } from 'rxjs';\n\nexport class TypedQueryList<T> extends QueryList<T> {\n override get changes(): Observable<TypedQueryList<T>> {\n return super.changes as Observable<TypedQueryList<T>>;\n }\n}\n\nexport function switchQueryListChanges() {\n return function <T extends TypedQueryList<unknown> | null | undefined>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.changes.pipe(startWith(value)) ?? of(null))) as Observable<T>;\n };\n}\n","import { InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';\n\n/**\n * Sets the value of an input signal.\n * See issue: https://github.com/angular/angular/issues/54782\n */\nexport const setInputSignal = <T>(input: InputSignal<T> | InputSignalWithTransform<T, unknown>, value: T) => {\n const node = input[SIGNAL];\n\n signalSetFn(node, value);\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const AT_LEAST_ONE_REQUIRED = 'atLeastOneRequired';\n\nexport type ValidateAtLeastOneRequiredConfig = {\n /**\n * Keys of form controls to validate in the supplied form group\n */\n keys: string[];\n\n /**\n * If true, the value `false` will result in a validation error\n * @default false\n */\n checkFalse?: boolean;\n};\n\nexport const ValidateAtLeastOneRequired = (config: ValidateAtLeastOneRequiredConfig): ValidatorFn => {\n return (formGroup: AbstractControl): ValidationErrors | null => {\n const { keys, checkFalse } = config;\n\n if (!formGroup) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n\n const controlValues = keys.map((key) => formGroup.get(key)?.value);\n\n const areAllFalsy = controlValues.every(\n (value) =>\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (checkFalse && value === false),\n );\n\n if (areAllFalsy) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n\n return null;\n };\n};\n\nexport const IS_ARRAY_NOT_EMPTY = 'isArrayNotEmpty';\n\nexport const IsArrayNotEmpty = (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) {\n return null;\n }\n\n return value.length > 0 ? null : { [IS_ARRAY_NOT_EMPTY]: true };\n};\n\nexport const IS_EMAIL = 'isEmail';\n\nexport const IsEmail = (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/;\n return regex.test(value) ? null : { [IS_EMAIL]: true };\n};\n\nexport const MUST_MATCH = 'mustMatch';\n\nexport const MustMatch = (controlName: string, matchingControlName: string) => {\n return (formGroup: AbstractControl) => {\n const control = formGroup.get(controlName);\n const matchingControl = formGroup.get(matchingControlName);\n\n if (matchingControl?.errors && !matchingControl.errors[MUST_MATCH]) {\n return null;\n }\n\n if (control?.value !== matchingControl?.value) {\n matchingControl?.setErrors({ [MUST_MATCH]: true });\n\n return { [MUST_MATCH]: true };\n } else {\n matchingControl?.setErrors(null);\n return null;\n }\n };\n};\n\nexport const Validators = {\n MustMatch,\n IsEmail,\n IsArrayNotEmpty,\n ValidateAtLeastOneRequired,\n} as const;\n","import { Observable, catchError, defer, from, map, of } from 'rxjs';\n\nexport const copyToClipboard = (text: string): Observable<boolean> =>\n defer(() => {\n if (typeof navigator === 'undefined' || typeof document === 'undefined') {\n return of(false);\n }\n\n if (navigator.clipboard) {\n return from(navigator.clipboard.writeText(text)).pipe(\n map(() => true),\n // The async Clipboard API can be blocked (missing permission, insecure context) - try the legacy path.\n catchError(() => of(copyToClipboardViaExecCommand(text))),\n );\n }\n\n return of(copyToClipboardViaExecCommand(text));\n });\n\nexport const readFromClipboard = (): Observable<string | null> =>\n defer(() => {\n if (typeof navigator === 'undefined' || !navigator.clipboard) {\n return of(null);\n }\n\n return from(navigator.clipboard.readText()).pipe(catchError(() => of(null)));\n });\n\nconst copyToClipboardViaExecCommand = (text: string) => {\n const previouslyFocusedElement = document.activeElement;\n\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.setAttribute('aria-hidden', 'true');\n textarea.style.position = 'fixed';\n textarea.style.top = '-9999px';\n textarea.style.opacity = '0';\n\n document.body.appendChild(textarea);\n textarea.select();\n textarea.setSelectionRange(0, text.length);\n\n let didCopy = false;\n\n try {\n didCopy = document.execCommand('copy');\n } catch {\n // execCommand throws in some environments instead of returning false.\n }\n\n textarea.remove();\n\n if (previouslyFocusedElement instanceof HTMLElement) {\n previouslyFocusedElement.focus();\n }\n\n return didCopy;\n};\n","/* eslint-disable no-var, @typescript-eslint/no-non-null-assertion -- kept as upstream */\n\n/**\n * Stolen from klona to avoid adding a dependency\n * https://github.com/lukeed/klona\n *\n * MIT License\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nconst set = (obj: any, key: any, val: any) => {\n if (typeof val.value === 'object') val.value = clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n};\n\nexport const clone = <T>(original: T): T => {\n if (typeof original !== 'object') return original;\n\n var _og = original as any;\n\n var i = 0;\n var k;\n var list;\n var tmp: any;\n var str = Object.prototype.toString.call(_og);\n\n if (str === '[object Object]') {\n tmp = Object.create(_og.__proto__ || null);\n } else if (str === '[object Array]') {\n tmp = Array(_og.length);\n } else if (str === '[object Set]') {\n tmp = new Set();\n _og.forEach(function (val: any) {\n tmp.add(clone(val));\n });\n } else if (str === '[object Map]') {\n tmp = new Map();\n _og.forEach(function (val: any, key: any) {\n tmp.set(clone(key), clone(val));\n });\n } else if (str === '[object Date]') {\n tmp = new Date(+_og);\n } else if (str === '[object RegExp]') {\n tmp = new RegExp(_og.source, _og.flags);\n } else if (str === '[object DataView]') {\n tmp = new _og.constructor(clone(_og.buffer));\n } else if (str === '[object ArrayBuffer]') {\n tmp = _og.slice(0);\n } else if (str.slice(-6) === 'Array]') {\n tmp = new _og.constructor(_og);\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]!));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(_og); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i]!)) && tmp[k] === _og[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(_og, k));\n }\n }\n\n return tmp || _og;\n};\n\n/**\n * Stolen from dequal to avoid adding a dependency\n * https://github.com/lukeed/dequal\n *\n * The MIT License (MIT)\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst has = Object.prototype.hasOwnProperty;\n\nfunction find(iter: any, tar: any, key?: any) {\n for (key of iter.keys()) {\n if (equal(key, tar)) return key;\n }\n}\n\nexport const equal = (foo: any, bar: any) => {\n var ctor: any;\n var len: any;\n var tmp: any;\n if (foo === bar) return true;\n\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date) return foo.getTime() === bar.getTime();\n if (ctor === RegExp) return foo.toString() === bar.toString();\n\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && equal(foo[len], bar[len]));\n }\n\n return len === -1;\n }\n\n if (ctor === Set) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len;\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!bar.has(tmp)) return false;\n }\n\n return true;\n }\n\n if (ctor === Map) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len[0];\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!equal(len[1], bar.get(tmp))) {\n return false;\n }\n }\n\n return true;\n }\n\n if (ctor === ArrayBuffer) {\n foo = new Uint8Array(foo);\n bar = new Uint8Array(bar);\n } else if (ctor === DataView) {\n if ((len = foo.byteLength) === bar.byteLength) {\n while (len-- && foo.getInt8(len) === bar.getInt8(len));\n }\n\n return len === -1;\n }\n\n if (ArrayBuffer.isView(foo)) {\n if ((len = foo.byteLength) === bar.byteLength) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n while (len-- && foo[len] === bar[len]);\n }\n\n return len === -1;\n }\n\n if (!ctor || typeof foo === 'object') {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n if (!(ctor in bar) || !equal(foo[ctor], bar[ctor])) return false;\n }\n\n return Object.keys(bar).length === len;\n }\n }\n\n return foo !== foo && bar !== bar;\n};\n","export const hasCookie = (name: string) => {\n if (typeof document === 'undefined') {\n return false;\n }\n\n return document.cookie.split(';').some((c) => {\n return c.trim().startsWith(name + '=');\n });\n};\n\nexport const getCookie = (name: string) => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n // From https://stackoverflow.com/questions/10730362/get-cookie-by-name\n return ('; ' + document.cookie).split(`; ${name}=`).pop()?.split(';')[0];\n};\n\nexport const setCookie = (\n name: string,\n data: string,\n expiresInDays?: number | null,\n domain = getDomain(),\n path = '/',\n sameSite: 'strict' | 'none' | 'lax' = 'lax',\n) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const sameSiteUpper = sameSite.toUpperCase();\n\n const expires = expiresInDays ?? 30;\n\n let cookieString = `${name}=${data}; path=${path}`;\n\n if (expiresInDays !== null) {\n const date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n cookieString += `; expires=${date.toUTCString()}`;\n }\n\n cookieString += `; domain=${domain}; SameSite=${sameSiteUpper};`;\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, path = '/', domain = getDomain()) => {\n if (hasCookie(name)) {\n document.cookie =\n name +\n '=' +\n (path ? ';path=' + path : '') +\n (domain ? ';domain=' + domain : '') +\n ';expires=Thu, 01 Jan 1970 00:00:01 GMT';\n }\n};\n\nexport const getDomain = () => {\n if (typeof navigator === 'undefined') {\n return null;\n }\n\n const hostname = window.location.hostname;\n\n if (hostname.includes('localhost')) {\n return 'localhost';\n }\n\n const hostIsIP = hostname.match(/^(\\d{1,3}\\.){3}\\d{1,3}$/);\n\n if (hostIsIP) {\n return hostname;\n }\n\n const splitHost = hostname.split('.');\n\n if (splitHost.length > 2) {\n return `${splitHost[splitHost.length - 2]}.${splitHost[splitHost.length - 1]}`;\n }\n\n return hostname;\n};\n","import { BehaviorSubject, Subject, takeUntil, timer } from 'rxjs';\n\nexport class KeyPressManager {\n private readonly _isKeyPressed$ = new BehaviorSubject(false);\n private readonly _keyPressCount$ = new BehaviorSubject(0);\n\n private readonly _stopTimeout$ = new Subject<void>();\n\n constructor(public readonly key: number) {}\n\n isPressed(event: KeyboardEvent) {\n const key = event.keyCode;\n\n if (key === this.key) {\n this._isKeyPressed$.next(this._keyPressCount$.value > 1);\n this._keyPressCount$.next(this._keyPressCount$.value + 1);\n\n this._stopTimeout$.next();\n\n timer(100)\n .pipe(takeUntil(this._stopTimeout$))\n .subscribe(() => this.clear());\n } else {\n this.clear();\n }\n\n return this._isKeyPressed$.value;\n }\n\n clear() {\n this._isKeyPressed$.next(false);\n this._keyPressCount$.next(0);\n this._stopTimeout$.next();\n }\n}\n","import { inject, RendererFactory2, RendererStyleFlags2 } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\n\nconst RENDERER_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const rendererFactory = inject(RendererFactory2);\n const renderer = rendererFactory.createRenderer(null, null);\n\n const addClass = (element: HTMLElement, ...classes: string[]) => {\n classes.forEach((cls) => renderer.addClass(element, cls));\n };\n\n const removeClass = (element: HTMLElement, ...classes: string[]) => {\n classes.forEach((cls) => renderer.removeClass(element, cls));\n };\n\n const toggleClass = (element: HTMLElement, className: string, force?: boolean) => {\n const shouldAdd = force ?? !element.classList.contains(className);\n if (shouldAdd) {\n renderer.addClass(element, className);\n } else {\n renderer.removeClass(element, className);\n }\n return shouldAdd;\n };\n\n const setStyle = (\n element: HTMLElement,\n style: Partial<Record<keyof CSSStyleDeclaration, string | null>>,\n flags?: RendererStyleFlags2,\n ) => {\n Object.entries(style).forEach(([key, value]) => {\n if (!Number.isNaN(Number(key))) return;\n if (value !== null && value !== undefined) {\n renderer.setStyle(element, key, value, flags);\n } else {\n renderer.removeStyle(element, key, flags);\n }\n });\n };\n\n const removeStyle = (\n element: HTMLElement,\n style: keyof CSSStyleDeclaration | string,\n flags?: RendererStyleFlags2,\n ) => {\n if (!Number.isNaN(Number(style))) return;\n renderer.removeStyle(element, style as string, flags);\n };\n\n const removeStyles = (element: HTMLElement, ...styles: (keyof CSSStyleDeclaration | string)[]) => {\n styles.forEach((style) => removeStyle(element, style));\n };\n\n const setCssProperty = (element: HTMLElement, name: string, value: string | null) => {\n if (value !== null && value !== undefined) {\n renderer.setStyle(element, name, value, RendererStyleFlags2.DashCase);\n } else {\n renderer.removeStyle(element, name, RendererStyleFlags2.DashCase);\n }\n };\n\n const setCssProperties = (element: HTMLElement, properties: Record<string, string | null>) => {\n Object.entries(properties).forEach(([name, value]) => {\n setCssProperty(element, name, value);\n });\n };\n\n const setAttribute = (element: HTMLElement, name: string, value: string | null, namespace?: string | null) => {\n if (value !== null && value !== undefined) {\n renderer.setAttribute(element, name, value, namespace);\n } else {\n renderer.removeAttribute(element, name, namespace);\n }\n };\n\n const removeAttribute = (element: HTMLElement, ...names: string[]) => {\n names.forEach((name) => renderer.removeAttribute(element, name));\n };\n\n const setProperty = (element: HTMLElement, name: string, value: unknown) => {\n renderer.setProperty(element, name, value);\n };\n\n const setProperties = (element: HTMLElement, properties: Record<string, unknown>) => {\n Object.entries(properties).forEach(([name, value]) => {\n renderer.setProperty(element, name, value);\n });\n };\n\n const createElement = <K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n namespace?: string | null,\n ): HTMLElementTagNameMap[K] => {\n return renderer.createElement(tagName, namespace);\n };\n\n const createText = (value: string): Text => {\n return renderer.createText(value);\n };\n\n const createComment = (value: string): Comment => {\n return renderer.createComment(value);\n };\n\n const appendChild = (parent: HTMLElement, newChild: Node) => {\n renderer.appendChild(parent, newChild);\n };\n\n const insertBefore = (parent: Node, newChild: Node, refChild: Node | null) => {\n renderer.insertBefore(parent, newChild, refChild);\n };\n\n const removeChild = (parent: Node, oldChild: Node, isHostElement?: boolean) => {\n renderer.removeChild(parent, oldChild, isHostElement);\n };\n\n const selectRootElement = (selectorOrNode: string | HTMLElement, preserveContent?: boolean): HTMLElement => {\n return renderer.selectRootElement(selectorOrNode, preserveContent);\n };\n\n const parentNode = (node: Node): Node | null => {\n return renderer.parentNode(node);\n };\n\n const nextSibling = (node: Node): Node | null => {\n return renderer.nextSibling(node);\n };\n\n const setValue = (node: Node, value: string) => {\n renderer.setValue(node, value);\n };\n\n const listen = (\n target: HTMLElement | Window | Document | 'window' | 'document' | 'body',\n eventName: string,\n callback: (event: Event) => boolean | void,\n ): (() => void) => {\n return renderer.listen(target, eventName, callback);\n };\n\n const destroyNode = (node: Node) => {\n if (renderer.destroyNode) {\n renderer.destroyNode(node);\n }\n };\n\n const replaceChild = (parent: Node, newChild: Node, oldChild: Node) => {\n renderer.insertBefore(parent, newChild, oldChild);\n renderer.removeChild(parent, oldChild);\n };\n\n const empty = (element: HTMLElement) => {\n while (element.firstChild) {\n renderer.removeChild(element, element.firstChild);\n }\n };\n\n const setTextContent = (element: HTMLElement, text: string) => {\n renderer.setProperty(element, 'textContent', text);\n };\n\n const setInnerHTML = (element: HTMLElement, html: string) => {\n renderer.setProperty(element, 'innerHTML', html);\n };\n\n const setAttributes = (\n element: HTMLElement,\n attributes: Record<string, string | null>,\n namespace?: string | null,\n ) => {\n Object.entries(attributes).forEach(([name, value]) => {\n setAttribute(element, name, value, namespace);\n });\n };\n\n const setDataAttributes = (element: HTMLElement, data: Record<string, string | null>) => {\n Object.entries(data).forEach(([key, value]) => {\n setAttribute(element, `data-${key}`, value);\n });\n };\n\n const moveBefore = (config: { newParent: HTMLElement; child: HTMLElement; before?: Node | null }) => {\n type NodeWithMoveBefore = HTMLElement & { moveBefore: (child: Node, before: Node | null) => void };\n\n const { newParent, child, before = null } = config;\n if ('moveBefore' in newParent) {\n try {\n (newParent as NodeWithMoveBefore).moveBefore(child, before);\n } catch {\n newParent.insertBefore(child, before);\n }\n } else {\n (newParent as HTMLElement).insertBefore(child, before);\n }\n };\n\n return {\n addClass,\n removeClass,\n toggleClass,\n setStyle,\n removeStyle,\n removeStyles,\n setAttribute,\n removeAttribute,\n setProperty,\n setProperties,\n createElement,\n createText,\n createComment,\n appendChild,\n insertBefore,\n removeChild,\n selectRootElement,\n parentNode,\n nextSibling,\n setValue,\n listen,\n destroyNode,\n\n replaceChild,\n empty,\n setTextContent,\n setInnerHTML,\n setAttributes,\n setDataAttributes,\n setCssProperty,\n setCssProperties,\n\n moveBefore,\n\n renderer,\n };\n },\n { name: 'Angular Renderer' },\n);\n\nexport const provideRenderer = /* @__PURE__ */ toProvideFn(RENDERER_DEF);\nexport const injectRenderer = /* @__PURE__ */ toInjectFn(RENDERER_DEF);\n\nexport type AngularRenderer = NonNullable<ReturnType<typeof injectRenderer>>;\n","import {\n DOCUMENT,\n ElementRef,\n QueryList,\n Signal,\n computed,\n inject,\n isDevMode,\n isSignal,\n linkedSignal,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Observable, map, pairwise, startWith } from 'rxjs';\n\nconst coerceElement = <T>(el: ElementRef<T> | T): T => (el instanceof ElementRef ? el.nativeElement : el);\n\nexport type SignalElementBindingComplexType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | Array<ElementRef<HTMLElement> | HTMLElement>\n | null\n | undefined;\n\nexport type SignalElementBindingType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | Observable<SignalElementBindingComplexType>\n | Signal<SignalElementBindingComplexType>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | ElementSignal;\n\nexport type ElementSignal = Signal<{\n currentElements: HTMLElement[];\n previousElements: HTMLElement[];\n}>;\n\nexport type ElementSignalValue = ReturnType<ElementSignal>;\n\nexport const isElementSignal = (el: unknown): el is ElementSignal => {\n if (!isSignal(el)) return false;\n\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElements' in val && 'previousElements' in val;\n};\n\nexport const createDocumentElementSignal = (): ElementSignal => {\n const documentElement = inject(DOCUMENT).documentElement;\n return signal({\n currentElements: [documentElement],\n previousElements: [],\n });\n};\n\nexport const createEmptyElementSignal = (): ElementSignal =>\n signal({\n currentElements: [],\n previousElements: [],\n });\n\nconst areElementArraysEqual = (a: HTMLElement[], b: HTMLElement[]) => {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nconst areElementSignalValuesEqual = (a: ElementSignalValue, b: ElementSignalValue) =>\n areElementArraysEqual(a.currentElements, b.currentElements) &&\n areElementArraysEqual(a.previousElements, b.previousElements);\n\nexport const buildElementSignal = (el: SignalElementBindingType | null | undefined): ElementSignal => {\n if (el === null || el === undefined) return createEmptyElementSignal();\n if (isElementSignal(el)) return el;\n\n if (el instanceof HTMLElement || el instanceof ElementRef) {\n const element = coerceElement(el);\n if (!element) return createEmptyElementSignal();\n\n return signal({\n currentElements: [element],\n previousElements: [],\n });\n }\n\n if (isSignal(el)) return createElementSignalFromSignal(el);\n\n return createElementSignalFromObservable(createElementsObservable(el));\n};\n\nconst createElementSignalFromSignal = (input: Signal<SignalElementBindingComplexType>): ElementSignal => {\n return linkedSignal({\n source: input,\n computation: (source, previous) => {\n const currentElements = coerceValueToElementArray(source);\n const previousElements = previous?.value.currentElements ?? [];\n\n return {\n currentElements,\n previousElements,\n };\n },\n equal: areElementSignalValuesEqual,\n });\n};\n\nconst createElementSignalFromObservable = (elements$: Observable<HTMLElement[]>): ElementSignal => {\n return toSignal(\n elements$.pipe(\n startWith([]),\n pairwise(),\n map(([previousElements, currentElements]) => {\n if (isDevMode()) {\n const invalidElement = currentElements.find((el) => el && !(el instanceof HTMLElement));\n if (invalidElement) {\n console.error(\n 'Received an element that is not an HTMLElement. You are probably using viewChild or contentChild on a component without the read option set to ElementRef.',\n invalidElement,\n );\n }\n }\n\n return {\n previousElements,\n currentElements,\n };\n }),\n ),\n {\n initialValue: {\n previousElements: [],\n currentElements: [],\n },\n equal: areElementSignalValuesEqual,\n },\n ) as ElementSignal;\n};\n\nconst coerceValueToElementArray = (value: SignalElementBindingComplexType): HTMLElement[] => {\n if (value === null || value === undefined) return [];\n\n const items = value instanceof QueryList ? value.toArray() : Array.isArray(value) ? value : [value];\n\n const result: HTMLElement[] = [];\n for (const item of items) {\n const el = coerceElement(item);\n if (el) result.push(el);\n }\n return result;\n};\n\nconst createElementsObservable = (\n input: Observable<SignalElementBindingComplexType> | QueryList<ElementRef<HTMLElement> | HTMLElement>,\n): Observable<HTMLElement[]> => {\n if (input instanceof QueryList) {\n return input.changes.pipe(\n startWith(input),\n map(() => coerceValueToElementArray(input)),\n );\n }\n\n return input.pipe(map(coerceValueToElementArray));\n};\n\nexport const firstElementSignal = (el: ElementSignal) =>\n computed(\n () => {\n const { currentElements, previousElements } = el();\n\n if (isDevMode() && currentElements.length > 1) {\n console.warn(\n 'More than one element is bound to the signal. Only the first element will be used.',\n currentElements,\n );\n }\n\n return {\n currentElement: currentElements[0] ?? null,\n previousElement: previousElements[0] ?? null,\n };\n },\n {\n equal: (a, b) => a.currentElement === b.currentElement && a.previousElement === b.previousElement,\n },\n );\n","import { afterNextRender, effect, signal } from '@angular/core';\nimport { nextFrame } from '../animations';\n\nexport const signalIsRendered = () => {\n const isRendered = signal(false);\n\n afterNextRender(() => isRendered.set(true));\n\n return isRendered.asReadonly();\n};\n\nexport const createIsRenderedSignal = () => {\n const value = signal(false);\n\n nextFrame(() => {\n if (!value()) {\n console.error(\n 'Render signal was not set to true. This can cause unexpected behavior. Make sure to .bind() the render signal at the end of the constructor.',\n );\n }\n });\n\n return {\n state: value,\n bind: () => effect(() => value.set(true)),\n };\n};\n\nexport const createCanAnimateSignal = () => {\n const value = signal(false);\n\n nextFrame(() => {\n value.set(true);\n });\n\n return {\n state: value.asReadonly(),\n };\n};\n","import { DOCUMENT } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n isDevMode,\n NgZone,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { equal } from '../utils';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport type LogicalSize = {\n inlineSize: number;\n blockSize: number;\n};\n\nexport type ElementRect = {\n bottom: number;\n height: number;\n left: number;\n right: number;\n top: number;\n width: number;\n x: number;\n y: number;\n};\n\nexport type ElementSize = {\n width: number;\n height: number;\n};\n\nexport const boundingClientRectToElementRect = (rect: DOMRectReadOnly): ElementRect => ({\n bottom: rect.bottom,\n height: rect.height,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n width: rect.width,\n x: rect.x,\n y: rect.y,\n});\n\nexport const createElementDimensions = (el: HTMLElement | null, rect?: DOMRect): NullableElementDimensions => {\n if (!el) {\n return {\n rect: null,\n client: null,\n scroll: null,\n offset: null,\n };\n }\n\n const cachedNormalizedRect = rect ? boundingClientRectToElementRect(rect) : null;\n const rectFn = () =>\n cachedNormalizedRect ? cachedNormalizedRect : boundingClientRectToElementRect(el.getBoundingClientRect());\n\n return {\n rect: rectFn,\n client: { width: el.clientWidth, height: el.clientHeight },\n scroll: { width: el.scrollWidth, height: el.scrollHeight },\n offset: { width: el.offsetWidth, height: el.offsetHeight },\n };\n};\n\nexport type ElementDimensions = {\n rect: () => ElementRect;\n client: ElementSize;\n scroll: ElementSize;\n offset: ElementSize;\n};\n\nexport type NullableElementDimensions = {\n [K in keyof ElementDimensions]: ElementDimensions[K] | null;\n};\n\nexport const signalElementDimensions = (el: SignalElementBindingType) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const initialValue = () => createElementDimensions(firstEl().currentElement);\n\n const elementDimensionsSignal = signal<NullableElementDimensions>(initialValue());\n\n const observer = new ResizeObserver((e) => {\n if (!isRendered()) return;\n\n const entry = e[0];\n\n if (entry) {\n const target = entry.target as HTMLElement;\n const newDimensions = createElementDimensions(target);\n\n zone.run(() => elementDimensionsSignal.set(newDimensions));\n }\n });\n\n effect(() => {\n const els = firstEl();\n\n untracked(() => {\n elementDimensionsSignal.set(initialValue());\n\n if (els.previousElement) {\n observer.disconnect();\n }\n\n if (els.currentElement) {\n const computedDisplay = getComputedStyle(els.currentElement).display;\n const currentElIsAngularComponent = els.currentElement?.tagName.toLowerCase().includes('-');\n\n if (computedDisplay === 'inline' && isDevMode() && currentElIsAngularComponent) {\n console.error(\n `Element <${els.currentElement?.tagName.toLowerCase()}> is an Angular component and has a display of 'inline'. Inline elements cannot be observed for dimensions. Please change it to 'block' or something else.`,\n );\n }\n\n observer.observe(els.currentElement);\n }\n });\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return computed(() => elementDimensionsSignal(), {\n equal: (a, b) => equal(a, b),\n });\n};\n\nexport const signalHostElementDimensions = () => signalElementDimensions(inject<ElementRef<HTMLElement>>(ElementRef));\n\nexport const injectViewportSize = (): Signal<ElementSize> => {\n const document = inject(DOCUMENT);\n const zone = inject(NgZone);\n const destroyRef = inject(DestroyRef);\n\n const getSize = (): ElementSize => {\n const vv = (document.defaultView as Window | null)?.visualViewport;\n if (vv) return { width: vv.width, height: vv.height };\n const win = document.defaultView;\n return { width: win?.innerWidth ?? 0, height: win?.innerHeight ?? 0 };\n };\n\n const size = signal<ElementSize>(getSize());\n\n const onResize = () => zone.run(() => size.set(getSize()));\n\n const vv = (document.defaultView as Window | null)?.visualViewport;\n if (vv) {\n vv.addEventListener('resize', onResize);\n destroyRef.onDestroy(() => vv.removeEventListener('resize', onResize));\n } else {\n const win = document.defaultView;\n win?.addEventListener('resize', onResize);\n destroyRef.onDestroy(() => win?.removeEventListener('resize', onResize));\n }\n\n return size;\n};\n","import {\n EnvironmentInjector,\n Signal,\n WritableSignal,\n afterNextRender,\n effect,\n inject,\n isDevMode,\n isSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { map, pairwise } from 'rxjs';\n\nexport const previousSignalValue = <T>(signal: Signal<T>) => {\n const obs = toObservable(signal).pipe(\n pairwise(),\n map(([prev]) => prev),\n );\n\n return toSignal(obs);\n};\n\nexport type SyncSignalOptions = {\n /**\n * If true, the target signal will not be updated with the source signal's value in a sync operation.\n * This should be set to true for signals that need to be initialized first before syncing (eg. required inputs)\n * @default false\n */\n skipSyncRead?: boolean;\n\n /**\n * If true, the first time the effect will be triggered will be skipped.\n * @default false\n */\n skipFirstRun?: boolean;\n};\n\nexport const syncSignal = <T>(from: Signal<T>, to: WritableSignal<T>, options?: SyncSignalOptions) => {\n let isFirstRun = options?.skipSyncRead ? false : true;\n\n if (!options?.skipSyncRead) {\n try {\n // this might throw if the signal is not yet initialized (eg. a required signal input inside the constructor)\n // in that case we just skip the initial sync\n to.set(from());\n } catch {\n isFirstRun = false;\n\n if (isDevMode()) {\n console.warn('Failed to sync signals. The target signal is not yet initialized.', { from, to });\n }\n }\n }\n\n const ref = effect(() => {\n const formVal = from();\n\n if (options?.skipFirstRun && isFirstRun) {\n isFirstRun = false;\n\n return;\n }\n\n untracked(() => {\n to.set(formVal);\n });\n });\n\n return ref;\n};\n\nexport type MaybeSignal<T> = T | Signal<T>;\n\nexport const maybeSignalValue = <T>(value: MaybeSignal<T>) => {\n if (isSignal(value)) {\n return value();\n }\n\n return value;\n};\n\n/**\n * A computed that will only be reactive until the source signal contains a truthy value.\n * All subsequent changes inside the computation will be ignored.\n */\nexport const computedTillTruthy = <T>(source: Signal<T>) => {\n const value = signal<T | null>(null);\n\n const ref = effect(() => {\n const val = source();\n\n if (val) {\n value.set(val);\n ref.destroy();\n }\n });\n\n return value.asReadonly();\n};\n\n/**\n * A computed that will only be reactive until the source signal contains a falsy value.\n * All subsequent changes inside the computation will be ignored.\n */\nexport const computedTillFalsy = <T>(source: Signal<T>) => {\n const value = signal<T | null>(null);\n\n const ref = effect(() => {\n const val = source();\n\n if (!val) {\n value.set(val);\n ref.destroy();\n }\n });\n\n return value.asReadonly();\n};\n\n/**\n * A writeable signal that will be set to the provided value once all inputs are set.\n * During that time, the signal will be set to `null`.\n */\nexport const deferredSignal = <T extends () => unknown>(valueFn: T) => {\n const valueSignal = signal<ReturnType<T> | null>(null);\n\n afterNextRender(() => {\n valueSignal.set(valueFn() as ReturnType<T>);\n });\n\n return valueSignal;\n};\n\nexport const memoizeSignal = <T>(factory: () => Signal<T>) => {\n const cache = new WeakMap<EnvironmentInjector, Signal<T>>();\n\n return () => {\n const envInjector = inject(EnvironmentInjector);\n\n let cached = cache.get(envInjector);\n if (!cached) {\n cached = runInInjectionContext(envInjector, factory);\n cache.set(envInjector, cached);\n }\n\n return cached;\n };\n};\n","import { computed, DOCUMENT, inject } from '@angular/core';\nimport {\n Breakpoint,\n BREAKPOINT_ORDER,\n BuildMediaQueryOptions,\n injectBreakpointObserver,\n injectRenderer,\n} from '../providers';\nimport { createDocumentElementSignal } from './element';\nimport { signalElementDimensions } from './element-dimensions';\nimport { memoizeSignal } from './signal-data-utils';\n\n/** Inject a signal containing a boolean value indicating if the viewport is xs */\nexport const injectIsXs = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ max: 'xs' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is sm */\nexport const injectIsSm = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'sm', max: 'sm' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is md */\nexport const injectIsMd = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'md', max: 'md' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is lg */\nexport const injectIsLg = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'lg', max: 'lg' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is xl */\nexport const injectIsXl = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'xl', max: 'xl' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is 2xl */\nexport const injectIs2Xl = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: '2xl' }));\n\n/**\n * Inject a boolean value indicating if the viewport is matching the provided options.\n * This value is not reactive. If you want to react to changes, use the {@link injectObserveBreakpoint} function instead.\n */\nexport const injectBreakpointIsMatched = (options: BuildMediaQueryOptions) =>\n injectBreakpointObserver().isBreakpointMatched(options);\n\n/**\n * Inject a boolean value indicating if the media query is matched.\n * This value is not reactive. If you want to react to changes, use the {@link injectObserveMediaQuery} function instead.\n */\nexport const injectMediaQueryIsMatched = (mediaQuery: string) =>\n injectBreakpointObserver().isMediaQueryMatched(mediaQuery);\n\n/**\n * Inject a signal containing a boolean value indicating if the viewport is matching the provided options.\n */\nexport const injectObserveBreakpoint = (options: BuildMediaQueryOptions) =>\n injectBreakpointObserver().observeBreakpoint(options);\n\n/**\n * Inject a signal containing a boolean value indicating if the media query is matched.\n */\nexport const injectObserveMediaQuery = (mediaQuery: string) => injectBreakpointObserver().observeMediaQuery(mediaQuery);\n\n/** Inject a signal containing the current breakpoint. */\nexport const injectCurrentBreakpoint = /* @__PURE__ */ memoizeSignal(() => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const first = BREAKPOINT_ORDER[0]!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const last = BREAKPOINT_ORDER[BREAKPOINT_ORDER.length - 1]!;\n const highToLow = [...BREAKPOINT_ORDER].reverse() as Breakpoint[];\n const signals = highToLow.map((bp) =>\n injectObserveBreakpoint(bp === first ? { max: bp } : bp === last ? { min: bp } : { min: bp, max: bp }),\n );\n\n return computed(() => {\n for (let i = 0; i < highToLow.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (signals[i]!()) return highToLow[i]!;\n }\n return first;\n });\n});\n\n/** Inject a signal that indicates if the user is using a portrait display */\nexport const injectIsPortrait = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(orientation: portrait)'));\n\n/** Inject a signal that indicates if the user is using a landscape display */\nexport const injectIsLandscape = /* @__PURE__ */ memoizeSignal(() =>\n injectObserveMediaQuery('(orientation: landscape)'),\n);\n\n/** Inject a signal containing the current display orientation */\nexport const injectDisplayOrientation = /* @__PURE__ */ memoizeSignal(() => {\n const isPortrait = injectIsPortrait();\n\n return computed(() => {\n if (isPortrait()) return 'portrait';\n return 'landscape';\n });\n});\n\n/** Inject a signal that indicates if the device has a touch input */\nexport const injectHasTouchInput = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(pointer: coarse)'));\n\n/** Inject a signal that indicates if the device has a fine input (mouse or stylus) */\nexport const injectHasPrecisionInput = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(pointer: fine)'));\n\n/** Inject a signal containing the current device input type */\nexport const injectDeviceInputType = /* @__PURE__ */ memoizeSignal(() => {\n const isTouch = injectHasTouchInput();\n\n return computed(() => {\n if (isTouch()) return 'touch';\n return 'mouse';\n });\n});\n\n/** Inject a signal that indicates if the user prefers reduced motion */\nexport const injectPrefersReducedMotion = /* @__PURE__ */ memoizeSignal(() =>\n injectObserveMediaQuery('(prefers-reduced-motion: reduce)'),\n);\n\n/** Inject a signal containing a boolean value indicating if the user can hover (eg. using a mouse) */\nexport const injectCanHover = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(hover: hover)'));\n\n/** Inject a signal containing the viewport dimensions */\nexport const injectViewportDimensions = /* @__PURE__ */ memoizeSignal(() =>\n signalElementDimensions(createDocumentElementSignal()),\n);\n\n/** Inject a signal containing the scrollbar dimensions. Dimensions will be 0 if scrollbars overlap the page contents (like on mobile). */\nexport const injectScrollbarDimensions = /* @__PURE__ */ memoizeSignal(() => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n\n const scrollbarRuler = renderer.createElement('div');\n scrollbarRuler.style.width = '100px';\n scrollbarRuler.style.height = '100px';\n scrollbarRuler.style.overflow = 'scroll';\n scrollbarRuler.style.position = 'absolute';\n scrollbarRuler.style.top = '-9999px';\n scrollbarRuler.style.scrollbarWidth = getComputedStyle(document.documentElement).scrollbarWidth;\n renderer.appendChild(document.body, scrollbarRuler);\n\n const scrollContainerDimensions = signalElementDimensions(scrollbarRuler);\n\n return computed(() => {\n const client = scrollContainerDimensions().client;\n if (!client) return null;\n return {\n width: Math.max(0, 100 - client.width),\n height: Math.max(0, 100 - client.height),\n };\n });\n});\n","import { afterNextRender, DestroyRef, effect, ElementRef, inject, isSignal, Signal, untracked } from '@angular/core';\nimport { injectRenderer } from '../providers/renderer';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { injectPrefersReducedMotion } from './media-queries';\n\nexport type AnimatedSizeAxis = 'block' | 'inline';\n\nexport type AnimatedBlockSizeConfig = {\n /** The element whose size is animated. Defaults to the host `ElementRef`. */\n host?: SignalElementBindingType;\n /**\n * The content element(s) whose size changes drive the animation. Observe the content (children),\n * **not** the animated host - observing the host would feed the animation back into itself.\n * For the `inline` axis this also means the observed content must be content-sized (e.g.\n * `inline-size: max-content`); a plain block child just mirrors the host's animated width back.\n */\n observe: SignalElementBindingType | SignalElementBindingType[];\n /**\n * The axes to animate. May be a signal - e.g. to drop the `inline` axis while a panel is in a\n * presentation whose width follows the viewport instead of its content. @default ['block']\n */\n axes?: AnimatedSizeAxis[] | Signal<AnimatedSizeAxis[]>;\n /** Animation duration in ms. @default 160 */\n duration?: number;\n /** Animation easing. @default 'ease' */\n easing?: string;\n /** Class toggled on the host while animating - use it to `overflow: clip` during the resize. */\n resizingClass?: string;\n};\n\n/**\n * Smoothly animates an element's `block-size` (and optionally `inline-size`, via `axes`) when its\n * content changes size (e.g. a list filtering, a loading state resolving, a column being added).\n * Set up once in an injection context; it observes the given content element(s) and animates the\n * host from its previous size to its new natural size.\n *\n * Robustness notes: the baseline size is captured on the first render (via `afterNextRender`) and\n * only later changes animate, so the initial layout settling never plays as a grow-from-0.\n * A change that interrupts an in-flight animation continues from the current animated size, and\n * zero/pre-layout measurements are ignored. Respects `prefers-reduced-motion`.\n *\n * The animation starts synchronously inside the `ResizeObserver` callback - it runs after layout\n * but **before paint**, so the host never paints a frame at its new natural size. Routing the\n * resize through a signal + effect instead would apply the animation one change-detection cycle\n * (= one painted frame) late: a growing panel would flash at its final size, snap back, and only\n * then animate.\n */\nexport const injectAnimatedBlockSize = (config: AnimatedBlockSizeConfig) => {\n const hostBinding = config.host ?? inject<ElementRef<HTMLElement>>(ElementRef);\n const renderer = injectRenderer();\n const prefersReducedMotion = injectPrefersReducedMotion();\n const destroyRef = inject(DestroyRef);\n\n const hostSignal = firstElementSignal(buildElementSignal(hostBinding));\n const observeTargets = Array.isArray(config.observe) ? config.observe : [config.observe];\n const observedElements = observeTargets.map((target) => firstElementSignal(buildElementSignal(target)));\n\n const duration = config.duration ?? 160;\n const easing = config.easing ?? 'ease';\n const axes = () => (isSignal(config.axes) ? untracked(config.axes) : (config.axes ?? ['block']));\n\n let lastBlockSize: number | null = null;\n let lastInlineSize: number | null = null;\n let animation: Animation | null = null;\n let ready = false;\n\n const hostElement = () => hostSignal().currentElement;\n\n const run = () => {\n const host = hostElement();\n\n if (!host) return;\n\n // continue from the current animated size when interrupting a running animation\n const currentRect = animation?.playState === 'running' ? host.getBoundingClientRect() : null;\n const fromBlock = currentRect ? currentRect.height : lastBlockSize;\n const fromInline = currentRect ? currentRect.width : lastInlineSize;\n\n animation?.cancel();\n animation = null;\n\n const targetRect = host.getBoundingClientRect();\n const toBlock = targetRect.height;\n const toInline = targetRect.width;\n\n // never record or animate a zero / pre-layout size\n if (toBlock === 0 || toInline === 0) return;\n\n lastBlockSize = toBlock;\n lastInlineSize = toInline;\n\n if (prefersReducedMotion()) {\n return;\n }\n\n const activeAxes = axes();\n const animatesAxis = (from: number | null, to: number) => from !== null && from >= 1 && Math.abs(from - to) >= 1;\n const animateBlock = activeAxes.includes('block') && animatesAxis(fromBlock, toBlock);\n const animateInline = activeAxes.includes('inline') && animatesAxis(fromInline, toInline);\n\n if (!animateBlock && !animateInline) {\n return;\n }\n\n if (config.resizingClass && renderer) {\n renderer.addClass(host, config.resizingClass);\n }\n\n const fromFrame: Keyframe = {};\n const toFrame: Keyframe = {};\n\n if (animateBlock) {\n fromFrame['blockSize'] = `${fromBlock}px`;\n toFrame['blockSize'] = `${toBlock}px`;\n }\n\n if (animateInline) {\n fromFrame['inlineSize'] = `${fromInline}px`;\n toFrame['inlineSize'] = `${toInline}px`;\n }\n\n const nextAnimation = host.animate([fromFrame, toFrame], { duration, easing });\n\n const cleanup = () => {\n // Cancelling an animation to start the next one rejects its `finished` promise, firing this\n // cleanup after a newer animation has already taken over. That newer animation owns the\n // resizing class, so only strip it when no other animation is mid-flight - otherwise an\n // interrupted resize (rapid content changes, e.g. async search typing) would un-clip the\n // scroller while it is still animating and flash a scrollbar.\n if (animation !== null && animation !== nextAnimation) {\n return;\n }\n\n if (config.resizingClass && renderer) {\n renderer.removeClass(host, config.resizingClass);\n }\n\n if (animation === nextAnimation) {\n animation = null;\n }\n };\n\n nextAnimation.finished.then(cleanup).catch(cleanup);\n animation = nextAnimation;\n };\n\n // no zone/signal indirection - see the pre-paint timing note in the doc comment above\n const observer = new ResizeObserver(() => {\n if (!ready) return;\n\n run();\n });\n\n effect(() => {\n const elements = observedElements.map((element) => element().currentElement);\n\n untracked(() => {\n observer.disconnect();\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n });\n });\n\n // Capture the settled size of the first render as the baseline, then only animate later changes.\n afterNextRender(() => {\n const host = hostElement();\n const rect = host ? host.getBoundingClientRect() : null;\n\n lastBlockSize = rect ? rect.height || null : null;\n lastInlineSize = rect ? rect.width || null : null;\n ready = true;\n });\n\n destroyRef.onDestroy(() => {\n observer.disconnect();\n animation?.cancel();\n });\n};\n","import { inject, isSignal, NgZone, signal, Signal, untracked } from '@angular/core';\nimport { MaybeSignal } from './signal-data-utils';\n\nexport type SignalAnimatedNumberOptions = {\n /**\n * The initial value to start animating from.\n * If not provided, the animation will start from 0\n */\n initialValue?: number;\n\n /**\n * Duration of the animation in milliseconds.\n * @default 1000\n */\n duration?: number;\n\n /**\n * Easing function that takes a progress value (0 to 1) and returns an eased value (0 to 1).\n * Options:\n * - `easeLinear()`\n * - `easeIn()`\n * - `easeOut()`\n * - `easeInOut()`\n * - `easeElastic()`\n * - `easeOutBack()`\n * - `easeOutBackStrong()`\n * @default easeOut()\n */\n easing?: (t: number) => number;\n\n /**\n * Function to round the animated value.\n * @default (v: number) => Math.round(v)\n */\n round?: (value: number) => number;\n\n /**\n * Callback invoked when the animation starts.\n */\n onAnimationStart?: () => void;\n\n /**\n * Callback invoked when the animation ends.\n */\n onAnimationEnd?: () => void;\n};\n\nexport type AnimatedNumberSignal = Signal<number> & {\n /**\n * Starts the animation from the current value to the target value.\n * @returns The animated signal for chaining\n */\n play: () => AnimatedNumberSignal;\n\n /**\n * Resets the animation to the initial value and stops any ongoing animation.\n * @returns The animated signal for chaining\n */\n reset: () => AnimatedNumberSignal;\n\n /**\n * Stops the current animation at its current position.\n * @returns The animated signal for chaining\n */\n stop: () => AnimatedNumberSignal;\n};\n\n/**\n * Creates a signal that animates the transition of a numeric signal's value over time.\n */\nexport const signalAnimatedNumber = (\n source: MaybeSignal<number>,\n options: SignalAnimatedNumberOptions = {},\n): AnimatedNumberSignal => {\n const ngZone = inject(NgZone);\n const duration = options.duration ?? 1000;\n const easing = options.easing ?? easeOut;\n const round = options.round ?? ((v: number) => Math.round(v));\n\n const initialValue = options.initialValue ?? 0;\n const animatedValue = signal(initialValue);\n\n let rafId: number | null = null;\n let currentAnimatedValue = initialValue;\n\n const cancelAnimation = () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n };\n\n const readonlySignal = animatedValue.asReadonly() as AnimatedNumberSignal;\n\n const play = () => {\n const targetValue = isSignal(source) ? source() : source;\n\n cancelAnimation();\n\n const startValue = currentAnimatedValue;\n const startTime = performance.now();\n const delta = targetValue - startValue;\n\n // Skip animation if no change\n if (delta === 0) {\n options.onAnimationEnd?.();\n\n return readonlySignal;\n }\n\n options.onAnimationStart?.();\n\n ngZone.runOutsideAngular(() => {\n const animate = (timestamp: number) => {\n const elapsed = timestamp - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n\n const value = startValue + delta * easedProgress;\n currentAnimatedValue = value;\n\n untracked(() => {\n animatedValue.set(round(value));\n });\n\n if (progress < 1) {\n rafId = requestAnimationFrame(animate);\n } else {\n rafId = null;\n\n ngZone.run(() => {\n options.onAnimationEnd?.();\n });\n }\n };\n\n rafId = requestAnimationFrame(animate);\n });\n\n return readonlySignal;\n };\n\n const reset = () => {\n cancelAnimation();\n currentAnimatedValue = initialValue;\n animatedValue.set(initialValue);\n return readonlySignal;\n };\n\n const stop = () => {\n cancelAnimation();\n return readonlySignal;\n };\n\n readonlySignal.play = play;\n readonlySignal.reset = reset;\n readonlySignal.stop = stop;\n\n return readonlySignal;\n};\n\n/* Linear easing function */\nexport const easeLinear = (t: number) => t;\n\n/* Ease in (slow start) */\nexport const easeIn = (t: number) => t * t;\n\n/* Ease out (slow end) */\nexport const easeOut = (t: number) => t * (2 - t);\n\n/* Ease in-out (slow start and end) */\nexport const easeInOut = (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t);\n\n/** Elastic easing function (overshoots) */\nexport const easeElastic = (t: number) => {\n const c4 = (2 * Math.PI) / 3;\n return t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\n};\n\n/** Back easing function (overshoots slightly then settles) */\nexport const easeOutBack = (t: number) => {\n const c1 = 1.70158;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n};\n\n/** Back easing function with more overshoot */\nexport const easeOutBackStrong = (t: number) => {\n const c1 = 2.5;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n};\n","import { DOCUMENT, Signal, inject, signal } from '@angular/core';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\n\nexport type Vec2 = [number, number];\n\nexport type ViewportConfig = {\n breakpoints: {\n xs: Vec2;\n sm: Vec2;\n md: Vec2;\n lg: Vec2;\n xl: Vec2;\n '2xl': Vec2;\n };\n};\n\nexport type Breakpoint = keyof ViewportConfig['breakpoints'];\n\nexport const BREAKPOINT_ORDER: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];\n\n/**\n * Default viewport config based on Tailwind CSS.\n * @see https://tailwindcss.com/docs/screens\n */\nexport const DEFAULT_VIEWPORT_CONFIG: ViewportConfig = {\n breakpoints: {\n xs: [0, 639],\n sm: [640, 767],\n md: [768, 1023],\n lg: [1024, 1279],\n xl: [1280, 1535],\n '2xl': [1536, Infinity],\n },\n};\n\nconst VIEWPORT_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<ViewportConfig>(DEFAULT_VIEWPORT_CONFIG, {\n name: 'Viewport Config',\n});\n\nexport const provideViewportConfig = /* @__PURE__ */ toProvideFn(VIEWPORT_CONFIG_DEF);\nexport const injectViewportConfig = /* @__PURE__ */ toInjectFn(VIEWPORT_CONFIG_DEF);\n\nexport type BuildMediaQueryOptions = {\n min?: number | Breakpoint;\n max?: number | Breakpoint;\n};\n\nconst BREAKPOINT_OBSERVER_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const viewportConfig = injectViewportConfig();\n const defaultView = inject(DOCUMENT).defaultView;\n const matchMedia = defaultView?.matchMedia?.bind(defaultView) ?? null;\n const queryLists = new Map<string, MediaQueryList>();\n const querySignals = new Map<string, Signal<boolean>>();\n\n const getQueryList = (mediaQuery: string) => {\n if (!matchMedia) return null;\n\n let queryList = queryLists.get(mediaQuery);\n\n if (!queryList) {\n queryList = matchMedia(mediaQuery);\n queryLists.set(mediaQuery, queryList);\n }\n\n return queryList;\n };\n\n const isMediaQueryMatched = (mediaQuery: string) => getQueryList(mediaQuery)?.matches ?? false;\n\n const observeMediaQuery = (mediaQuery: string): Signal<boolean> => {\n const existing = querySignals.get(mediaQuery);\n\n if (existing) return existing;\n\n const queryList = getQueryList(mediaQuery);\n const matches = signal(queryList?.matches ?? false);\n\n // the root provider outlives every consumer, so the listener is intentionally never removed -\n // the same query list is shared by all of them\n queryList?.addEventListener('change', (event) => matches.set(event.matches));\n\n const result = matches.asReadonly();\n querySignals.set(mediaQuery, result);\n\n return result;\n };\n\n const observeBreakpoint = (options: BuildMediaQueryOptions) => observeMediaQuery(buildMediaQueryString(options));\n\n const isBreakpointMatched = (options: BuildMediaQueryOptions) =>\n isMediaQueryMatched(buildMediaQueryString(options));\n\n const getBreakpointSize = (type: Breakpoint, option: 'min' | 'max') => {\n const index = option === 'min' ? 0 : 1;\n const size = viewportConfig.breakpoints[type][index];\n\n if (size === Infinity || size === 0) {\n return size;\n }\n\n if (option === 'min') {\n return size;\n }\n\n // Due to scaling, the actual size of the viewport may be a decimal number.\n // Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px\n // and thus not matching any of the default breakpoints.\n return size + 0.9;\n };\n\n const buildMediaQueryString = (options: BuildMediaQueryOptions) => {\n if (!options.min && !options.max) {\n throw new Error('At least one of min or max must be defined');\n }\n\n const mediaQueryParts: string[] = [];\n\n if (options.min) {\n if (typeof options.min === 'number') {\n mediaQueryParts.push(`(min-width: ${options.min}px)`);\n } else {\n mediaQueryParts.push(`(min-width: ${getBreakpointSize(options.min, 'min')}px)`);\n }\n }\n\n if (options.min && options.max) {\n mediaQueryParts.push('and');\n }\n\n if (options.max) {\n if (typeof options.max === 'number') {\n mediaQueryParts.push(`(max-width: ${options.max}px)`);\n } else {\n mediaQueryParts.push(`(max-width: ${getBreakpointSize(options.max, 'max')}px)`);\n }\n }\n\n return mediaQueryParts.join(' ');\n };\n\n return {\n observeBreakpoint,\n isBreakpointMatched,\n getBreakpointSize,\n buildMediaQueryString,\n observeMediaQuery,\n isMediaQueryMatched,\n };\n },\n { name: 'Breakpoint Observer' },\n);\n\nexport const provideBreakpointObserver = /* @__PURE__ */ toProvideFn(BREAKPOINT_OBSERVER_DEF);\nexport const injectBreakpointObserver = /* @__PURE__ */ toInjectFn(BREAKPOINT_OBSERVER_DEF);\n","import {\n InjectionToken,\n Injector,\n InputSignalWithTransform,\n Signal,\n booleanAttribute,\n computed,\n effect,\n inject,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { SIGNAL } from '@angular/core/primitives/signals';\nimport { BREAKPOINT_ORDER, Breakpoint } from '../providers/breakpoint-observer';\nimport { setInputSignal } from '../utils';\nimport { injectCurrentBreakpoint } from './media-queries';\n\nexport type BreakpointMap<T> = Partial<Record<Breakpoint, T>>;\nexport type BreakpointInput<T> = T | BreakpointMap<T>;\n\nconst BREAKPOINT_KEY_SET = /* @__PURE__ */ new Set<string>(BREAKPOINT_ORDER);\n\nconst isBreakpointMap = (value: unknown): value is BreakpointMap<unknown> => {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return false;\n const keys = Object.keys(value);\n\n if (keys.length === 0) return false;\n\n const invalidKeys = keys.filter((key) => !BREAKPOINT_KEY_SET.has(key));\n\n if (!invalidKeys.length) return true;\n\n // One bad key makes the whole map inert - it stops being a breakpoint map and becomes a plain value, which\n // for an attribute binding means `[object Object]` and no effect at all. Silent, and expensive to find.\n if (ngDevMode && invalidKeys.length < keys.length) {\n console.warn(\n `[ethlete] A breakpoint map used the unknown key(s) ${invalidKeys.map((key) => `\"${key}\"`).join(', ')}, so ` +\n `the whole map was ignored. Valid keys are ${BREAKPOINT_ORDER.join(', ')} - there is no \"default\"; the ` +\n 'smallest breakpoint is the fallback.',\n );\n }\n\n return false;\n};\n\nconst resolveFromMap = <T>(map: BreakpointMap<T>, bp: Breakpoint, defaultValue: T): T => {\n const idx = BREAKPOINT_ORDER.indexOf(bp);\n for (let i = idx; i >= 0; i--) {\n const v = map[BREAKPOINT_ORDER[i] as Breakpoint];\n if (v !== undefined) return v;\n }\n return defaultValue;\n};\n\nexport const breakpointTransformBase = <T, WriteT = BreakpointInput<T>>(\n coerce: (value: WriteT) => T,\n): ((value: WriteT) => T) => {\n const currentBp = injectCurrentBreakpoint();\n const injector = inject(Injector);\n const raw = signal<BreakpointInput<T> | undefined>(undefined);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n let capturedDefault: T = undefined!;\n let initialized = false;\n\n let cachedSig: InputSignalWithTransform<T, any> | null = null;\n\n const transformFn = (value: WriteT): T => {\n const coerced: BreakpointInput<T> = isBreakpointMap(value) ? (value as unknown as BreakpointMap<T>) : coerce(value);\n if (!initialized) {\n capturedDefault = coerced as T;\n initialized = true;\n }\n raw.set(coerced);\n return isBreakpointMap(coerced)\n ? resolveFromMap(coerced as BreakpointMap<T>, currentBp(), capturedDefault)\n : (coerced as T);\n };\n\n effect(() => {\n const bp = currentBp();\n const r = raw();\n\n if (!cachedSig) {\n const instance = injector.get(BREAKPOINT_INSTANCE_TOKEN) as any;\n for (const key of Object.keys(instance)) {\n const val = instance[key];\n\n if (val && typeof val === 'function' && (val as any)[SIGNAL]?.transformFn === transformFn) {\n cachedSig = val as InputSignalWithTransform<T, any>;\n break;\n }\n }\n }\n\n if (!cachedSig || r === undefined || !isBreakpointMap(r)) return;\n const resolved = resolveFromMap(r as BreakpointMap<T>, bp, capturedDefault);\n\n untracked(() => setInputSignal(cachedSig as InputSignalWithTransform<T, any>, resolved));\n });\n\n return transformFn;\n};\n\n/**\n * Transform factory for boolean inputs.\n * Coerces plain values with `booleanAttribute`; resolves {@link BreakpointMap} mobile-first.\n *\n * @example\n * snap = input(false, { transform: boolBreakpointTransform() });\n * // Template: `snap` | `[snap]=\"true\"` | `[snap]=\"{ xs: false, md: true }\"`\n */\nexport const boolBreakpointTransform = (): ((value: BreakpointInput<boolean> | string) => boolean) =>\n breakpointTransformBase<boolean, BreakpointInput<boolean> | string>(booleanAttribute);\n\n/**\n * Transform factory for number inputs.\n * Coerces plain values with `numberAttribute`; resolves {@link BreakpointMap} mobile-first.\n *\n * @example\n * scrollMargin = input(0, { transform: numberBreakpointTransform() });\n * // Template: `[scrollMargin]=\"16\"` | `[scrollMargin]=\"{ xs: 0, md: 16 }\"`\n */\nexport const numberBreakpointTransform = (): ((value: BreakpointInput<number> | string) => number) =>\n breakpointTransformBase<number, BreakpointInput<number> | string>((v) => numberAttribute(v));\n\n/**\n * Transform factory for any typed input (string unions, arrays, objects, etc.).\n * Passes plain values through as-is; resolves {@link BreakpointMap} mobile-first.\n * A value is treated as a {@link BreakpointMap} only when all its keys are valid breakpoint names.\n *\n * @example\n * itemSize = input('auto', { transform: typedBreakpointTransform<ScrollableItemSize>() });\n * tags = input([], { transform: typedBreakpointTransform<string[]>() });\n * // Template: `[itemSize]=\"'third'\"` | `[itemSize]=\"{ xs: 'full', md: 'third' }\"`\n */\nexport const typedBreakpointTransform = <T>(): ((value: BreakpointInput<T>) => T) =>\n breakpointTransformBase((v) => v as T);\n\nexport type BoolBreakpointSignal = InputSignalWithTransform<boolean, BreakpointInput<boolean> | string>;\nexport type NumberBreakpointSignal = InputSignalWithTransform<number, BreakpointInput<number> | string>;\nexport type TypedBreakpointSignal<T> = InputSignalWithTransform<T, BreakpointInput<T>>;\n\nexport const injectBreakpointInput = <T>(inputSignal: Signal<BreakpointInput<T>>, defaultValue: T): Signal<T> => {\n const currentBreakpoint = injectCurrentBreakpoint();\n\n return computed(() => {\n const value = inputSignal();\n if (!isBreakpointMap(value)) return value as T;\n return resolveFromMap(value, currentBreakpoint(), defaultValue);\n });\n};\n\nexport const booleanBreakpointAttribute = (value: unknown): BreakpointInput<boolean> => {\n if (isBreakpointMap(value)) return value as BreakpointMap<boolean>;\n return booleanAttribute(value);\n};\n\nexport const numberBreakpointAttribute = (value: unknown): BreakpointInput<number> => {\n if (isBreakpointMap(value)) return value as BreakpointMap<number>;\n return numberAttribute(value);\n};\n\nexport const BREAKPOINT_INSTANCE_TOKEN = new InjectionToken<unknown>('BREAKPOINT_INSTANCE_TOKEN');\n\nexport const provideBreakpointInstance = (componentClass: unknown) => ({\n provide: BREAKPOINT_INSTANCE_TOKEN,\n useExisting: componentClass,\n});\n","import { Signal, isSignal, linkedSignal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl } from '@angular/forms';\nimport { Observable, debounceTime, distinctUntilChanged, map, merge, of, startWith, switchMap } from 'rxjs';\nimport { equal } from '../utils';\n\nexport type ControlValueSignalOptions = {\n debounceTime?: number;\n\n /**\n * @default false\n */\n debounceFirst?: boolean;\n};\n\nexport const controlValueSignal = <\n TControlInput extends Signal<AbstractControl | null> | AbstractControl,\n TControl extends (TControlInput extends Signal<infer TSignalControl> ? TSignalControl : TControlInput),\n>(\n control: TControlInput,\n options?: ControlValueSignalOptions,\n) => {\n type TValue = ReturnType<NonNullable<TControl>['getRawValue']>;\n\n const getRawValueSafe = (ctrl: Signal<AbstractControl | null> | AbstractControl | null): TValue | null => {\n try {\n return isSignal(ctrl) ? (ctrl()?.getRawValue() ?? null) : (ctrl?.getRawValue() ?? null);\n } catch {\n // Ignore errors. This can happen if the passed control is a required input and is not yet initialized.\n return null;\n }\n };\n\n const initialValue = getRawValueSafe(control);\n\n const controlStream = isSignal(control)\n ? toObservable<AbstractControl | null>(control)\n : of<AbstractControl | null>(control);\n\n const controlObs = controlStream.pipe(\n switchMap((ctrl) => {\n if (!ctrl) return of(null);\n\n const vcsObs = options?.debounceTime\n ? ctrl.valueChanges.pipe(debounceTime(options.debounceTime))\n : ctrl.valueChanges;\n\n return vcsObs.pipe(\n startWith(ctrl.getRawValue()),\n map(() => ctrl.getRawValue()),\n );\n }),\n );\n\n const obs: Observable<TValue | null> = !options?.debounceFirst ? merge(of(initialValue), controlObs) : controlObs;\n\n return toSignal(obs.pipe(distinctUntilChanged((a, b) => equal(a, b))), {\n initialValue,\n });\n};\n\n/**\n * The first item in the pair is the previous value and the second item is the current value.\n */\nexport const controlValueSignalWithPrevious = <T extends AbstractControl>(\n control: T,\n options?: ControlValueSignalOptions,\n) => {\n type TValue = ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>['getRawValue']>;\n\n const data = linkedSignal<TValue | null, [TValue | null, TValue | null]>({\n source: controlValueSignal(control, options),\n computation: (curr, prev) => [prev?.source ?? null, curr],\n });\n\n return data.asReadonly();\n};\n","import { DestroyRef, effect, ElementRef, inject, NgZone, signal } from '@angular/core';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport const signalElementMutations = (el: SignalElementBindingType, options?: MutationObserverInit) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const elementMutationsSignal = signal<MutationRecord | null>(null);\n\n const observer = new MutationObserver((e) => {\n if (!isRendered()) return;\n\n const entry = e[0];\n\n if (entry) {\n zone.run(() => elementMutationsSignal.set(entry));\n }\n });\n\n effect(() => {\n const els = firstEl();\n\n elementMutationsSignal.set(null);\n\n if (els.previousElement) {\n observer.disconnect();\n }\n\n if (els.currentElement) {\n observer.observe(els.currentElement, options);\n }\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return elementMutationsSignal.asReadonly();\n};\n\nexport const signalHostElementMutations = (options?: MutationObserverInit) =>\n signalElementMutations(inject<ElementRef<HTMLElement>>(ElementRef), options);\n","import { computed } from '@angular/core';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from './element';\nimport { signalElementMutations } from './element-mutations';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementChildrenOptions = {\n /**\n * What the underlying `MutationObserver` watches for. The default is deliberately broad, because any DOM\n * change *might* change which children an element has.\n *\n * Narrow it wherever the consumer knows better. `attributes: true` in particular makes every inline style\n * or class write anywhere in the subtree re-run this - which for a scroll container whose descendants are\n * written to per animation frame is a change detection tick per frame for nothing. Pass an\n * `attributeFilter` (or drop `attributes`) in that case.\n */\n mutations?: MutationObserverInit;\n};\n\nconst DEFAULT_CHILDREN_MUTATIONS: MutationObserverInit = { childList: true, subtree: true, attributes: true };\n\nexport const signalElementChildren = (el: SignalElementBindingType, options?: SignalElementChildrenOptions) => {\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const isRendered = signalIsRendered();\n const elementMutations = signalElementMutations(elements, options?.mutations ?? DEFAULT_CHILDREN_MUTATIONS);\n\n return computed(\n () => {\n if (!isRendered()) return [];\n\n const els = firstEl();\n\n // We are not interested what the mutation is, just that there is one.\n // Changes to the DOM may affect the children of the element.\n elementMutations();\n\n if (!els.currentElement) return [];\n\n const children: HTMLElement[] = [];\n\n for (let index = 0; index < els.currentElement.children.length; index++) {\n const element = els.currentElement.children[index];\n\n if (element instanceof HTMLElement) {\n children.push(element);\n }\n }\n\n return children;\n },\n { equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) },\n );\n};\n","import {\n effect,\n EffectRef,\n ElementRef,\n inject,\n Injector,\n RendererStyleFlags2,\n runInInjectionContext,\n Signal,\n untracked,\n} from '@angular/core';\nimport { injectRenderer } from '../providers';\nimport { buildElementSignal, SignalElementBindingType } from './element';\n\nexport type BuildSignalEffectsConfig<T extends Record<string, Signal<unknown>>> = {\n /** The tokens to apply and their signal value */\n tokenMap: T;\n\n /** This function will be invoked for elements that were removed from the signal effects */\n cleanupFn: (el: HTMLElement, tokens: string[]) => void;\n\n /** This function will be invoked for elements that were added to the signal effects or when their signal value changes */\n updateFn: (el: HTMLElement, tokens: string[], conditionResult: unknown) => void;\n};\n\nexport const buildSignalEffects = <T extends Record<string, Signal<unknown>>>(\n el: SignalElementBindingType,\n config: BuildSignalEffectsConfig<T>,\n) => {\n const elements = buildElementSignal(el);\n const injector = inject(Injector);\n\n effect(() => {\n const { currentElements, previousElements } = elements();\n\n for (const previousEl of previousElements) {\n if (currentElements.includes(previousEl)) continue;\n\n const tokens = Object.keys(config.tokenMap)\n .map((key) => key.split(' '))\n .flat();\n\n if (!tokens.length) continue;\n\n config.cleanupFn(previousEl, tokens);\n }\n\n for (const currentEl of currentElements) {\n if (previousElements.includes(currentEl)) continue;\n\n for (const [tokens, condition] of Object.entries(config.tokenMap)) {\n untracked(() => {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length) return;\n\n config.updateFn(currentEl, tokenArray, condition());\n });\n }\n }\n });\n\n const effects: Record<string, EffectRef> = {};\n\n const has = (tokens: string) => tokens in effects;\n\n const push = (tokens: string, signal: Signal<unknown>) => {\n if (has(tokens)) return;\n\n runInInjectionContext(injector, () => {\n effects[tokens] = effect(() => {\n const { currentElements } = untracked(() => elements());\n const value = signal();\n\n for (const el of currentElements) {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length) continue;\n\n config.updateFn(el, tokenArray, value);\n }\n });\n });\n };\n\n const pushMany = (map: Record<string, Signal<unknown>>) => {\n for (const [tokens, signal] of Object.entries(map)) {\n push(tokens, signal);\n }\n };\n\n const remove = (tokens: string) => {\n effects[tokens]?.destroy();\n\n delete effects[tokens];\n\n for (const el of elements().currentElements) {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length) continue;\n\n config.cleanupFn(el, tokenArray);\n }\n };\n\n const removeMany = (tokens: string[]) => {\n for (const token of tokens) {\n remove(token);\n }\n };\n\n pushMany(config.tokenMap);\n\n return { remove, removeMany, has, push, pushMany };\n};\n\nexport const signalClasses = <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, classMap: T) => {\n const renderer = injectRenderer();\n\n return buildSignalEffects(el, {\n tokenMap: classMap,\n cleanupFn: (el, tokens) => tokens.forEach((token) => renderer.removeClass(el, token)),\n updateFn: (el, tokens, condition) => {\n if (!condition) {\n tokens.forEach((token) => renderer.removeClass(el, token));\n } else {\n tokens.forEach((token) => renderer.addClass(el, token));\n }\n },\n });\n};\n\nexport const signalHostClasses = <T extends Record<string, Signal<unknown>>>(classMap: T) =>\n signalClasses(inject<ElementRef<HTMLElement>>(ElementRef), classMap);\n\nconst ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected', 'hidden', 'inert'];\n\nexport const signalAttributes = <T extends Record<string, Signal<unknown>>>(\n el: SignalElementBindingType,\n attributeMap: T,\n) => {\n const renderer = injectRenderer();\n\n return buildSignalEffects(el, {\n tokenMap: attributeMap,\n cleanupFn: (el, tokens) => tokens.forEach((token) => el.removeAttribute(token)),\n updateFn: (el, tokens, condition) => {\n for (const token of tokens) {\n if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(token)) {\n if (condition) {\n renderer.setAttribute(el, token, '');\n } else {\n renderer.removeAttribute(el, token);\n }\n continue;\n }\n\n if (condition === null || condition === undefined) {\n renderer.removeAttribute(el, token);\n } else {\n renderer.setAttribute(el, token, `${condition}`);\n }\n }\n },\n });\n};\n\nexport const signalHostAttributes = <T extends Record<string, Signal<unknown>>>(attributeMap: T) =>\n signalAttributes(inject<ElementRef<HTMLElement>>(ElementRef), attributeMap);\n\nexport const signalStyles = <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, styleMap: T) => {\n const renderer = injectRenderer();\n\n return buildSignalEffects(el, {\n tokenMap: styleMap,\n cleanupFn: (el, tokens) =>\n tokens.forEach((token) =>\n renderer.removeStyle(el, token as keyof CSSStyleDeclaration, RendererStyleFlags2.DashCase),\n ),\n updateFn: (el, tokens, condition) => {\n for (const token of tokens) {\n if (condition === null || condition === undefined) {\n renderer.removeStyle(el, token as keyof CSSStyleDeclaration, RendererStyleFlags2.DashCase);\n } else {\n renderer.setStyle(\n el,\n {\n [token]: `${condition}`,\n },\n RendererStyleFlags2.DashCase,\n );\n }\n }\n },\n });\n};\n\nexport const signalHostStyles = <T extends Record<string, Signal<unknown>>>(styleMap: T) =>\n signalStyles(inject<ElementRef<HTMLElement>>(ElementRef), styleMap);\n","import { clamp } from '../utils';\n\nexport const elementCanScroll = (element?: HTMLElement | null, direction?: 'x' | 'y') => {\n // Omitting the element means \"the document scroller\". Resolved lazily and guarded so a call on the\n // server answers \"cannot scroll\" instead of throwing on a missing `document`.\n const el = element || (typeof document === 'undefined' ? null : document.documentElement);\n\n if (!el) {\n return false;\n }\n\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = el;\n\n if (direction === 'x') {\n return scrollWidth > clientWidth;\n } else if (direction === 'y') {\n return scrollHeight > clientHeight;\n }\n\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n};\n\nconst createViewportRect = (): DOMRect => {\n // Collapses to a zero rect where there is no window (server). `isElementVisible` never reaches the\n // intersection math there anyway - `elementCanScroll` already reports the document as unscrollable\n // - so the rect only has to be a valid shape.\n const hasWindow = typeof window !== 'undefined';\n const width = hasWindow ? window.innerWidth : 0;\n const height = hasWindow ? window.innerHeight : 0;\n\n return {\n left: 0,\n top: 0,\n right: width,\n bottom: height,\n width,\n height,\n x: 0,\n y: 0,\n toJSON: () => ({}),\n } as DOMRect;\n};\n\nexport type IsElementVisibleOptions = {\n /**\n * The element to check if it is visible inside a container.\n */\n element?: HTMLElement | null;\n\n /**\n * The container to check if the element is visible inside.\n * If null or undefined, uses the viewport as the container.\n * @default null (viewport)\n */\n container?: HTMLElement | null;\n\n /**\n * The container's rect to check if the element is visible inside. Can be supplied to reduce the amount of DOM reads.\n * Only used when container is provided and not null.\n * @default container.getBoundingClientRect()\n */\n containerRect?: DOMRect | null;\n\n /**\n * The element's rect. Can be supplied to reduce the amount of DOM reads.\n * @default element.getBoundingClientRect()\n */\n elementRect?: DOMRect | null;\n};\n\nexport type CurrentElementVisibility = {\n /**\n * Whether the element is visible in the inline direction.\n */\n inline: boolean;\n\n /**\n * Whether the element is visible in the block direction.\n */\n block: boolean;\n\n /**\n * The percentage of the element that is visible in the inline direction.\n */\n inlineIntersection: number;\n\n /**\n * The percentage of the element that is visible in the block direction.\n */\n blockIntersection: number;\n\n /**\n * Whether the element is intersecting the container.\n */\n isIntersecting: boolean;\n\n /**\n * The ratio of the element that is intersecting the container.\n */\n intersectionRatio: number;\n\n /**\n * The element that is being checked for visibility.\n */\n element: HTMLElement;\n\n /**\n * The container's rect used for the calculation.\n */\n containerRect: DOMRect;\n\n /**\n * The element's rect used for the calculation.\n */\n elementRect: DOMRect;\n};\n\nexport const isElementVisible = (options: IsElementVisibleOptions): CurrentElementVisibility | null => {\n const { container, element } = options;\n\n if (!element) {\n return null;\n }\n\n const elementRect = options.elementRect || element.getBoundingClientRect();\n const containerRect = container ? options.containerRect || container.getBoundingClientRect() : createViewportRect();\n\n const canScroll = elementCanScroll(container);\n\n if (!canScroll) {\n return {\n inline: true,\n block: true,\n blockIntersection: 1,\n inlineIntersection: 1,\n intersectionRatio: 1,\n isIntersecting: true,\n element,\n containerRect,\n elementRect,\n };\n }\n\n const elLeft = elementRect.left;\n const elTop = elementRect.top;\n const elWidth = elementRect.width || 1;\n const elHeight = elementRect.height || 1;\n const elRight = elLeft + elWidth;\n const elBottom = elTop + elHeight;\n\n const conLeft = containerRect.left;\n const conTop = containerRect.top;\n const conRight = conLeft + containerRect.width;\n const conBottom = conTop + containerRect.height;\n\n const isElementInlineVisible = elLeft >= conLeft && elRight <= conRight;\n const isElementBlockVisible = elTop >= conTop && elBottom <= conBottom;\n\n const inlineIntersection = Math.min(elRight, conRight) - Math.max(elLeft, conLeft);\n const blockIntersection = Math.min(elBottom, conBottom) - Math.max(elTop, conTop);\n\n const inlineIntersectionPercentage = clamp(inlineIntersection / elWidth, 0, 1);\n const blockIntersectionPercentage = clamp(blockIntersection / elHeight, 0, 1);\n\n return {\n inline: isElementInlineVisible,\n block: isElementBlockVisible,\n inlineIntersection: inlineIntersectionPercentage,\n blockIntersection: blockIntersectionPercentage,\n isIntersecting: isElementInlineVisible && isElementBlockVisible,\n element,\n containerRect,\n elementRect,\n\n // Round the intersection ratio to the nearest 0.01 to avoid floating point errors and system scaling issues.\n intersectionRatio: Math.round(Math.min(inlineIntersectionPercentage, blockIntersectionPercentage) * 100) / 100,\n };\n};\n\nexport const getElementScrollCoordinates = (options: ScrollToElementOptions): ScrollToOptions => {\n const {\n container,\n element,\n direction,\n behavior = 'smooth',\n origin = 'nearest',\n scrollBlockMargin = 0,\n scrollInlineMargin = 0,\n } = options;\n\n if (!element || !container || !elementCanScroll(container)) {\n return {\n behavior,\n left: undefined,\n top: undefined,\n };\n }\n\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const { scrollLeft, scrollTop } = container;\n const elWidth = elementRect.width;\n const elHeight = elementRect.height;\n const elLeft = elementRect.left;\n const elTop = elementRect.top;\n const elRight = elementRect.right;\n const elBottom = elementRect.bottom;\n\n const conWidth = containerRect.width;\n const conHeight = containerRect.height;\n const conLeft = containerRect.left;\n const conTop = containerRect.top;\n const conRight = containerRect.right;\n const conBottom = containerRect.bottom;\n\n const shouldScrollLeft = direction === 'inline' || direction === 'both' || !direction;\n const shouldScrollTop = direction === 'block' || direction === 'both' || !direction;\n\n let scrollLeftTo = scrollLeft;\n let scrollTopTo = scrollTop;\n\n const relativeTop = elTop - conTop;\n const relativeLeft = elLeft - conLeft;\n\n const calculateScrollToStart = () => {\n scrollLeftTo = scrollLeft + relativeLeft - scrollInlineMargin;\n scrollTopTo = scrollTop + relativeTop - scrollBlockMargin;\n };\n\n const calculateScrollToEnd = () => {\n scrollLeftTo = scrollLeft + relativeLeft - conWidth + elWidth + scrollInlineMargin;\n scrollTopTo = scrollTop + relativeTop - conHeight + elHeight + scrollBlockMargin;\n };\n\n const calculateScrollToCenter = () => {\n scrollLeftTo = scrollLeft + relativeLeft - conWidth / 2 + elWidth / 2;\n scrollTopTo = scrollTop + relativeTop - conHeight / 2 + elHeight / 2;\n };\n\n const calculateScrollToNearest = () => {\n const isAbove = elBottom < conTop;\n const isPartialAbove = elTop < conTop && elBottom > conTop;\n const isBelow = elTop > conBottom;\n const isPartialBelow = elTop < conBottom && elBottom > conBottom;\n\n const isLeft = elRight < conLeft;\n const isPartialLeft = elLeft < conLeft && elRight > conLeft;\n const isRight = elLeft > conRight;\n const isPartialRight = elLeft < conRight && elRight > conRight;\n\n if (isAbove || isPartialAbove || isLeft || isPartialLeft) {\n calculateScrollToStart();\n } else if (isBelow || isPartialBelow || isRight || isPartialRight) {\n calculateScrollToEnd();\n }\n };\n\n switch (origin) {\n case 'start':\n calculateScrollToStart();\n break;\n case 'end':\n calculateScrollToEnd();\n break;\n case 'center':\n calculateScrollToCenter();\n break;\n case 'nearest':\n calculateScrollToNearest();\n break;\n }\n\n return {\n behavior,\n left: shouldScrollLeft ? scrollLeftTo : undefined,\n top: shouldScrollTop ? scrollTopTo : undefined,\n };\n};\n\nexport type ScrollToElementOptions = {\n /**\n * The element to scroll to.\n */\n element?: HTMLElement | null;\n\n /**\n * The scroll container to scroll to the element in.\n * Must be provided - cannot scroll the viewport programmatically with this function.\n */\n container?: HTMLElement | null;\n\n /**\n * The direction to scroll in.\n * @default 'both'\n */\n direction?: 'inline' | 'block' | 'both';\n\n /**\n * The origin of the element to scroll to.\n * @default 'nearest'\n */\n origin?: 'start' | 'end' | 'center' | 'nearest';\n\n /**\n * The scroll behavior.\n * @default 'smooth'\n */\n behavior?: ScrollBehavior;\n\n /**\n * The scroll inline-margin\n * @default 0\n */\n scrollInlineMargin?: number;\n\n /**\n * The scroll block-margin\n * @default 0\n */\n scrollBlockMargin?: number;\n};\n\nexport const scrollToElement = (options: ScrollToElementOptions) => {\n options.container?.scrollTo(getElementScrollCoordinates(options));\n};\n","const MIN_SNAP_DELTA_PX = 1;\n\nexport type ScrollSnapOrigin = 'auto' | 'start' | 'center' | 'end';\n\nexport type ScrollSnapTarget = {\n /** The element to snap to. */\n element: HTMLElement;\n /** The resolved alignment to use when scrolling to the element. */\n origin: 'start' | 'center' | 'end';\n} | null;\n\nexport const getScrollSnapTarget = (\n items: HTMLElement[],\n container: HTMLElement,\n direction: 'horizontal' | 'vertical',\n origin: ScrollSnapOrigin,\n margin = 0,\n): ScrollSnapTarget => {\n if (!items.length) return null;\n\n const containerRect = container.getBoundingClientRect();\n const containerSize = direction === 'horizontal' ? containerRect.width : containerRect.height;\n\n let bestElement: HTMLElement | null = null;\n let bestOrigin: 'start' | 'center' | 'end' = 'start';\n let bestAbsDelta = Infinity;\n\n const updateBest = (element: HTMLElement, o: 'start' | 'center' | 'end', delta: number) => {\n const abs = Math.abs(delta);\n if (abs < bestAbsDelta) {\n bestAbsDelta = abs;\n bestElement = element;\n bestOrigin = o;\n }\n };\n\n for (const item of items) {\n const itemRect = item.getBoundingClientRect();\n const itemSize = direction === 'horizontal' ? itemRect.width : itemRect.height;\n\n const relativeStart =\n direction === 'horizontal' ? itemRect.left - containerRect.left : itemRect.top - containerRect.top;\n const relativeEnd = relativeStart + itemSize;\n\n if (itemSize > containerSize) {\n const isStartEdgeVisible = relativeStart >= 0;\n const isEndEdgeVisible = relativeEnd <= containerSize;\n\n if (!isStartEdgeVisible && !isEndEdgeVisible) continue;\n\n if (isStartEdgeVisible) {\n updateBest(item, 'start', relativeStart - margin);\n } else {\n updateBest(item, 'end', relativeEnd - containerSize + margin);\n }\n continue;\n }\n\n const computeDelta = (o: 'start' | 'center' | 'end') => {\n switch (o) {\n case 'start':\n return relativeStart - margin;\n case 'end':\n return relativeEnd - containerSize + margin;\n case 'center':\n return relativeStart + itemSize / 2 - containerSize / 2;\n }\n };\n\n if (origin === 'auto') {\n for (const o of ['start', 'center', 'end'] as const) {\n updateBest(item, o, computeDelta(o));\n }\n } else {\n updateBest(item, origin, computeDelta(origin));\n }\n }\n\n if (!bestElement || bestAbsDelta < MIN_SNAP_DELTA_PX) return null;\n\n return { element: bestElement, origin: bestOrigin };\n};\n\nexport type ScrollContainerTarget = {\n element: HTMLElement;\n origin: 'start' | 'end';\n} | null;\n\nexport const getScrollContainerTarget = (\n entries: IntersectionObserverEntry[],\n direction: 'start' | 'end',\n): ScrollContainerTarget => {\n const firstVisible = entries.find((i) => i.intersectionRatio > 0);\n const lastVisible = [...entries].reverse().find((i) => i.intersectionRatio > 0);\n const relevantEntry = direction === 'start' ? firstVisible : lastVisible;\n\n if (!relevantEntry) return null;\n\n const relevantIndex = entries.indexOf(relevantEntry);\n const nextIndex =\n relevantEntry.intersectionRatio !== 1\n ? relevantIndex\n : direction === 'start'\n ? relevantIndex - 1\n : relevantIndex + 1;\n\n const element = (entries[nextIndex]?.target as HTMLElement) ?? (relevantEntry.target as HTMLElement);\n\n return { element, origin: direction === 'end' ? 'start' : 'end' };\n};\n\nexport type ScrollItemTarget = {\n element: HTMLElement;\n index: number;\n origin: 'start' | 'end' | 'center';\n} | null;\n\nexport const getScrollItemTarget = (\n entries: IntersectionObserverEntry[],\n container: HTMLElement,\n direction: 'start' | 'end',\n scrollOrigin: 'auto' | 'center' | 'start' | 'end',\n axisDirection: 'horizontal' | 'vertical',\n): ScrollItemTarget => {\n const firstVisible = entries.find((i) => i.intersectionRatio > 0);\n const lastVisible = [...entries].reverse().find((i) => i.intersectionRatio > 0);\n\n if (!firstVisible || !lastVisible) return null;\n\n const firstIndex = entries.indexOf(firstVisible);\n const lastIndex = entries.indexOf(lastVisible);\n const containerRect = container.getBoundingClientRect();\n\n // Only a single item is visible - it must be oversized (wider/taller than the container).\n if (firstVisible === lastVisible) {\n const itemRect = firstVisible.target.getBoundingClientRect();\n const isStartEdgeVisible =\n axisDirection === 'horizontal'\n ? Math.round(itemRect.left) >= Math.round(containerRect.left)\n : Math.round(itemRect.top) >= Math.round(containerRect.top);\n const isEndEdgeVisible =\n axisDirection === 'horizontal'\n ? Math.round(itemRect.right) <= Math.round(containerRect.right)\n : Math.round(itemRect.bottom) <= Math.round(containerRect.bottom);\n\n if (!isStartEdgeVisible || !isEndEdgeVisible) {\n if (direction === 'start') {\n if (isStartEdgeVisible) {\n const prevIndex = firstIndex - 1;\n const element = entries[prevIndex]?.target as HTMLElement | undefined;\n if (!element) return null;\n\n return { element, index: prevIndex, origin: 'end' };\n }\n\n return { element: firstVisible.target as HTMLElement, index: firstIndex, origin: 'start' };\n } else {\n if (isEndEdgeVisible) {\n const nextIndex = lastIndex + 1;\n const element = entries[nextIndex]?.target as HTMLElement | undefined;\n if (!element) return null;\n\n return { element, index: nextIndex, origin: 'start' };\n }\n return { element: lastVisible.target as HTMLElement, index: lastIndex, origin: 'end' };\n }\n }\n } else if (scrollOrigin === 'center') {\n const entry = direction === 'start' ? firstVisible : lastVisible;\n const index = direction === 'start' ? firstIndex : lastIndex;\n\n return { element: entry.target as HTMLElement, index, origin: 'center' };\n }\n\n const entry = direction === 'start' ? firstVisible : lastVisible;\n const entryIndex = direction === 'start' ? firstIndex : lastIndex;\n\n if (Math.round(entry.intersectionRatio) === 1) {\n if (direction === 'start' && entryIndex === 0) return null;\n if (direction === 'end' && entryIndex === entries.length - 1) return null;\n\n const nextIndex = direction === 'start' ? entryIndex - 1 : entryIndex + 1;\n const element = entries[nextIndex]?.target as HTMLElement | undefined;\n if (!element) return null;\n\n return { element, index: nextIndex, origin: direction };\n }\n\n return { element: entry.target as HTMLElement, index: entryIndex, origin: direction };\n};\n","import { DestroyRef, ElementRef, NgZone, Signal, effect, inject, signal, untracked } from '@angular/core';\nimport { isElementVisible } from '../scrolling';\nimport {\n ElementSignalValue,\n SignalElementBindingType,\n buildElementSignal,\n createEmptyElementSignal,\n firstElementSignal,\n} from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {\n root?: SignalElementBindingType;\n enabled?: Signal<boolean>;\n};\n\nexport type IntersectionObserverEntryWithDetails = IntersectionObserverEntry & {\n isAbove: boolean;\n isBelow: boolean;\n isLeft: boolean;\n isRight: boolean;\n isVisible: boolean;\n};\n\nconst createPositionObject = (entry: IntersectionObserverEntry) => {\n const boundingRect = entry.boundingClientRect;\n const rootBounds = entry.rootBounds;\n\n let isAbove = false;\n let isBelow = false;\n let isLeft = false;\n let isRight = false;\n\n if (rootBounds) {\n isAbove = boundingRect.bottom < rootBounds.top;\n isBelow = boundingRect.top > rootBounds.bottom;\n isLeft = boundingRect.right < rootBounds.left;\n isRight = boundingRect.left > rootBounds.right;\n }\n\n // We cant use entry.isIntersecting to determine actual visibility since we are using a big threshold array to get more intersection events.\n const isVisible = !isAbove && !isBelow && !isLeft && !isRight && entry.intersectionRatio > 0;\n\n return {\n isAbove,\n isBelow,\n isLeft,\n isRight,\n isVisible,\n };\n};\n\nexport const signalElementIntersection = (el: SignalElementBindingType, options?: SignalElementIntersectionOptions) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const root = firstElementSignal(options?.root ? buildElementSignal(options?.root) : createEmptyElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = options?.enabled ?? signal(true);\n\n const elementIntersectionSignal = signal<IntersectionObserverEntryWithDetails[]>([]);\n const observer = signal<IntersectionObserver | null>(null);\n\n const currentlyObservedElements = new Set<HTMLElement>();\n\n const updateIntersections = (entries: IntersectionObserverEntry[]) => {\n let currentValues = [...elementIntersectionSignal()];\n\n for (const entry of entries) {\n const existingEntryIndex = currentValues.findIndex((v) => v.target === entry.target);\n\n // Round the intersection ratio to the nearest 0.01 to avoid floating point errors and system scaling issues.\n const roundedIntersectionRatio = Math.round(entry.intersectionRatio * 100) / 100;\n\n const intersectionEntry: IntersectionObserverEntryWithDetails = {\n boundingClientRect: entry.boundingClientRect,\n intersectionRatio: roundedIntersectionRatio,\n intersectionRect: entry.intersectionRect,\n isIntersecting: entry.isIntersecting,\n rootBounds: entry.rootBounds,\n target: entry.target,\n time: entry.time,\n ...createPositionObject(entry),\n };\n\n if (existingEntryIndex !== -1) {\n currentValues = [\n ...currentValues.slice(0, existingEntryIndex),\n intersectionEntry,\n ...currentValues.slice(existingEntryIndex + 1),\n ];\n } else {\n currentValues = [...currentValues, intersectionEntry];\n }\n }\n\n zone.run(() => elementIntersectionSignal.set(currentValues));\n };\n\n const updateIntersectionObserver = (rendered: boolean, enabled: boolean, rootEl: HTMLElement | null) => {\n observer()?.disconnect();\n currentlyObservedElements.clear();\n\n if (!rendered || !enabled) {\n observer.set(null);\n\n return;\n }\n\n const newObserver = new IntersectionObserver((entries) => updateIntersections(entries), {\n ...options,\n root: rootEl,\n });\n\n observer.set(newObserver);\n };\n\n const updateObservedElements = (observer: IntersectionObserver | null, elements: ElementSignalValue) => {\n const rootEl = root().currentElement;\n\n if (!observer) return;\n\n const currIntersectionValue = elementIntersectionSignal();\n const newIntersectionValue: IntersectionObserverEntryWithDetails[] = [];\n\n for (const el of elements.currentElements) {\n if (currentlyObservedElements.has(el)) {\n const existingEntryIndex = currIntersectionValue.findIndex((v) => v.target === el);\n const existingEntry = currIntersectionValue[existingEntryIndex];\n\n if (!existingEntry) {\n console.warn('Could not find existing entry for element. The intersection observer might be broken now.', el);\n continue;\n }\n\n newIntersectionValue.push(existingEntry);\n continue;\n }\n\n const initialElementVisibility = isElementVisible({\n container: rootEl,\n element: el,\n });\n\n if (!initialElementVisibility) {\n console.error('No visibility data found for element.', {\n element: el,\n container: rootEl,\n });\n\n continue;\n }\n\n const intersectionEntry: IntersectionObserverEntry = {\n boundingClientRect: initialElementVisibility.elementRect,\n intersectionRatio: initialElementVisibility.intersectionRatio,\n intersectionRect: initialElementVisibility.elementRect,\n isIntersecting: initialElementVisibility.isIntersecting,\n rootBounds: initialElementVisibility.containerRect,\n target: el,\n time: performance.now(),\n };\n\n newIntersectionValue.push({\n ...intersectionEntry,\n ...createPositionObject(intersectionEntry),\n });\n\n currentlyObservedElements.add(el);\n observer.observe(el);\n }\n\n for (const el of elements.previousElements) {\n if (elements.currentElements.includes(el)) continue;\n\n observer.unobserve(el);\n currentlyObservedElements.delete(el);\n }\n\n elementIntersectionSignal.set(newIntersectionValue);\n };\n\n effect(() => {\n const rootEl = root().currentElement;\n const rendered = isRendered();\n const enabled = isEnabled();\n\n untracked(() => updateIntersectionObserver(rendered, enabled, rootEl));\n });\n\n effect(() => {\n const els = elements();\n const obs = observer();\n\n untracked(() => updateObservedElements(obs, els));\n });\n\n destroyRef.onDestroy(() => observer()?.disconnect());\n\n return elementIntersectionSignal.asReadonly();\n};\n\nexport const signalHostElementIntersection = (options?: SignalElementIntersectionOptions) =>\n signalElementIntersection(inject<ElementRef<HTMLElement>>(ElementRef), options);\n","import { DestroyRef, ElementRef, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, of, switchMap, tap } from 'rxjs';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from './element';\n\nexport type ElementLastScrollDirectionType = 'up' | 'down' | 'left' | 'right';\n\nexport type ElementLastScrollDirection = {\n type: ElementLastScrollDirectionType;\n time: number;\n};\n\nexport const signalElementLastScrollDirection = (el: SignalElementBindingType) => {\n const elements = buildElementSignal(el);\n const element = firstElementSignal(elements);\n const destroyRef = inject(DestroyRef);\n const lastScrollDirection = signal<ElementLastScrollDirection | null>(null);\n\n let lastScrollTop = 0;\n let lastScrollLeft = 0;\n\n toObservable(element)\n .pipe(\n switchMap(({ currentElement }) => {\n if (!currentElement) {\n lastScrollDirection.set(null);\n lastScrollTop = 0;\n lastScrollLeft = 0;\n\n return of(null);\n }\n\n return fromEvent(currentElement, 'scroll').pipe(\n tap(() => {\n const { scrollTop, scrollLeft } = currentElement;\n const time = Date.now();\n\n if (scrollTop > lastScrollTop) {\n lastScrollDirection.set({ type: 'down', time });\n } else if (scrollTop < lastScrollTop) {\n lastScrollDirection.set({ type: 'up', time });\n } else if (scrollLeft > lastScrollLeft) {\n lastScrollDirection.set({ type: 'right', time });\n } else if (scrollLeft < lastScrollLeft) {\n lastScrollDirection.set({ type: 'left', time });\n }\n\n lastScrollTop = scrollTop;\n lastScrollLeft = scrollLeft;\n }),\n );\n }),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n\n return lastScrollDirection.asReadonly();\n};\n\nexport const signalHostElementLastScrollDirection = () =>\n signalElementLastScrollDirection(inject<ElementRef<HTMLElement>>(ElementRef));\n","import { DOCUMENT, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map } from 'rxjs';\nimport { memoizeSignal } from './signal-data-utils';\n\n/**\n * A signal for whether this page is the one the reader is actually looking at - `false` for a backgrounded\n * tab or a minimised window.\n *\n * Not the same question as whether an element is on screen: an IntersectionObserver reports a fully visible\n * element in a background tab, because the tab's own visibility is no part of what it measures. Anything\n * that moves on its own needs to ask both, and a timer is not a substitute - browsers throttle timers in a\n * hidden tab rather than stopping them, so work keeps piling up out of sight.\n */\nexport const injectIsDocumentVisible = /* @__PURE__ */ memoizeSignal<boolean>(() => {\n const document = inject(DOCUMENT);\n const isVisible = () => document.visibilityState === 'visible';\n\n return toSignal(fromEvent(document, 'visibilitychange').pipe(map(isVisible)), { initialValue: isVisible() });\n});\n","import { ElementRef, Signal, computed, effect, inject } from '@angular/core';\nimport { equal } from '../utils';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from './element';\nimport { NullableElementDimensions, signalElementDimensions } from './element-dimensions';\nimport { signalElementMutations } from './element-mutations';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementScrollStateOptions = {\n /** The initial scroll position to scroll to. Once a truthy value get's emitted, all further values will be ignored. */\n initialScrollPosition?: Signal<ScrollToOptions | null>;\n\n /**\n * What the underlying `MutationObserver` watches for - a proxy for \"the content may have changed size, so\n * re-measure whether it still overflows\". The default is deliberately broad.\n *\n * Narrow it wherever the consumer knows better. `attributes: true` means every inline style or class write\n * anywhere in the subtree re-runs the measurement, and the measurement reads `scrollWidth`/`scrollHeight`\n * - so a descendant written to per animation frame buys a forced layout per frame.\n */\n mutations?: MutationObserverInit;\n};\n\nconst DEFAULT_SCROLL_STATE_MUTATIONS: MutationObserverInit = { childList: true, subtree: true, attributes: true };\n\nexport type ElementScrollState = {\n canScroll: boolean;\n canScrollHorizontally: boolean;\n canScrollVertically: boolean;\n elementDimensions: NullableElementDimensions;\n};\n\nexport const areScrollStatesEqual = (a: ElementScrollState, b: ElementScrollState) => {\n return (\n a.canScroll === b.canScroll &&\n a.canScrollHorizontally === b.canScrollHorizontally &&\n a.canScrollVertically === b.canScrollVertically &&\n equal(a.elementDimensions, b.elementDimensions)\n );\n};\n\nexport const signalElementScrollState = (el: SignalElementBindingType, options?: SignalElementScrollStateOptions) => {\n const elements = buildElementSignal(el);\n const observedEl = firstElementSignal(elements);\n const elementDimensions = signalElementDimensions(elements);\n const elementMutations = signalElementMutations(elements, options?.mutations ?? DEFAULT_SCROLL_STATE_MUTATIONS);\n const isRendered = signalIsRendered();\n\n const initialScrollPosition = options?.initialScrollPosition;\n\n if (initialScrollPosition) {\n const ref = effect(() => {\n if (!isRendered()) return;\n\n const scrollPosition = initialScrollPosition();\n const element = observedEl().currentElement;\n\n if (scrollPosition && element) {\n if (scrollPosition.left !== undefined) element.scrollLeft = scrollPosition.left;\n if (scrollPosition.top !== undefined) element.scrollTop = scrollPosition.top;\n ref.destroy();\n }\n });\n }\n\n const notScrollable = (dimensions: NullableElementDimensions) => ({\n canScroll: false,\n canScrollHorizontally: false,\n canScrollVertically: false,\n elementDimensions: dimensions,\n });\n\n return computed<ElementScrollState>(\n () => {\n const element = observedEl().currentElement;\n const dimensions = elementDimensions();\n\n // We are not interested what the mutation is, just that there is one.\n // Changes to the DOM can affect the scroll state of the element.\n elementMutations();\n\n if (!element || !isRendered()) return notScrollable(dimensions);\n\n const { scrollWidth, scrollHeight, clientHeight, clientWidth } = element;\n\n const canScrollHorizontally = scrollWidth > clientWidth;\n const canScrollVertically = scrollHeight > clientHeight;\n\n return {\n canScroll: canScrollHorizontally || canScrollVertically,\n canScrollHorizontally,\n canScrollVertically,\n elementDimensions: dimensions,\n };\n },\n { equal: (a, b) => areScrollStatesEqual(a, b) },\n );\n};\n\nexport const signalHostElementScrollState = () => signalElementScrollState(inject<ElementRef<HTMLElement>>(ElementRef));\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, effect, inject, PLATFORM_ID } from '@angular/core';\nimport { injectRenderer } from '../../providers';\nimport { injectScrollbarDimensions, injectViewportDimensions } from '../media-queries';\n\nlet hasWrittenScrollbarSizes = false;\n\n/**\n * Applies scrollbar size CSS variables to the documentElement (html tag) in pixels.\n * - `--et-sw`: scrollbar width\n * - `--et-sh`: scrollbar height\n */\nexport const writeScrollbarSizeToCssVariables = () => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n if (hasWrittenScrollbarSizes) {\n return;\n }\n hasWrittenScrollbarSizes = true;\n\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const scrollbarDimensions = injectScrollbarDimensions();\n\n effect(() => {\n const dimensions = scrollbarDimensions();\n\n if (!dimensions) return;\n\n renderer.setCssProperties(document.documentElement, {\n '--et-sw': `${dimensions.width}px`,\n '--et-sh': `${dimensions.height}px`,\n });\n });\n};\n\nlet hasWrittenViewportSizes = false;\n\n/**\n * Applies viewport size CSS variables to the documentElement (html tag) in pixels.\n * - `--et-vw`: viewport width excluding scrollbar width\n * - `--et-vh`: viewport height excluding scrollbar height\n */\nexport const writeViewportSizeToCssVariables = () => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n if (hasWrittenViewportSizes) {\n return;\n }\n hasWrittenViewportSizes = true;\n\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const htmlElementDimensions = injectViewportDimensions();\n\n effect(() => {\n const dimensions = htmlElementDimensions().rect?.();\n\n if (!dimensions) return;\n\n renderer.setCssProperties(document.documentElement, {\n '--et-vw': `${dimensions.width}px`,\n '--et-vh': `${dimensions.height}px`,\n });\n });\n};\n","import { DOCUMENT, DestroyRef, Signal, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, map, merge, of, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { injectRenderer } from '../../providers';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from '../element';\nimport { signalElementScrollState } from '../element-scroll-state';\nimport { MaybeSignal, maybeSignalValue } from '../signal-data-utils';\n\nexport type CursorDragScrollDirection = 'horizontal' | 'vertical' | 'both';\n\nexport type CursorDragScrollOptions = {\n /** If true, cursor drag scrolling will be enabled. */\n enabled?: Signal<boolean>;\n\n /** The allowed scroll direction. */\n allowedDirection?: MaybeSignal<CursorDragScrollDirection>;\n\n /**\n * Whether the element overflows in the allowed direction - there is nothing to drag if it does not.\n *\n * Measured here when it isn't supplied, which means a MutationObserver and a ResizeObserver of its own.\n * Hand it over wherever the caller already knows: a scrollable that tracks its own scroll state was ending\n * up with two observers watching the same element for the same thing, and both of them re-measured\n * `scrollWidth` - a forced layout - on every inline style written anywhere inside it.\n */\n canScroll?: Signal<boolean>;\n};\n\n/** The deadzone in pixels after which the cursor drag scroll will take effect. */\nconst CURSOR_DRAG_SCROLL_DEADZONE = 5;\n\n/** `MouseEvent.button` for the primary button. A secondary click opens a menu; it does not drag. */\nconst PRIMARY_MOUSE_BUTTON = 0;\n\n/** The class that is added to the element when the cursor is being dragged. */\nconst CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';\nconst CURSOR_DRAG_INIT_CLASS = 'et-cursor-drag-scroll--init';\n\n/** A function to apply cursor drag scroll behavior to an element. */\nexport const useCursorDragScroll = (el: SignalElementBindingType, options?: CursorDragScrollOptions) => {\n const elements = buildElementSignal(el);\n const element = firstElementSignal(elements);\n const destroyRef = inject(DestroyRef);\n const { enabled = signal(true), allowedDirection = 'both' } = options ?? {};\n const renderer = injectRenderer();\n const isDragging = signal(false);\n const isInitDragging = signal(false);\n const initialDragPosition = signal({ x: 0, y: 0 });\n const initialScrollPosition = signal({ x: 0, y: 0 });\n const dragAmount = signal({ x: 0, y: 0 });\n const document = inject(DOCUMENT);\n\n // Only measured when the caller hasn't already: this costs a MutationObserver and a ResizeObserver.\n const suppliedCanScroll = options?.canScroll;\n const measuredScrollState = suppliedCanScroll ? null : signalElementScrollState(elements);\n\n const measuredCanScroll = computed(() => {\n const currentScrollState = measuredScrollState?.();\n\n if (!currentScrollState) return false;\n\n const direction = maybeSignalValue(allowedDirection);\n\n switch (direction) {\n case 'both':\n return currentScrollState.canScrollHorizontally || currentScrollState.canScrollVertically;\n case 'horizontal':\n return currentScrollState.canScrollHorizontally;\n case 'vertical':\n return currentScrollState.canScrollVertically;\n }\n });\n\n const canScroll = suppliedCanScroll ?? measuredCanScroll;\n\n // Cleanup if the element the cursor drag scroll is bound to gets changed\n effect(() => {\n const { previousElement } = element();\n\n if (previousElement) {\n renderer.removeStyle(previousElement, 'cursor');\n }\n });\n\n // Conditionally apply styles/classes to the element and the document\n effect(() => {\n const currCanScroll = canScroll();\n const isEnabled = enabled();\n const currIsDragging = isDragging();\n const currIsInitDragging = isInitDragging();\n\n untracked(() => {\n const el = element().currentElement;\n\n if (!el) return;\n\n if (!currCanScroll || !isEnabled) {\n renderer.removeStyles(el, 'cursor', 'scrollSnapType', 'scrollBehavior');\n renderer.removeStyle(document.documentElement, 'cursor');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_INIT_CLASS);\n\n return;\n }\n\n if (currIsInitDragging) {\n renderer.addClass(el, CURSOR_DRAG_INIT_CLASS);\n }\n\n if (currIsDragging) {\n renderer.addClass(el, CURSOR_DRAG_SCROLLING_CLASS);\n renderer.setStyle(el, {\n cursor: 'grabbing',\n scrollSnapType: 'none',\n scrollBehavior: 'unset',\n });\n\n renderer.setStyle(document.documentElement, {\n cursor: 'grabbing',\n });\n }\n\n if (!currIsInitDragging && !currIsDragging) {\n renderer.setStyle(el, {\n cursor: 'grab',\n });\n renderer.removeStyles(el, 'scrollSnapType', 'scrollBehavior');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_INIT_CLASS);\n renderer.removeStyle(document.documentElement, 'cursor');\n }\n });\n });\n\n // Update the element's scroll position when the user drags\n effect(() => {\n const currDragAmount = dragAmount();\n\n untracked(() => {\n const currIsDragging = isDragging();\n const el = element().currentElement;\n const { x: dragX, y: dragY } = currDragAmount;\n const { x: scrollX, y: scrollY } = initialScrollPosition();\n const currAllowedDirection = maybeSignalValue(allowedDirection);\n\n if (!el || !currIsDragging) return;\n\n switch (currAllowedDirection) {\n case 'both':\n el.scroll({\n top: dragY + scrollY,\n left: dragX + scrollX,\n behavior: 'instant',\n });\n break;\n case 'horizontal':\n el.scroll({\n left: dragX + scrollX,\n behavior: 'instant',\n });\n break;\n case 'vertical':\n el.scroll({\n top: dragY + scrollY,\n behavior: 'instant',\n });\n break;\n }\n });\n });\n\n const updateDragging = (e: MouseEvent) => {\n const el = element().currentElement;\n\n if (!el) return;\n\n const dx = (e.clientX - initialDragPosition().x) * -1;\n const dy = (e.clientY - initialDragPosition().y) * -1;\n\n dragAmount.set({ x: dx, y: dy });\n\n if (Math.abs(dx) > CURSOR_DRAG_SCROLL_DEADZONE || Math.abs(dy) > CURSOR_DRAG_SCROLL_DEADZONE) {\n isDragging.set(true);\n }\n };\n\n const updateDraggingEnd = () => {\n isDragging.set(false);\n isInitDragging.set(false);\n initialDragPosition.set({ x: 0, y: 0 });\n initialScrollPosition.set({ x: 0, y: 0 });\n dragAmount.set({ x: 0, y: 0 });\n };\n\n const setupDragging = (e: MouseEvent) => {\n // A context menu takes the pointer away without ever delivering a `mouseup` - so without it in here, a\n // right click (or a ctrl-click on a Mac, which is the primary button) leaves the drag latched on and\n // every later mouse move scrolls the container.\n const dragEnd = merge(fromEvent<MouseEvent>(document, 'mouseup'), fromEvent<MouseEvent>(document, 'contextmenu'));\n const mouseMove = fromEvent<MouseEvent>(document, 'mousemove');\n const el = element().currentElement;\n\n if (!el) return;\n\n mouseMove\n .pipe(\n takeUntilDestroyed(destroyRef),\n takeUntil(dragEnd),\n tap((e) => updateDragging(e)),\n )\n .subscribe();\n\n dragEnd\n .pipe(\n take(1),\n takeUntilDestroyed(destroyRef),\n tap(() => updateDraggingEnd()),\n )\n .subscribe();\n\n initialDragPosition.set({ x: e.clientX, y: e.clientY });\n initialScrollPosition.set({ x: el.scrollLeft, y: el.scrollTop });\n isInitDragging.set(true);\n };\n\n toObservable(element)\n .pipe(\n map((e) => e?.currentElement),\n switchMap((el) => (el ? fromEvent<MouseEvent>(el, 'mousedown') : of(null))),\n filter((e): e is MouseEvent => !!e),\n filter((e) => e.button === PRIMARY_MOUSE_BUTTON),\n filter(() => enabled()),\n tap((e) => setupDragging(e)),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n return {\n isDragging: isDragging.asReadonly(),\n currentDragAmount: dragAmount.asReadonly(),\n };\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injector, PLATFORM_ID, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Data, NavigationEnd, NavigationSkipped, Params, Router } from '@angular/router';\nimport { equal } from '../utils';\nimport { memoizeSignal, previousSignalValue } from './signal-data-utils';\n\nexport type RouterState = {\n data: Data;\n pathParams: Params;\n queryParams: Params;\n title: string | null;\n fragment: string | null;\n};\n\nexport const ET_PROPERTY_REMOVED = /* @__PURE__ */ Symbol('ET_PROPERTY_REMOVED');\n\nexport type InjectUtilConfig = {\n /** The injector to use for the injection. Must be provided if the function is not called from within a injection context. */\n injector?: Injector;\n};\n\nexport type InjectUtilTransformConfig<In, Out> = {\n /**\n * A transform function similar to the `transform` function in Angular input bindings.\n * Can be used to transform the value before it is returned.\n * E.g. transforming `\"true\"` to `true` for a boolean attribute.\n */\n transform?: (value: In) => Out;\n};\n\nexport const transformOrReturn = <In, Out>(src: Signal<In>, config?: InjectUtilTransformConfig<In, Out>) => {\n const transformer = config?.transform;\n\n if (transformer) {\n return computed(() => transformer(src()));\n }\n\n return src as unknown as Signal<Out>;\n};\n\nconst createInitialRoute = () => {\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const router = inject(Router);\n\n if (!isBrowser) {\n return router.url;\n }\n\n return window.location.pathname + window.location.search + window.location.hash;\n};\n\n/** Inject the current router event */\nexport const injectRouterEvent = /* @__PURE__ */ memoizeSignal(() => {\n const router = inject(Router);\n\n const initialRoute = createInitialRoute();\n\n return toSignal(router.events, {\n initialValue: new NavigationEnd(-1, initialRoute, initialRoute),\n });\n});\n\n/**\n * Signal that indicates whether the router has been initialized.\n * The router is considered initialized once the first NavigationEnd event with an id different than -1 has been emitted.\n */\nexport const injectIsRouterInitialized = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n\n return computed(() => {\n const e = event();\n\n return (e instanceof NavigationEnd && e.id !== -1) || e instanceof NavigationSkipped;\n });\n});\n\n/**\n * Inject the current url.\n * The url includes query params as well as the fragment. Use `injectRoute` instead if you are not intrusted in those.\n * @example \"/my-page?query=1&param=true#fragment\"\n */\nexport const injectUrl = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n const router = inject(Router);\n\n // Captured once for reads that happen before the router has committed any\n // navigation (SSR / initial load), where `router.url` isn't reliable yet.\n const initialRoute = createInitialRoute();\n\n return computed(() => {\n // We depend on `event` and `currentNavigation` only to get re-evaluated\n // around each navigation, but we read the *committed* url straight from the\n // router. The router commits `currentUrlTree` before it activates components,\n // so `router.url` is already correct inside a child component's constructor -\n // unlike the NavigationEnd event, which only reaches this signal *after*\n // activation.\n event();\n const currentNavigation = router.currentNavigation();\n\n // Before the very first navigation the router url isn't populated yet (e.g.\n // SSR / a deep link read before the initial navigation runs), so fall back\n // to the browser location captured at startup. `navigated` flips only at\n // NavigationEnd, so we also check for an in-flight navigation to stay correct\n // during the initial navigation's component construction.\n if (router.navigated || currentNavigation !== null) {\n return router.url;\n }\n\n return initialRoute;\n });\n});\n\n/**\n * Inject the current route\n * @example \"/my-page\"\n */\nexport const injectRoute = /* @__PURE__ */ memoizeSignal(() => {\n const url = injectUrl();\n\n return computed(() => {\n const fullUrl = url();\n const urlWithoutQueryParams = fullUrl.split('?')[0] ?? '';\n const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';\n\n return withoutFragment;\n });\n});\n\nexport const createRouterState = (router: Router): RouterState => {\n let route = router.routerState.snapshot.root;\n\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n const { data, params, queryParams, title, fragment } = route;\n\n return {\n data,\n pathParams: params,\n queryParams,\n title: title ?? null,\n fragment,\n };\n};\n\n/**\n * Read the current route (the committed url without query params and fragment) straight from the router.\n * Unlike the `injectRoute` signal this reads synchronously, so it can be used inside a `router.events` handler\n * where `router.url` is already committed. Falls back to the browser location before the first navigation commits.\n */\nexport const createRoute = (router: Router) => {\n const url = router.navigated ? router.url : window.location.pathname + window.location.search + window.location.hash;\n\n return url.split('?')[0]?.split('#')[0] ?? '';\n};\n\n/**\n * Inject the complete router state. This includes the current route data, path params, query params, title and fragment.\n */\nexport const injectRouterState = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n const router = inject(Router);\n\n return computed<RouterState>(\n () => {\n event();\n\n return createRouterState(router);\n },\n { equal },\n );\n});\n\n/** Inject a signal containing the current route fragment (the part after the # inside the url if present) */\nexport const injectFragment = <T = string | null>(\n config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>,\n) => {\n const routerState = injectRouterState();\n const fragment = computed(() => routerState().fragment);\n\n return transformOrReturn(fragment, config);\n};\n\n/** Inject all currently available query parameters as a signal */\nexport const injectQueryParams = () => {\n const routerState = injectRouterState();\n\n const queryParams = computed(() => routerState().queryParams);\n\n return queryParams;\n};\n\n/** Inject all currently available route data as a signal */\nexport const injectRouteData = () => {\n const routerState = injectRouterState();\n\n const data = computed(() => routerState().data);\n\n return data;\n};\n\n/** Inject the current route title as a signal */\nexport const injectRouteTitle = <T = string | null>(config?: InjectUtilTransformConfig<string | null, T>) => {\n const routerState = injectRouterState();\n const title = computed(() => routerState().title);\n\n return transformOrReturn(title, config);\n};\n\n/** Inject all currently available path parameters as a signal */\nexport const injectPathParams = () => {\n const routerState = injectRouterState();\n\n const pathParams = computed(() => routerState().pathParams);\n\n return pathParams;\n};\n\nexport type InjectQueryParamConfig<T> = InjectUtilTransformConfig<string | null, T> & {\n /**\n * If true, the initial value will be read from the browser's url.\n * Note that this will not work with arrays or complex objects.\n */\n requireSync?: boolean;\n};\n\nconst getQueryParamFromUrl = (key: string): string | null => {\n if (typeof window === 'undefined') return null;\n\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(key);\n};\n\n/** Inject a specific query parameter as a signal */\nexport const injectQueryParam = <T = string | null>(key: string, config?: InjectQueryParamConfig<T>) => {\n const queryParams = injectQueryParams();\n const src = computed(() => queryParams()[key] ?? (config?.requireSync ? getQueryParamFromUrl(key) : null)) as Signal<\n string | null\n >;\n\n return transformOrReturn(src, config);\n};\n\n/** Inject a specific route data item as a signal */\nexport const injectRouteDataItem = <T = unknown>(key: string, config?: InjectUtilTransformConfig<unknown, T>) => {\n const data = injectRouteData();\n const src = computed(() => data()[key] ?? null) as Signal<T>;\n\n return transformOrReturn(src, config);\n};\n\n/** Inject a specific path parameter as a signal */\nexport const injectPathParam = <T = string | null>(\n key: string,\n config?: InjectUtilTransformConfig<string | null, T>,\n) => {\n const pathParams = injectPathParams();\n const src = computed(() => pathParams()[key] ?? null) as Signal<string | null>;\n\n return transformOrReturn(src, config);\n};\n\n/**\n * Inject query params that changed during navigation. Unchanged query params will be ignored.\n * Removed query params will be represented by the symbol `ET_PROPERTY_REMOVED`.\n */\nexport const injectQueryParamChanges = /* @__PURE__ */ memoizeSignal(() => {\n const queryParams = injectQueryParams();\n const prevQueryParams = previousSignalValue(queryParams);\n\n return computed(() => {\n const current = queryParams();\n const previous = prevQueryParams() ?? {};\n\n const changes: Record<string, unknown> = {};\n\n const allKeys = new Set<keyof typeof previous & keyof typeof current>([\n ...Object.keys(previous),\n ...Object.keys(current),\n ]);\n\n for (const key of allKeys) {\n if (!equal(previous[key], current[key])) {\n const val = current[key] === undefined ? ET_PROPERTY_REMOVED : current[key];\n\n changes[key] = val;\n }\n }\n\n return changes;\n });\n});\n\n/**\n * Inject path params that changed during navigation. Unchanged path params will be ignored.\n * Removed path params will be represented by the symbol `ET_PROPERTY_REMOVED`.\n */\nexport const injectPathParamChanges = /* @__PURE__ */ memoizeSignal(() => {\n const pathParams = injectPathParams();\n const prevPathParams = previousSignalValue(pathParams);\n\n return computed(() => {\n const current = pathParams();\n const previous = prevPathParams() ?? {};\n\n const changes: Record<string, unknown> = {};\n\n const allKeys = new Set<keyof typeof previous & keyof typeof current>([\n ...Object.keys(previous),\n ...Object.keys(current),\n ]);\n\n for (const key of allKeys) {\n if (!equal(previous[key], current[key])) {\n const val = current[key] === undefined ? ET_PROPERTY_REMOVED : current[key];\n\n changes[key] = val;\n }\n }\n\n return changes;\n });\n});\n\n/**\n * The state handed to the navigation that is currently in progress, i.e. what\n * `router.navigate(…, { state })` passed - typed to whatever you expect.\n *\n * Read **synchronously**, in a constructor or a resolver, and deliberately not a signal: navigation state exists\n * only for the duration of the navigation that carries it. By the time an effect flushed, the navigation would be\n * over and the answer always `null`. Returns `null` when there is no navigation in flight or it carried no state -\n * which is the normal case for a page arrived at by typing its URL, so always handle it.\n *\n * Use it for the things a URL should not carry: a \"you were redirected because…\" reason, a pre-fetched object the\n * previous page already had, a scroll intent. Anything the page needs to survive a reload belongs in the URL.\n *\n * @example\n * type CheckoutNavState = { fromCart: boolean };\n *\n * export class CheckoutComponent {\n * private navState = injectRouterNavigationState<CheckoutNavState>();\n *\n * protected cameFromCart = this.navState?.fromCart ?? false;\n * }\n */\nexport const injectRouterNavigationState = <T>(): T | null => {\n const router = inject(Router);\n\n return (router.getCurrentNavigation()?.extras.state as T | undefined) ?? null;\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, DestroyRef, DOCUMENT, inject, Injector, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationSkipped, NavigationStart, Params, Router } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { defineRootProvider, toInjectFn } from '../../utils';\nimport { createRoute, createRouterState } from '../router';\n\n/**\n * The element that gets scrolled. Pass a function if the scroll container is created per route or\n * only exists after the app shell rendered - it is resolved on every navigation instead of once at\n * setup time.\n * @default document.documentElement\n */\nexport type ScrollRestorationScrollElement = HTMLElement | (() => HTMLElement | null | undefined);\n\nexport type ScrollRestorationRestoreConfig = {\n /**\n * Restore the previous scroll offset when the user navigates back or forward through the browser\n * history, instead of scrolling to top.\n *\n * The offset is not applied on the loading frame: query driven pages render skeletons/empty states\n * first, so the document is far shorter than it was when the user left. Restoration waits until\n * the content is tall enough to actually reach the saved offset (see `timeout`).\n * @default false\n */\n enabled?: boolean;\n\n /**\n * How long to keep waiting (in ms) for the content to grow tall enough to reach the saved offset.\n * The clock is suspended while a {@link holdScrollRestoration} registration reads `true`.\n * @default 1000\n */\n timeout?: number;\n\n /**\n * Absolute upper bound (in ms) for a single restoration attempt, regardless of\n * {@link holdScrollRestoration} registrations. Guards against a page that never stops loading.\n * @default 10000\n */\n maxTimeout?: number;\n\n /**\n * Whether to apply the saved offset clamped to the reachable maximum once `timeout` elapsed\n * without the content getting tall enough. Landing close to the previous position is usually\n * better than staying at the top.\n * @default true\n */\n clampOnTimeout?: boolean;\n};\n\nexport type SetupScrollRestorationConfig = {\n /**\n * The scrollable container.\n * @default document.documentElement\n */\n scrollElement?: ScrollRestorationScrollElement;\n /**\n * A list of query params that should trigger a scroll to top.\n * @default []\n * @example ['page'] // will scroll to top when the page query param changes\n */\n queryParamTriggerList?: string[];\n /**\n * Config for fragment scrolling.\n */\n fragment?: {\n /**\n * Enable fragment scrolling (scroll to element with id)\n * @default false\n */\n enabled?: boolean;\n /**\n * Whether to use smooth scrolling or not.\n * @default false\n */\n smooth?: boolean;\n };\n /**\n * Config for restoring the previous scroll offset on browser back/forward navigation.\n * Disabled by default - without it, history navigation scrolls to top like any other navigation.\n */\n restore?: ScrollRestorationRestoreConfig;\n};\n\nexport const ET_DISABLE_SCROLL_TOP = /* @__PURE__ */ Symbol('ET_DISABLE_SCROLL_TOP');\nexport const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE = /* @__PURE__ */ Symbol('ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE');\nexport const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE = /* @__PURE__ */ Symbol(\n 'ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE',\n);\n\nexport type RouterDisableScrollTopConfig = {\n /**\n * Whether to disable scroll to top ONLY when navigating back to this route.\n * @default false\n */\n asReturnRoute?: boolean;\n\n /**\n * Whether to disable scroll to top when a path param changes.\n * @default false\n */\n onPathParamChange?: boolean;\n};\n\nexport const routerDisableScrollTop = (config: RouterDisableScrollTopConfig = {}) => {\n return {\n ...(!config.asReturnRoute ? { [ET_DISABLE_SCROLL_TOP]: true } : { [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: true }),\n ...(config.onPathParamChange ? { [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]: true } : {}),\n };\n};\n\nexport const ET_RESTORE_SCROLL = /* @__PURE__ */ Symbol('ET_RESTORE_SCROLL');\n\n/**\n * Marks a navigation as a return to a page the user has already seen, so it restores that page's last\n * scroll offset instead of scrolling to top - what a \"back to the overview\" link means, as opposed to\n * a link that opens the overview fresh. Spread into `NavigationExtras.state`; for a `routerLink`, use\n * {@link RestoreScrollDirective} instead.\n *\n * Needs `restore.enabled` on {@link setupScrollRestoration}, and only ever restores an offset the\n * session actually recorded - the first visit to a page has none, so it scrolls to top as usual.\n *\n * @example\n * router.navigate(['/teams'], { state: routerRestoreScroll() });\n */\nexport const routerRestoreScroll = () => ({ [ET_RESTORE_SCROLL]: true });\n\nconst SCROLL_RESTORATION_HOLDS_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const holds = new Set<() => boolean>();\n\n return {\n add: (isPending: () => boolean) => {\n holds.add(isPending);\n\n return () => holds.delete(isPending);\n },\n isHeld: () => {\n for (const isPending of holds) {\n if (isPending()) return true;\n }\n\n return false;\n },\n };\n },\n { name: 'ScrollRestorationHolds' },\n);\n\n/**\n * Registry of \"not settled yet\" reporters. Lives in the root injector so a route component can\n * reach the registration created by the app level `setupScrollRestoration` call.\n * @internal\n */\nconst injectScrollRestorationHolds = /* @__PURE__ */ toInjectFn(SCROLL_RESTORATION_HOLDS_DEF);\n\n/**\n * Suspend scroll restoration while `isPending` reads `true`.\n *\n * Restoration already waits for the scroll container to grow tall enough to reach the saved offset,\n * so this is only needed when the content may take longer than `restore.timeout` to get there -\n * a slow list request, for instance. Registers for the lifetime of the current injection context.\n *\n * @example\n * // inside a route component\n * holdScrollRestoration(() => query.isLoading());\n */\nexport const holdScrollRestoration = (isPending: () => boolean) => {\n const remove = injectScrollRestorationHolds().add(isPending);\n\n inject(DestroyRef).onDestroy(remove);\n};\n\n/** Upper bound on remembered history entries. Each entry is a single number, so this is generous. */\nconst MAX_STORED_POSITIONS = 200;\n\nconst DEFAULT_RESTORE_TIMEOUT = 1000;\nconst DEFAULT_RESTORE_MAX_TIMEOUT = 10_000;\n\n/** Events that mean the user took over scrolling, so a pending restoration must be abandoned. */\nconst INTERACTION_EVENTS = ['wheel', 'touchmove', 'keydown'] as const;\n\n/** What a visited history entry left behind: where it was scrolled to, and which page that was. */\ntype StoredPosition = {\n top: number;\n route: string;\n search: string;\n};\n\n/** Key order is navigation order, not declaration order, so two spellings of one URL compare equal. */\nconst serializeQueryParams = (queryParams: Params) =>\n Object.keys(queryParams)\n .sort()\n .map((key) => `${key}=${queryParams[key]}`)\n .join('&');\n\nexport const setupScrollRestoration = (config: SetupScrollRestorationConfig = {}) => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n const router = inject(Router);\n const document = inject(DOCUMENT);\n const injector = inject(Injector);\n const holds = injectScrollRestorationHolds();\n\n const restoreEnabled = config.restore?.enabled === true;\n const restoreTimeout = config.restore?.timeout ?? DEFAULT_RESTORE_TIMEOUT;\n const restoreMaxTimeout = config.restore?.maxTimeout ?? DEFAULT_RESTORE_MAX_TIMEOUT;\n const clampOnTimeout = config.restore?.clampOnTimeout ?? true;\n\n const resolveScrollElement = () => {\n const el = typeof config.scrollElement === 'function' ? config.scrollElement() : config.scrollElement;\n\n return el ?? document.documentElement;\n };\n\n // The browser restores the offset against the still-loading (much shorter) document, which is the\n // exact problem we are solving - take it over completely.\n if (restoreEnabled && 'scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n\n /** Saved offsets keyed by the router's per-history-entry `navigationId`, in least-recent-first order. */\n const positions = new Map<number, StoredPosition>();\n\n // Mirrors Angular's own `RouterScroller`: the offset of the currently displayed page belongs to\n // the navigation that produced it, and a popstate reports the id of the entry it moves to.\n let lastNavigationId = 0;\n let restoredNavigationId = 0;\n let isPopstate = false;\n let wantsRestore = false;\n\n let prev = { state: createRouterState(router), route: createRoute(router) };\n\n let pendingRestore: (() => void) | null = null;\n\n const cancelPendingRestore = () => {\n pendingRestore?.();\n pendingRestore = null;\n };\n\n const scheduleRestore = (target: number) => {\n cancelPendingRestore();\n\n let frame = 0;\n let started = false;\n let cancelled = false;\n\n // The user scrolling always wins over a restoration we have not committed yet.\n const abortByUser = () => cancelPendingRestore();\n\n const hardDeadline = Date.now() + Math.max(restoreTimeout, restoreMaxTimeout);\n let deadline = Date.now() + restoreTimeout;\n\n const step = () => {\n frame = 0;\n\n if (cancelled) return;\n\n const el = resolveScrollElement();\n const maxOffset = Math.max(0, el.scrollHeight - el.clientHeight);\n\n if (maxOffset >= target) {\n el.scrollTop = target;\n cancelPendingRestore();\n\n return;\n }\n\n const now = Date.now();\n\n // A registered hold means the page knows more data is coming, so the content is expected to\n // grow - suspend the clock instead of giving up on a still loading page.\n if (holds.isHeld() && now < hardDeadline) {\n deadline = now + restoreTimeout;\n }\n\n if (now < deadline && now < hardDeadline) {\n frame = requestAnimationFrame(step);\n\n return;\n }\n\n if (clampOnTimeout && maxOffset > 0) {\n el.scrollTop = Math.min(target, maxOffset);\n }\n\n cancelPendingRestore();\n };\n\n // Wait for the new route to actually render before reading any geometry - on `NavigationEnd` the\n // components exist but the DOM still shows the previous page, whose height would be measured\n // instead. The timeout is a safety net in case no render pass follows.\n const start = () => {\n if (started || cancelled) return;\n started = true;\n\n frame = requestAnimationFrame(step);\n };\n\n const renderRef = afterNextRender({ read: start }, { injector });\n\n const fallback = setTimeout(start);\n\n for (const eventName of INTERACTION_EVENTS) {\n document.addEventListener(eventName, abortByUser, { capture: true, passive: true });\n }\n\n pendingRestore = () => {\n // `cancelled` is not redundant with destroying the render hook: a superseded restoration must\n // not apply its (now stale) offset even if its hook had already been queued to run.\n cancelled = true;\n renderRef.destroy();\n\n if (frame) cancelAnimationFrame(frame);\n clearTimeout(fallback);\n\n for (const eventName of INTERACTION_EVENTS) {\n document.removeEventListener(eventName, abortByUser, { capture: true });\n }\n };\n };\n\n /**\n * The offset the most recently left entry for this page had. A target without query params means\n * \"that page\", whichever query state it was last in - the crumb linking to an overview does not\n * know, and should not have to reproduce, the filter the user left it under.\n */\n const findLastVisitedOffset = (route: string, search: string) => {\n const entries = [...positions.values()];\n\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n\n if (!entry || entry.route !== route) continue;\n if (search && entry.search !== search) continue;\n\n return entry.top;\n }\n\n return undefined;\n };\n\n const onNavigationStart = (event: NavigationStart) => {\n // A new navigation supersedes a restoration that has not committed yet.\n cancelPendingRestore();\n\n if (!restoreEnabled) return;\n\n // Re-inserted rather than overwritten so map order stays least-recently-left first, which is both\n // what `findLastVisitedOffset` walks backwards and what the cap below evicts from.\n positions.delete(lastNavigationId);\n positions.set(lastNavigationId, {\n top: resolveScrollElement().scrollTop,\n route: prev.route,\n search: serializeQueryParams(prev.state.queryParams),\n });\n\n if (positions.size > MAX_STORED_POSITIONS) {\n const oldest = positions.keys().next();\n\n if (!oldest.done) positions.delete(oldest.value);\n }\n\n isPopstate = event.navigationTrigger === 'popstate';\n restoredNavigationId = event.restoredState?.navigationId ?? 0;\n\n // Read off the navigation rather than `history.state`: a symbol key does not survive being\n // structured-cloned into the history entry, which is what keeps the mark from outliving this\n // navigation and re-firing when the user later pops back to the entry it created.\n const navigationState = router.getCurrentNavigation()?.extras.state as Record<symbol, unknown> | undefined;\n\n wantsRestore = !isPopstate && navigationState?.[ET_RESTORE_SCROLL] === true;\n };\n\n const onNavigationEnd = (event: NavigationEnd | NavigationSkipped) => {\n const curr = { state: createRouterState(router), route: createRoute(router) };\n\n const prevState = prev.state;\n const currState = curr.state;\n const sameUrlNavigation = prev.route === curr.route;\n const didFragmentChange = prevState.fragment !== currState.fragment;\n\n prev = curr;\n\n const wasMarkedAsReturn = wantsRestore;\n\n wantsRestore = false;\n\n if (event instanceof NavigationEnd) {\n lastNavigationId = event.id;\n } else {\n // A skipped same url navigation is not a history move, so there is nothing to restore.\n isPopstate = false;\n restoredNavigationId = 0;\n }\n\n if (restoreEnabled && isPopstate) {\n const target = positions.get(restoredNavigationId);\n\n // The saved offset wins over both scroll to top and fragment scrolling: the user may well have\n // scrolled away from the anchor before leaving the page.\n if (target !== undefined) {\n scheduleRestore(target.top);\n\n return;\n }\n }\n\n if (restoreEnabled && wasMarkedAsReturn) {\n const target = findLastVisitedOffset(curr.route, serializeQueryParams(currState.queryParams));\n\n if (target !== undefined) {\n scheduleRestore(target);\n\n return;\n }\n }\n\n if (sameUrlNavigation) {\n const allQueryParams = [\n ...new Set(Object.keys(prevState.queryParams).concat(Object.keys(currState.queryParams))),\n ];\n\n const changedQueryParams = allQueryParams.filter(\n (key) => currState.queryParams[key] !== prevState.queryParams[key],\n );\n\n if (!config.queryParamTriggerList?.length && !didFragmentChange) {\n return;\n }\n\n const caseQueryParams = changedQueryParams.some((key) => config.queryParamTriggerList?.includes(key));\n const caseFragment = didFragmentChange && config.fragment?.enabled;\n\n if (caseQueryParams) {\n resolveScrollElement().scrollTop = 0;\n } else if (caseFragment) {\n const fragmentElement = document.getElementById(currState.fragment ?? '');\n\n if (fragmentElement) {\n fragmentElement.scrollIntoView({ behavior: config.fragment?.smooth ? 'smooth' : 'auto' });\n }\n }\n } else {\n const viaReturnRoute =\n currState.data[ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE] && prevState.data[ET_DISABLE_SCROLL_TOP];\n const explicitly = currState.data[ET_DISABLE_SCROLL_TOP];\n const pathParamsChange = currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE];\n\n if (viaReturnRoute || explicitly || pathParamsChange) {\n return;\n }\n\n resolveScrollElement().scrollTop = 0;\n }\n };\n\n router.events\n .pipe(\n filter(\n (e): e is NavigationStart | NavigationEnd | NavigationSkipped =>\n e instanceof NavigationStart || e instanceof NavigationEnd || e instanceof NavigationSkipped,\n ),\n takeUntilDestroyed(),\n )\n .subscribe((event) => {\n if (event instanceof NavigationStart) {\n onNavigationStart(event);\n\n return;\n }\n\n onNavigationEnd(event);\n });\n};\n","import { injectQueryParam } from '../signals';\n\nexport const DISABLE_LOGGER_PARAM = 'et-logger-quiet';\n\nexport type CreateLoggerConfig = {\n scope: string;\n feature: string;\n};\n\nexport const createLogger = (config: CreateLoggerConfig) => {\n const { scope, feature } = config;\n const disableLogging = injectQueryParam(DISABLE_LOGGER_PARAM);\n\n const writeLog = (...args: unknown[]) => {\n if (disableLogging()) {\n return;\n }\n console.log(...args);\n };\n\n return {\n log: (...args: unknown[]) => writeLog(`\\x1B[32;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n warn: (...args: unknown[]) => writeLog(`\\x1B[93;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n error: (...args: unknown[]) => writeLog(`\\x1B[31;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n };\n};\n","const escapeHtml = (str: string) =>\n str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n\n/** Escapes HTML-special characters but leaves existing entity references intact - for input that\n * may already contain entities (e.g. Markdown serialized from the editor's DOM, where `&` is\n * stored as `&amp;`), where plain escaping would double-escape them. */\nconst escapeHtmlPreservingEntities = (str: string) =>\n str\n .replace(/&(?![a-z]+;|#\\d+;|#x[0-9a-f]+;)/gi, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n/** Rejects URL schemes that execute script when navigated. Whitespace/control characters are\n * stripped before checking - browsers ignore them inside URLs, so `java\\tscript:` would\n * otherwise slip through. */\nconst isSafeUrl = (url: string) =>\n // eslint-disable-next-line no-control-regex -- stripping control characters is the point: browsers ignore them inside URLs\n !/^(javascript|data|vbscript):/i.test(url.replace(/[\\s\\u0000-\\u001f]/g, ''));\n\nconst unescapeHtml = (str: string) =>\n str\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&nbsp;/g, ' ');\n\nconst stripTags = (str: string) => str.replace(/<[^>]+>/g, '');\n\nconst parseTableRow = (line: string): string[] =>\n line\n .split('|')\n .slice(1, -1)\n .map((cell) => cell.trim());\n\nconst isTableSeparatorLine = (line: string) => /^\\|?(\\s*:?-+:?\\s*\\|)+\\s*$/.test(line);\n\ntype TableAlign = 'left' | 'center' | 'right' | null;\n\n/** Column alignments from a GFM separator line: `:---` left, `:---:` center, `---:` right. */\nconst parseSeparatorAligns = (line: string): TableAlign[] =>\n parseTableRow(line).map((cell) => {\n const left = cell.startsWith(':');\n const right = cell.endsWith(':');\n\n return left && right ? 'center' : right ? 'right' : left ? 'left' : null;\n });\n\n/** The GFM separator token for a column alignment. */\nconst separatorFor = (align: TableAlign) =>\n align === 'center' ? ':---:' : align === 'right' ? '---:' : align === 'left' ? ':---' : '---';\n\nconst alignStyle = (align: TableAlign) => (align ? ` style=\"text-align: ${align}\"` : '');\n\n/** Wraps `content` in an emphasis `marker`, hoisting boundary whitespace outside the delimiters -\n * CommonMark emphasis must not face whitespace on the inside (`** fett**` doesn't parse), and\n * `&nbsp;` counts as whitespace there too. Whitespace-only content stays unwrapped. */\nconst emphasize = (marker: string, content: string) => {\n const lead = /^(?:\\s|&nbsp;)+/i.exec(content)?.[0] ?? '';\n const rest = content.slice(lead.length);\n const trail = /(?:\\s|&nbsp;)+$/i.exec(rest)?.[0] ?? '';\n const core = rest.slice(0, rest.length - trail.length);\n\n return core ? `${lead}${marker}${core}${marker}${trail}` : content;\n};\n\nconst makePlaceholder = (kind: string, idx: number) => `\\u{E000}${kind}${idx}\\u{E001}`;\nconst placeholderRe = (kind: string) => new RegExp(`\\u{E000}${kind}(\\\\d+)\\u{E001}`, 'gu');\nconst isPlaceholder = (kind: string, str: string) => new RegExp(`^\\u{E000}${kind}\\\\d+\\u{E001}$`, 'u').test(str);\n\n/** Tags allowed to survive inside an aligned block's raw-HTML passthrough. */\nconst SAFE_INLINE_TAGS = /* @__PURE__ */ new Set(['strong', 'em', 'b', 'i', 'del', 's', 'u', 'code', 'br']);\n\n/** Reduces raw inline HTML to the editor's own vocabulary: allowed tags lose all their attributes\n * (`<a>` keeps a safe `href`), everything else - including any event-handler attribute - is\n * dropped, and the remaining text is escaped. */\nconst sanitizeInlineHtml = (html: string) => {\n const kept: string[] = [];\n\n const stashed = html.replace(/<\\s*(\\/?)\\s*([a-z][a-z0-9]*)\\b[^>]*>/gi, (full, closing: string, tag: string) => {\n const name = tag.toLowerCase();\n\n if (name === 'a') {\n const href = closing ? null : /\\bhref\\s*=\\s*\"([^\"]*)\"/i.exec(full)?.[1];\n const anchor = closing ? '</a>' : href && isSafeUrl(href) ? `<a href=\"${href}\">` : '<a>';\n\n return makePlaceholder('TAG', kept.push(anchor) - 1);\n }\n\n if (!SAFE_INLINE_TAGS.has(name)) return '';\n\n return makePlaceholder('TAG', kept.push(closing ? `</${name}>` : `<${name}>`) - 1);\n });\n\n return escapeHtmlPreservingEntities(stashed).replace(placeholderRe('TAG'), (_, i) => kept[+i] ?? '');\n};\n\nconst processInline = (text: string): string => {\n const inlineCodes: string[] = [];\n text = text.replace(/`([^`]+)`/g, (_, code: string) => {\n const idx = inlineCodes.push(`<code>${escapeHtml(code)}</code>`) - 1;\n return makePlaceholder('IC', idx);\n });\n\n // \"Open in new tab\" links round-trip as raw HTML because Markdown has no `target` syntax. Extract\n // them before the raw-HTML escape below, keeping only a safe href, `target=\"_blank\"` and a forced\n // `rel=\"noopener noreferrer\"` (any other attribute - including event handlers - is dropped); their\n // inner markup is processed recursively. Anything else that looks like raw HTML is still escaped.\n const newTabLinks: string[] = [];\n text = text.replace(/<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi, (full, attrs: string, inner: string) => {\n const href = /\\bhref\\s*=\\s*\"([^\"]*)\"/i.exec(attrs)?.[1];\n const newTab = /\\btarget\\s*=\\s*\"_blank\"/i.test(attrs);\n\n if (!newTab || !href || !isSafeUrl(href)) return full;\n\n const anchor = `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${processInline(inner)}</a>`;\n\n return makePlaceholder('NTLINK', newTabLinks.push(anchor) - 1);\n });\n\n // Raw HTML in Markdown text is escaped, not rendered - the editor writes this HTML straight\n // into the DOM via innerHTML, so anything else would let a crafted value inject markup. `<u>`\n // is the one deliberate exception: underline has no Markdown form and round-trips as raw <u>.\n text = escapeHtmlPreservingEntities(text).replace(/&lt;(\\/?)u&gt;/gi, '<$1u>');\n\n // Bold + italic - *** before ** before *. A delimiter flanking whitespace doesn't open/close a\n // run (CommonMark's flanking rule), so literal asterisks as in `2 * 3 * 4` stay text.\n text = text.replace(/\\*\\*\\*([^\\s*](?:.*?[^\\s*])?)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n text = text.replace(/\\*\\*([^\\s*](?:.*?[^\\s*])?)\\*\\*/g, '<strong>$1</strong>');\n text = text.replace(/__([^\\s_](?:.*?[^\\s_])?)__/g, '<strong>$1</strong>');\n text = text.replace(/\\*([^\\s*](?:.*?[^\\s*])?)\\*/g, '<em>$1</em>');\n // Single-underscore emphasis must not fire inside a word (snake_case identifiers).\n text = text.replace(/(?<![\\w*_])_([^\\s_](?:.*?[^\\s_])?)_(?![\\w_])/g, '<em>$1</em>');\n text = text.replace(/~~([^\\s~](?:.*?[^\\s~])?)~~/g, '<del>$1</del>');\n\n // Images before links (order matters); URLs with script-running schemes stay literal text\n text = text.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (match, alt: string, src: string) =>\n isSafeUrl(src) ? `<img src=\"${src}\" alt=\"${alt}\">` : match,\n );\n text = text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (match, label: string, href: string) =>\n isSafeUrl(href) ? `<a href=\"${href}\">${label}</a>` : match,\n );\n\n return text\n .replace(placeholderRe('IC'), (_, i) => inlineCodes[+i] ?? '')\n .replace(placeholderRe('NTLINK'), (_, i) => newTabLinks[+i] ?? '');\n};\n\n// --- Nested list helpers (regex can't match balanced nesting, so these scan by tag depth) ---\n\n/** The first top-level `<ul>`/`<ol>` in `html`, matched with balanced nesting. */\nconst findList = (html: string): { start: number; end: number; ordered: boolean; inner: string } | null => {\n const open = /<(ul|ol)\\b[^>]*>/i.exec(html);\n\n if (!open) return null;\n\n const openTagName = open[1] ?? '';\n const innerStart = open.index + open[0].length;\n const tag = /<(\\/?)(?:ul|ol)\\b[^>]*>/gi;\n tag.lastIndex = innerStart;\n\n let depth = 1;\n let match: RegExpExecArray | null;\n\n while ((match = tag.exec(html))) {\n depth += match[1] ? -1 : 1;\n\n if (depth === 0) {\n return {\n start: open.index,\n end: tag.lastIndex,\n ordered: openTagName.toLowerCase() === 'ol',\n inner: html.slice(innerStart, match.index),\n };\n }\n }\n\n return null;\n};\n\n/** The inner HTML of each direct `<li>` child of a list's inner HTML (balanced over nested lists). */\nconst findListItems = (inner: string): string[] => {\n const items: string[] = [];\n const tag = /<(\\/?)li\\b[^>]*>/gi;\n\n let depth = 0;\n let start = -1;\n let match: RegExpExecArray | null;\n\n while ((match = tag.exec(inner))) {\n if (match[1]) {\n depth--;\n if (depth === 0 && start >= 0) {\n items.push(inner.slice(start, match.index));\n start = -1;\n }\n } else {\n if (depth === 0) start = match.index + match[0].length;\n depth++;\n }\n }\n\n return items;\n};\n\n/** The first top-level `<blockquote>` in `html`, matched with balanced nesting. */\nconst findBlockquote = (html: string): { start: number; end: number; inner: string } | null => {\n const open = /<blockquote\\b[^>]*>/i.exec(html);\n\n if (!open) return null;\n\n const innerStart = open.index + open[0].length;\n const tag = /<(\\/?)blockquote\\b[^>]*>/gi;\n tag.lastIndex = innerStart;\n\n let depth = 1;\n let match: RegExpExecArray | null;\n\n while ((match = tag.exec(html))) {\n depth += match[1] ? -1 : 1;\n\n if (depth === 0) {\n return { start: open.index, end: tag.lastIndex, inner: html.slice(innerStart, match.index) };\n }\n }\n\n return null;\n};\n\n/** The lines of quoted text in a blockquote's own (non-nested) HTML, each with its `> ` prefix.\n * `<br>` and paragraph boundaries are the line breaks - the tag-strip would swallow them. */\nconst quotedLines = (html: string, prefix: string): string[] => {\n const text = stripTags(html.replace(/<br\\s*\\/?>/gi, '\\n').replace(/<\\/p\\s*>/gi, '\\n')).trim();\n\n return text ? text.split('\\n').map((line) => `${prefix}${line.trim()}`) : [];\n};\n\n/** Serializes a blockquote's inner HTML to Markdown, one `>` per nesting level. */\nconst blockquoteToMarkdown = (inner: string, depth: number): string => {\n const prefix = '> '.repeat(depth + 1);\n const lines: string[] = [];\n let rest = inner;\n\n for (let nested = findBlockquote(rest); nested; nested = findBlockquote(rest)) {\n lines.push(...quotedLines(rest.slice(0, nested.start), prefix));\n lines.push(blockquoteToMarkdown(nested.inner, depth + 1));\n rest = rest.slice(nested.end);\n }\n\n lines.push(...quotedLines(rest, prefix));\n\n // An empty quote still needs its marker, or it would vanish from the value entirely.\n return lines.length > 0 ? lines.join('\\n') : prefix.trim();\n};\n\n/** Builds a `<blockquote>` from `> `-prefixed lines, recursing into runs of deeper (`>>`) lines. */\nconst buildBlockquoteHtml = (lines: string[]): string => {\n let html = '';\n let run: string[] = [];\n\n const flushRun = () => {\n if (run.length > 0) html += run.map(processInline).join('<br>');\n run = [];\n };\n\n for (let i = 0; i < lines.length;) {\n const stripped = (lines[i] ?? '').replace(/^>[ \\t]?/, '');\n\n if (!stripped.startsWith('>')) {\n run.push(stripped);\n i++;\n continue;\n }\n\n flushRun();\n\n const nested: string[] = [];\n\n while (i < lines.length) {\n const line = (lines[i] ?? '').replace(/^>[ \\t]?/, '');\n\n if (!line.startsWith('>')) break;\n\n nested.push(line);\n i++;\n }\n\n html += buildBlockquoteHtml(nested);\n }\n\n flushRun();\n\n // `<br>` so an empty quote has a line box the caret can sit in (the editor writes this HTML live)\n return `<blockquote>${html || '<br>'}</blockquote>`;\n};\n\n/** Serializes a list's inner HTML to Markdown, indenting nested lists two spaces per level. */\nconst listToMarkdown = (inner: string, ordered: boolean, depth: number): string => {\n const indent = ' '.repeat(depth);\n let n = 1;\n\n return findListItems(inner)\n .map((itemInner) => {\n let content = itemInner;\n let nestedMarkdown = '';\n\n for (let nested = findList(content); nested; nested = findList(content)) {\n nestedMarkdown += `\\n${listToMarkdown(nested.inner, nested.ordered, depth + 1)}`;\n content = content.slice(0, nested.start) + content.slice(nested.end);\n }\n\n const marker = ordered ? `${n++}. ` : '- ';\n\n // list items are single-line in this serializer, so a <br> degrades to a space\n return `${indent}${marker}${stripTags(content.replace(/<br\\s*\\/?>/gi, ' ')).trim()}${nestedMarkdown}`;\n })\n .join('\\n');\n};\n\ntype ParsedListLine = { indent: number; ordered: boolean; text: string };\n\n/** Parses list lines into (indent-level, ordered, text) - two leading spaces per nesting level. */\nconst parseListLines = (lines: string[]): ParsedListLine[] =>\n lines\n .map((line): ParsedListLine | null => {\n const match = /^(\\s*)([-*+]|\\d+\\.)\\s+(.*)$/.exec(line);\n\n return match\n ? { indent: Math.floor((match[1] ?? '').length / 2), ordered: /\\d/.test(match[2] ?? ''), text: match[3] ?? '' }\n : null;\n })\n .filter((line): line is ParsedListLine => line !== null);\n\n/** Builds nested `<ul>`/`<ol>` HTML from parsed list lines starting at `start`, for one indent level. */\nconst buildListHtml = (lines: ParsedListLine[], start: number, baseIndent: number): { html: string; next: number } => {\n const ordered = lines[start]?.ordered ?? false;\n let items = '';\n let i = start;\n\n for (let line = lines[i]; line?.indent === baseIndent; line = lines[i]) {\n let item = processInline(line.text);\n i++;\n\n const nested = lines[i];\n\n if (nested && nested.indent > baseIndent) {\n const built = buildListHtml(lines, i, nested.indent);\n item += built.html;\n i = built.next;\n }\n\n items += `<li>${item}</li>`;\n }\n\n const tag = ordered ? 'ol' : 'ul';\n\n return { html: `<${tag}>${items}</${tag}>`, next: i };\n};\n\n/**\n * Converts a markdown string to HTML.\n * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,\n * links, images, block quotes, unordered/ordered (and nested) lists, tables, horizontal rules, and paragraphs.\n */\nexport const markdownToHtml = (markdown: string) => {\n if (!markdown) return '';\n\n let text = markdown.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Extract fenced code blocks before any other processing\n const codeBlocks: string[] = [];\n text = text.replace(/```(\\w*)\\n([\\s\\S]*?)```/g, (_, lang: string, code: string) => {\n const langAttr = lang ? ` class=\"language-${lang}\"` : '';\n const idx = codeBlocks.push(`<pre><code${langAttr}>${escapeHtml(code.trim())}</code></pre>`) - 1;\n return makePlaceholder('CODE', idx);\n });\n\n // Markdown headings don't require blank lines around them, but blocks are\n // split on blank lines below. Isolate each heading line into its own block so\n // a heading directly followed by a list/paragraph isn't swallowed into it.\n text = text.replace(/^(#{1,6}\\s+.+)$/gm, '\\n\\n$1\\n\\n');\n\n const html = text\n .split(/\\n\\n+/)\n .map((block) => {\n const trimmed = block.trim();\n if (!trimmed) return '';\n\n if (isPlaceholder('CODE', trimmed)) return trimmed;\n\n // Aligned block: text-align has no Markdown form, so it round-trips as raw native HTML.\n // Rebuild it instead of passing it through verbatim: only the alignment survives on the tag\n // (no other attributes, e.g. event handlers) and the inner markup is reduced to the editor's\n // own inline vocabulary.\n const aligned = /^<(p|h[1-6]|div)\\b[^>]*\\bstyle=[\"'][^\"']*text-align:\\s*([a-z]+)[^>]*>([\\s\\S]*)<\\/\\1>$/i.exec(\n trimmed,\n );\n\n if (aligned) {\n const tag = (aligned[1] ?? 'p').toLowerCase();\n const align = (aligned[2] ?? 'left').toLowerCase();\n\n return `<${tag} style=\"text-align: ${align}\">${sanitizeInlineHtml(aligned[3] ?? '')}</${tag}>`;\n }\n\n // Heading\n const headingMatch = trimmed.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch?.[1] && headingMatch?.[2]) {\n const level = headingMatch[1].length;\n\n return `<h${level}>${processInline(headingMatch[2].trim())}</h${level}>`;\n }\n\n // Horizontal rule\n if (/^(---|\\*\\*\\*|___)\\s*$/.test(trimmed)) return '<hr>';\n\n // Table (GFM) - column alignment from the separator line lands as text-align on every cell\n const tableLines = trimmed.split('\\n');\n if (tableLines.length >= 2 && /\\|/.test(tableLines[0] ?? '') && isTableSeparatorLine(tableLines[1] ?? '')) {\n const aligns = parseSeparatorAligns(tableLines[1] ?? '');\n const headers = parseTableRow(tableLines[0] ?? '');\n const thead = `<thead><tr>${headers\n .map((h, i) => `<th${alignStyle(aligns[i] ?? null)}>${processInline(h)}</th>`)\n .join('')}</tr></thead>`;\n const bodyRows = tableLines.slice(2);\n const tbody =\n bodyRows.length > 0\n ? `<tbody>${bodyRows\n .map(\n (row) =>\n `<tr>${parseTableRow(row)\n .map((cell, i) => `<td${alignStyle(aligns[i] ?? null)}>${processInline(cell)}</td>`)\n .join('')}</tr>`,\n )\n .join('')}</tbody>`\n : '';\n\n return `<table>${thead}${tbody}</table>`;\n }\n\n // Blockquote - each line runs through the inline pass on its own (processInline escapes raw\n // HTML, so joining first would escape the <br> separators too), and a `>>` run nests\n if (/^>/.test(trimmed)) return buildBlockquoteHtml(trimmed.split('\\n'));\n\n // List (unordered/ordered, with indentation-based nesting)\n if (/^([-*+]|\\d+\\.)\\s/.test(trimmed)) {\n const lines = parseListLines(trimmed.split('\\n'));\n const [firstLine] = lines;\n\n if (firstLine) {\n return buildListHtml(lines, 0, firstLine.indent).html;\n }\n }\n\n // Paragraph - single newlines within a block become <br>\n return `<p>${trimmed\n .split('\\n')\n .map((l) => processInline(l))\n .join('<br>')}</p>`;\n })\n .filter(Boolean)\n .join('\\n');\n\n return html.replace(placeholderRe('CODE'), (_, i) => codeBlocks[+i] ?? '');\n};\n\n/**\n * Converts an HTML string to markdown.\n * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,\n * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.\n */\nexport const htmlToMarkdown = (html: string) => {\n if (!html) return '';\n\n let md = html;\n\n // Aligned blocks: text-align has no Markdown form, so preserve them verbatim as native HTML (their\n // inner markup stays HTML) and round-trip via a placeholder - extracted before the block passes\n // below rewrite them, restored after the final tag-strip.\n const alignedBlocks: string[] = [];\n md = md.replace(/<(p|h[1-6]|div)\\b[^>]*\\bstyle=\"[^\"]*text-align[^\"]*\"[^>]*>[\\s\\S]*?<\\/\\1>/gi, (match) =>\n makePlaceholder('ALIGN', alignedBlocks.push(match) - 1),\n );\n\n // Code blocks - process before inline code\n md = md.replace(\n /<pre[^>]*><code[^>]*class=\"language-([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi,\n (_, lang: string, code: string) => `\\n\\`\\`\\`${lang}\\n${unescapeHtml(code.trim())}\\n\\`\\`\\`\\n`,\n );\n md = md.replace(\n /<pre[^>]*><code[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi,\n (_, code: string) => `\\n\\`\\`\\`\\n${unescapeHtml(code.trim())}\\n\\`\\`\\`\\n`,\n );\n md = md.replace(\n /<pre[^>]*>([\\s\\S]*?)<\\/pre>/gi,\n (_, code: string) => `\\n\\`\\`\\`\\n${unescapeHtml(code.trim())}\\n\\`\\`\\`\\n`,\n );\n\n // Headings - keep the inner markup so the inline passes below turn any nested\n // bold/italic/link/code into markdown; leftover tags are stripped at the end.\n for (let i = 6; i >= 1; i--) {\n md = md.replace(\n new RegExp(`<h${i}[^>]*>([\\\\s\\\\S]*?)<\\\\/h${i}>`, 'gi'),\n (_, content: string) => `\\n${'#'.repeat(i)} ${content.trim()}\\n`,\n );\n }\n\n // Bold + italic (combined before individual). Boundary whitespace is hoisted out of the\n // delimiters (emphasize) - `<strong> x</strong>` must become ` **x**`, not the invalid `** x**`.\n md = md.replace(/<strong[^>]*><em[^>]*>([\\s\\S]*?)<\\/em><\\/strong>/gi, (_, c: string) => emphasize('***', c));\n md = md.replace(/<em[^>]*><strong[^>]*>([\\s\\S]*?)<\\/strong><\\/em>/gi, (_, c: string) => emphasize('***', c));\n md = md.replace(/<(strong|b)[^>]*>([\\s\\S]*?)<\\/\\1>/gi, (_, _tag, c: string) => emphasize('**', c));\n md = md.replace(/<(em|i)[^>]*>([\\s\\S]*?)<\\/\\1>/gi, (_, _tag, c: string) => emphasize('*', c));\n md = md.replace(/<(del|s|strike)[^>]*>([\\s\\S]*?)<\\/\\1>/gi, (_, _tag, c: string) => emphasize('~~', c));\n\n // Inline code\n md = md.replace(/<code[^>]*>([\\s\\S]*?)<\\/code>/gi, (_, code: string) => `\\`${unescapeHtml(code)}\\``);\n\n // Links and images. A link with `target=\"_blank\"` has no Markdown form, so it round-trips as raw\n // HTML (keeping only href + target + rel) via a placeholder - like underline below; ordinary links\n // become `[text](url)`.\n const newTabLinks: string[] = [];\n md = md.replace(/<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi, (_, attrs: string, inner: string) => {\n const href = /\\bhref\\s*=\\s*\"([^\"]*)\"/i.exec(attrs)?.[1] ?? '';\n\n if (/\\btarget\\s*=\\s*\"_blank\"/i.test(attrs) && href) {\n const anchor = `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${inner}</a>`;\n\n return makePlaceholder('NTLINK', newTabLinks.push(anchor) - 1);\n }\n\n return href ? `[${inner}](${href})` : inner;\n });\n md = md.replace(/<img[^>]+src=\"([^\"]*)\"[^>]*alt=\"([^\"]*)\"[^>]*\\/?>/gi, '![$2]($1)');\n md = md.replace(/<img[^>]+alt=\"([^\"]*)\"[^>]*src=\"([^\"]*)\"[^>]*\\/?>/gi, '![$1]($2)');\n md = md.replace(/<img[^>]+src=\"([^\"]*)\"[^>]*\\/?>/gi, '![]($1)');\n\n // Underline has no Markdown form - preserve it as raw <u> so it round-trips. Extract it now (its\n // inner markup is already converted above) so the block passes below don't strip the tag; the\n // placeholder is restored after the final tag-strip.\n const underlines: string[] = [];\n md = md.replace(/<u[^>]*>([\\s\\S]*?)<\\/u>/gi, (_, inner: string) => makePlaceholder('U', underlines.push(inner) - 1));\n\n // Block quotes - replace each top-level <blockquote> with its recursively-serialized Markdown, so\n // a quote inside a quote becomes `>>` (regex alone can't match balanced nesting).\n for (let quote = findBlockquote(md); quote; quote = findBlockquote(md)) {\n md = `${md.slice(0, quote.start)}\\n${blockquoteToMarkdown(quote.inner, 0)}\\n${md.slice(quote.end)}`;\n }\n\n // Lists - replace each top-level list with its recursively-serialized Markdown (handles nesting).\n for (let list = findList(md); list; list = findList(md)) {\n md = `${md.slice(0, list.start)}\\n${listToMarkdown(list.inner, list.ordered, 0)}\\n${md.slice(list.end)}`;\n }\n\n // Tables\n md = md.replace(/<table[^>]*>([\\s\\S]*?)<\\/table>/gi, (_, tableContent: string) => {\n // GFM cells are single-line, so a <br> inside one degrades to a space (not silently dropped)\n const extractCells = (row: string) =>\n [...row.matchAll(/<t[hd][^>]*>([\\s\\S]*?)<\\/t[hd]>/gi)].map((m) =>\n stripTags((m[1] ?? '').replace(/<br\\s*\\/?>/gi, ' ')).trim(),\n );\n\n // GFM alignment is per column, read from the header cells' text-align styles\n const extractAligns = (row: string): TableAlign[] =>\n [...row.matchAll(/<t[hd]([^>]*)>/gi)].map((m) => {\n const align = /text-align:\\s*(left|center|right)/i.exec(m[1] ?? '')?.[1]?.toLowerCase();\n\n return (align as TableAlign) ?? null;\n });\n\n const theadMatch = tableContent.match(/<thead[^>]*>([\\s\\S]*?)<\\/thead>/i);\n const firstTrMatch = tableContent.match(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/i);\n const headerRow = theadMatch?.[1] ?? firstTrMatch?.[1] ?? '';\n const headerCells = headerRow ? extractCells(headerRow) : [];\n\n if (headerCells.length === 0) return '';\n\n const aligns = extractAligns(headerRow);\n const separator = headerCells.map((_cell, i) => separatorFor(aligns[i] ?? null)).join(' | ');\n const bodySource = theadMatch\n ? tableContent.replace(theadMatch[0], '')\n : tableContent.replace(firstTrMatch?.[0] ?? '', '');\n\n const bodyRows = [...bodySource.matchAll(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi)].map((m) =>\n extractCells(m[1] ?? '').join(' | '),\n );\n\n const lines = [`| ${headerCells.join(' | ')} |`, `| ${separator} |`, ...bodyRows.map((r) => `| ${r} |`)];\n return `\\n${lines.join('\\n')}\\n`;\n });\n\n // Block elements - a <br> inside a paragraph is a soft line break; turn it into a newline before\n // the tag-strip removes it, so it round-trips (a single newline within a block renders as <br>)\n md = md.replace(\n /<p[^>]*>([\\s\\S]*?)<\\/p>/gi,\n (_, content: string) => `\\n${stripTags(content.replace(/<br\\s*\\/?>/gi, '\\n')).trim()}\\n`,\n );\n // A <div> boundary acts as a paragraph boundary - clipboard HTML commonly uses divs as\n // paragraphs, and silently stripping them would merge adjacent blocks into one.\n md = md.replace(/<\\/div\\s*>/gi, '\\n\\n').replace(/<div[^>]*>/gi, '\\n\\n');\n md = md.replace(/<br\\s*\\/?>/gi, '\\n');\n md = md.replace(/<hr\\s*\\/?>/gi, '\\n---\\n');\n\n md = unescapeHtml(stripTags(md)).replace(placeholderRe('U'), (_, i) => `<u>${underlines[+i] ?? ''}</u>`);\n // new-tab links survive the tag-strip as raw HTML (restored after it, like underline)\n md = md.replace(placeholderRe('NTLINK'), (_, i) => newTabLinks[+i] ?? '');\n // aligned blocks are block-level, so pad with blank lines before collapsing so they survive as\n // their own Markdown block\n md = md.replace(placeholderRe('ALIGN'), (_, i) => `\\n\\n${alignedBlocks[+i] ?? ''}\\n\\n`);\n\n return md.replace(/\\n{3,}/g, '\\n\\n').trim();\n};\n","export const clamp = (value: number, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n\nexport const round = (value: number, precision = 0) => {\n const multiplier = Math.pow(10, precision);\n return Math.round(value * multiplier) / multiplier;\n};\n","export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value);\n};\n\nexport const getObjectProperty = (obj: Record<string, unknown>, prop: string) => {\n const hasDotNotation = prop.includes('.');\n const hasBracketNotation = prop.includes('[');\n\n if (!hasDotNotation && !hasBracketNotation) return obj[prop];\n\n const props = prop.split('.');\n\n let value: unknown = obj;\n\n for (const prop of props) {\n if (!isObject(value)) return undefined;\n\n if (prop.includes('[')) {\n const [key, index] = prop.split('[').map((part) => part.replace(']', '')) as [string, string];\n const arr = value[key];\n if (!Array.isArray(arr)) return undefined;\n\n value = arr[+index];\n } else {\n value = value[prop];\n }\n }\n\n return value;\n};\n","/** A `blob:` URL together with the only call that releases it again. See {@link createObjectUrlHandle}. */\nexport type ObjectUrlHandle = {\n /** The `blob:` URL, or `null` where there is no browser to mint one. */\n url: string | null;\n\n /** Releases the URL. Idempotent - a second call does nothing. */\n revoke: () => void;\n};\n\n/**\n * Creates an object URL for a `Blob`/`File` and hands back a handle that owns it. Keep the handle\n * for as long as the URL is on screen and call `revoke()` when it is not - the browser holds the\n * blob in memory until then.\n *\n * A handle rather than a bare string, so the URL and the call that frees it cannot drift apart. Use\n * `injectFileDownload()` instead when the URL only has to survive a single click.\n *\n * @example\n * const preview = createObjectUrlHandle(file);\n * // later\n * preview.revoke();\n */\nexport const createObjectUrlHandle = (object: Blob | MediaSource): ObjectUrlHandle => {\n const url = typeof URL === 'undefined' || !URL.createObjectURL ? null : URL.createObjectURL(object);\n\n let revoked = false;\n\n return {\n url,\n revoke: () => {\n if (!url || revoked) return;\n\n revoked = true;\n URL.revokeObjectURL(url);\n },\n };\n};\n","export const RUNTIME_ERROR_NO_DATA = '__ET_NO_DATA__';\n\nexport class RuntimeError<T extends number> extends Error {\n constructor(\n public code: T,\n message: null | false | string,\n public data: unknown = RUNTIME_ERROR_NO_DATA,\n ) {\n super(formatRuntimeError<T>(code, message));\n\n if (data !== RUNTIME_ERROR_NO_DATA) {\n // deferred so the error itself is logged first - consoles render the live object, so a\n // mutation after the throw is visible in the log\n setTimeout(() => {\n console.error(data);\n }, 1);\n }\n }\n}\n\nexport function formatRuntimeError<T extends number>(code: T, message: null | false | string): string {\n // prefix code with zeros if it's less than 100\n const codeWithZeros = code < 10 ? `00${code}` : code < 100 ? `0${code}` : code;\n\n const fullCode = `ET${codeWithZeros}`;\n return `${fullCode}${message ? ': ' + message : ''}`;\n}\n","export type CreateSessionMemoryConfig<TValue> = {\n key: string;\n parse: (storedValue: string) => TValue | null;\n serialize: (value: TValue) => string;\n};\n\nexport const createAutoSessionMemoryKey = ({ element, prefix }: { element: HTMLElement; prefix: string }) => {\n const pathSegments: string[] = [];\n let currentElement: HTMLElement | null = element;\n\n while (currentElement) {\n const currentElementName = currentElement.localName;\n const parentElement: HTMLElement | null = currentElement.parentElement;\n\n if (!parentElement) {\n pathSegments.unshift(currentElementName);\n\n break;\n }\n\n const siblingElements = Array.from(parentElement.children as HTMLCollectionOf<HTMLElement>);\n const siblingIndex = siblingElements.indexOf(currentElement);\n\n pathSegments.unshift(`${currentElementName}[${siblingIndex}]`);\n currentElement = parentElement;\n }\n\n const locationPath = element.ownerDocument.defaultView?.location.pathname ?? 'root';\n\n return `${prefix}:${locationPath}:${pathSegments.join('/')}`;\n};\n\nexport const canUseSessionMemory = () => {\n try {\n if (typeof globalThis.window === 'undefined') {\n return false;\n }\n\n if (typeof globalThis.document === 'undefined') {\n return false;\n }\n\n return globalThis.sessionStorage !== null && globalThis.sessionStorage !== undefined;\n } catch {\n return false;\n }\n};\n\nconst getSessionStorage = () => {\n if (!canUseSessionMemory()) {\n return null;\n }\n\n return globalThis.sessionStorage;\n};\n\nexport const createSessionMemory = <TValue>({ key, parse, serialize }: CreateSessionMemoryConfig<TValue>) => {\n const read = () => {\n const sessionStorage = getSessionStorage();\n\n if (!sessionStorage) {\n return null;\n }\n\n try {\n const storedValue = sessionStorage.getItem(key);\n\n if (storedValue === null) {\n return null;\n }\n\n return parse(storedValue);\n } catch {\n return null;\n }\n };\n\n const write = (value: TValue) => {\n const sessionStorage = getSessionStorage();\n\n if (!sessionStorage) {\n return false;\n }\n\n try {\n sessionStorage.setItem(key, serialize(value));\n\n return true;\n } catch {\n return false;\n }\n };\n\n const remove = () => {\n const sessionStorage = getSessionStorage();\n\n if (!sessionStorage) {\n return false;\n }\n\n try {\n sessionStorage.removeItem(key);\n\n return true;\n } catch {\n return false;\n }\n };\n\n return {\n read,\n write,\n remove,\n };\n};\n","export type SwipeTracker = {\n update(event: TouchEvent | MouseEvent): SwipeUpdateEvent;\n end(): SwipeEndEvent;\n cancel(): void;\n};\n\nexport type SwipeEndEvent = {\n /**\n * Speed at the moment of release, measured over the trailing {@link SWIPE_VELOCITY_WINDOW_MS} of\n * the gesture - not the whole-gesture average. A slow drag that ends in a flick reports the\n * flick, and a flick that ends parked reports ~0.\n */\n positivePixelPerSecondX: number;\n positivePixelPerSecondY: number;\n pixelPerSecondX: number;\n pixelPerSecondY: number;\n movementX: number;\n movementY: number;\n positiveMovementX: number;\n positiveMovementY: number;\n originClientX: number;\n originClientY: number;\n};\n\nexport type SwipeUpdateEvent = {\n originClientX: number;\n originClientY: number;\n timestamp: number;\n movementX: number;\n movementY: number;\n positiveMovementX: number;\n positiveMovementY: number;\n isScrolling: boolean;\n isSwiping: boolean;\n};\n\nconst getClientXY = (event: TouchEvent | MouseEvent): { clientX: number; clientY: number } => {\n if (event.type[0] === 't') {\n const touch = (event as TouchEvent).targetTouches[0] ?? (event as TouchEvent).changedTouches[0];\n\n return touch ? { clientX: touch.clientX, clientY: touch.clientY } : { clientX: 0, clientY: 0 };\n }\n return { clientX: (event as MouseEvent).clientX, clientY: (event as MouseEvent).clientY };\n};\n\n/** Trailing window over which {@link SwipeTracker.end} measures the release velocity. */\nexport const SWIPE_VELOCITY_WINDOW_MS = 100;\n\ntype SwipeSample = { t: number; movementX: number; movementY: number };\n\nexport const createSwipeTracker = (startEvent: TouchEvent | MouseEvent): SwipeTracker => {\n const { clientX: originClientX, clientY: originClientY } = getClientXY(startEvent);\n const startTime = Date.now();\n\n let movementX = 0;\n let movementY = 0;\n let isSwiping = false;\n let isScrolling = false;\n\n /**\n * Recent positions, oldest first, used to derive the release velocity. Trimmed to the trailing\n * window plus the one sample just before it, which serves as that window's baseline.\n */\n let samples: SwipeSample[] = [{ t: startTime, movementX: 0, movementY: 0 }];\n\n const update = (event: TouchEvent | MouseEvent): SwipeUpdateEvent => {\n const { clientX, clientY } = getClientXY(event);\n movementX = clientX - originClientX;\n movementY = clientY - originClientY;\n\n const now = Date.now();\n samples.push({ t: now, movementX, movementY });\n\n // Trim against the newest sample rather than `now + window`: `end()` measures from its own\n // timestamp, which is never earlier, so this always keeps a superset of what it needs.\n const cutoff = now - SWIPE_VELOCITY_WINDOW_MS;\n let dropCount = 0;\n for (let next = samples[dropCount + 1]; next && next.t < cutoff; next = samples[dropCount + 1]) dropCount++;\n if (dropCount) samples = samples.slice(dropCount);\n\n const positiveMovementX = Math.abs(movementX);\n const positiveMovementY = Math.abs(movementY);\n\n if (!isSwiping && !isScrolling) {\n if (positiveMovementY > positiveMovementX) {\n isScrolling = true;\n } else {\n isSwiping = true;\n }\n }\n\n return {\n originClientX,\n originClientY,\n timestamp: startTime,\n movementX,\n movementY,\n positiveMovementX,\n positiveMovementY,\n isScrolling,\n isSwiping,\n };\n };\n\n const measureReleaseVelocity = (endTime: number) => {\n const windowStart = endTime - SWIPE_VELOCITY_WINDOW_MS;\n const firstInWindow = samples.findIndex((sample) => sample.t >= windowStart);\n\n // Nothing moved during the window: the pointer was held still before release, so the gesture\n // carries no momentum no matter how fast it started out.\n if (firstInWindow === -1) return { x: 0, y: 0 };\n\n const newest = samples.at(-1);\n\n // Measure across the window when it holds a span of its own. With a single sample in it - a\n // pointer emitting moves slower than the window - reach back one sample for a baseline instead\n // of reporting nothing.\n const hasSpanInWindow = samples.length - firstInWindow >= 2;\n const baseline = samples[hasSpanInWindow ? firstInWindow : Math.max(0, firstInWindow - 1)];\n\n if (!newest || !baseline) return { x: 0, y: 0 };\n\n const elapsed = newest.t - baseline.t;\n\n if (elapsed <= 0) return { x: 0, y: 0 };\n\n return {\n x: ((newest.movementX - baseline.movementX) / elapsed) * 1000,\n y: ((newest.movementY - baseline.movementY) / elapsed) * 1000,\n };\n };\n\n const end = (): SwipeEndEvent => {\n const positiveMovementX = Math.abs(movementX);\n const positiveMovementY = Math.abs(movementY);\n const { x: pixelPerSecondX, y: pixelPerSecondY } = measureReleaseVelocity(Date.now());\n\n return {\n movementX,\n movementY,\n positiveMovementX,\n positiveMovementY,\n pixelPerSecondX,\n pixelPerSecondY,\n positivePixelPerSecondX: Math.abs(pixelPerSecondX),\n positivePixelPerSecondY: Math.abs(pixelPerSecondY),\n originClientX,\n originClientY,\n };\n };\n\n const cancel = () => {\n movementX = 0;\n movementY = 0;\n samples = [{ t: Date.now(), movementX: 0, movementY: 0 }];\n };\n\n return { update, end, cancel };\n};\n","type SuppressionState = { count: number; previousInlineValue: string };\n\nconst suppressions = /* @__PURE__ */ new WeakMap<Document, SuppressionState>();\n\n/**\n * Stop the browser from starting a text selection, until the returned function is called.\n *\n * Pointer-driven gestures (drag, resize, scrub) otherwise sweep a selection across everything the\n * pointer passes over. Call this when the gesture starts and release it when the gesture ends -\n * including when it is cancelled, or the page stays unselectable.\n *\n * Nested or concurrent calls are counted, so the last release restores the document's original\n * inline `user-select`. Releasing twice is a no-op.\n */\nexport const suppressTextSelection = (doc: Document): (() => void) => {\n const existing = suppressions.get(doc);\n\n if (existing) {\n existing.count++;\n } else {\n suppressions.set(doc, { count: 1, previousInlineValue: doc.documentElement.style.userSelect });\n doc.documentElement.style.userSelect = 'none';\n }\n\n let released = false;\n\n return () => {\n const state = suppressions.get(doc);\n\n if (released || !state) return;\n\n released = true;\n state.count--;\n\n if (state.count > 0) return;\n\n suppressions.delete(doc);\n doc.documentElement.style.userSelect = state.previousInlineValue;\n };\n};\n","import { ApplicationRef, inject, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn } from '../utils';\n\nconst ANGULAR_ROOT_ELEMENT_DEF = /* @__PURE__ */ defineRootProvider(() => {\n const appRef = inject(ApplicationRef);\n\n const rootElement = signal<HTMLElement | null>(null);\n\n const poll = () => {\n const appComponents = appRef.components;\n if (appComponents.length > 0) {\n rootElement.set(appComponents[0]?.location.nativeElement);\n } else {\n setTimeout(poll, 25);\n }\n };\n\n setTimeout(poll);\n\n return rootElement;\n});\n\nexport const injectAngularRootElement = /* @__PURE__ */ toInjectFn(ANGULAR_ROOT_ELEMENT_DEF);\n","import { computed, DOCUMENT, ElementRef, inject, signal } from '@angular/core';\nimport { defineProvider, toInjectFn, toProvideFn, toToken } from '../utils';\n\nconst BOUNDARY_ELEMENT_DEF = /* @__PURE__ */ defineProvider(\n () => {\n const hostElement = inject<ElementRef<HTMLElement>>(ElementRef, { optional: true });\n const document = inject(DOCUMENT);\n\n const override = signal<HTMLElement | null>(null);\n\n const value = computed(() => override() ?? hostElement?.nativeElement ?? document.documentElement);\n\n return {\n value,\n override,\n };\n },\n { name: 'Boundary Element' },\n);\n\nexport const provideBoundaryElement = /* @__PURE__ */ toProvideFn(BOUNDARY_ELEMENT_DEF);\nexport const injectBoundaryElement = /* @__PURE__ */ toInjectFn(BOUNDARY_ELEMENT_DEF);\nexport const BOUNDARY_ELEMENT_TOKEN = /* @__PURE__ */ toToken(BOUNDARY_ELEMENT_DEF);\n","import { DOCUMENT, inject } from '@angular/core';\nimport { injectRenderer } from './renderer';\n\nexport type FileDownloadOptions = {\n /**\n * The file's body - a string, a `Blob`, or the parts to build one from. A `Blob` is re-wrapped, so\n * {@link FileDownloadOptions.type} still decides the MIME type.\n */\n content: BlobPart | BlobPart[];\n\n /** The name the browser saves the file under, extension included. */\n filename: string;\n\n /** MIME type of the generated blob, e.g. `application/json`. */\n type?: string;\n};\n\n/**\n * Hands the user a file the browser downloads. Call it once from an injection context - a field\n * initializer - and the function it hands back can then be called from anywhere, including a click\n * handler.\n *\n * A no-op where there is no browser (server-side rendering), so a toolbar button needs no platform\n * check of its own. Use {@link createObjectUrlHandle} instead when the URL has to outlive the call.\n *\n * @example\n * private download = injectFileDownload();\n *\n * protected save() {\n * this.download({ content: json, filename: 'session.json', type: 'application/json' });\n * }\n */\nexport const injectFileDownload = () => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n\n return (options: FileDownloadOptions) => {\n // No window means no browser: server-side there is nothing to hand a file to.\n const view = document.defaultView;\n\n if (!view) return;\n\n const { content, filename, type } = options;\n const parts = Array.isArray(content) ? content : [content];\n const url = view.URL.createObjectURL(new view.Blob(parts, type ? { type } : undefined));\n const link = renderer.createElement('a');\n\n renderer.setProperties(link, { href: url, download: filename, rel: 'noopener' });\n renderer.setStyle(link, { display: 'none' });\n\n // Firefox only follows the click of an anchor that is in the document.\n renderer.appendChild(document.body, link);\n link.click();\n renderer.removeChild(document.body, link);\n\n // The blob would otherwise be held until the tab closes; the click has already read it.\n view.URL.revokeObjectURL(url);\n };\n};\n","import { DestroyRef, DOCUMENT, inject, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn, toToken } from '../utils/angular/di';\n\nconst FOCUS_VISIBLE_TRACKER_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n\n const isFocusVisible = signal(false);\n let hadKeyboardEvent = false;\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Tab' || e.key === 'Shift' || e.key === 'Meta' || e.key === 'Alt' || e.key === 'Control') {\n hadKeyboardEvent = true;\n queueMicrotask(() => isFocusVisible.set(true));\n }\n };\n\n const onPointerDown = () => {\n hadKeyboardEvent = false;\n queueMicrotask(() => isFocusVisible.set(false));\n };\n\n const onFocus = () => {\n if (hadKeyboardEvent) {\n queueMicrotask(() => isFocusVisible.set(true));\n }\n };\n\n const onBlur = () => {\n queueMicrotask(() => isFocusVisible.set(false));\n };\n\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('focus', onFocus, true);\n document.addEventListener('blur', onBlur, true);\n\n destroyRef.onDestroy(() => {\n document.removeEventListener('keydown', onKeyDown, true);\n document.removeEventListener('mousedown', onPointerDown, true);\n document.removeEventListener('pointerdown', onPointerDown, true);\n document.removeEventListener('touchstart', onPointerDown, true);\n document.removeEventListener('focus', onFocus, true);\n document.removeEventListener('blur', onBlur, true);\n });\n\n return {\n isFocusVisible: isFocusVisible.asReadonly(),\n };\n },\n { name: 'Focus Visible Tracker' },\n);\n\nexport const provideFocusVisibleTracker = /* @__PURE__ */ toProvideFn(FOCUS_VISIBLE_TRACKER_DEF);\nexport const injectFocusVisibleTracker = /* @__PURE__ */ toInjectFn(FOCUS_VISIBLE_TRACKER_DEF);\nexport const FOCUS_VISIBLE_TRACKER_TOKEN = /* @__PURE__ */ toToken(FOCUS_VISIBLE_TRACKER_DEF);\n","import { signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\n\nconst LOCALE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const currentLocale = signal('en');\n\n return {\n currentLocale,\n };\n },\n {\n name: 'Locale',\n },\n);\n\nexport const provideLocale = /* @__PURE__ */ toProvideFn(LOCALE_DEF);\nexport const injectLocale = /* @__PURE__ */ toInjectFn(LOCALE_DEF);\n","import { computed, inject, InjectionToken, Provider, Signal } from '@angular/core';\nimport { injectLocale } from './locale';\n\n/**\n * A label set, or a function building one for a locale. The function form is called again whenever\n * {@link injectLocale}'s `currentLocale` changes, so a locale switch re-renders the wording without\n * reloading - that is the seam an app's i18n library plugs into.\n */\nexport type LabelsSource<T> = Partial<T> | ((locale: string) => Partial<T>);\n\n/** What {@link defineLabels} returns. */\nexport type LabelsDefinition<T> = {\n readonly provide: (labels: LabelsSource<T>) => Provider;\n readonly inject: () => Signal<T>;\n readonly token: InjectionToken<LabelsSource<T>>;\n};\n\nconst resolveSource = <T>(source: T | ((locale: string) => T), locale: string): T =>\n typeof source === 'function' ? (source as (locale: string) => T)(locale) : source;\n\n/**\n * The one mechanism for the strings a component renders or announces itself. Every domain in the UI\n * library that has such strings exposes exactly this pair - `provide<Domain>Labels` to localize a\n * subtree, `inject<Domain>Labels()` to read the result - so localizing an app is the same move\n * repeated per domain rather than a different one each time.\n *\n * `defaults` may itself be locale-derived, for a domain that ships more than one language (the\n * `@ethlete/query` error tables, say). Overrides are partial and layer on top of whatever the locale\n * resolved to, so translating into a third language while keeping a shipped one as the base is the\n * same call.\n *\n * The injector returns a **signal**, because both halves can change at runtime - read it in a\n * template or computed, never destructure it once.\n *\n * @example\n * export type BreadcrumbLabels = { navigation: string; overflow: string };\n *\n * export const DEFAULT_BREADCRUMB_LABELS: BreadcrumbLabels = {\n * navigation: 'Breadcrumb',\n * overflow: 'Show hidden levels',\n * };\n *\n * const BREADCRUMB_LABELS_DEF = defineLabels<BreadcrumbLabels>('BREADCRUMB_LABELS', DEFAULT_BREADCRUMB_LABELS);\n *\n * export const provideBreadcrumbLabels = toProvideFn(BREADCRUMB_LABELS_DEF);\n * export const injectBreadcrumbLabels = toInjectFn(BREADCRUMB_LABELS_DEF);\n * export const BREADCRUMB_LABELS = toToken(BREADCRUMB_LABELS_DEF);\n *\n * @example\n * // consumer, fixed wording\n * provideBreadcrumbLabels({ navigation: 'Brotkrumen' });\n *\n * // consumer, driven by the app's i18n and re-resolved on a locale change\n * provideBreadcrumbLabels((locale) => ({ navigation: translate('breadcrumb.nav', locale) }));\n */\nexport const defineLabels = <T extends object>(\n name: string,\n defaults: T | ((locale: string) => T),\n): LabelsDefinition<T> => {\n const token = new InjectionToken<LabelsSource<T>>(name, {\n providedIn: 'root',\n factory: () => ({}),\n });\n\n return {\n provide: (labels: LabelsSource<T>): Provider => ({ provide: token, useValue: labels }),\n inject: (): Signal<T> => {\n const source = inject(token);\n const { currentLocale } = injectLocale();\n\n return computed(() => {\n const locale = currentLocale();\n\n return { ...resolveSource(defaults, locale), ...resolveSource(source, locale) };\n });\n },\n token,\n };\n};\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DestroyRef,\n DOCUMENT,\n EnvironmentInjector,\n inject,\n Type,\n} from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { injectRenderer } from './renderer';\n\nexport type StyleManager = {\n mount: <TComponent>(component: Type<TComponent>) => ComponentRef<TComponent>;\n};\n\nconst STYLE_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n (): StyleManager => {\n const appRef = inject(ApplicationRef);\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const envInjector = inject(EnvironmentInjector);\n const renderer = injectRenderer();\n\n let container: HTMLDivElement | null = null;\n const mountedComponents = new Map<Type<unknown>, ComponentRef<unknown>>();\n\n const getContainerParent = () => {\n return document.body ?? document.documentElement;\n };\n\n const ensureContainer = () => {\n if (container) {\n return container;\n }\n\n const nextContainer = renderer.createElement('div');\n renderer.addClass(nextContainer, 'et-style-manager');\n renderer.setAttribute(nextContainer, 'aria-hidden', 'true');\n renderer.setStyle(nextContainer, { display: 'none' });\n renderer.appendChild(getContainerParent(), nextContainer);\n container = nextContainer;\n\n return nextContainer;\n };\n\n const cleanupContainer = () => {\n if (!container) {\n return;\n }\n\n const parent = renderer.parentNode(container);\n if (parent) {\n renderer.removeChild(parent, container);\n }\n\n container = null;\n };\n\n const mount = <TComponent>(component: Type<TComponent>) => {\n const existingComponent = mountedComponents.get(component);\n if (existingComponent) {\n return existingComponent as ComponentRef<TComponent>;\n }\n\n const componentRef = createComponent(component, { environmentInjector: envInjector });\n appRef.attachView(componentRef.hostView);\n renderer.appendChild(ensureContainer(), componentRef.location.nativeElement);\n mountedComponents.set(component, componentRef);\n\n return componentRef;\n };\n\n destroyRef.onDestroy(() => {\n if (appRef.destroyed) {\n mountedComponents.clear();\n cleanupContainer();\n\n return;\n }\n\n mountedComponents.forEach((componentRef) => {\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n mountedComponents.clear();\n\n cleanupContainer();\n });\n\n return { mount };\n },\n { name: 'StyleManager' },\n);\n\nexport const provideStyleManager = /* @__PURE__ */ toProvideFn(STYLE_MANAGER_DEF);\nexport const injectStyleManager = /* @__PURE__ */ toInjectFn(STYLE_MANAGER_DEF);\n","import { InjectionToken, Provider, Signal } from '@angular/core';\n\nexport type ConsentHandler = {\n /** Signal that is `true` when consent has been granted. */\n isGranted: Signal<boolean>;\n /** Grants consent and writes the decision back to the source. */\n grant: () => void;\n /** Revokes consent and writes the decision back to the source. */\n revoke?: () => void;\n};\n\nexport type CreateUserConsentProviderOptions = {\n /** The provider result returned by `createStaticProvider` that this consent provider should be associated with. */\n for: InjectionToken<ConsentHandler | null>;\n\n /**\n * Factory executed inside the injection context that returns a `Signal<boolean>`.\n *\n * @example\n * isGranted: () => inject(CookieService).hasMediaConsent\n */\n isGranted: () => Signal<boolean>;\n\n /**\n * Factory executed inside the injection context that returns the grant function.\n *\n * @example\n * grant: () => () => inject(CookieService).acceptAll()\n */\n grant: () => () => void;\n\n /**\n * Factory executed inside the injection context that returns the revoke function.\n *\n * @example\n * revoke : () => () => inject(CookieService).revokeAll()\n */\n revoke?: () => () => void;\n};\n\nexport const createUserConsentProvider = (options: CreateUserConsentProviderOptions): Provider => ({\n provide: options.for,\n useFactory: (): ConsentHandler => ({\n isGranted: options.isGranted(),\n grant: options.grant(),\n ...(options.revoke ? { revoke: options.revoke() } : {}),\n }),\n});\n","import { Observable } from 'rxjs';\n\nexport const nextFrame = (cb: () => void) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n};\n\nexport const fromNextFrame = () => {\n return new Observable<void>((observer) => {\n nextFrame(() => {\n observer.next();\n observer.complete();\n });\n });\n};\n\nexport const forceReflow = (element?: HTMLElement) => {\n // The `document.body` fallback is resolved lazily and guarded: there is nothing to reflow on the\n // server, so this becomes a no-op instead of throwing on a missing `document`.\n const el = element ?? (typeof document === 'undefined' ? null : document.body);\n\n return el?.offsetHeight ?? 0;\n};\n\n/**\n * Whether the user asked for reduced motion, read straight from `matchMedia`.\n *\n * Inside a component, prefer the reactive `injectPrefersReducedMotion()`. This is for the animation\n * helpers that run from effects, event handlers and imperative APIs, where there is no injection\n * context. Pass the element being animated so the query resolves against its own window - otherwise\n * an animation inside an iframe would read the top-level document's preference.\n */\nexport const matchesReducedMotion = (element?: Element) => {\n const view = element?.ownerDocument.defaultView ?? (typeof window === 'undefined' ? null : window);\n\n return view?.matchMedia('(prefers-reduced-motion: reduce)').matches ?? false;\n};\n","import { AfterViewInit, DestroyRef, Directive, ElementRef, inject, InjectionToken, model } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, filter, map, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { injectRenderer } from '../providers';\nimport { ANIMATABLE_TOKEN, AnimatableDirective, AnimationEndEvent } from './animatable.directive';\nimport { animationDebugLog } from './animation-debug';\nimport { forceReflow, fromNextFrame } from './animation-utils';\n\nexport const ANIMATED_LIFECYCLE_TOKEN = new InjectionToken<AnimatedLifecycleDirective>(\n 'ANIMATED_LIFECYCLE_DIRECTIVE_TOKEN',\n);\n\nconst ANIMATION_CLASSES = {\n enterFrom: 'et-animation-enter-from',\n enterActive: 'et-animation-enter-active',\n enterTo: 'et-animation-enter-to',\n enterDone: 'et-animation-enter-done',\n enterInterrupt: 'et-animation-enter-interrupt',\n leaveFrom: 'et-animation-leave-from',\n leaveActive: 'et-animation-leave-active',\n leaveTo: 'et-animation-leave-to',\n leaveDone: 'et-animation-leave-done',\n leaveInterrupt: 'et-animation-leave-interrupt',\n} as const;\n\nconst FORCE_INVISIBLE_CLASS = 'et-force-invisible';\n\nexport type AnimatedLifecycleState = 'entering' | 'entered' | 'leaving' | 'left' | 'init';\n\n@Directive({\n selector: '[etAnimatedLifecycle]',\n exportAs: 'etAnimatedLifecycle',\n providers: [\n {\n provide: ANIMATED_LIFECYCLE_TOKEN,\n useExisting: AnimatedLifecycleDirective,\n },\n ],\n hostDirectives: [AnimatableDirective],\n host: {\n class: FORCE_INVISIBLE_CLASS,\n },\n})\nexport class AnimatedLifecycleDirective implements AfterViewInit {\n private destroyRef = inject(DestroyRef);\n private cancelCurrentAnimation$ = new Subject<void>();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private animatable = inject(ANIMATABLE_TOKEN);\n private renderer = injectRenderer();\n private element = this.elementRef.nativeElement;\n\n private isConstructed = false;\n private transitionIdCounter = 0;\n\n private forcedAtFrameId: number | null = null;\n private currentFrameId = 0;\n\n state$ = new BehaviorSubject<AnimatedLifecycleState>('init');\n\n stateChange = outputFromObservable(this.state$);\n\n skipNextEnter = model(false);\n\n constructor() {\n this.state$\n .pipe(\n tap((state) => {\n if (state !== 'init') {\n this.removeClass(FORCE_INVISIBLE_CLASS);\n } else {\n this.addClass(FORCE_INVISIBLE_CLASS);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.trackFrameId();\n }\n\n private trackFrameId() {\n const updateFrameId = () => {\n this.currentFrameId = requestAnimationFrame(updateFrameId);\n };\n this.currentFrameId = requestAnimationFrame(updateFrameId);\n\n this.destroyRef.onDestroy(() => {\n cancelAnimationFrame(this.currentFrameId);\n });\n }\n\n ngAfterViewInit() {\n this.isConstructed = true;\n }\n\n enter() {\n const currentState = this.state$.value;\n\n if (currentState === 'entering') return;\n\n if ((currentState === 'init' && !this.isConstructed) || this.skipNextEnter()) {\n this.debugLog('enter: instant (not constructed or skipNextEnter)', { currentState });\n this.updateState('entered');\n this.skipNextEnter.set(false);\n this.addClass(ANIMATION_CLASSES.enterDone);\n this.forcedAtFrameId = null;\n\n return;\n }\n\n const isInterrupting = currentState === 'leaving';\n\n this.updateState('entering');\n this.removeClass(ANIMATION_CLASSES.leaveDone);\n\n const previousCancel$ = this.cancelCurrentAnimation$;\n this.cancelCurrentAnimation$ = new Subject<void>();\n\n const transitionId = `enter-${++this.transitionIdCounter}`;\n this.animatable.setTransitionId(transitionId);\n\n const skipAnimation = this.forcedAtFrameId !== null && this.forcedAtFrameId === this.currentFrameId;\n this.forcedAtFrameId = null;\n\n this.debugLog(\n `enter: ${skipAnimation ? 'skip (forced this frame)' : isInterrupting ? 'interrupting leave' : 'normal'}`,\n {\n currentState,\n transitionId,\n },\n );\n\n if (skipAnimation) {\n this.removeClasses(\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n ANIMATION_CLASSES.leaveInterrupt,\n );\n this.updateState('entered');\n this.addClass(ANIMATION_CLASSES.enterDone);\n previousCancel$.next();\n previousCancel$.complete();\n\n return;\n }\n\n if (isInterrupting) {\n this.handleInterruptedTransition({\n removeClasses: [\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n ANIMATION_CLASSES.leaveInterrupt,\n ],\n addClasses: [ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo, ANIMATION_CLASSES.enterInterrupt],\n expectedState: 'entering',\n transitionId,\n onComplete: () => {\n this.updateState('entered');\n this.removeClasses(ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n this.addClass(ANIMATION_CLASSES.enterDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n } else {\n this.handleNormalTransition({\n fromClass: ANIMATION_CLASSES.enterFrom,\n activeClass: ANIMATION_CLASSES.enterActive,\n toClass: ANIMATION_CLASSES.enterTo,\n expectedState: 'entering',\n transitionId,\n onComplete: () => {\n this.updateState('entered');\n this.removeClasses(ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n this.addClass(ANIMATION_CLASSES.enterDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n }\n\n previousCancel$.next();\n previousCancel$.complete();\n }\n\n leave() {\n const currentState = this.state$.value;\n\n if (currentState === 'leaving') return;\n\n if (currentState === 'init') {\n this.debugLog('leave: instant (state is init, enter never ran)');\n this.updateState('left');\n this.addClass(ANIMATION_CLASSES.leaveDone);\n this.forcedAtFrameId = null;\n\n return;\n }\n\n const isInterrupting = currentState === 'entering';\n\n this.updateState('leaving');\n this.removeClass(ANIMATION_CLASSES.enterDone);\n\n const previousCancel$ = this.cancelCurrentAnimation$;\n this.cancelCurrentAnimation$ = new Subject<void>();\n\n const transitionId = `leave-${++this.transitionIdCounter}`;\n this.animatable.setTransitionId(transitionId);\n\n const skipAnimation = this.forcedAtFrameId !== null && this.forcedAtFrameId === this.currentFrameId;\n this.forcedAtFrameId = null;\n\n this.debugLog(\n `leave: ${skipAnimation ? 'skip (forced this frame)' : isInterrupting ? 'interrupting enter' : 'normal'}`,\n {\n currentState,\n transitionId,\n },\n );\n\n if (skipAnimation) {\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.enterInterrupt,\n );\n this.updateState('left');\n this.addClass(ANIMATION_CLASSES.leaveDone);\n previousCancel$.next();\n previousCancel$.complete();\n\n return;\n }\n\n if (isInterrupting) {\n this.handleInterruptedTransition({\n removeClasses: [\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.enterInterrupt,\n ],\n addClasses: [ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo, ANIMATION_CLASSES.leaveInterrupt],\n expectedState: 'leaving',\n transitionId,\n onComplete: () => {\n this.updateState('left');\n this.removeClasses(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this.addClass(ANIMATION_CLASSES.leaveDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n } else {\n this.handleNormalTransition({\n fromClass: ANIMATION_CLASSES.leaveFrom,\n activeClass: ANIMATION_CLASSES.leaveActive,\n toClass: ANIMATION_CLASSES.leaveTo,\n expectedState: 'leaving',\n transitionId,\n onComplete: () => {\n this.updateState('left');\n this.removeClasses(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this.addClass(ANIMATION_CLASSES.leaveDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n }\n\n previousCancel$.next();\n previousCancel$.complete();\n }\n\n forceEnteredState() {\n this.cancelCurrentAnimation$.next();\n\n this.updateState('entered');\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n );\n this.addClass(ANIMATION_CLASSES.enterDone);\n this.forcedAtFrameId = this.currentFrameId;\n }\n\n forceLeftState() {\n this.cancelCurrentAnimation$.next();\n\n this.updateState('left');\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n );\n this.addClass(ANIMATION_CLASSES.leaveDone);\n this.forcedAtFrameId = this.currentFrameId;\n }\n\n private handleNormalTransition(config: {\n fromClass: string;\n activeClass: string;\n toClass: string;\n expectedState: 'entering' | 'leaving';\n transitionId: string;\n onComplete: () => void;\n cancelSignal: Subject<void>;\n }) {\n const { fromClass, activeClass, toClass, expectedState, transitionId, onComplete, cancelSignal } = config;\n\n this.removeClasses(ANIMATION_CLASSES.enterInterrupt, ANIMATION_CLASSES.leaveInterrupt);\n\n this.addClass(fromClass);\n forceReflow();\n this.addClass(activeClass);\n\n fromNextFrame()\n .pipe(\n tap(() => {\n if (this.state$.value === expectedState) {\n this.removeClass(fromClass);\n this.addClass(toClass);\n }\n }),\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n switchMap((isAnimating) => {\n if (isAnimating) return of(true);\n\n // Nothing started yet on the first check - give a transition with a delay one more\n // frame before concluding none is coming (mirrors handleInterruptedTransition).\n return fromNextFrame().pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n );\n }),\n switchMap((isAnimating) => {\n if (!isAnimating) {\n // No transition ever started - e.g. `prefers-reduced-motion` collapsed every\n // transition-duration to 0, which per spec never fires transitionrun/transitionend.\n // Waiting on animationEnd$ here would hang forever, so treat it as settled.\n this.debugLog(`${transitionId}: completes via fallback (no transition started)`);\n\n return of(true);\n }\n\n return this.animatable.animationEnd$.pipe(\n filter(() => this.state$.value === expectedState),\n switchMap((e) => {\n if (!e.cancelled && e.transitionId === transitionId) {\n return of(true);\n }\n\n // The batch ended cancelled or under a different id - e.g. the browser cancelled and\n // restarted a running transition mid-flight (an anchored overlay whose ancestor pane got\n // destroyed) or a foreign transition on the same element finished. If nothing is\n // animating anymore the expected end event can never arrive, so treat the transition as\n // settled instead of waiting forever (mirrors the fallback in handleInterruptedTransition).\n return this.animatable.isAnimating$.pipe(\n take(1),\n tap((stillAnimating) => {\n if (!stillAnimating) {\n this.debugLog(\n `${transitionId}: completes via fallback (batch id \"${e.transitionId ?? 'none'}\", cancelled ${e.cancelled})`,\n );\n }\n }),\n map((stillAnimating) => !stillAnimating),\n );\n }),\n );\n }),\n filter((settled) => settled && this.state$.value === expectedState),\n tap(onComplete),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private handleInterruptedTransition(config: {\n removeClasses: string[];\n addClasses: string[];\n expectedState: 'entering' | 'leaving';\n transitionId: string;\n onComplete: () => void;\n cancelSignal: Subject<void>;\n }) {\n const { removeClasses, addClasses, expectedState, transitionId, onComplete, cancelSignal } = config;\n\n this.removeClasses(...removeClasses);\n addClasses.forEach((cls) => this.addClass(cls));\n\n fromNextFrame()\n .pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n switchMap((isAnimating) => {\n if (isAnimating) {\n return of(true);\n }\n\n this.debugLog(`${transitionId}: interrupt found no running transition, re-checking next frame`);\n\n return fromNextFrame().pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n );\n }),\n take(1),\n switchMap((isAnimating) => {\n if (!isAnimating && this.state$.value === expectedState) {\n this.debugLog(`${transitionId}: interrupt completes INSTANTLY (no transition running after class swap)`);\n\n return of({ cancelled: false, transitionId } as AnimationEndEvent);\n }\n\n this.debugLog(`${transitionId}: interrupt waiting for animation end`, { isAnimating });\n\n return this.animatable.animationEnd$.pipe(\n switchMap((e) => {\n if (e.transitionId === transitionId) {\n return of(e);\n }\n\n return this.animatable.isAnimating$.pipe(\n take(1),\n switchMap((stillAnimating) => {\n if (!stillAnimating && this.state$.value === expectedState) {\n this.debugLog(\n `${transitionId}: interrupt completes via foreign animation end (batch id was \"${e.transitionId}\")`,\n { stillAnimating },\n );\n\n return of({ cancelled: false, transitionId } as AnimationEndEvent);\n }\n\n return of(null);\n }),\n );\n }),\n filter((e): e is AnimationEndEvent => e !== null && e.transitionId === transitionId),\n );\n }),\n filter((e) => this.state$.value === expectedState && !e.cancelled),\n tap(() => {\n this.debugLog(`${transitionId}: interrupt complete`);\n onComplete();\n }),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private addClass(className: string) {\n this.renderer.addClass(this.element, className);\n }\n\n private removeClass(className: string) {\n this.renderer.removeClass(this.element, className);\n }\n\n private removeClasses(...classNames: string[]) {\n this.renderer.removeClass(this.element, ...classNames);\n }\n\n private updateState(newState: AnimatedLifecycleState) {\n this.debugLog(`state: ${this.state$.value} → ${newState}`);\n this.state$.next(newState);\n }\n\n private debugLog(message: string, data?: Record<string, unknown>) {\n const el = this.element;\n const scope = `lifecycle ${el.tagName.toLowerCase()}${el.classList.contains('et-overlay') ? '.et-overlay' : ''}`;\n\n if (data) {\n animationDebugLog(scope, message, data);\n } else {\n animationDebugLog(scope, message);\n }\n }\n}\n","import { Directive, InjectionToken, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap } from 'rxjs';\nimport { ANIMATED_LIFECYCLE_TOKEN } from './animated-lifecycle.directive';\n\nexport const ANIMATED_IF_TOKEN = new InjectionToken<AnimatedIfDirective>('ANIMATED_IF_TOKEN');\n\n@Directive({\n selector: '[etAnimatedIf]',\n providers: [\n {\n provide: ANIMATED_IF_TOKEN,\n useExisting: AnimatedIfDirective,\n },\n ],\n})\nexport class AnimatedIfDirective {\n private templateRef = inject(TemplateRef);\n private viewContainerRef = inject(ViewContainerRef);\n private animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);\n\n private hasView = false;\n\n ifValue = input<unknown>(null, { alias: 'etAnimatedIf' });\n\n constructor() {\n toObservable(this.ifValue)\n .pipe(\n switchMap((value) => {\n if (value) {\n if (!this.hasView) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n this.hasView = true;\n }\n\n this.animatedLifecycle.enter();\n\n return of(null);\n }\n\n if (!this.hasView) {\n return of(null);\n }\n\n this.animatedLifecycle.leave();\n\n return this.animatedLifecycle.state$.pipe(\n filter((state) => state === 'left'),\n tap(() => {\n this.viewContainerRef.clear();\n this.hasView = false;\n }),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { combineLatest, Subject } from 'rxjs';\nimport { matchesReducedMotion } from './animation-utils';\n\ntype FlipAnimationGroupConfig = {\n /**\n * The elements to animate\n */\n elements: Array<HTMLElement | { element: HTMLElement; originElement?: HTMLElement }>;\n\n /**\n * The duration of the animation in milliseconds\n * @default 250\n */\n duration?: number;\n\n /**\n * The easing function to use for the animation\n * @default 'cubic-bezier(0.4, 0, 0.2, 1)'\n */\n easing?: string;\n\n /**\n * Play the animation even when the user prefers reduced motion.\n *\n * Only set this for movement that carries meaning the user would otherwise miss - decorative\n * movement should stay gated.\n *\n * @default false\n */\n ignoreReducedMotion?: boolean;\n};\n\nexport const createFlipAnimationGroup = (config: FlipAnimationGroupConfig) => {\n const { elements, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)', ignoreReducedMotion } = config;\n\n const flips = elements.map((el) => {\n const element = 'element' in el ? el.element : el;\n const originElement = 'originElement' in el ? el.originElement : undefined;\n\n return createFlipAnimation({ element, originElement, duration, easing, ignoreReducedMotion });\n });\n\n const onStart$ = combineLatest(flips.map((animation) => animation.onStart$));\n const onFinish$ = combineLatest(flips.map((animation) => animation.onFinish$));\n const onCancel$ = combineLatest(flips.map((animation) => animation.onCancel$));\n\n const updateInit = () => {\n flips.forEach((animation) => animation.updateInit());\n };\n\n const play = () => {\n flips.forEach((animation) => animation.play());\n };\n\n const cancel = () => {\n flips.forEach((animation) => animation.cancel());\n };\n\n return {\n updateInit,\n play,\n cancel,\n onStart$,\n onFinish$,\n onCancel$,\n };\n};\n\nexport type FlipAnimationConfig = {\n /**\n * The element to animate\n */\n element: HTMLElement;\n\n /**\n * The element to use as the origin for the animation\n * @default element\n */\n originElement?: HTMLElement;\n\n /**\n * The duration of the animation in milliseconds\n * @default 250\n */\n duration?: number;\n\n /**\n * The easing function to use for the animation\n * @default 'cubic-bezier(0.4, 0, 0.2, 1)'\n */\n easing?: string;\n\n /**\n * Play the animation even when the user prefers reduced motion.\n *\n * Only set this for movement that carries meaning the user would otherwise miss - decorative\n * movement should stay gated.\n *\n * @default false\n */\n ignoreReducedMotion?: boolean;\n};\n\nexport const createFlipAnimation = (config: FlipAnimationConfig) => {\n const {\n element: el,\n originElement = el,\n duration = 250,\n easing = 'cubic-bezier(0.4, 0, 0.2, 1)',\n ignoreReducedMotion = false,\n } = config;\n\n let initialRect = originElement.getBoundingClientRect();\n let animation: Animation | null = null;\n\n const onStart$ = new Subject<void>();\n const onFinish$ = new Subject<void>();\n const onCancel$ = new Subject<void>();\n\n const onAnimationFinish = () => {\n cleanup();\n onFinish$.next();\n };\n\n const onAnimationCancel = () => {\n cleanup();\n onCancel$.next();\n };\n\n const cleanup = () => {\n if (!animation) {\n return;\n }\n\n animation.removeEventListener('finish', onAnimationFinish);\n animation.removeEventListener('cancel', onAnimationCancel);\n };\n\n const updateInit = () => {\n initialRect = originElement.getBoundingClientRect();\n };\n\n const play = () => {\n const lastRect = el.getBoundingClientRect();\n\n const delta = {\n x: initialRect.left - lastRect.left,\n y: initialRect.top - lastRect.top,\n scaleX: initialRect.width / lastRect.width,\n scaleY: initialRect.height / lastRect.height,\n };\n\n // Under reduced motion the element jumps straight to its final position. Collapsing the duration\n // instead of bailing out keeps the `Animation` lifecycle intact, so callers that wait on\n // `onFinish$` to clean up still get their event.\n const effectiveDuration = !ignoreReducedMotion && matchesReducedMotion(el) ? 0 : duration;\n\n animation = el.animate(\n [\n {\n transformOrigin: 'top left',\n transform: `\n translate(${delta.x}px, ${delta.y}px)\n scale(${delta.scaleX}, ${delta.scaleY})\n `,\n },\n {\n transformOrigin: 'top left',\n transform: 'none',\n },\n ],\n {\n duration: effectiveDuration,\n easing,\n fill: 'both',\n },\n );\n\n animation.addEventListener('finish', onAnimationFinish);\n animation.addEventListener('cancel', onAnimationCancel);\n\n onStart$.next();\n };\n\n const cancel = () => {\n animation?.cancel();\n\n cleanup();\n };\n\n return {\n updateInit,\n play,\n cancel,\n onStart$: onStart$.asObservable(),\n onFinish$: onFinish$.asObservable(),\n onCancel$: onCancel$.asObservable(),\n };\n};\n","import { Directive, DOCUMENT, ElementRef, inject, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, tap } from 'rxjs';\n\n@Directive({\n selector: '[etClickOutside]',\n})\nexport class ClickOutsideDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private document = inject(DOCUMENT);\n\n didClickOutside = output<MouseEvent>({ alias: 'etClickOutside' });\n\n constructor() {\n fromEvent<MouseEvent>(this.document.documentElement, 'click')\n .pipe(\n tap((event) => {\n const activeElement = event.target as HTMLElement;\n const isInside = this.elementRef.nativeElement.contains(activeElement);\n\n if (isInside) return;\n\n this.didClickOutside.emit(event);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import {\n Directive,\n effect,\n EmbeddedViewRef,\n inject,\n input,\n linkedSignal,\n numberAttribute,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[etRepeat]',\n})\nexport class RepeatDirective {\n private mainTemplateRef = inject<TemplateRef<unknown>>(TemplateRef);\n private viewContainerRef = inject(ViewContainerRef);\n\n repeatCount = input(2, { alias: 'etRepeat', transform: numberAttribute });\n\n views = linkedSignal<number, EmbeddedViewRef<unknown>[]>({\n source: this.repeatCount,\n computation: (count, previous) => {\n const prevCount = previous?.source ?? 0;\n const views: EmbeddedViewRef<unknown>[] = previous?.value ?? [];\n\n if (count === prevCount && previous?.value) {\n return previous.value;\n }\n\n const viewsToCreate = count - prevCount;\n\n if (viewsToCreate > 0) {\n for (let i = 0; i < viewsToCreate; i++) {\n views.push(this.viewContainerRef.createEmbeddedView(this.mainTemplateRef));\n }\n } else if (viewsToCreate < 0) {\n for (let i = 0; i < -viewsToCreate; i++) {\n this.viewContainerRef.remove(this.viewContainerRef.length - 1);\n }\n\n views.splice(viewsToCreate);\n }\n\n return views;\n },\n });\n\n constructor() {\n // Ugly but needed to trigger the linked signal.\n // Otherwise it has no consumers and won't run.\n effect(() => this.views());\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { routerRestoreScroll } from '../signals';\n\n/**\n * Marks a `routerLink` as a return to a page the user has already seen - a \"back to the overview\"\n * link - so it restores that page's last scroll offset instead of scrolling to top.\n *\n * Needs `restore.enabled` on `setupScrollRestoration`. A page the session has no offset for (the\n * first visit, or a reload since) scrolls to top as usual.\n *\n * @example\n * <a routerLink=\"/teams\" etRestoreScroll>Teams</a>\n */\n@Directive({\n selector: '[routerLink][etRestoreScroll]',\n})\nexport class RestoreScrollDirective {\n private routerLink = inject(RouterLink);\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n // Capture, so the mark is on `state` before `RouterLink`'s own click handler reads it. Applied\n // per click rather than once, because a `[state]` binding on the same element would overwrite it\n // on any later change detection run.\n this.elementRef.nativeElement.addEventListener(\n 'click',\n () => (this.routerLink.state = { ...this.routerLink.state, ...routerRestoreScroll() }),\n { capture: true },\n );\n }\n}\n","import { Directive, ElementRef, Signal, computed, inject, isSignal, model, signal } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { signalElementIntersection } from '../signals/element-intersection';\n\n@Directive({\n selector: '[etScrollObserver]',\n exportAs: 'etScrollObserver',\n})\nexport class ScrollObserverDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n enabled = model<MaybeSignal<boolean>>(true);\n\n private enabledValue = computed(() => {\n const enabled = this.enabled();\n\n if (isSignal(enabled)) return enabled();\n\n return enabled;\n });\n\n private _startEl = signal<ElementRef<HTMLElement> | null>(null);\n private _endEl = signal<ElementRef<HTMLElement> | null>(null);\n\n private _startIntersection = signalElementIntersection(this._startEl as Signal<ElementRef<HTMLElement> | null>, {\n root: this.elementRef,\n enabled: this.enabledValue,\n });\n private _endIntersection = signalElementIntersection(this._endEl as Signal<ElementRef<HTMLElement> | null>, {\n root: this.elementRef,\n enabled: this.enabledValue,\n });\n\n isAtStart = computed(() => this._startIntersection()[0]?.isIntersecting ?? false);\n isAtEnd = computed(() => this._endIntersection()[0]?.isIntersecting ?? false);\n\n _registerStart(el: ElementRef<HTMLElement>) {\n this._startEl.set(el);\n }\n\n _registerEnd(el: ElementRef<HTMLElement>) {\n this._endEl.set(el);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { ScrollObserverDirective } from './scroll-observer.directive';\n\n@Directive({\n selector: '[etScrollObserverEnd]',\n})\nexport class ScrollObserverEndDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private host = inject(ScrollObserverDirective);\n\n constructor() {\n this.host._registerEnd(this.elementRef);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { ScrollObserverDirective } from './scroll-observer.directive';\n\n@Directive({\n selector: '[etScrollObserverStart]',\n})\nexport class ScrollObserverStartDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private host = inject(ScrollObserverDirective);\n\n constructor() {\n this.host._registerStart(this.elementRef);\n }\n}\n","import {\n EMPTY,\n Observable,\n concat,\n concatMap,\n defer,\n filter,\n finalize,\n fromEvent,\n merge,\n of,\n take,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { suppressTextSelection } from '../utils/text-selection';\n\nexport type DragStartEvent = {\n /** Pointer position at pointerdown - NOT at commit-threshold crossing. */\n readonly clientX: number;\n readonly clientY: number;\n};\n\nexport type DragMoveEvent = {\n readonly stepX: number;\n readonly stepY: number;\n readonly clientX: number;\n readonly clientY: number;\n /** Cumulative delta from the pointerdown position. */\n readonly totalDx: number;\n readonly totalDy: number;\n};\n\nexport type DragEndEvent = {\n /** Pointer position at release - the last move can lag it by a frame of movement. */\n readonly clientX: number;\n readonly clientY: number;\n /** Cumulative delta from the pointerdown position. */\n readonly totalDx: number;\n readonly totalDy: number;\n};\n\nexport type DragGestureEvent =\n | { readonly type: 'tapped' }\n | { readonly type: 'start'; readonly data: DragStartEvent }\n | { readonly type: 'move'; readonly data: DragMoveEvent }\n | { readonly type: 'end'; readonly data: DragEndEvent }\n | { readonly type: 'cancelled' };\n\n// jsdom and other non-browser DOMs ship no pointer capture; the document listeners track the\n// gesture either way, so a failure here only costs events over a cross-origin frame.\nconst capturePointer = (el: HTMLElement, pointerId: number) => {\n try {\n el.setPointerCapture(pointerId);\n } catch {\n return;\n }\n};\n\nconst setupDragObservable = (\n startEvent: PointerEvent,\n el: HTMLElement,\n commitThreshold: number,\n): Observable<DragGestureEvent> => {\n const { pointerId, clientX: startX, clientY: startY } = startEvent;\n\n let cancelled = false;\n let endX = startX;\n let endY = startY;\n\n const end$ = merge(\n fromEvent<PointerEvent>(document, 'pointerup'),\n fromEvent<PointerEvent>(document, 'pointercancel'),\n ).pipe(\n filter((e) => e.pointerId === pointerId),\n take(1),\n // Read below by the terminating `defer`, which only runs once this has completed the moves.\n tap((e) => {\n cancelled = e.type === 'pointercancel';\n endX = e.clientX;\n endY = e.clientY;\n }),\n );\n\n let lastX = startX;\n let lastY = startY;\n let committed = false;\n\n const moves$ = fromEvent<PointerEvent>(document, 'pointermove').pipe(\n filter((e) => e.pointerId === pointerId),\n concatMap((e): Observable<DragGestureEvent> => {\n if (!committed) {\n if (Math.abs(e.clientX - startX) < commitThreshold && Math.abs(e.clientY - startY) < commitThreshold) {\n return EMPTY;\n }\n committed = true;\n capturePointer(el, pointerId);\n lastX = e.clientX;\n lastY = e.clientY;\n // Emit the catch-up move together with start so consumers snap to the pointer\n // at commit instead of trailing it by the threshold distance until the next move.\n const start: DragGestureEvent = { type: 'start', data: { clientX: startX, clientY: startY } };\n const catchUpMove: DragGestureEvent = {\n type: 'move',\n data: {\n stepX: e.clientX - startX,\n stepY: e.clientY - startY,\n clientX: e.clientX,\n clientY: e.clientY,\n totalDx: e.clientX - startX,\n totalDy: e.clientY - startY,\n },\n };\n\n return of(start, catchUpMove);\n }\n\n const stepX = e.clientX - lastX;\n const stepY = e.clientY - lastY;\n lastX = e.clientX;\n lastY = e.clientY;\n return of({\n type: 'move' as const,\n data: {\n stepX,\n stepY,\n clientX: e.clientX,\n clientY: e.clientY,\n totalDx: e.clientX - startX,\n totalDy: e.clientY - startY,\n },\n });\n }),\n takeUntil(end$),\n );\n\n return defer(() => {\n const releaseSelection = suppressTextSelection(el.ownerDocument);\n\n return concat(\n moves$,\n defer((): Observable<DragGestureEvent> => {\n if (cancelled) return of({ type: 'cancelled' as const });\n if (!committed) return of({ type: 'tapped' as const });\n\n return of({\n type: 'end' as const,\n data: { clientX: endX, clientY: endY, totalDx: endX - startX, totalDy: endY - startY },\n });\n }),\n ).pipe(finalize(releaseSelection));\n });\n};\n\n/**\n * Observe one drag gesture, starting from a `pointerdown` on `element`.\n *\n * Emits `start` once the pointer has travelled `commitThreshold` px (so a click is not a drag),\n * immediately followed by a catch-up `move`, then a `move` per pointer move, and finally `end`\n * carrying the release position. A pointer released before crossing the threshold emits a single\n * `tapped` instead - its position is the `pointerdown` the caller already holds. The stream\n * completes with the gesture, so there is nothing to unsubscribe on the happy path.\n *\n * Text selection is suppressed on the element's document for as long as the gesture runs, so a drag\n * does not sweep a selection across the page.\n *\n * A gesture the browser takes away - a `pointercancel` from a system gesture, an incoming call, the\n * tab going to the background - ends on `cancelled` rather than `end` or `tapped`. Treat it as\n * \"revert\", not \"drop here\": the user never let go, so there is no position they chose.\n *\n * This is the primitive behind {@link DragHandleDirective}. Prefer the directive; reach for this when\n * the draggable element belongs to someone else's template (e.g. a table feature attaching a drag to\n * header cells the table itself renders) and you can only work from a delegated `pointerdown`.\n */\nexport const dragGestureFrom = (\n event: PointerEvent,\n element: HTMLElement,\n options?: { commitThreshold?: number },\n): Observable<DragGestureEvent> => setupDragObservable(event, element, options?.commitThreshold ?? 8);\n","import { Directive, ElementRef, booleanAttribute, inject, input } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Subject, distinctUntilChanged, exhaustMap, filter, map, share } from 'rxjs';\nimport { DragEndEvent, DragGestureEvent, DragMoveEvent, DragStartEvent, dragGestureFrom } from './drag-gesture';\nimport { applyHostListener } from '../utils/angular/host-listener';\n\n@Directive({\n selector: '[etDragHandle]',\n host: {\n // Without this the browser claims touch pointermoves for scrolling and fires pointercancel,\n // so a touch drag never gets past the commit threshold. Scrolling stays available while the\n // handle is disabled.\n '[style.touch-action]': \"disabled() ? null : 'none'\",\n },\n})\nexport class DragHandleDirective {\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n commitThreshold = input(8);\n disabled = input(false, { transform: booleanAttribute });\n\n private gestureStart$ = new Subject<PointerEvent>();\n\n private gesture$ = this.gestureStart$.pipe(\n exhaustMap((event) => dragGestureFrom(event, this.el.nativeElement, { commitThreshold: this.commitThreshold() })),\n takeUntilDestroyed(),\n share(),\n );\n\n dragTapped = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'tapped'),\n map(() => undefined),\n ),\n );\n\n dragStarted = outputFromObservable<DragStartEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<DragGestureEvent, { type: 'start' }> => e.type === 'start'),\n map((e) => e.data),\n ),\n );\n\n dragMoved = outputFromObservable<DragMoveEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<DragGestureEvent, { type: 'move' }> => e.type === 'move'),\n map((e) => e.data),\n ),\n );\n\n dragEnded = outputFromObservable<DragEndEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<DragGestureEvent, { type: 'end' }> => e.type === 'end'),\n map((e) => e.data),\n ),\n );\n\n /**\n * The browser took the gesture away mid-drag (a system gesture, an incoming call, the tab going to\n * the background). Revert to where the drag started - the user never chose a drop position. A\n * consumer that does not handle this leaves the item wherever the pointer happened to be.\n */\n dragCancelled = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'cancelled'),\n map(() => undefined),\n ),\n );\n\n isDragging = toSignal(\n this.gesture$.pipe(\n map((e) => e.type === 'start' || e.type === 'move'),\n distinctUntilChanged(),\n ),\n { initialValue: false },\n );\n\n constructor() {\n applyHostListener('pointerdown', (e) => this.startGesture(e));\n }\n\n startGesture(event: PointerEvent) {\n if (event.button !== 0 || this.disabled()) return;\n event.stopPropagation();\n this.gestureStart$.next(event);\n }\n}\n","import { Signal } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * The browser's notification permission, widened with `'unsupported'` - which covers both a browser\n * without the Notification API and the server, where there is no `Notification` global to ask.\n */\nexport type NotificationPermissionState = NotificationPermission | 'unsupported';\n\n/**\n * Which of the two ways of putting a notification on screen was used.\n *\n * - `page` - the `Notification` constructor. Its events come back to the page, so `onClick`,\n * `onClose`, `onShow` and `onError` all work, but the notification dies with the tab.\n * - `service-worker` - `ServiceWorkerRegistration.showNotification()`. The only path Android Chrome\n * and installed iOS web apps have, and the only one that can render `actions` - but its clicks are\n * delivered to the service worker rather than to the page, see {@link ShowNotificationConfig.onClick}.\n * - `unavailable` - nothing was shown: no API, permission not granted, the page path threw and no\n * service worker was registered to fall back to, or the notification was closed before it appeared.\n */\nexport type NotificationDeliveryPath = 'page' | 'service-worker' | 'unavailable';\n\n/**\n * A button rendered on a notification. Service-worker path only - `show()` routes a notification with\n * actions there automatically, and a notification pinned to `path: 'page'` drops them.\n */\nexport type NotificationActionConfig = {\n /** Identifies this button in the service worker's `notificationclick` handler (`event.action`). */\n action: string;\n\n /** The button's label. */\n title: string;\n\n /** Icon URL for the button. Rendered on Android, ignored on desktop. */\n icon?: string;\n};\n\n/** What {@link ShowNotificationConfig.onClick} is called with. */\nexport type NotificationClickContext = {\n /** The notification's tag - the generated one when the config did not set one. */\n tag: string;\n\n /** Whatever was passed as {@link ShowNotificationConfig.data}. */\n data: unknown;\n\n /** The action button that was clicked. Service-worker path only, and absent for the body itself. */\n action?: string;\n\n /** The underlying DOM event. Page path only. */\n event?: Event;\n};\n\n/**\n * The message a service worker posts to relay a notification click back to the page. Matches what\n * {@link NOTIFICATION_CLICK_MESSAGE_TYPE} documents.\n */\nexport type NotificationClickMessage = {\n type: typeof NOTIFICATION_CLICK_MESSAGE_TYPE;\n tag: string;\n data?: unknown;\n action?: string;\n};\n\n/**\n * The `message` type a service worker must post for `onClick` to fire on the service-worker path,\n * where the click event is dispatched to the worker and never reaches the page.\n *\n * Nothing in the SDK can install this handler - a service worker's code is the app's. Add it to yours\n * to make `onClick` work on Android Chrome and installed iOS web apps:\n *\n * ```js\n * self.addEventListener('notificationclick', (event) => {\n * event.notification.close();\n *\n * event.waitUntil(\n * self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => {\n * for (const client of clients) {\n * client.postMessage({\n * type: 'et:notification-click',\n * tag: event.notification.tag,\n * data: event.notification.data,\n * action: event.action || undefined,\n * });\n * }\n * }),\n * );\n * });\n * ```\n */\nexport const NOTIFICATION_CLICK_MESSAGE_TYPE = 'et:notification-click';\n\nexport type ShowNotificationConfig = {\n /** The notification's headline. The only required field. */\n title: string;\n\n /** Body text below the title. */\n body?: string;\n\n /** URL of the image shown as the notification's icon. */\n icon?: string;\n\n /** URL of a small monochrome badge, shown in the Android status bar when the icon does not fit. */\n badge?: string;\n\n /**\n * URL of a large image shown inside the notification. Service-worker path only, and only honored by\n * Chromium.\n */\n image?: string;\n\n /**\n * Identity of the notification: showing another one with the same tag **replaces** it instead of\n * stacking, and it is what `close()` matches on the service-worker path.\n *\n * Leave it unset for a stand-alone notification - a unique tag is generated, which is what makes\n * `close()` and click relaying work at all. Set it to coalesce repeated notifications about the same\n * thing (one per chat, one per upload); `close()` on such a ref closes every notification sharing\n * the tag.\n */\n tag?: string;\n\n /** Arbitrary payload, handed back to `onClick` and to the service worker's `notificationclick`. */\n data?: unknown;\n\n /** Language of the title and body, as a BCP 47 tag. */\n lang?: string;\n\n /** Text direction of the title and body. */\n dir?: NotificationDirection;\n\n /** Show without sound or vibration. */\n silent?: boolean;\n\n /**\n * Keep the notification on screen until the user dismisses it, rather than auto-hiding it. Desktop\n * Chromium only; ignored elsewhere.\n */\n requireInteraction?: boolean;\n\n /**\n * Alert the user again when this notification replaces one with the same tag - by default a\n * replacement is silent. Requires `tag`; service-worker path only.\n */\n renotify?: boolean;\n\n /**\n * Vibration pattern in milliseconds, alternating vibrate and pause. Service-worker path only, and\n * Android only.\n */\n vibrate?: number[];\n\n /**\n * The time the notification is *about*, as an epoch timestamp - not when it is shown. Used for\n * ordering in the notification tray. Service-worker path only.\n */\n timestamp?: number;\n\n /** Buttons on the notification. Forces the service-worker path, since the page path cannot render them. */\n actions?: NotificationActionConfig[];\n\n /**\n * Which delivery path to use.\n *\n * - `auto` (default) - the page path first, falling back to the service worker when the constructor\n * throws, which is how Android Chrome reports that it only does persistent notifications. A\n * notification with `actions` goes straight to the service worker.\n * - `page` - constructor only. Fails to `'unavailable'` where the constructor is illegal, and drops\n * `actions`, `image`, `renotify`, `vibrate` and `timestamp`.\n * - `service-worker` - persistent only. Fails to `'unavailable'` when no service worker is\n * registered.\n * @default 'auto'\n */\n path?: 'auto' | 'page' | 'service-worker';\n\n /**\n * Close the notification this many milliseconds after it is shown. Off by default, which leaves the\n * lifetime to the platform - desktop Chromium hides a notification after about 20 seconds and keeps\n * it in the tray, Android keeps it until dismissed.\n */\n autoClose?: number;\n\n /**\n * Called when the user clicks the notification (or one of its `actions`).\n *\n * On the page path this is wired directly to the notification's `click` event. On the\n * service-worker path the event goes to the worker instead, so this only fires if that worker\n * relays it - see {@link NOTIFICATION_CLICK_MESSAGE_TYPE} for the handler to add.\n *\n * A click does not focus the tab. Call `window.focus()` yourself if that is what you want.\n */\n onClick?: (context: NotificationClickContext) => void;\n\n /** Called when the notification is closed, by the user or by `close()`. Page path only. */\n onClose?: () => void;\n\n /** Called once the notification is on screen. Page path only. */\n onShow?: () => void;\n\n /** Called when the browser failed to display the notification. Page path only. */\n onError?: () => void;\n};\n\n/** Handle on a notification handed to {@link Notifications.show}. */\nexport type NotificationRef = {\n /** The notification's tag - generated when the config did not provide one. */\n readonly tag: string;\n\n /**\n * Emits once the browser has taken the notification, with the path that carried it - or\n * `'unavailable'` if nothing was shown - and completes. Never errors.\n *\n * The notification is shown whether or not anyone subscribes, and the result is replayed, so a late\n * subscriber still gets it.\n */\n readonly shown$: Observable<NotificationDeliveryPath>;\n\n /**\n * Dismiss the notification. Safe to call before `shown$` emits (the notification is then never\n * displayed) and safe to call twice.\n */\n readonly close: () => void;\n};\n\n/** The notification API, injected with `injectNotifications()`. */\nexport type Notifications = {\n /**\n * Whether this browser exposes a Notification API at all - `false` on the server and in engines\n * without it. Not a promise that a notification will show: permission still has to be granted, and\n * a browser that only supports persistent notifications still needs a service worker.\n */\n readonly isSupported: boolean;\n\n /**\n * The current permission, kept in sync while the app runs: through the Permissions API where it has\n * a `notifications` descriptor (Chromium, Firefox), and by re-reading it whenever the tab comes back\n * to the foreground everywhere else - which is how a permission revoked in browser settings is\n * picked up on WebKit.\n */\n readonly permission: Signal<NotificationPermissionState>;\n\n /**\n * Show the browser's permission prompt, emitting the outcome once and completing. Cold - nothing is\n * asked until it is subscribed to.\n *\n * Subscribe from a user gesture: Safari requires one, and Chromium blocks the prompt entirely on\n * sites that ask on page load. Emits the current state without prompting when permission was already\n * granted or denied - the prompt can only be shown once, after which only the user can change it in\n * site settings.\n */\n readonly request: () => Observable<NotificationPermissionState>;\n\n /**\n * Show a notification, if permission has been granted - this never prompts on its own, so run\n * `request()` first.\n *\n * Returns synchronously, and the notification is shown without anyone subscribing to anything; the\n * ref's `shown$` reports which path carried it.\n */\n readonly show: (config: ShowNotificationConfig) => NotificationRef;\n\n /**\n * Close every notification this app has open - the ones shown through `show()` plus any persistent\n * ones still in the tray from an earlier page load.\n */\n readonly closeAll: () => void;\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, PLATFORM_ID, effect, inject, signal, untracked } from '@angular/core';\nimport {\n EMPTY,\n Observable,\n Subject,\n catchError,\n defer,\n filter,\n from,\n fromEvent,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n tap,\n timer,\n} from 'rxjs';\nimport { injectIsDocumentVisible } from '../signals';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport {\n NOTIFICATION_CLICK_MESSAGE_TYPE,\n NotificationClickContext,\n NotificationClickMessage,\n NotificationDeliveryPath,\n NotificationPermissionState,\n NotificationRef,\n Notifications,\n ShowNotificationConfig,\n} from './notification.types';\n\n/** The options a persistent (service-worker) notification accepts on top of the constructor's. */\ntype PersistentNotificationOptions = NotificationOptions & {\n actions?: { action: string; title: string; icon?: string }[];\n image?: string;\n renotify?: boolean;\n timestamp?: number;\n vibrate?: number[];\n};\n\nconst toNotificationOptions = (config: ShowNotificationConfig, tag: string): PersistentNotificationOptions => ({\n body: config.body,\n icon: config.icon,\n badge: config.badge,\n image: config.image,\n tag,\n data: config.data,\n lang: config.lang,\n dir: config.dir,\n silent: config.silent,\n requireInteraction: config.requireInteraction,\n renotify: config.renotify,\n vibrate: config.vibrate,\n timestamp: config.timestamp,\n actions: config.actions,\n});\n\n// The constructor rejects `actions` with a TypeError rather than ignoring them, so the page path gets\n// a copy without the options only a persistent notification understands.\nconst toPageNotificationOptions = (options: PersistentNotificationOptions): NotificationOptions => {\n const { actions, image, renotify, timestamp, vibrate, ...pageOptions } = options;\n\n return pageOptions;\n};\n\nconst NOTIFICATIONS_DEF = /* @__PURE__ */ defineRootProvider(\n (): Notifications => {\n const destroyRef = inject(DestroyRef);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const isSupported = isBrowser && typeof Notification !== 'undefined';\n\n // Streams here outlive the call that created them, and `close()` can be called after teardown -\n // where `takeUntilDestroyed()` would throw rather than unsubscribe.\n const destroyed$ = new Subject<void>();\n\n destroyRef.onDestroy(() => {\n destroyed$.next();\n destroyed$.complete();\n });\n\n const permission = signal<NotificationPermissionState>(isSupported ? Notification.permission : 'unsupported');\n\n if (isSupported) {\n // Chromium and Firefox report permission changes here, including a revoke made in site settings\n // while the tab is open. WebKit has no `notifications` descriptor and rejects the query.\n const permissionStatus$ = navigator.permissions\n ? from(navigator.permissions.query({ name: 'notifications' as PermissionName })).pipe(catchError(() => EMPTY))\n : EMPTY;\n\n permissionStatus$\n .pipe(\n switchMap((status) =>\n fromEvent(status, 'change').pipe(\n map(() => status.state),\n startWith(status.state),\n ),\n ),\n map((state): NotificationPermissionState => (state === 'prompt' ? 'default' : state)),\n tap((state) => permission.set(state)),\n takeUntil(destroyed$),\n )\n .subscribe();\n\n const isDocumentVisible = injectIsDocumentVisible();\n\n // The fallback for engines without that descriptor: a permission changed in browser settings is\n // only observable by reading it again, and coming back to the tab is when that matters.\n effect(() => {\n if (!isDocumentVisible()) {\n return;\n }\n\n untracked(() => permission.set(Notification.permission));\n });\n }\n\n const request = (): Observable<NotificationPermissionState> =>\n defer((): Observable<NotificationPermissionState> => {\n if (!isSupported) {\n return of('unsupported');\n }\n\n // The prompt can only be shown once - after that only the user can change it in site settings.\n if (Notification.permission !== 'default') {\n return of(Notification.permission);\n }\n\n return from(\n new Promise<NotificationPermission>((resolve) => {\n // WebKit only gained the promise-returning form in Safari 16 and hands the result to the\n // deprecated callback before that. Passing both is spec-legal; the later resolve is a no-op.\n const requested = Notification.requestPermission(resolve) as Promise<NotificationPermission> | undefined;\n\n requested?.then(resolve, () => resolve(Notification.permission));\n }),\n );\n }).pipe(tap((state) => permission.set(state)));\n\n let nextTagId = 0;\n const clickHandlers = new Map<string, (context: NotificationClickContext) => void>();\n const openCloseFns = new Set<() => void>();\n let isClickRelayAttached = false;\n\n const attachClickRelay = () => {\n const serviceWorker = navigator.serviceWorker;\n\n if (isClickRelayAttached || !serviceWorker) {\n return;\n }\n\n isClickRelayAttached = true;\n\n fromEvent<MessageEvent>(serviceWorker, 'message')\n .pipe(\n map((event) => event.data as NotificationClickMessage | null),\n filter((message): message is NotificationClickMessage => message?.type === NOTIFICATION_CLICK_MESSAGE_TYPE),\n tap((message) =>\n clickHandlers.get(message.tag)?.({ tag: message.tag, data: message.data, action: message.action }),\n ),\n takeUntil(destroyed$),\n )\n .subscribe();\n };\n\n // `getRegistration()` rather than `ready`: `ready` never settles in an app without a service\n // worker, which would leave every `shown$` hanging instead of reporting 'unavailable'.\n const serviceWorkerRegistration = (): Observable<ServiceWorkerRegistration | undefined> =>\n defer(() =>\n navigator.serviceWorker\n ? from(navigator.serviceWorker.getRegistration()).pipe(catchError(() => of(undefined)))\n : of(undefined),\n );\n\n const closePersistentNotifications = (tag?: string): Observable<Notification[]> =>\n serviceWorkerRegistration().pipe(\n switchMap((registration) =>\n registration\n ? // Firefox rejects getNotifications() when the worker is not the one that showed them.\n from(registration.getNotifications(tag ? { tag } : undefined)).pipe(catchError(() => of([])))\n : of<Notification[]>([]),\n ),\n tap((notifications) => notifications.forEach((notification) => notification.close())),\n );\n\n const show = (config: ShowNotificationConfig): NotificationRef => {\n const tag = config.tag ?? `et-notification-${++nextTagId}`;\n const options = toNotificationOptions(config, tag);\n const path = config.path ?? 'auto';\n // Actions only redirect a notification that has not been pinned to a path - `path: 'page'` is a\n // caller saying they would rather have it without the buttons than not at all.\n const needsPersistent = path === 'auto' && !!config.actions?.length;\n\n const closed$ = new Subject<void>();\n let isClosed = false;\n let pageNotification: Notification | null = null;\n\n const close = () => {\n if (isClosed) {\n return;\n }\n\n isClosed = true;\n closed$.next();\n closed$.complete();\n clickHandlers.delete(tag);\n openCloseFns.delete(close);\n pageNotification?.close();\n\n // A no-op unless this notification took the persistent path.\n closePersistentNotifications(tag).pipe(takeUntil(destroyed$)).subscribe();\n };\n\n const showViaPage = (): NotificationDeliveryPath => {\n let notification: Notification;\n\n try {\n notification = new Notification(config.title, toPageNotificationOptions(options));\n } catch {\n // How Android Chrome says \"persistent notifications only\" - there is no feature flag to test.\n return 'unavailable';\n }\n\n pageNotification = notification;\n\n notification.onclick = (event) => config.onClick?.({ tag, data: config.data, event });\n notification.onclose = () => {\n // The user dismissed it - forget the ref so `closeAll()` has nothing stale to walk.\n openCloseFns.delete(close);\n config.onClose?.();\n };\n notification.onshow = () => config.onShow?.();\n notification.onerror = () => config.onError?.();\n\n if (isClosed) {\n notification.close();\n\n return 'unavailable';\n }\n\n return 'page';\n };\n\n const showViaServiceWorker = (): Observable<NotificationDeliveryPath> =>\n serviceWorkerRegistration().pipe(\n switchMap((registration): Observable<NotificationDeliveryPath> => {\n if (!registration || isClosed) {\n return of('unavailable');\n }\n\n if (config.onClick) {\n clickHandlers.set(tag, config.onClick);\n attachClickRelay();\n }\n\n return from(registration.showNotification(config.title, options)).pipe(\n switchMap((): Observable<NotificationDeliveryPath> =>\n isClosed\n ? // Closed while the worker was still putting it up - take back what just appeared.\n closePersistentNotifications(tag).pipe(map((): NotificationDeliveryPath => 'unavailable'))\n : of('service-worker'),\n ),\n catchError(() => {\n clickHandlers.delete(tag);\n\n return of<NotificationDeliveryPath>('unavailable');\n }),\n );\n }),\n );\n\n const shown$ = defer((): Observable<NotificationDeliveryPath> => {\n // Permission is never requested here - an app that wants the prompt calls `request()`.\n if (!isSupported || Notification.permission !== 'granted' || isClosed) {\n return of('unavailable');\n }\n\n if (path === 'service-worker' || needsPersistent) {\n return showViaServiceWorker();\n }\n\n const pagePath = showViaPage();\n\n if (pagePath !== 'unavailable' || path === 'page') {\n return of(pagePath);\n }\n\n return showViaServiceWorker();\n }).pipe(\n tap((deliveryPath) => {\n if (deliveryPath === 'unavailable') {\n openCloseFns.delete(close);\n }\n }),\n // Shown once, replayed to every later subscriber - `refCount: false` keeps the result after\n // the eager subscription below has completed.\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n\n openCloseFns.add(close);\n\n // `show()` is imperative: the notification appears whether or not anyone subscribes.\n shown$.pipe(takeUntil(destroyed$)).subscribe();\n\n if (config.autoClose) {\n shown$\n .pipe(\n filter((deliveryPath) => deliveryPath !== 'unavailable'),\n switchMap(() => timer(config.autoClose ?? 0)),\n tap(() => close()),\n takeUntil(closed$),\n takeUntil(destroyed$),\n )\n .subscribe();\n }\n\n return { tag, shown$, close };\n };\n\n const closeAll = () => {\n for (const close of Array.from(openCloseFns)) {\n close();\n }\n\n closePersistentNotifications().pipe(takeUntil(destroyed$)).subscribe();\n };\n\n destroyRef.onDestroy(() => {\n clickHandlers.clear();\n openCloseFns.clear();\n });\n\n return { isSupported, permission: permission.asReadonly(), request, show, closeAll };\n },\n { name: 'Notifications' },\n);\n\nexport const provideNotifications = /* @__PURE__ */ toProvideFn(NOTIFICATIONS_DEF);\nexport const injectNotifications = /* @__PURE__ */ toInjectFn(NOTIFICATIONS_DEF);\n","import { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport { OverlayRuntimeAutoFocusTarget } from './overlay-runtime.types';\n\nexport const FOCUSABLE_SELECTOR = /* @__PURE__ */ [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nexport const isHTMLElement = (value: unknown): value is HTMLElement => {\n return value instanceof HTMLElement;\n};\n\nexport const isFocusable = (element: HTMLElement, document: Document) => {\n const view = document.defaultView;\n const style = view?.getComputedStyle(element);\n const isVisible = style?.display !== 'none' && style?.visibility !== 'hidden' && element.getClientRects().length > 0;\n\n return isVisible && !element.hasAttribute('disabled') && element.tabIndex >= 0;\n};\n\nexport const getFocusableElements = (container: HTMLElement, document: Document) => {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter((el) =>\n isFocusable(el, document),\n );\n};\n\nexport const getHeadingElement = (container: HTMLElement) => {\n return container.querySelector<HTMLElement>('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n};\n\nexport const focusElement = (element: HTMLElement | null) => {\n if (!element) {\n return;\n }\n\n element.focus({ preventScroll: true });\n};\n\nexport const applyInitialFocus = (\n paneElement: HTMLElement,\n autoFocus: OverlayRuntimeAutoFocusTarget | string | false,\n document: Document,\n) => {\n if (autoFocus === false) {\n return;\n }\n\n if (autoFocus === 'container') {\n focusElement(paneElement);\n\n return;\n }\n\n if (autoFocus === 'first-heading') {\n focusElement(getHeadingElement(paneElement) ?? paneElement);\n\n return;\n }\n\n if (autoFocus === 'first-tabbable') {\n focusElement(getFocusableElements(paneElement, document)[0] ?? paneElement);\n\n return;\n }\n\n focusElement(paneElement.querySelector<HTMLElement>(autoFocus) ?? paneElement);\n};\n\nexport const setupFocusTrap = (\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n enabled: boolean,\n isTopMost: (ref: OverlayRuntimeRef<object, unknown>) => boolean,\n document: Document,\n) => {\n if (!enabled) {\n return () => undefined;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || !isTopMost(overlayRef)) {\n return;\n }\n\n const focusableElements = getFocusableElements(paneElement, document);\n if (focusableElements.length === 0) {\n event.preventDefault();\n focusElement(paneElement);\n\n return;\n }\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement;\n\n if (event.shiftKey && activeElement === firstElement) {\n event.preventDefault();\n focusElement(lastElement ?? null);\n\n return;\n }\n\n if (!event.shiftKey && activeElement === lastElement) {\n event.preventDefault();\n focusElement(firstElement ?? null);\n }\n };\n\n paneElement.addEventListener('keydown', onKeyDown);\n\n return () => {\n paneElement.removeEventListener('keydown', onKeyDown);\n };\n};\n","import { isDevMode } from '@angular/core';\nimport { AngularRenderer } from '../providers';\nimport { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport {\n OverlayRuntimeAnchoredPosition,\n OverlayRuntimeCenteredPosition,\n OverlayRuntimeGlobalPosition,\n OverlayRuntimeMountConfig,\n} from './overlay-runtime.types';\n\nexport const setBaseElementStyles = (\n config: OverlayRuntimeMountConfig<object>,\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n) => {\n renderer.setStyle(hostElement, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n display: 'block',\n pointerEvents: config.hasBackdrop === false ? 'none' : 'auto',\n });\n\n renderer.setStyle(paneElement, {\n pointerEvents: 'auto',\n outline: 'none',\n });\n};\n\nexport const setBackdropStyles = (backdropElement: HTMLElement, renderer: AngularRenderer) => {\n renderer.setStyle(backdropElement, {\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n });\n};\n\nexport const applyCenteredPosition = (\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n _config: OverlayRuntimeCenteredPosition,\n) => {\n renderer.setStyle(hostElement, {\n display: 'grid',\n placeItems: 'center',\n padding: '16px',\n overflow: 'auto',\n });\n\n renderer.setStyle(paneElement, {\n position: 'relative',\n });\n};\n\nexport const applyGlobalPosition = (\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n config: OverlayRuntimeGlobalPosition,\n) => {\n renderer.setStyle(hostElement, {\n display: 'grid',\n // an explicit full-size cell keeps the grid area definite so percentage\n // based pane sizes (e.g. max-height: calc(100% - 72px)) can resolve\n gridTemplateRows: '100%',\n gridTemplateColumns: '100%',\n placeItems: `${config.vertical ?? 'center'} ${config.horizontal ?? 'center'}`,\n padding: config.padding ?? '0',\n });\n\n renderer.setStyle(paneElement, {\n position: 'relative',\n });\n};\n\n/**\n * Clears every inline style any position strategy kind may have set and\n * restores the base element styles, so a different strategy can be applied afterwards.\n */\nexport const resetPositioningStyles = (\n config: OverlayRuntimeMountConfig<object>,\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n) => {\n renderer.setStyle(hostElement, {\n gridTemplateRows: null,\n gridTemplateColumns: null,\n placeItems: null,\n padding: null,\n overflow: null,\n });\n\n renderer.setStyle(paneElement, {\n position: null,\n top: null,\n left: null,\n width: null,\n transform: null,\n visibility: null,\n });\n\n renderer.setCssProperties(paneElement, {\n '--et-overlay-max-width': null,\n '--et-overlay-max-height': null,\n '--et-overlay-anchored-x': null,\n '--et-overlay-anchored-y': null,\n });\n\n renderer.removeAttribute(paneElement, 'data-overlay-placement');\n\n setBaseElementStyles(config, hostElement, paneElement, renderer);\n};\n\n/**\n * Positions an anchored overlay pane and returns the cleanup for its auto-update loop.\n */\nexport type AnchoredPositionSetup = (\n strategy: OverlayRuntimeAnchoredPosition,\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n renderer: AngularRenderer,\n) => () => void;\n\nlet anchoredPositionSetup: AnchoredPositionSetup | null = null;\n\n/**\n * Installs the anchored positioning implementation. Called by `anchoredOverlayPosition()`, which is\n * the only thing that pulls `@floating-ui/dom` into the bundle - apps that never anchor an overlay\n * do not ship it.\n *\n * @internal\n */\nexport const registerAnchoredPositionSetup = (setup: AnchoredPositionSetup) => {\n anchoredPositionSetup = setup;\n};\n\nexport const setupPositioning = (\n config: OverlayRuntimeMountConfig<object>,\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n renderer: AngularRenderer,\n) => {\n const strategy = config.positionStrategy ?? { kind: 'center' };\n\n if (strategy.kind === 'anchored') {\n renderer.setStyle(hostElement, {\n pointerEvents: config.hasBackdrop === false ? 'none' : 'auto',\n });\n\n if (!anchoredPositionSetup) {\n if (isDevMode()) {\n console.error(\n 'An overlay was mounted with an anchored position strategy, but anchored positioning is not installed. Build the strategy with `anchoredOverlayPosition()` from @ethlete/core so the positioning code is part of the bundle.',\n strategy,\n );\n }\n\n applyCenteredPosition(hostElement, paneElement, renderer, { kind: 'center' });\n\n return () => undefined;\n }\n\n return anchoredPositionSetup(strategy, paneElement, overlayRef, renderer);\n }\n\n if (strategy.kind === 'global') {\n applyGlobalPosition(hostElement, paneElement, renderer, strategy);\n\n return () => undefined;\n }\n\n applyCenteredPosition(hostElement, paneElement, renderer, strategy);\n\n return () => undefined;\n};\n","import { isDevMode } from '@angular/core';\nimport {\n autoUpdate,\n computePosition,\n flip,\n limitShift,\n Middleware,\n offset,\n Padding,\n Placement,\n shift,\n} from '@floating-ui/dom';\nimport { AngularRenderer } from '../providers';\nimport { isHTMLElement } from './overlay-focus';\nimport { registerAnchoredPositionSetup } from './overlay-position';\nimport { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport { OverlayRuntimeAnchoredPosition } from './overlay-runtime.types';\n\n/**\n * The floating-ui middleware only a subset of anchored overlays needs. Installed by\n * `enableAnchoredOverlayPositionExtras()`.\n *\n * @internal\n */\nexport type AnchoredPositionMiddlewareExtras = {\n size: typeof import('@floating-ui/dom').size;\n arrow: typeof import('@floating-ui/dom').arrow;\n hide: typeof import('@floating-ui/dom').hide;\n};\n\nlet middlewareExtras: AnchoredPositionMiddlewareExtras | null = null;\n\n/**\n * Installs the `size` / `arrow` / `hide` middleware. Called by\n * `enableAnchoredOverlayPositionExtras()`.\n *\n * @internal\n */\nexport const registerAnchoredPositionMiddlewareExtras = (extras: AnchoredPositionMiddlewareExtras) => {\n middlewareExtras = extras;\n};\n\nconst requireMiddlewareExtras = (feature: string) => {\n if (!middlewareExtras && isDevMode()) {\n console.error(\n `An anchored overlay uses \"${feature}\", but the matching floating-ui middleware is not installed. Call \\`enableAnchoredOverlayPositionExtras()\\` from @ethlete/core once during app setup.`,\n );\n }\n\n return middlewareExtras;\n};\n\ntype AnchoredSide = 'top' | 'bottom' | 'left' | 'right';\n\nconst OPPOSITE_SIDE: Record<AnchoredSide, AnchoredSide> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n};\n\nconst PREFERRED_SIDE_NAME = 'etPreferredSide';\n\ntype PreferredSideData = { availableSpace?: Partial<Record<AnchoredSide, number>> };\n\nconst getAnchoredSide = (placement: Placement) => placement.split('-')[0] as AnchoredSide;\n\nconst toOppositeSidePlacement = (placement: Placement) => {\n const [side, alignment] = placement.split('-') as [AnchoredSide, string | undefined];\n const opposite = OPPOSITE_SIDE[side];\n\n return (alignment ? `${opposite}-${alignment}` : opposite) as Placement;\n};\n\n/**\n * The `flip` replacement behind `minAvailableSpace` - see that option. Every decision here has to\n * stay derived from the space around the reference alone: the moment the pane's own size enters it,\n * `size`'s cap feeds back into the next placement and an open pane starts flipping on its own.\n */\nconst preferredSide = (options: {\n minAvailableSpace: number;\n padding: Padding;\n boundary: Element | Element[] | undefined;\n}): Middleware => ({\n name: PREFERRED_SIDE_NAME,\n options,\n async fn(state) {\n const { placement, initialPlacement, rects, middlewareData } = state;\n const side = getAnchoredSide(placement);\n // via the platform, like every built-in middleware - importing `detectOverflow` from\n // `@floating-ui/dom` instead pulls a second copy of it into the bundle\n const overflow = await state.platform.detectOverflow(state, {\n padding: options.padding,\n boundary: options.boundary,\n });\n const isYAxis = side === 'top' || side === 'bottom';\n // the pane's own size cancels out of `size - overflow[side]`: what remains is the distance from\n // its anchored edge to the boundary - the same number the `size` middleware caps the pane to\n const available = (isYAxis ? rects.floating.height : rects.floating.width) - overflow[side];\n const availableSpace: Partial<Record<AnchoredSide, number>> = {\n ...(middlewareData[PREFERRED_SIDE_NAME] as PreferredSideData | undefined)?.availableSpace,\n [side]: available,\n };\n\n if (available >= options.minAvailableSpace) {\n return {};\n }\n\n const oppositeAvailable = availableSpace[OPPOSITE_SIDE[side]];\n\n if (oppositeAvailable === undefined) {\n return { data: { availableSpace }, reset: { placement: toOppositeSidePlacement(placement) } };\n }\n\n // ties go to the placement's own side, which also terminates the reset loop after at most one\n // measurement per side\n const keepSide =\n side === getAnchoredSide(initialPlacement) ? available >= oppositeAvailable : available > oppositeAvailable;\n\n return keepSide\n ? { data: { availableSpace } }\n : { data: { availableSpace }, reset: { placement: toOppositeSidePlacement(placement) } };\n },\n});\n\nexport const createAnchoredPositionCleanup = (\n strategy: OverlayRuntimeAnchoredPosition,\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n renderer: AngularRenderer,\n) => {\n // mirrorWidth needs a real element to measure; virtual references fall back to max-content\n const mirrorWidthElement =\n strategy.mirrorWidth && isHTMLElement(strategy.referenceElement) ? strategy.referenceElement : null;\n\n if (strategy.minAvailableSpace !== undefined && !strategy.autoResize && isDevMode()) {\n console.error(\n 'An anchored overlay sets `minAvailableSpace` without `autoResize`, so it is kept on a side it does not fit on with nothing capping it to the space there. Enable `autoResize` or drop `minAvailableSpace`.',\n );\n }\n\n renderer.setStyle(paneElement, {\n position: 'absolute',\n top: '0',\n left: '0',\n width: mirrorWidthElement ? `${mirrorWidthElement.offsetWidth}px` : 'max-content',\n });\n\n /**\n * What to do when the reference is not somewhere the pane can be positioned against: either removed\n * from the document, or scrolled out of a clipping ancestor. Both measure as a rect the pane must not\n * be moved to - a detached element reports zeros, which is the viewport's top-left corner.\n */\n const handleUnusableReference = () => {\n if (strategy.autoCloseIfReferenceHidden) {\n // Closed before any transform is applied, so the exit animation does not run from the corner.\n overlayRef.close(undefined, 'reference-detached');\n\n return;\n }\n\n if (strategy.autoHide) {\n renderer.setStyle(paneElement, { visibility: 'hidden' });\n }\n };\n\n const cleanup = autoUpdate(strategy.referenceElement, paneElement, () => {\n // Checked here rather than left to the `hide` middleware, which is only in the list when `autoHide`\n // or `autoCloseIfReferenceHidden` asked for it: a trigger destroyed while its overlay is open (a\n // menu item that removes the button it was opened from) would otherwise fly to the corner for the\n // frames the overlay takes to animate out.\n if (isHTMLElement(strategy.referenceElement) && !strategy.referenceElement.isConnected) {\n handleUnusableReference();\n\n return;\n }\n\n const arrowElement = paneElement.querySelector<HTMLElement>('[et-floating-arrow]');\n const middleware = [];\n\n middleware.push(offset(strategy.offset ?? 8));\n middleware.push(\n strategy.minAvailableSpace === undefined\n ? flip({\n fallbackPlacements: strategy.fallbackPlacements ?? undefined,\n fallbackAxisSideDirection: 'start',\n boundary: strategy.boundary,\n })\n : preferredSide({\n minAvailableSpace: strategy.minAvailableSpace,\n // must stay the padding `size` measures with: the threshold is then compared against the\n // very height the pane ends up capped to\n padding: strategy.viewportPadding ?? 8,\n boundary: strategy.boundary,\n }),\n );\n\n if (strategy.shift !== false) {\n middleware.push(\n shift({\n // floating-ui's cross axis points at the reference, so shifting on it slides the pane over\n // the reference instead of letting it shrink - and `size` then reports the whole boundary\n // as available height rather than the space on the pane's side\n crossAxis:\n strategy.minAvailableSpace === undefined &&\n (typeof strategy.shift === 'object' ? (strategy.shift.crossAxis ?? false) : false),\n limiter: limitShift(),\n padding: strategy.viewportPadding ?? 8,\n boundary: strategy.boundary,\n }),\n );\n }\n\n // size must run AFTER shift so the available space is measured from the shifted position -\n // otherwise a cross-axis-shifted pane gets its max size capped to the unshifted leftover space\n if (strategy.autoResize) {\n const extras = requireMiddlewareExtras('autoResize');\n\n if (extras) {\n middleware.push(\n extras.size({\n padding: strategy.viewportPadding ?? 8,\n apply({ availableHeight, availableWidth }) {\n renderer.setCssProperties(paneElement, {\n '--et-overlay-max-width': `${availableWidth}px`,\n '--et-overlay-max-height': `${availableHeight}px`,\n });\n },\n }),\n );\n }\n }\n\n if (arrowElement) {\n const extras = requireMiddlewareExtras('arrow');\n\n if (extras) {\n middleware.push(\n extras.arrow({\n element: arrowElement,\n // keeps the arrow off a rounded pane corner by default: 12px covers the radius of the\n // built-in boxed panes (--et-overlay-radius). Panes with a larger radius have to pass their\n // own - an arrow whose base sits on the corner arc looks detached from the pane.\n padding: strategy.arrowPadding ?? 12,\n }),\n );\n }\n }\n\n if (strategy.autoHide || strategy.autoCloseIfReferenceHidden) {\n const extras = requireMiddlewareExtras('autoHide');\n\n if (extras) {\n middleware.push(\n extras.hide({\n strategy: 'referenceHidden',\n }),\n );\n }\n }\n\n computePosition(strategy.referenceElement, paneElement, {\n placement: strategy.placement ?? 'bottom',\n strategy: 'absolute',\n middleware,\n }).then(({ x, y, placement, middlewareData }) => {\n if (middlewareData.hide?.referenceHidden) {\n handleUnusableReference();\n\n return;\n }\n\n renderer.setStyle(paneElement, {\n transform: `translate3d(${x}px, ${y}px, 0)`,\n width: mirrorWidthElement ? `${mirrorWidthElement.offsetWidth}px` : null,\n visibility: null,\n });\n // exposed so animations can compose their transforms with the anchored position\n renderer.setCssProperties(paneElement, {\n '--et-overlay-anchored-x': `${x}px`,\n '--et-overlay-anchored-y': `${y}px`,\n });\n renderer.setAttribute(paneElement, 'data-overlay-placement', placement);\n\n if (arrowElement && middlewareData.arrow) {\n renderer.setCssProperty(\n arrowElement,\n '--et-floating-arrow-translate',\n `translate3d(${middlewareData.arrow.x ?? 0}px, ${middlewareData.arrow.y ?? 0}px, 0)`,\n );\n }\n });\n });\n\n return () => {\n cleanup();\n };\n};\n\n/**\n * Builds an anchored position strategy and installs the anchored positioning implementation.\n *\n * Anchored positioning is the only part of the overlay runtime that needs `@floating-ui/dom`, and it\n * is reachable only through this function - an app that positions its overlays centered or globally\n * never bundles it. Always build anchored strategies with this helper instead of a plain\n * `{ kind: 'anchored', ... }` literal.\n *\n * Overlays that set `autoResize`, `autoHide`, `autoCloseIfReferenceHidden` or render an arrow\n * additionally need `enableAnchoredOverlayPositionExtras()`.\n */\nexport const anchoredOverlayPosition = (\n config: Omit<OverlayRuntimeAnchoredPosition, 'kind'>,\n): OverlayRuntimeAnchoredPosition => {\n registerAnchoredPositionSetup(createAnchoredPositionCleanup);\n\n return { kind: 'anchored', ...config };\n};\n","import { arrow, hide, size } from '@floating-ui/dom';\nimport { registerAnchoredPositionMiddlewareExtras } from './overlay-position-anchored';\n\n/**\n * Installs the floating-ui middleware anchored overlays need for `autoResize`, `autoHide`,\n * `autoCloseIfReferenceHidden` and arrows. Call it once wherever such an overlay is built - an\n * anchored overlay that uses none of those features does not bundle this middleware.\n */\nexport const enableAnchoredOverlayPositionExtras = () => {\n registerAnchoredPositionMiddlewareExtras({ size, arrow, hide });\n};\n","import { ComponentRef, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n OverlayRuntimeCloseEvent,\n OverlayRuntimeCloseGuard,\n OverlayRuntimeCloseSource,\n OverlayRuntimeElements,\n OverlayRuntimeMountConfig,\n OverlayRuntimePositionStrategy,\n} from './overlay-runtime.types';\n\nexport type OverlayRuntimeState = 'mounting' | 'mounted' | 'closing' | 'closed';\n\nexport const createOverlayRuntimeRef = <TComponent extends object, TResult = unknown>(\n id: string,\n config: Omit<OverlayRuntimeMountConfig<TComponent>, 'component'>,\n elements: OverlayRuntimeElements,\n requestClose: (result: TResult | undefined, source: OverlayRuntimeCloseSource) => void,\n) => {\n const _state = signal<OverlayRuntimeState>('mounting');\n const _componentInstance = signal<TComponent | null>(null);\n\n let positionUpdater: ((strategy: OverlayRuntimePositionStrategy) => void) | null = null;\n\n const beforeOpenedSubject = new Subject<void>();\n const afterOpenedSubject = new Subject<void>();\n const beforeClosedSubject = new Subject<OverlayRuntimeCloseEvent<TResult>>();\n const afterClosedSubject = new Subject<OverlayRuntimeCloseEvent<TResult>>();\n const closeGuards = new Set<OverlayRuntimeCloseGuard<TResult>>();\n\n return {\n id,\n config,\n elements,\n state: _state.asReadonly(),\n componentInstance: _componentInstance.asReadonly(),\n\n // Internal - driven by overlay-runtime.ts\n beforeOpenedSubject,\n\n close(result?: TResult, source: OverlayRuntimeCloseSource = 'api') {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n // `reference-detached` is a forced teardown (the anchor is gone) - never vetoable.\n if (source !== 'reference-detached') {\n for (const guard of closeGuards) {\n if (!guard({ result, source })) {\n return;\n }\n }\n }\n\n requestClose(result, source);\n },\n\n /** Close bypassing every registered close guard - used by a guard's owner to commit a\n * close it previously vetoed (e.g. after an async confirm resolved). */\n forceClose(result?: TResult, source: OverlayRuntimeCloseSource = 'api') {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n requestClose(result, source);\n },\n\n /** Register a synchronous veto for pending closes. Returns an unregister function. */\n registerCloseGuard(guard: OverlayRuntimeCloseGuard<TResult>): () => void {\n closeGuards.add(guard);\n\n return () => closeGuards.delete(guard);\n },\n\n beforeOpened(): Observable<void> {\n return beforeOpenedSubject.asObservable();\n },\n afterOpened(): Observable<void> {\n return afterOpenedSubject.asObservable();\n },\n beforeClosed(): Observable<OverlayRuntimeCloseEvent<TResult>> {\n return beforeClosedSubject.asObservable();\n },\n afterClosed(): Observable<OverlayRuntimeCloseEvent<TResult>> {\n return afterClosedSubject.asObservable();\n },\n\n attachComponentRef(componentRef: ComponentRef<TComponent>) {\n _componentInstance.set(componentRef.instance);\n },\n\n /** @internal */\n attachPositionUpdater(updater: (strategy: OverlayRuntimePositionStrategy) => void) {\n positionUpdater = updater;\n },\n\n updatePositionStrategy(strategy: OverlayRuntimePositionStrategy) {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n positionUpdater?.(strategy);\n },\n\n markOpened() {\n if (_state() !== 'mounting') {\n return;\n }\n\n _state.set('mounted');\n afterOpenedSubject.next();\n afterOpenedSubject.complete();\n },\n\n beginClose(closeEvent: OverlayRuntimeCloseEvent<TResult>) {\n if (_state() === 'closing' || _state() === 'closed') {\n return false;\n }\n\n _state.set('closing');\n beforeClosedSubject.next(closeEvent);\n beforeClosedSubject.complete();\n\n return true;\n },\n\n finishClose(closeEvent: OverlayRuntimeCloseEvent<TResult>) {\n if (_state() === 'closed') {\n return;\n }\n\n _state.set('closed');\n _componentInstance.set(null);\n afterClosedSubject.next(closeEvent);\n afterClosedSubject.complete();\n },\n };\n};\n\nexport type OverlayRuntimeRef<TComponent extends object = object, TResult = unknown> = ReturnType<\n typeof createOverlayRuntimeRef<TComponent, TResult>\n>;\n","import {\n ApplicationRef,\n DOCUMENT,\n DestroyRef,\n EnvironmentInjector,\n Injector,\n computed,\n createComponent,\n inject,\n signal,\n} from '@angular/core';\nimport { filter, take } from 'rxjs';\nimport { ANIMATED_LIFECYCLE_TOKEN, animationDebugLog, nextFrame } from '../animations';\nimport { injectRenderer } from '../providers';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyInitialFocus, isHTMLElement, setupFocusTrap } from './overlay-focus';\nimport { resetPositioningStyles, setBackdropStyles, setBaseElementStyles, setupPositioning } from './overlay-position';\nimport { OverlayRuntimeRef, createOverlayRuntimeRef } from './overlay-runtime-ref';\nimport {\n OverlayRuntimeCloseEvent,\n OverlayRuntimeComponentBase,\n OverlayRuntimeMountConfig,\n} from './overlay-runtime.types';\n\ntype OverlayRuntime = {\n mount: <TComponent extends object, TResult = unknown>(\n config: OverlayRuntimeMountConfig<TComponent>,\n ) => OverlayRuntimeRef<TComponent, TResult>;\n openEntries: ReturnType<typeof computed<OverlayRuntimeRef<object, unknown>[]>>;\n};\n\nconst OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(\n (): OverlayRuntime => {\n const appRef = inject(ApplicationRef);\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const environmentInjector = inject(EnvironmentInjector);\n const renderer = injectRenderer();\n\n const openEntriesState = signal<OverlayRuntimeRef<object, unknown>[]>([]);\n const openEntries = computed(() => openEntriesState());\n\n // One runtime root per document: overlays usually all mount into the app's document, but an\n // overlay anchored inside a same-origin pop-up window (config.document) needs a root over there.\n const rootElements = new Map<Document, HTMLElement>();\n\n // Synchronous teardown for each currently-mounted overlay, run when the runtime's injector is\n // destroyed (app teardown). Registered on mount, removed once the overlay is destroyed normally.\n const mountedTeardowns = new Set<() => void>();\n\n const getRootElement = (targetDocument: Document) => {\n const existingRoot = rootElements.get(targetDocument);\n if (existingRoot) {\n return existingRoot;\n }\n\n // A previous Angular app (e.g. the one that existed before a Storybook HMR update or story\n // switch) may have left its runtime root orphaned in <body> if it was torn down mid-animation.\n // Such a node keeps a backdrop/pane on screen and blocks pointer events, so clear any stragglers\n // before creating ours.\n targetDocument.querySelectorAll('.et-overlay-runtime-root').forEach((el) => el.remove());\n\n const rootElement = renderer.createElement('div');\n renderer.addClass(rootElement, 'et-overlay-runtime-root');\n renderer.setStyle(rootElement, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n pointerEvents: 'none',\n // Above the query devtools panel's own near-int32-max z-index (it must outrank an arbitrary\n // host app), so an overlay opened from inside the devtools - e.g. its override menu - isn't\n // rendered behind the panel that triggered it.\n zIndex: '2147483003',\n });\n renderer.appendChild(targetDocument.body, rootElement);\n rootElements.set(targetDocument, rootElement);\n\n return rootElement;\n };\n\n const maybeDestroyRootElement = (targetDocument: Document) => {\n const rootElement = rootElements.get(targetDocument);\n\n if (!rootElement || openEntriesState().some((entry) => entry.elements.rootElement === rootElement)) {\n return;\n }\n\n const parentNode = renderer.parentNode(rootElement);\n if (parentNode) {\n renderer.removeChild(parentNode, rootElement);\n }\n\n rootElements.delete(targetDocument);\n };\n\n const isTopMost = (overlayRef: OverlayRuntimeRef<object, unknown>) => {\n return openEntriesState().at(-1) === overlayRef;\n };\n\n const getAnimatedLifecycle = (componentRef: ReturnType<typeof createComponent>) => {\n const componentLifecycle = (componentRef.instance as OverlayRuntimeComponentBase).animatedLifecycle?.();\n\n if (componentLifecycle) {\n return componentLifecycle;\n }\n\n return componentRef.injector.get(ANIMATED_LIFECYCLE_TOKEN, null);\n };\n\n const mount = <TComponent extends object, TResult = unknown>(config: OverlayRuntimeMountConfig<TComponent>) => {\n const targetDocument = config.document ?? document;\n const root = getRootElement(targetDocument);\n const hostElement = renderer.createElement('div');\n const paneElement = renderer.createElement('div');\n const backdropElement = config.hasBackdrop === false ? null : renderer.createElement('div');\n const previousFocusedElement = isHTMLElement(targetDocument.activeElement) ? targetDocument.activeElement : null;\n const autoFocus = config.autoFocus ?? 'first-tabbable';\n\n renderer.addClass(hostElement, 'et-overlay-runtime-entry');\n setBaseElementStyles(config as OverlayRuntimeMountConfig<object>, hostElement, paneElement, renderer);\n renderer.setAttributes(hostElement, {\n 'data-overlay-id': config.id,\n role: config.role ?? null,\n tabindex: '-1',\n 'aria-modal': config.role ? `${config.modal !== false}` : null,\n 'aria-describedby': config.ariaDescribedBy ?? null,\n 'aria-labelledby': config.ariaLabelledBy ?? null,\n 'aria-label': config.ariaLabel ?? null,\n });\n\n renderer.addClass(hostElement, ...(config.hostClass ?? []));\n\n if (backdropElement) {\n renderer.addClass(backdropElement, 'et-overlay-runtime-backdrop');\n setBackdropStyles(backdropElement, renderer);\n renderer.setAttribute(backdropElement, 'data-overlay-id', config.id);\n (config.backdropClass ?? []).forEach((className) => renderer.addClass(backdropElement, className));\n renderer.appendChild(hostElement, backdropElement);\n }\n\n renderer.appendChild(hostElement, paneElement);\n renderer.appendChild(root, hostElement);\n\n const overlayRef = createOverlayRuntimeRef<TComponent, TResult>(\n config.id,\n { ...config },\n {\n rootElement: root,\n hostElement,\n backdropElement,\n paneElement,\n },\n (result, source) => beginClose({ result, source }),\n );\n\n animationDebugLog(`runtime ${config.id}`, 'mount');\n\n // matches the previous overlay behavior: escape/outside-pointer closes are\n // ignored until the enter transition has started plus one frame\n let interactiveCloseReady = false;\n\n const cleanupFns: Array<() => void> = [];\n const parentInjector = config.injector ?? config.viewContainerRef?.injector ?? environmentInjector;\n const elementInjector = Injector.create({\n parent: parentInjector,\n providers: config.providers ?? [],\n });\n\n const componentRef = createComponent(config.component, {\n environmentInjector,\n elementInjector,\n hostElement: paneElement,\n bindings: config.bindings ?? [],\n });\n\n // pane classes are applied after component creation - Angular replaces the host\n // element's class attribute with the component's static host class on creation\n renderer.addClass(paneElement, 'et-overlay-runtime-pane', ...(config.paneClass ?? []));\n\n appRef.attachView(componentRef.hostView);\n overlayRef.attachComponentRef(componentRef);\n overlayRef.beforeOpenedSubject.next();\n overlayRef.beforeOpenedSubject.complete();\n\n openEntriesState.update((entries) => [...entries, overlayRef as OverlayRuntimeRef<object, unknown>]);\n\n let positionCleanup = setupPositioning(\n config as OverlayRuntimeMountConfig<object>,\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n cleanupFns.push(() => positionCleanup());\n\n let currentPositionStrategy = config.positionStrategy;\n const getOriginElement = () =>\n currentPositionStrategy?.kind === 'anchored' && isHTMLElement(currentPositionStrategy.referenceElement)\n ? currentPositionStrategy.referenceElement\n : null;\n\n overlayRef.attachPositionUpdater((strategy) => {\n currentPositionStrategy = strategy;\n positionCleanup();\n resetPositioningStyles(config as OverlayRuntimeMountConfig<object>, hostElement, paneElement, renderer);\n positionCleanup = setupPositioning(\n { ...config, positionStrategy: strategy } as OverlayRuntimeMountConfig<object>,\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n });\n\n const destroyMountedOverlay = (closeEvent: OverlayRuntimeCloseEvent<TResult>) => {\n animationDebugLog(`runtime ${config.id}`, `destroy (source \"${closeEvent.source}\")`);\n cleanupFns.forEach((cleanup) => cleanup());\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n\n const parentNode = renderer.parentNode(hostElement);\n if (parentNode) {\n renderer.removeChild(parentNode, hostElement);\n }\n\n openEntriesState.update((entries) => entries.filter((entry) => entry !== overlayRef));\n maybeDestroyRootElement(targetDocument);\n\n if (config.restoreFocus !== false && previousFocusedElement?.isConnected) {\n previousFocusedElement.focus({ preventScroll: true });\n }\n\n overlayRef.finishClose(closeEvent);\n };\n\n // Allows the runtime to synchronously destroy this overlay on app teardown, bypassing the\n // async leave animation (whose completion callback would never fire once the app is gone).\n const forceTeardown = () => destroyMountedOverlay({ result: undefined, source: 'api' });\n mountedTeardowns.add(forceTeardown);\n cleanupFns.push(() => mountedTeardowns.delete(forceTeardown));\n\n const beginClose = (closeEvent: OverlayRuntimeCloseEvent<TResult>) => {\n if (!overlayRef.beginClose(closeEvent)) {\n return;\n }\n\n const lifecycle = getAnimatedLifecycle(componentRef);\n\n animationDebugLog(\n `runtime ${config.id}`,\n `close requested (source \"${closeEvent.source}\", lifecycle state \"${lifecycle?.state$.value ?? 'none'}\", delegate ${config.animationDelegate?.leave ? 'yes' : 'no'})`,\n );\n\n // The reference element is gone - there is nothing left to animate away from, so tear the\n // overlay down synchronously instead of playing a leave transition from a stale position.\n if (!lifecycle || closeEvent.source === 'reference-detached') {\n destroyMountedOverlay(closeEvent);\n\n return;\n }\n\n if (config.animationDelegate?.leave) {\n config.animationDelegate.leave({ lifecycle, elements: overlayRef.elements, closeEvent });\n } else {\n lifecycle.leave();\n }\n\n lifecycle.state$\n .pipe(\n filter((state) => state === 'left'),\n take(1),\n )\n .subscribe(() => {\n destroyMountedOverlay(closeEvent);\n });\n };\n\n const closeOnEscape = config.closeOnEscape ?? true;\n if (closeOnEscape) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !isTopMost(overlayRef as OverlayRuntimeRef<object, unknown>)) {\n return;\n }\n\n if (!interactiveCloseReady) {\n animationDebugLog(`runtime ${config.id}`, 'escape ignored (enter transition has not started yet)');\n\n return;\n }\n\n event.preventDefault();\n overlayRef.close(undefined, 'escape');\n };\n\n targetDocument.addEventListener('keydown', onKeyDown, true);\n cleanupFns.push(() => targetDocument.removeEventListener('keydown', onKeyDown, true));\n }\n\n const closeOnOutsidePointer = config.closeOnOutsidePointer ?? config.modal === false;\n if (closeOnOutsidePointer) {\n const onPointerDown = (event: PointerEvent) => {\n if (!isTopMost(overlayRef as OverlayRuntimeRef<object, unknown>)) {\n return;\n }\n\n const target = event.target;\n if (!isHTMLElement(target) || paneElement.contains(target)) {\n return;\n }\n\n if (!interactiveCloseReady) {\n animationDebugLog(`runtime ${config.id}`, 'outside pointer ignored (enter transition has not started yet)');\n\n return;\n }\n\n overlayRef.close(undefined, 'outside-pointer');\n\n const originElement = getOriginElement();\n if (originElement && originElement.contains(target)) {\n const swallowReopenClick = (clickEvent: MouseEvent) => {\n if (isHTMLElement(clickEvent.target) && originElement.contains(clickEvent.target)) {\n clickEvent.stopImmediatePropagation();\n clickEvent.preventDefault();\n }\n };\n\n targetDocument.addEventListener('click', swallowReopenClick, { capture: true, once: true });\n }\n };\n\n targetDocument.addEventListener('pointerdown', onPointerDown, true);\n cleanupFns.push(() => targetDocument.removeEventListener('pointerdown', onPointerDown, true));\n }\n\n cleanupFns.push(\n setupFocusTrap(\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n config.modal !== false,\n isTopMost,\n targetDocument,\n ),\n );\n\n nextFrame(() => {\n if (overlayRef.state() !== 'mounting') {\n animationDebugLog(`runtime ${config.id}`, `enter skipped (state \"${overlayRef.state()}\" before enter frame)`);\n\n return;\n }\n\n const lifecycle = getAnimatedLifecycle(componentRef);\n if (!lifecycle) {\n interactiveCloseReady = true;\n applyInitialFocus(paneElement, autoFocus, targetDocument);\n overlayRef.markOpened();\n\n return;\n }\n\n animationDebugLog(\n `runtime ${config.id}`,\n `enter (delegate ${config.animationDelegate?.enter ? 'yes' : 'no'}, lifecycle state \"${lifecycle.state$.value}\")`,\n );\n\n const readySubscription = lifecycle.state$\n .pipe(\n filter((state) => state === 'entering' || state === 'entered'),\n take(1),\n )\n .subscribe(() => {\n nextFrame(() => {\n interactiveCloseReady = true;\n });\n });\n cleanupFns.push(() => readySubscription.unsubscribe());\n\n if (config.animationDelegate?.enter) {\n config.animationDelegate.enter({ lifecycle, elements: overlayRef.elements });\n } else {\n lifecycle.enter();\n }\n\n lifecycle.state$\n .pipe(\n filter((state) => state === 'entered'),\n take(1),\n )\n .subscribe(() => {\n applyInitialFocus(paneElement, autoFocus, targetDocument);\n overlayRef.markOpened();\n });\n });\n\n return overlayRef;\n };\n\n destroyRef.onDestroy(() => {\n [...mountedTeardowns].forEach((teardown) => teardown());\n [...rootElements.keys()].forEach((targetDocument) => maybeDestroyRootElement(targetDocument));\n });\n\n return {\n mount,\n openEntries,\n };\n },\n { name: 'OverlayRuntime' },\n);\n\nexport const provideOverlayRuntime = /* @__PURE__ */ toProvideFn(OVERLAY_RUNTIME_DEF);\nexport const injectOverlayRuntime = /* @__PURE__ */ toInjectFn(OVERLAY_RUNTIME_DEF);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Translatable } from '../../utils';\n\n@Pipe({ name: 'etNormalizeGameResultType' })\nexport class NormalizeGameResultTypePipe implements PipeTransform {\n transform = normalizeGameResultType;\n}\n\nexport type NormalizedGameResultType = Translatable & {\n shortCode: string;\n};\n\n// TODO(TRB): Add correct type once provided by API\nexport const normalizeGameResultType = (type: string | null): NormalizedGameResultType | null => {\n if (!type) {\n return null;\n }\n\n switch (type) {\n case 'extra_time':\n return {\n i18n: 'game-result-type.extra-time',\n shortCode: 'AET',\n text: 'After Extra Time',\n };\n\n case 'penalty':\n return {\n i18n: 'game-result-type.penalty',\n shortCode: 'PSO',\n text: 'Penalty shootout',\n };\n\n case 'golden_goal':\n return {\n i18n: 'game-result-type.golden-goal',\n shortCode: 'GG',\n text: 'Golden Goal',\n };\n\n case 'default':\n default:\n return {\n i18n: 'game-result-type.full-time',\n shortCode: 'FT',\n text: 'Full Time',\n };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView } from '@ethlete/types';\nimport { MatchStateType } from './normalize-match-score.pipe';\n\n@Pipe({ name: 'etNormalizeMatchState' })\nexport class NormalizeMatchStatePipe implements PipeTransform {\n transform = normalizeMatchState;\n}\n\nexport const normalizeMatchState = (match: MatchListView | null | undefined) => {\n if (match?.isCompletedByReferee) {\n return MatchStateType.AUTO_WIN;\n } else if (match?.status === 'preparing') {\n return MatchStateType.PRE_MATCH;\n } else if (match?.status === 'started') {\n return MatchStateType.LIVE;\n } else if (match?.status === 'published' || match?.status === 'finished') {\n return MatchStateType.POST_MATCH;\n } else if (match?.round.state !== 'preparing') {\n return MatchStateType.PREPARING_ROUND;\n }\n\n return null;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView, ParticipantViewUnion } from '@ethlete/types';\nimport { Translatable } from '../../utils';\nimport { MatchStateType } from './normalize-match-score.pipe';\nimport { normalizeMatchState } from './normalize-match-state.pipe';\n\n@Pipe({ name: 'etNormalizeMatchParticipants' })\nexport class NormalizeMatchParticipantsPipe implements PipeTransform {\n transform = normalizeMatchParticipants;\n}\n\nexport type NormalizedMatchParticipants = {\n home: NormalizedMatchParticipant | null;\n away: NormalizedMatchParticipant | null;\n};\n\ntype NormalizedParticipantType = 'team' | 'player' | 'unknown';\n\nexport type NormalizedMatchParticipant =\n | ({\n type: 'tbd';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion | null;\n } & Translatable)\n | {\n type: 'participant';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion;\n }\n | ({\n type: 'none';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion | null;\n } & Translatable);\n\nexport const normalizeMatchParticipants = (match: MatchListView | null): NormalizedMatchParticipants | null => {\n const matchState = normalizeMatchState(match);\n\n if (!match || !matchState) {\n return null;\n }\n\n return {\n home: normalizeMatchParticipant(match, 'home'),\n away: normalizeMatchParticipant(match, 'away'),\n };\n};\n\nexport const normalizeMatchParticipant = (\n match: MatchListView | null,\n side: 'home' | 'away',\n): NormalizedMatchParticipant | null => {\n const matchState = normalizeMatchState(match);\n\n if (!match || !matchState) {\n return null;\n }\n\n const participant = match[side];\n const participantType = match.home?.type ?? match.away?.type ?? 'unknown';\n\n if (!participant) {\n if (matchState === MatchStateType.POST_MATCH || matchState === MatchStateType.AUTO_WIN) {\n return {\n participantType,\n type: 'none',\n i18n: 'match-participant.none',\n text: 'No opponent',\n data: participant,\n };\n } else {\n return {\n participantType,\n type: 'tbd',\n i18n: 'match-participant.tbd',\n text: 'TBD',\n data: participant,\n };\n }\n } else {\n return {\n participantType,\n type: 'participant',\n data: participant,\n };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView, MatchRankingView } from '@ethlete/types';\nimport { normalizeMatchState } from './normalize-match-state.pipe';\n\n@Pipe({ name: 'etNormalizeMatchScore' })\nexport class NormalizeMatchScorePipe implements PipeTransform {\n transform = normalizeMatchScore;\n}\n\nexport const enum MatchStateType {\n PREPARING_ROUND = 'preparingRound',\n PRE_MATCH = 'preMatch',\n LIVE = 'live',\n POST_MATCH = 'postMatch',\n AUTO_WIN = 'autoWin',\n}\n\nexport type NormalizedMatchScore = {\n home: {\n score: string | number | null;\n isWinner: boolean;\n };\n away: {\n score: string | number | null;\n isWinner: boolean;\n };\n subLine: string | null;\n isNumeric: boolean;\n};\n\nconst EMPTY_SCORE: NormalizedMatchScore = {\n home: { score: 'match-score.placeholder', isWinner: false },\n away: { score: 'match-score.placeholder', isWinner: false },\n isNumeric: false,\n subLine: null,\n};\n\nexport const normalizeMatchScore = (match: MatchListView | null | undefined): NormalizedMatchScore | null => {\n if (!match) {\n return null;\n }\n\n const matchState = normalizeMatchState(match);\n const subLine = getMatchScoreSubLine(match);\n\n if (!match.homeScore && !match.awayScore) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n\n if (isKnockoutMatch(match)) {\n if (matchState === MatchStateType.PRE_MATCH || matchState === MatchStateType.LIVE) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n\n return {\n home: {\n score: getKnockoutMatchScore(match.homeScore),\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: getKnockoutMatchScore(match.awayScore),\n isWinner: match.awayScore?.status === 'won',\n },\n subLine,\n isNumeric: false,\n };\n } else if (isGroupMatch(match)) {\n if (match.games.length === 1) {\n // Return the score if only one game has been played\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n } else {\n return {\n ...getGroupMatchPoints(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n }\n } else {\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n }\n};\n\nexport const isKnockoutMatch = (match: MatchListView | null | undefined) => {\n if (!match) {\n return false;\n }\n\n return (\n match.matchType === 'single_elimination' ||\n match.matchType === 'double_elimination' ||\n match.matchType === 'fifa_swiss'\n );\n};\n\nexport const isGroupMatch = (match: MatchListView | null | undefined) => {\n if (!match) {\n return false;\n }\n\n return match.matchType === 'groups' || match.matchType === 'league';\n};\n\nexport const getKnockoutMatchScore = (score: MatchRankingView | null | undefined) => {\n if (score?.status === 'won') {\n return 'match-score.knockout.won';\n } else if (score?.status === 'lost') {\n return 'match-score.knockout.lost';\n } else if (score?.status === 'tie') {\n return 'match-score.knockout.tie';\n }\n\n return null;\n};\n\nexport const getMatchScoreSubLine = (match: MatchListView | null | undefined) => {\n if (isKnockoutMatch(match)) {\n return null;\n } else if (isGroupMatch(match)) {\n return 'match-score.groups.sub-line';\n } else {\n return null;\n }\n};\n\nexport const getGroupMatchScore = (match: MatchListView | null | undefined) => {\n if (!match) {\n return null;\n }\n\n return {\n home: {\n score: match.homeScore?.ownPoints || 0,\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: match.awayScore?.ownPoints || 0,\n isWinner: match.awayScore?.status === 'won',\n },\n };\n};\n\nexport const getGroupMatchPoints = (match: MatchListView | null | undefined) => {\n if (!match) {\n return null;\n }\n\n return {\n home: {\n score: match.homeScore?.score || 0,\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: match.awayScore?.score || 0,\n isWinner: match.awayScore?.status === 'won',\n },\n };\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StageType } from '@ethlete/types';\nimport { Translatable } from '../../utils';\n\n@Pipe({ name: 'etNormalizeMatchType' })\nexport class NormalizeMatchTypePipe implements PipeTransform {\n transform = normalizeMatchType;\n}\n\nexport const normalizeMatchType = (matchType: StageType | null | undefined): Translatable | null => {\n if (!matchType) {\n return null;\n }\n\n switch (matchType) {\n case 'double_elimination':\n return {\n i18n: 'match-type.double-elimination',\n text: 'Double Elimination',\n };\n case 'single_elimination':\n return {\n i18n: 'match-type.single-elimination',\n text: 'Single Elimination',\n };\n case 'fifa_swiss':\n return {\n i18n: 'match-type.fifa-swiss',\n text: 'FIFA Swiss',\n };\n case 'groups':\n return {\n i18n: 'match-type.groups',\n text: 'Groups',\n };\n case 'league':\n return {\n i18n: 'match-type.league',\n text: 'League',\n };\n case 'pools':\n return {\n i18n: 'match-type.pools',\n text: 'Pools',\n };\n default:\n return null;\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { htmlToMarkdown } from '../utils/markdown';\n\n@Pipe({ name: 'htmlToMarkdown' })\nexport class HtmlToMarkdownPipe implements PipeTransform {\n transform = htmlToMarkdown;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'inferMimeType',\n})\nexport class InferMimeTypePipe implements PipeTransform {\n transform = inferMimeType;\n}\n\n/**\n * Infers the mime type of a given url or srcset.\n * If a srcset is provided, it will infer the mime type of the first url in the srcset.\n * If the srcset contains a query parameter `?fm=`, it will use the value of that parameter, since it is often used to specify the file format in image api's like contentful.\n */\nexport const inferMimeType = (srcset: string) => {\n if (!srcset) return null;\n\n if (srcset.startsWith('data:')) {\n const match = /^data:([^;,]+)/.exec(srcset);\n\n return match?.[1] ?? null;\n }\n\n const urls = srcset.split(',');\n const firstUrl = urls[0];\n\n if (!firstUrl) return null;\n\n // make sure the url does not end with something like x1, x2 or 400w, 800w... We need to remove these parts to get the correct file extension\n const urlParts = firstUrl.split(' ');\n const lastPart = urlParts[urlParts.length - 1];\n\n if (urlParts.length > 1 && !lastPart?.includes('/')) {\n urlParts.pop();\n }\n\n const cleanedUrl = urlParts.join(' ');\n\n const queryPart = cleanedUrl.split('?')[1] ?? '';\n const containsFm = queryPart.startsWith('fm=') || queryPart.includes('&fm=');\n let fileExtension: string | null = null;\n\n if (containsFm) {\n const fmIndex = queryPart.indexOf('fm=');\n const fmValue = queryPart\n .substring(fmIndex + 3)\n .split('&')[0]\n ?.toLowerCase();\n\n if (fmValue) {\n fileExtension = fmValue;\n }\n }\n\n if (!fileExtension) {\n const noQueryUrl = cleanedUrl.split('?')[0] || cleanedUrl;\n\n const lastDotIndex = noQueryUrl.lastIndexOf('.');\n\n if (lastDotIndex === -1) return null;\n\n fileExtension = noQueryUrl.substring(lastDotIndex + 1).toLowerCase();\n }\n\n if (fileExtension) {\n switch (fileExtension) {\n case 'avif':\n return 'image/avif';\n case 'bmp':\n return 'image/bmp';\n case 'gif':\n return 'image/gif';\n case 'ico':\n return 'image/vdn.microsoft.icon';\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'svg':\n return 'image/svg+xml';\n case 'tif':\n case 'tiff':\n return 'image/tiff';\n case 'webp':\n return 'image/webp';\n case 'aac':\n return 'audio/aac';\n case 'abw':\n return 'application/x-abiword';\n case 'arc':\n return 'application/x-freearc';\n case 'avi':\n return 'video/x-msvideo';\n case 'azw':\n return 'application/vnd.amazon.ebook';\n case 'bin':\n return 'application/octet-stream';\n case 'bz':\n return 'application/x-bzip';\n case 'bz2':\n return 'application/x-bzip2';\n case 'cda':\n return 'application/x-cdf';\n case 'csh':\n return 'application/x-csh';\n case 'css':\n return 'text/css';\n case 'csv':\n return 'text/csv';\n case 'doc':\n return 'application/msword';\n case 'docx':\n return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n case 'eot':\n return 'application/vnd.ms-fontobject';\n case 'epub':\n return 'application/epub+zip';\n case 'gz':\n return 'application/gzip';\n case 'htm':\n case 'html':\n return 'text/html';\n case 'ics':\n return 'text/calendar';\n case 'jar':\n return 'application/java-archive';\n case 'js':\n return 'text/javascript';\n case 'json':\n return 'application/json';\n case 'jsonld':\n return 'application/ld+json';\n case 'mid':\n case 'midi':\n return 'audio/midi';\n case 'mjs':\n return 'text/javascript';\n case 'mp3':\n return 'audio/mpeg';\n case 'mp4':\n return 'video/mp4';\n case 'mpeg':\n return 'video/mpeg';\n case 'mpkg':\n return 'tapplication/vnd.apple.installer+xml';\n case 'odp':\n return 'application/vnd.oasis.opendocument.presentation';\n case 'ods':\n return 'application/vnd.oasis.opendocument.spreadsheet';\n case 'odt':\n return 'application/vnd.oasis.opendocument.text';\n case 'oga':\n return 'audio/ogg';\n case 'ogv':\n return 'video/ogg';\n case 'ogx':\n return 'application/ogg';\n case 'opus':\n return 'audio/opus';\n case 'otf':\n return 'font/otf';\n case 'pdf':\n return 'application/pdf';\n case 'php':\n return 'application/x-httpd-php';\n case 'ppt':\n return 'application/vnd.ms-powerpoint';\n case 'pptx':\n return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n case 'rar':\n return 'application/vnd.rar';\n case 'rtf':\n return 'application/rtf';\n case 'sh':\n return 'application/x-sh';\n case 'tar':\n return 'application/x-tar';\n case 'ts':\n return 'video/mp2t';\n case 'ttf':\n return 'font/ttf';\n case 'txt':\n return 'text/plain';\n case 'vsd':\n return 'application/vnd.visio';\n case 'wav':\n return 'audio/wav';\n case 'weba':\n return 'audio/webm';\n case 'webm':\n return 'video/webm';\n case 'woff':\n return 'font/woff';\n case 'woff2':\n return 'font/woff2';\n case 'xhtml':\n return 'application/xhtml+xml';\n case 'xls':\n return 'application/vnd.ms-excel';\n case 'xlsx':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case 'xml':\n return 'application/xml';\n case 'xul':\n return 'application/vnd.mozilla.xul+xml';\n case 'zip':\n return 'application/zip';\n case '3gp':\n return 'video/3gpp';\n case '3g2':\n return 'video/3gpp2';\n case '7z':\n return 'application/x-7z-compressed';\n\n default:\n return null;\n }\n }\n\n return null;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'initials' })\nexport class InitialsPipe implements PipeTransform {\n transform = initials;\n}\n\n/**\n * Extracts the initials from a name (or any whitespace separated string).\n *\n * Words are split on whitespace, and the first character of each word is taken.\n * At most `maxLength` initials are returned (defaults to 2), always uppercased.\n *\n * @example\n * initials('John Doe') // 'JD'\n * initials('john doe smith') // 'JD'\n * initials('john doe smith', 3) // 'JDS'\n * initials('Madonna') // 'M'\n * initials(' ') // ''\n * initials(null) // ''\n */\nexport const initials = (value: string | null | undefined, maxLength = 2) => {\n if (!value) return '';\n\n const words = value.trim().split(/\\s+/).filter(Boolean);\n\n if (!words.length) return '';\n\n return words\n .slice(0, maxLength)\n .map((word) => word[0]?.toUpperCase() ?? '')\n .join('');\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { markdownToHtml } from '../utils/markdown';\n\n@Pipe({ name: 'markdownToHtml' })\nexport class MarkdownToHtmlPipe implements PipeTransform {\n transform = markdownToHtml;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'slugify' })\nexport class SlugifyPipe implements PipeTransform {\n transform = slugify;\n}\n\n/**\n * Converts a string into a URL-friendly slug.\n *\n * Diacritics are stripped, the string is lowercased, and any run of\n * non-alphanumeric characters becomes a single hyphen. Leading/trailing\n * hyphens are trimmed.\n *\n * @example\n * slugify('Hello World') // 'hello-world'\n * slugify(' Crème brûlée! ') // 'creme-brulee'\n * slugify('FC Bayern München') // 'fc-bayern-munchen'\n * slugify('foo_bar / baz') // 'foo-bar-baz'\n * slugify(null) // ''\n */\nexport const slugify = (value: string | null | undefined) => {\n if (!value) return '';\n\n return value\n .normalize('NFKD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n};\n","import { Pipe, PipeTransform, TrackByFunction } from '@angular/core';\n\n@Pipe({ name: 'toArray' })\nexport class ToArrayPipe implements PipeTransform {\n transform = toArray;\n}\n\nexport const toArray = (value: number) => {\n return Array.from({ length: value }, (_, i) => i);\n};\n\nexport const toArrayTrackByFn: TrackByFunction<number> = (_, item) => item;\n","import { ElementRef, inject } from '@angular/core';\nimport { signalHostAttributes, signalHostClasses, signalHostStyles } from '../signals';\nimport { createComponentId } from '../utils';\n\nexport const createPropHandlers = () => {\n const id = createComponentId('et-props');\n\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n const classes = signalHostClasses({});\n const attributes = signalHostAttributes({});\n const styles = signalHostStyles({});\n\n return {\n classes,\n attributes,\n styles,\n id,\n elementRef,\n };\n};\n\nexport type PropHandlers = ReturnType<typeof createPropHandlers>;\n","import { computed, signal } from '@angular/core';\n\nexport const createElementDictionary = () => {\n const dictionary = {\n ids: signal<string[]>([]),\n elements: signal<Record<string, HTMLElement>>({}),\n };\n\n const firstElement = computed(() => {\n const id = dictionary.ids()[0];\n return id ? (dictionary.elements()[id] ?? null) : null;\n });\n\n const firstId = computed(() => {\n const id = dictionary.ids()[0];\n return id ?? null;\n });\n\n const ids = computed(() => dictionary.ids());\n const elements = computed(() => {\n const byId = dictionary.elements();\n\n return ids()\n .map((id) => byId[id])\n .filter((element): element is HTMLElement => !!element);\n });\n\n const isEmpty = computed(() => dictionary.ids().length === 0);\n\n const has = (id: string) => {\n return dictionary.ids().includes(id);\n };\n\n const push = (id: string, element: HTMLElement) => {\n dictionary.ids.set([...dictionary.ids(), id]);\n dictionary.elements.set({ ...dictionary.elements(), [id]: element });\n };\n\n const remove = (id: string) => {\n dictionary.ids.set(dictionary.ids().filter((i) => i !== id));\n dictionary.elements.set(Object.fromEntries(Object.entries(dictionary.elements()).filter(([k]) => k !== id)));\n };\n\n const get = (id: string) => {\n return dictionary.elements()[id] ?? null;\n };\n\n return {\n ids,\n elements,\n has,\n get,\n push,\n remove,\n isEmpty,\n firstElement,\n firstId,\n };\n};\n","import { PropHandlers } from './create-prop-handlers';\nimport { Props, PropsInternal } from './create-props';\n\nexport type BindPropsOptions = {\n props: Props | PropsInternal;\n handlers: PropHandlers;\n};\n\nexport const bindProps = (config: BindPropsOptions) => {\n const props = config.props as PropsInternal;\n const {\n attachEventListeners,\n classBindings,\n attributeBindings,\n styleBindings,\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n attached,\n single,\n name,\n bindId,\n attachedElements,\n } = props;\n\n const { attributes, classes, elementRef, id, styles } = config.handlers;\n const el = elementRef.nativeElement;\n\n if (attached()) {\n if (attachedElements.has(id)) {\n return;\n } else if (single) {\n const firstAttachedRefElement = attachedElements.first();\n\n console.error(\n `[${name}] These props can only be attached to a single element at a time.\\n\\n Already attached to \\n`,\n firstAttachedRefElement,\n '\\n Trying to attach to \\n',\n el,\n );\n\n return;\n }\n }\n\n attachedElements.push(id, el);\n\n if (bindId) {\n el.id = id;\n }\n\n if (classBindings) {\n classes.pushMany(classBindings);\n }\n\n if (attributeBindings) {\n attributes.pushMany(attributeBindings);\n }\n\n if (styleBindings) {\n styles.pushMany(styleBindings);\n }\n\n if (staticAttributeBindings) {\n for (const key in staticAttributeBindings) {\n el.setAttribute(key, `${staticAttributeBindings[key]}`);\n }\n }\n\n if (staticClassBindings) {\n el.classList.add(...staticClassBindings);\n }\n\n if (staticStyleBindings) {\n for (const key in staticStyleBindings) {\n el.style.setProperty(key, `${staticStyleBindings[key]}`);\n }\n }\n\n if (attachEventListeners) {\n attachEventListeners({\n on: el.addEventListener.bind(el),\n element: el,\n });\n }\n};\n\nexport type UnbindPropsOptions = {\n props: Props | PropsInternal;\n handlers: PropHandlers;\n};\n\nexport const unbindProps = (config: UnbindPropsOptions) => {\n const props = config.props as PropsInternal;\n\n props.attachedElements.remove(config.handlers.id);\n};\n","import { DestroyRef, Signal, afterNextRender, computed, inject } from '@angular/core';\nimport { PropHandlers, createPropHandlers } from './create-prop-handlers';\nimport { createElementDictionary } from './element-dictionary';\nimport { bindProps, unbindProps } from './props-binding';\n\nexport type Props = Readonly<{\n attached: Signal<boolean>;\n attachedElements: PropsAttachedElements;\n}>;\n\nexport type PropsAttachedElements = {\n first: Signal<HTMLElement | null>;\n firstId: Signal<string | null>;\n get(id: string): HTMLElement | null;\n};\n\nexport type PropsAttachedElementsInternal = PropsAttachedElements & {\n has: (id: string) => boolean;\n push: (id: string, element: HTMLElement) => void;\n remove: (id: string) => void;\n};\n\nexport type PropsInternal = {\n single: boolean;\n name: string;\n bindId: boolean;\n\n attached: Signal<boolean>;\n attachedElements: PropsAttachedElementsInternal;\n\n classBindings: Record<string, Signal<unknown>> | null;\n attributeBindings: Record<string, Signal<unknown>> | null;\n styleBindings: Record<string, Signal<unknown>> | null;\n\n staticClassBindings: string[] | null;\n staticAttributeBindings: Record<string, unknown> | null;\n staticStyleBindings: Record<string, unknown> | null;\n\n attachEventListeners: ((context: { on: HTMLElement['addEventListener']; element: HTMLElement }) => void) | null;\n};\n\nexport type CreatePropsOptions = {\n name: string;\n bindId?: boolean;\n single?: boolean;\n classes?: Record<string, Signal<unknown>>;\n attributes?: Record<string, Signal<unknown>>;\n styles?: Record<string, Signal<unknown>>;\n staticClasses?: string[];\n staticAttributes?: Record<string, unknown>;\n staticStyles?: Record<string, unknown>;\n listeners?: (context: { on: HTMLElement['addEventListener']; element: HTMLElement }) => void;\n};\n\nexport const createProps = (props: CreatePropsOptions): Props => {\n const {\n bindId = false,\n single = true,\n classes: classBindings,\n attributes: attributeBindings,\n styles: styleBindings,\n staticAttributes: staticAttributeBindings = null,\n staticClasses: staticClassBindings = null,\n staticStyles: staticStyleBindings = null,\n listeners,\n name,\n } = props;\n\n const dictionary = createElementDictionary();\n const attached = computed(() => !dictionary.isEmpty());\n\n const attachedElements: PropsAttachedElementsInternal = {\n first: dictionary.firstElement,\n firstId: dictionary.firstId,\n\n has: dictionary.has,\n push: dictionary.push,\n remove: dictionary.remove,\n get: dictionary.get,\n };\n\n const data: PropsInternal = {\n name,\n single,\n bindId,\n\n attached,\n attachedElements,\n\n classBindings: classBindings ?? null,\n attributeBindings: attributeBindings ?? null,\n styleBindings: styleBindings ?? null,\n\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n\n attachEventListeners: listeners ?? null,\n };\n\n return data as Props;\n};\n\nexport type HostProps = {\n props: Props;\n handlers: PropHandlers;\n};\n\nexport const createHostProps = (props: CreatePropsOptions): HostProps => {\n const data = createProps(props);\n const handlers = createPropHandlers();\n\n afterNextRender({\n write: () => {\n bindProps({\n handlers,\n props: data,\n });\n },\n });\n\n const destroyRef = inject(DestroyRef);\n\n destroyRef.onDestroy(() => {\n unbindProps({\n handlers,\n props: data,\n });\n });\n\n return { props: data, handlers };\n};\n","import { afterNextRender } from '@angular/core';\n\nexport const createSetup = <T extends Record<string, unknown>>(config: {\n setupFn: (params: T) => void;\n this: ThisType<unknown>;\n}) => {\n let didCallSetup = false;\n\n afterNextRender(() => {\n if (!didCallSetup) {\n console.error('The setup() function was not called. Please call it inside your constructor.', config.this);\n\n return;\n }\n });\n\n return (params: T) => {\n if (didCallSetup) {\n console.error(\n 'The setup() function was already called. Please call it only once. \\n\\n',\n 'Instance containing the setup() call \\n',\n config.this,\n '\\n\\n Setup was called with\\n',\n params,\n );\n\n return;\n }\n\n didCallSetup = true;\n config.setupFn(params);\n };\n};\n","import { Injector, Signal, WritableSignal, effect, inject, runInInjectionContext } from '@angular/core';\n\nexport const createDependencyStash = <T extends Record<string, WritableSignal<unknown>>>(stash: T) => {\n const injector = inject(Injector);\n\n const provideSignal = <K extends keyof T>(data: { signal: Signal<ReturnType<T[K]>>; for: K }) => {\n runInInjectionContext(injector, () => {\n effect(() => {\n stash[data.for]?.set(data.signal());\n });\n });\n };\n\n const provideValue = <K extends keyof T>(data: { value: ReturnType<T[K]>; for: K }) => {\n stash[data.for]?.set(data.value);\n };\n\n return {\n ...stash,\n provideSignal,\n provideValue,\n };\n};\n","import { DestroyRef, Directive, afterNextRender, inject, input } from '@angular/core';\nimport { createPropHandlers } from './create-prop-handlers';\nimport { Props, PropsInternal } from './create-props';\nimport { bindProps, unbindProps } from './props-binding';\n\n@Directive({\n selector: '[etProps]',\n})\nexport class PropsDirective {\n private destroyRef = inject(DestroyRef);\n\n props = input.required<PropsInternal, Props>({ alias: 'etProps', transform: (d) => d as PropsInternal });\n\n propHandlers = createPropHandlers();\n\n constructor() {\n afterNextRender({\n write: () => {\n bindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n },\n });\n\n this.destroyRef.onDestroy(() => {\n unbindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n });\n }\n}\n","import { Injector, Signal, TemplateRef, computed } from '@angular/core';\n\nexport type ComponentType<T> = new (...args: any[]) => T;\n\nexport type AnyTemplateType =\n string | TemplateRef<unknown> | ComponentType<unknown> | TemplateRefWithContext | ComponentTypeWithInputs;\n\nexport type TemplateRefWithContext<T = Record<string, unknown> | undefined, J = unknown> = {\n template: TemplateRef<J>;\n context?: T;\n injector?: Injector;\n};\n\nexport type ComponentTypeWithInputs<T = Record<string, unknown> | undefined, J = unknown> = {\n component: ComponentType<J>;\n inputs?: T;\n injector?: Injector;\n};\n\nexport type StringTemplate = {\n type: 'string';\n value: string;\n};\n\nexport type NgTemplateTemplate = {\n type: 'template';\n value: TemplateRef<unknown>;\n context?: Record<string, unknown>;\n injector: Injector | null;\n};\n\nexport type ComponentTemplate = {\n type: 'component';\n value: ComponentType<unknown>;\n inputs?: Record<string, unknown>;\n injector: Injector | null;\n};\n\nexport const templateComputed = (templateSignal: Signal<AnyTemplateType | null>) =>\n computed((): StringTemplate | NgTemplateTemplate | ComponentTemplate | null => {\n const content = templateSignal();\n\n if (!content) return null;\n\n if (typeof content === 'string') {\n return {\n type: 'string',\n value: content,\n };\n }\n\n if (content instanceof TemplateRef) {\n return {\n type: 'template',\n value: content,\n injector: null,\n };\n }\n\n if ('component' in content) {\n return {\n type: 'component',\n value: content.component,\n inputs: content.inputs,\n injector: content.injector ?? null,\n };\n }\n\n if ('template' in content) {\n return {\n type: 'template',\n value: content.template,\n context: content.context,\n injector: content.injector ?? null,\n };\n }\n\n return {\n type: 'component',\n value: content,\n injector: null,\n };\n });\n","import { Component, ElementRef, ViewEncapsulation, booleanAttribute, inject, input } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n Observable,\n Subject,\n concat,\n defer,\n distinctUntilChanged,\n exhaustMap,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n of,\n share,\n take,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { suppressTextSelection } from '../utils/text-selection';\n\nexport type ResizeEdge = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';\n\nexport type ResizeMoveEvent = {\n edge: ResizeEdge;\n /** Cumulative delta from the pointerdown position. */\n dx: number;\n dy: number;\n clientX: number;\n clientY: number;\n};\n\nconst EDGE_CURSORS: Record<ResizeEdge, string> = {\n n: 'ns-resize',\n s: 'ns-resize',\n e: 'ew-resize',\n w: 'ew-resize',\n ne: 'nesw-resize',\n sw: 'nesw-resize',\n nw: 'nwse-resize',\n se: 'nwse-resize',\n};\n\ntype GestureEvent =\n | { readonly type: 'start'; readonly edge: ResizeEdge }\n | { readonly type: 'move'; readonly data: ResizeMoveEvent }\n | { readonly type: 'end' }\n | { readonly type: 'cancelled' };\n\nconst setupResizeObservable = (startEvent: PointerEvent, edge: ResizeEdge, doc: Document): Observable<GestureEvent> => {\n const pointerId = startEvent.pointerId;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n\n let cancelled = false;\n\n const end$ = merge(\n fromEvent<PointerEvent>(document, 'pointerup'),\n fromEvent<PointerEvent>(document, 'pointercancel'),\n ).pipe(\n filter((e) => e.pointerId === pointerId),\n take(1),\n // Read below by the terminating `defer`, which only runs once this has completed the moves.\n tap((e) => (cancelled = e.type === 'pointercancel')),\n );\n\n return defer(() => {\n const releaseSelection = suppressTextSelection(doc);\n\n return concat(\n of<GestureEvent>({ type: 'start', edge }),\n fromEvent<PointerEvent>(document, 'pointermove').pipe(\n filter((e) => e.pointerId === pointerId),\n map((e): GestureEvent => ({\n type: 'move',\n data: { edge, dx: e.clientX - startX, dy: e.clientY - startY, clientX: e.clientX, clientY: e.clientY },\n })),\n takeUntil(end$),\n ),\n defer((): Observable<GestureEvent> => of({ type: cancelled ? 'cancelled' : 'end' })),\n ).pipe(finalize(releaseSelection));\n });\n};\n\n@Component({\n selector: 'et-resize-handles',\n template: `\n @for (edge of edges(); track edge) {\n <div\n [style.cursor]=\"edgeCursors[edge]\"\n (pointerdown)=\"startResizeGesture($event, edge)\"\n class=\"et-resize-handle et-resize-handle--{{ edge }}\"\n ></div>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'et-resize-handles',\n '[attr.inert]': 'disabled() ? \"\" : null',\n '[attr.data-active-edge]': 'activeEdge()',\n },\n styles: `\n @property --et-resize-handles-z-index {\n syntax: '<integer>';\n inherits: true;\n initial-value: 10;\n }\n\n @property --et-resize-handles-edge-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 6px;\n }\n\n @property --et-resize-handles-corner-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 12px;\n }\n\n @property --et-resize-handles-edge-inset {\n syntax: '<length>';\n inherits: true;\n initial-value: 8px;\n }\n\n @property --et-resize-handles-outset {\n syntax: '<length>';\n inherits: true;\n initial-value: 0px;\n }\n\n @property --et-resize-handles-side-top {\n syntax: '<length>';\n inherits: true;\n initial-value: 0px;\n }\n\n @property --et-resize-handles-side-bottom {\n syntax: '<length>';\n inherits: true;\n initial-value: 8px;\n }\n\n @property --et-resize-handles-touch-edge-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 20px;\n }\n\n @property --et-resize-handles-touch-corner-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 28px;\n }\n\n et-resize-handles {\n position: absolute;\n inset: calc(-1 * var(--et-resize-handles-outset));\n pointer-events: none;\n }\n\n .et-resize-handle {\n --et-resize-handle-thickness: calc(var(--et-resize-handles-edge-size) + var(--et-resize-handles-outset));\n --et-resize-handle-corner: calc(var(--et-resize-handles-corner-size) + var(--et-resize-handles-outset));\n\n position: absolute;\n z-index: var(--et-resize-handles-z-index);\n touch-action: none;\n pointer-events: auto;\n }\n\n .et-resize-handle--n {\n left: var(--et-resize-handles-edge-inset);\n right: var(--et-resize-handles-edge-inset);\n height: var(--et-resize-handle-thickness);\n top: 0;\n }\n\n .et-resize-handle--s {\n left: var(--et-resize-handles-edge-inset);\n right: var(--et-resize-handles-edge-inset);\n height: var(--et-resize-handle-thickness);\n bottom: 0;\n }\n\n .et-resize-handle--e,\n .et-resize-handle--w {\n top: var(--et-resize-handles-side-top);\n bottom: var(--et-resize-handles-side-bottom);\n width: var(--et-resize-handle-thickness);\n }\n\n .et-resize-handle--e {\n right: 0;\n }\n\n .et-resize-handle--w {\n left: 0;\n }\n\n .et-resize-handle--ne,\n .et-resize-handle--nw {\n top: 0;\n width: var(--et-resize-handle-corner);\n height: var(--et-resize-handle-corner);\n }\n\n .et-resize-handle--ne {\n right: 0;\n }\n\n .et-resize-handle--nw {\n left: 0;\n }\n\n .et-resize-handle--se,\n .et-resize-handle--sw {\n bottom: 0;\n width: var(--et-resize-handle-corner);\n height: var(--et-resize-handle-corner);\n }\n\n .et-resize-handle--se {\n right: 0;\n }\n\n .et-resize-handle--sw {\n left: 0;\n }\n\n /* any-pointer, not hover:none - a touchscreen laptop has a mouse as its primary input, so\n hover:none never matches there even though a finger can still grab a handle. */\n @media (any-pointer: coarse) {\n .et-resize-handle {\n --et-resize-handle-thickness: calc(var(--et-resize-handles-touch-edge-size) + var(--et-resize-handles-outset));\n --et-resize-handle-corner: calc(var(--et-resize-handles-touch-corner-size) + var(--et-resize-handles-outset));\n }\n }\n `,\n})\nexport class ResizeHandlesComponent {\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n edges = input<ResizeEdge[]>(['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw']);\n disabled = input(false, { transform: booleanAttribute });\n\n private gestureStart$ = new Subject<{ readonly event: PointerEvent; readonly edge: ResizeEdge }>();\n\n private gesture$ = this.gestureStart$.pipe(\n exhaustMap(({ event, edge }) => setupResizeObservable(event, edge, this.el.nativeElement.ownerDocument)),\n takeUntilDestroyed(),\n share(),\n );\n\n resizeStarted = outputFromObservable<ResizeEdge>(\n this.gesture$.pipe(\n filter((e): e is Extract<GestureEvent, { type: 'start' }> => e.type === 'start'),\n map((e) => e.edge),\n ),\n );\n\n resizeMoved = outputFromObservable<ResizeMoveEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<GestureEvent, { type: 'move' }> => e.type === 'move'),\n map((e) => e.data),\n ),\n );\n\n resizeEnded = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'end'),\n map(() => undefined),\n ),\n );\n\n /**\n * The browser took the gesture away mid-resize (a system gesture, an incoming call, the tab going\n * to the background). Revert to the size the resize started from - the user never let go, so there\n * is no size they chose.\n */\n resizeCancelled = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'cancelled'),\n map(() => undefined),\n ),\n );\n\n isResizing = toSignal(\n this.gesture$.pipe(\n map((e) => e.type === 'start' || e.type === 'move'),\n distinctUntilChanged(),\n ),\n { initialValue: false },\n );\n\n activeEdge = toSignal<ResizeEdge | null>(\n this.gesture$.pipe(\n map((e) => {\n if (e.type === 'start') return e.edge;\n if (e.type === 'move') return e.data.edge;\n\n return null;\n }),\n distinctUntilChanged(),\n ),\n { initialValue: null },\n );\n\n readonly edgeCursors = EDGE_CURSORS;\n\n startResizeGesture(event: PointerEvent, edge: ResizeEdge) {\n if (event.button !== 0 || this.disabled()) return;\n event.stopPropagation();\n this.gestureStart$.next({ event, edge });\n }\n}\n","import { computed, DestroyRef, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport { MaybeSignal } from '../signals';\n\nexport type HeadBinding<T> = {\n id: symbol;\n value: T;\n priority?: number;\n};\n\nexport const applyHeadBinding = <T>(\n binding: MaybeSignal<T | null | undefined>,\n applyFn: (value: T) => void,\n removeFn: () => void,\n isValid?: (value: T | null | undefined) => value is T,\n) => {\n const destroyRef = inject(DestroyRef);\n const signalBinding = isSignal(binding) ? binding : signal(binding);\n\n const defaultIsValid = (value: T | null | undefined): value is T => value !== null && value !== undefined;\n\n const validator = isValid ?? defaultIsValid;\n\n const initialValue = untracked(() => signalBinding());\n if (validator(initialValue)) {\n applyFn(initialValue);\n }\n\n effect(() => {\n const value = signalBinding();\n if (validator(value)) {\n applyFn(value);\n } else {\n removeFn();\n }\n });\n\n destroyRef.onDestroy(() => {\n removeFn();\n });\n};\n\nexport const createPropertyBinding = <TConfig>(\n configBuilder: (value: string) => TConfig,\n applyConfigFn: (config: MaybeSignal<TConfig | null | undefined>) => void,\n) => {\n return (binding: MaybeSignal<string | null | undefined>) => {\n applyConfigFn(\n computed(() => {\n const value = untracked(() => (isSignal(binding) ? binding() : binding));\n return value ? configBuilder(value) : null;\n }),\n );\n };\n};\n\nexport const createArrayPropertyBinding = <TConfig>(\n configBuilder: (value: string, index: number) => TConfig,\n applyConfigFn: (config: MaybeSignal<TConfig | null | undefined>) => void,\n) => {\n return (binding: MaybeSignal<string[] | null | undefined>) => {\n const valuesSignal = isSignal(binding) ? binding : signal(binding);\n const valuesList = computed(() => untracked(() => valuesSignal()) ?? []);\n\n valuesList().forEach((value, index) => {\n applyConfigFn(computed(() => configBuilder(value, index)));\n });\n };\n};\n\nexport const toStringBinding = (\n binding: MaybeSignal<string | number | null | undefined>,\n): MaybeSignal<string | null | undefined> => {\n return computed(() => {\n const value = untracked(() => (isSignal(binding) ? binding() : binding));\n return value !== null && value !== undefined ? String(value) : null;\n });\n};\n\nexport const createBulkPropertyBinding = <TConfig extends Record<string, unknown>>(\n _propertyPrefix: string,\n applyConfigFn: (property: string, binding: MaybeSignal<string | null | undefined>) => void,\n) => {\n return (config: TConfig) => {\n Object.entries(config).forEach(([key, value]) => {\n if (value !== undefined) {\n applyConfigFn(key, value as MaybeSignal<string | null | undefined>);\n }\n });\n };\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { computed, DOCUMENT, effect, inject, PLATFORM_ID, signal } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding } from './head-binding';\n\n/**\n * Something drawn on top of the site's favicon.\n *\n * - `dot` - a filled badge punched into the bottom-right corner, the \"something happened here\" marker.\n * - `progress` - a ring around the icon, `value` in percent (`0`–`100`). The browser exposes no\n * taskbar/tab progress API, so a favicon ring (or a percentage in the title) is as close as the web\n * gets to one.\n */\nexport type FaviconOverlay =\n { kind: 'dot'; color?: string } | { kind: 'progress'; value: number; color?: string; trackColor?: string };\n\n/** The rendered favicon is this many device-independent pixels square. */\nconst FAVICON_SIZE = 64;\n\n/** Fallback when the color theming tokens aren't resolvable (no theme applied to the root element). */\nconst FALLBACK_OVERLAY_COLOR = '#e11d48';\n\nconst readThemeColor = (document: Document) => {\n const value = getComputedStyle(document.documentElement).getPropertyValue('--et-theme-color-primary-solid').trim();\n\n return value || FALLBACK_OVERLAY_COLOR;\n};\n\nconst drawDot = (ctx: CanvasRenderingContext2D, color: string) => {\n const radius = FAVICON_SIZE * 0.19;\n const center = FAVICON_SIZE - radius - 3;\n\n // Punch a hole first so the badge reads on top of a busy icon, then fill it.\n ctx.save();\n ctx.globalCompositeOperation = 'destination-out';\n ctx.beginPath();\n ctx.arc(center, center, radius * 1.35, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n\n ctx.beginPath();\n ctx.arc(center, center, radius, 0, Math.PI * 2);\n ctx.fillStyle = color;\n ctx.fill();\n};\n\nconst drawProgress = (ctx: CanvasRenderingContext2D, value: number, color: string, trackColor: string) => {\n const lineWidth = FAVICON_SIZE * 0.14;\n const radius = (FAVICON_SIZE - lineWidth) / 2;\n const center = FAVICON_SIZE / 2;\n const clamped = Math.min(100, Math.max(0, value));\n const start = -Math.PI / 2;\n\n ctx.lineWidth = lineWidth;\n ctx.lineCap = 'butt';\n\n // Clear the ring's lane so the base icon doesn't show through a semi-transparent track.\n ctx.save();\n ctx.globalCompositeOperation = 'destination-out';\n ctx.strokeStyle = '#000';\n ctx.beginPath();\n ctx.arc(center, center, radius, 0, Math.PI * 2);\n ctx.stroke();\n ctx.restore();\n\n ctx.strokeStyle = trackColor;\n ctx.beginPath();\n ctx.arc(center, center, radius, 0, Math.PI * 2);\n ctx.stroke();\n\n if (clamped > 0) {\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.arc(center, center, radius, start, start + (Math.PI * 2 * clamped) / 100);\n ctx.stroke();\n }\n};\n\nconst FAVICON_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const overlays = signal<Map<symbol, FaviconOverlay>>(new Map());\n\n const activeOverlay = computed<FaviconOverlay | null>(() => {\n const all = Array.from(overlays().values());\n\n return all.find((overlay) => overlay.kind === 'progress') ?? all[all.length - 1] ?? null;\n });\n\n let iconLink: HTMLLinkElement | null = null;\n let createdIconLink = false;\n let originalHref: string | null = null;\n let baseImage: HTMLImageElement | null = null;\n let baseImageFailed = false;\n\n const resolveIconLink = () => {\n if (iconLink) {\n return iconLink;\n }\n\n iconLink = document.querySelector<HTMLLinkElement>('link[rel~=\"icon\"]');\n\n if (!iconLink) {\n iconLink = document.createElement('link');\n iconLink.rel = 'icon';\n document.head.appendChild(iconLink);\n createdIconLink = true;\n }\n\n originalHref = createdIconLink ? null : iconLink.getAttribute('href');\n\n return iconLink;\n };\n\n const restore = () => {\n if (!iconLink) return;\n\n if (createdIconLink) {\n iconLink.remove();\n iconLink = null;\n createdIconLink = false;\n\n return;\n }\n\n if (originalHref === null) {\n iconLink.removeAttribute('href');\n } else {\n iconLink.setAttribute('href', originalHref);\n }\n };\n\n // The base icon is loaded once and reused; a favicon that can't be read (cross-origin without\n // CORS headers, an SVG without intrinsic size) draws on an empty canvas instead of failing.\n const loadBaseImage = (): Promise<HTMLImageElement | null> => {\n if (baseImage || baseImageFailed || !originalHref) {\n return Promise.resolve(baseImage);\n }\n\n return new Promise((resolve) => {\n const image = new Image();\n\n image.onload = () => {\n baseImage = image;\n resolve(image);\n };\n\n image.onerror = () => {\n baseImageFailed = true;\n resolve(null);\n };\n\n image.src = originalHref as string;\n });\n };\n\n const render = async (overlay: FaviconOverlay) => {\n const canvas = document.createElement('canvas');\n canvas.width = FAVICON_SIZE;\n canvas.height = FAVICON_SIZE;\n\n // No 2d context (a non-browser DOM implementation) - leave the favicon untouched entirely.\n const ctx = canvas.getContext('2d');\n\n if (!ctx) return;\n\n const link = resolveIconLink();\n const image = await loadBaseImage();\n\n // A later state may have won the race while the base image loaded.\n if (activeOverlay() !== overlay) return;\n\n if (image) {\n ctx.drawImage(image, 0, 0, FAVICON_SIZE, FAVICON_SIZE);\n }\n\n const color = overlay.color ?? readThemeColor(document);\n\n if (overlay.kind === 'dot') {\n drawDot(ctx, color);\n } else {\n drawProgress(ctx, overlay.value, color, overlay.trackColor ?? 'rgba(127, 127, 127, 0.35)');\n }\n\n try {\n link.setAttribute('href', canvas.toDataURL('image/png'));\n } catch {\n // A tainted canvas (cross-origin base icon) can't be exported - leave the favicon as it was.\n restore();\n }\n };\n\n if (isBrowser) {\n effect(() => {\n const overlay = activeOverlay();\n\n if (!overlay) {\n restore();\n\n return;\n }\n\n void render(overlay);\n });\n }\n\n const addOverlay = (id: symbol, overlay: FaviconOverlay) => {\n overlays.update((current) => new Map(current).set(id, overlay));\n };\n\n const removeOverlay = (id: symbol) => {\n overlays.update((current) => {\n const next = new Map(current);\n next.delete(id);\n return next;\n });\n };\n\n return { activeOverlay, addOverlay, removeOverlay };\n },\n { name: 'Favicon Store' },\n);\n\n/**\n * Owns the `<link rel=\"icon\">` href so overlays can be drawn onto the site's favicon and taken back\n * off again. The original href is captured on first use and restored once the last overlay is gone.\n *\n * Registrations are keyed, and a `progress` overlay wins over a `dot` - a ring that also carries a\n * badge reads as neither.\n */\nexport const provideFaviconStore = /* @__PURE__ */ toProvideFn(FAVICON_STORE_DEF);\nexport const injectFaviconStore = /* @__PURE__ */ toInjectFn(FAVICON_STORE_DEF);\n\n/**\n * Draw an overlay on the site's favicon while the binding has a value - an unsaved-changes dot, an\n * upload's progress ring. The favicon is restored when the binding goes empty or the injector is\n * destroyed. No-op during SSR.\n *\n * ```ts\n * applyFaviconOverlay(computed(() => (this.saving() ? { kind: 'progress', value: this.percent() } : null)));\n * ```\n */\nexport const applyFaviconOverlay = (binding: MaybeSignal<FaviconOverlay | null | undefined>) => {\n const faviconStore = injectFaviconStore();\n const overlayId = Symbol('favicon-overlay');\n\n applyHeadBinding(\n binding,\n (value) => faviconStore.addOverlay(overlayId, value),\n () => faviconStore.removeOverlay(overlayId),\n );\n};\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, isSignal, signal, untracked } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding, createArrayPropertyBinding, createPropertyBinding } from './head-binding';\n\nexport type LinkConfig = {\n rel: string;\n href: string;\n hreflang?: string;\n type?: string;\n sizes?: string;\n media?: string;\n as?: string;\n crossorigin?: string;\n integrity?: string;\n referrerpolicy?: string;\n\n /** Unique identifier for the link */\n key?: string;\n\n /** Whether multiple instances of this link are allowed */\n allowMultiple?: boolean;\n};\n\ntype LinkBinding = {\n config: LinkConfig;\n element: HTMLLinkElement;\n priority: number;\n};\n\nexport type LinkStoreConfig = {\n /**\n * Link rels that are allowed to have multiple instances\n * If you want to override the default set, extend your set from {@link DEFAULT_MULTI_INSTANCE_RELS}.\n * Otherwise, common multiple instance links may be removed unintentionally.\n * @example\n * ```ts\n * import { DEFAULT_MULTI_INSTANCE_RELS, provideLinkStoreConfig } from '@ethlete/core';\n *\n * provideLinkStoreConfig({\n * multiInstanceRels: new Set([\n * ...DEFAULT_MULTI_INSTANCE_RELS,\n * 'custom-rel',\n * ]),\n * });\n * ```\n */\n multiInstanceRels: Set<string>;\n};\n\nexport const DEFAULT_MULTI_INSTANCE_RELS = /* @__PURE__ */ new Set([\n 'alternate',\n 'icon',\n 'apple-touch-icon',\n 'apple-touch-icon-precomposed',\n 'preconnect',\n 'dns-prefetch',\n 'preload',\n 'prefetch',\n 'prerender',\n 'stylesheet',\n 'modulepreload',\n]);\n\nconst LINK_STORE_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<LinkStoreConfig>(\n {\n multiInstanceRels: DEFAULT_MULTI_INSTANCE_RELS,\n },\n { name: 'Link Store Config' },\n);\n\nexport const provideLinkStoreConfig = /* @__PURE__ */ toProvideFn(LINK_STORE_CONFIG_DEF);\nexport const injectLinkStoreConfig = /* @__PURE__ */ toInjectFn(LINK_STORE_CONFIG_DEF);\n\nconst LINK_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const config = injectLinkStoreConfig();\n const linksByKey = signal<Map<string, Map<symbol, LinkBinding>>>(new Map());\n let priorityCounter = 0;\n\n const getLinkKey = (linkConfig: LinkConfig) => {\n const isMultiInstance = config.multiInstanceRels.has(linkConfig.rel) || linkConfig.allowMultiple;\n\n if (isMultiInstance) {\n const keyParts = [linkConfig.rel];\n\n if (linkConfig.hreflang) keyParts.push(`hreflang:${linkConfig.hreflang}`);\n if (linkConfig.media) keyParts.push(`media:${linkConfig.media}`);\n if (linkConfig.sizes) keyParts.push(`sizes:${linkConfig.sizes}`);\n if (linkConfig.type) keyParts.push(`type:${linkConfig.type}`);\n if (linkConfig.as) keyParts.push(`as:${linkConfig.as}`);\n\n // For resource hints, include href to make them unique per origin/resource\n if (['preconnect', 'dns-prefetch', 'preload', 'prefetch', 'modulepreload'].includes(linkConfig.rel)) {\n keyParts.push(`href:${linkConfig.href}`);\n }\n\n return keyParts.join('|');\n }\n\n return linkConfig.rel;\n };\n\n const isMultiInstanceLink = (key: string) => {\n const rel = key.split('|')[0];\n\n if (!rel) return false;\n\n return config.multiInstanceRels.has(rel);\n };\n\n const createLinkElement = (linkConfig: LinkConfig): HTMLLinkElement => {\n const link = document.createElement('link');\n\n const { key, allowMultiple, ...attributes } = linkConfig;\n\n Object.entries(attributes).forEach(([attrKey, value]) => {\n if (value !== undefined && value !== null) {\n link.setAttribute(attrKey, String(value));\n }\n });\n\n return link;\n };\n\n const applyActiveLinks = (key: string) => {\n const bindings = untracked(() => linksByKey().get(key));\n\n document.head.querySelectorAll(`link[data-link-key=\"${key}\"]`).forEach((el) => el.remove());\n\n if (!bindings || bindings.size === 0) {\n return;\n }\n\n const allowMultiple =\n isMultiInstanceLink(key) || Array.from(bindings.values()).some((b) => b.config.allowMultiple);\n\n if (allowMultiple) {\n const sortedBindings = Array.from(bindings.values()).sort((a, b) => a.priority - b.priority);\n\n sortedBindings.forEach((binding) => {\n binding.element.setAttribute('data-link-key', key);\n document.head.appendChild(binding.element);\n });\n } else {\n const activeBinding = Array.from(bindings.values()).reduce((highest, current) =>\n current.priority > highest.priority ? current : highest,\n );\n\n activeBinding.element.setAttribute('data-link-key', key);\n document.head.appendChild(activeBinding.element);\n }\n };\n\n const addLink = (id: symbol, linkConfig: LinkConfig) => {\n const key = getLinkKey(linkConfig);\n const priority = priorityCounter++;\n const element = createLinkElement(linkConfig);\n\n linksByKey.update((linkMap) => {\n const newLinkMap = new Map(linkMap);\n const keyBindings = newLinkMap.get(key) || new Map();\n\n keyBindings.set(id, { config: linkConfig, element, priority });\n newLinkMap.set(key, new Map(keyBindings));\n\n return newLinkMap;\n });\n\n applyActiveLinks(key);\n };\n\n const removeLink = (id: symbol, key?: string) => {\n if (key) {\n linksByKey.update((linkMap) => {\n const newLinkMap = new Map(linkMap);\n const keyBindings = newLinkMap.get(key);\n\n if (keyBindings) {\n keyBindings.delete(id);\n\n if (keyBindings.size === 0) {\n newLinkMap.delete(key);\n } else {\n newLinkMap.set(key, new Map(keyBindings));\n }\n }\n\n return newLinkMap;\n });\n\n applyActiveLinks(key);\n\n return;\n }\n\n linksByKey.update((linkMap) => {\n const newLinkMap = new Map(linkMap);\n let affectedKey: string | undefined;\n\n for (const [k, bindings] of newLinkMap) {\n if (bindings.has(id)) {\n bindings.delete(id);\n affectedKey = k;\n\n if (bindings.size === 0) {\n newLinkMap.delete(k);\n } else {\n newLinkMap.set(k, new Map(bindings));\n }\n break;\n }\n }\n\n if (affectedKey) {\n queueMicrotask(() => applyActiveLinks(affectedKey));\n }\n\n return newLinkMap;\n });\n };\n\n return { addLink, removeLink, getLinkKey };\n },\n { name: 'Link Store' },\n);\n\nexport const provideLinkStore = /* @__PURE__ */ toProvideFn(LINK_STORE_DEF);\nexport const injectLinkStore = /* @__PURE__ */ toInjectFn(LINK_STORE_DEF);\n\nexport const applyLinkBinding = (binding: MaybeSignal<LinkConfig | null | undefined>) => {\n const linkStore = injectLinkStore();\n const linkId = Symbol('link-tag');\n let currentKey: string | undefined;\n\n applyHeadBinding(\n binding,\n (config) => {\n currentKey = linkStore.getLinkKey(config);\n linkStore.addLink(linkId, config);\n },\n () => linkStore.removeLink(linkId, currentKey),\n );\n};\n\nexport const applyCanonicalBinding = /* @__PURE__ */ createPropertyBinding(\n (href) => ({ rel: 'canonical', href }),\n applyLinkBinding,\n);\n\nexport const applyAlternateBinding = (hreflang: string, binding: MaybeSignal<string | null | undefined>) => {\n applyLinkBinding(\n computed(() => {\n const url = untracked(() => (isSignal(binding) ? binding() : binding));\n return url ? { rel: 'alternate', hreflang, href: url } : null;\n }),\n );\n};\n\nexport type AlternateLanguagesConfig = {\n [hreflang: string]: MaybeSignal<string | null | undefined>;\n};\n\nexport const applyAlternateLanguagesBindings = (config: AlternateLanguagesConfig) => {\n Object.entries(config).forEach(([hreflang, binding]) => {\n applyAlternateBinding(hreflang, binding);\n });\n};\n\nexport const applyPrevBinding = /* @__PURE__ */ createPropertyBinding(\n (href) => ({ rel: 'prev', href }),\n applyLinkBinding,\n);\n\nexport const applyNextBinding = /* @__PURE__ */ createPropertyBinding(\n (href) => ({ rel: 'next', href }),\n applyLinkBinding,\n);\n\nexport type ResourceHintsConfig = {\n preconnect?: MaybeSignal<string[] | null | undefined>;\n dnsPrefetch?: MaybeSignal<string[] | null | undefined>;\n prefetch?: MaybeSignal<string[] | null | undefined>;\n prerender?: MaybeSignal<string[] | null | undefined>;\n};\n\nexport const applyResourceHintsBindings = (config: ResourceHintsConfig) => {\n if (config.preconnect) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'preconnect', href, key: `preconnect:${index}` }),\n applyLinkBinding,\n )(config.preconnect);\n }\n\n if (config.dnsPrefetch) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'dns-prefetch', href, key: `dns-prefetch:${index}` }),\n applyLinkBinding,\n )(config.dnsPrefetch);\n }\n\n if (config.prefetch) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'prefetch', href, key: `prefetch:${index}` }),\n applyLinkBinding,\n )(config.prefetch);\n }\n\n if (config.prerender) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'prerender', href, key: `prerender:${index}` }),\n applyLinkBinding,\n )(config.prerender);\n }\n};\n","import { computed, effect, inject, signal } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { injectLocale } from '../providers';\nimport { injectIsRouterInitialized, MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding } from './head-binding';\n\nexport type TitlePart = {\n /** The text to be displayed as the title */\n text: string;\n\n /** Whether this part should be used as the starting point for the title construction */\n useAsStart?: boolean;\n};\n\nexport type TitleConfig = {\n /**\n * The divider string used between title parts\n * @default '|'\n */\n divider: string;\n\n /** The default title to use when no parts are available */\n defaultTitle: string;\n\n /**\n * A function to transform the title text based on locale.\n * Use `provideLocale()` to update the locale dynamically.\n */\n transformer: (title: string, locale: string) => string;\n\n /**\n * A title part to be prefixed to all titles\n */\n suffixPart?: TitlePart;\n\n /**\n * A title part to be suffixed to all titles\n */\n prefixPart?: TitlePart;\n};\n\nconst TITLE_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<TitleConfig>(\n {\n divider: '|',\n defaultTitle: '',\n transformer: (title: string) => title,\n },\n { name: 'Title Config' },\n);\n\nexport const provideTitleConfig = /* @__PURE__ */ toProvideFn(TITLE_CONFIG_DEF);\nexport const injectTitleConfig = /* @__PURE__ */ toInjectFn(TITLE_CONFIG_DEF);\n\nconst TITLE_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const config = injectTitleConfig();\n const titleParts = signal<Map<symbol, TitlePart>>(new Map());\n const titleMarkers = signal<Map<symbol, string>>(new Map());\n const { currentLocale } = injectLocale();\n const titleService = inject(Title);\n const isRouterInitialized = injectIsRouterInitialized();\n\n // Falls back on an empty configured default too, so a store created lazily (e.g. by a title\n // marker) doesn't wipe a title that came from `index.html`.\n const defaultTitle = config.defaultTitle || titleService.getTitle();\n\n const composedTitle = computed(() => {\n const partsMap = titleParts();\n\n if (!partsMap.size || !isRouterInitialized()) {\n return config.transformer(defaultTitle, currentLocale());\n }\n\n const parts = Array.from(partsMap.values());\n const finalTextParts: string[] = [];\n\n for (let index = parts.length - 1; index > -1; index--) {\n const part = parts[index];\n if (!part) continue;\n\n const text = config.transformer(part.text, currentLocale());\n finalTextParts.unshift(text);\n\n if (part.useAsStart) break;\n }\n\n if (config.prefixPart?.text) {\n finalTextParts.unshift(config.transformer(config.prefixPart.text, currentLocale()));\n }\n\n if (config.suffixPart?.text) {\n finalTextParts.push(config.transformer(config.suffixPart.text, currentLocale()));\n }\n\n return finalTextParts.join(` ${config.divider} `);\n });\n\n /**\n * The composed title with any markers prefixed - what actually lands in `document.title`.\n * Markers sit outside the divider logic, so `● Page | App` rather than `● | Page | App`.\n */\n const title = computed(() => {\n // Deduplicated: two forms with unsaved changes should read as one marker, not two.\n const markers = Array.from(new Set(titleMarkers().values()));\n const composed = composedTitle();\n\n if (!markers.length) {\n return composed;\n }\n\n return `${markers.join(' ')} ${composed}`.trim();\n });\n\n const addPart = (id: symbol, part: TitlePart) => {\n titleParts.update((parts) => new Map(parts).set(id, part));\n };\n\n const removePart = (id: symbol) => {\n titleParts.update((parts) => {\n const newParts = new Map(parts);\n newParts.delete(id);\n return newParts;\n });\n };\n\n const addMarker = (id: symbol, marker: string) => {\n titleMarkers.update((markers) => new Map(markers).set(id, marker));\n };\n\n const removeMarker = (id: symbol) => {\n titleMarkers.update((markers) => {\n const newMarkers = new Map(markers);\n newMarkers.delete(id);\n return newMarkers;\n });\n };\n\n effect(() => {\n const titleText = title();\n titleService.setTitle(titleText);\n });\n\n return { title, addPart, removePart, addMarker, removeMarker };\n },\n { name: 'Title Store' },\n);\n\nexport const provideTitleStore = /* @__PURE__ */ toProvideFn(TITLE_STORE_DEF);\nexport const injectTitleStore = /* @__PURE__ */ toInjectFn(TITLE_STORE_DEF);\n\nexport const applyHeadTitleBinding = (\n binding: MaybeSignal<string | number | null | undefined>,\n options?: Omit<TitlePart, 'text'>,\n) => {\n const titleStore = injectTitleStore();\n const partId = Symbol('title-part');\n\n applyHeadBinding(\n binding,\n (value) => titleStore.addPart(partId, { text: `${value}`, ...options }),\n () => titleStore.removePart(partId),\n (value): value is string | number => value !== null && value !== undefined && value !== '',\n );\n};\n\n/**\n * Prefix the tab title with a short marker (`● Page | App`) while the binding has a value - the\n * unsaved-changes dot, a pending-count badge, and the like. The marker is removed when the binding\n * goes empty and on destroy. Unlike a title part, it is not joined by the divider.\n */\nexport const applyHeadTitleMarker = (binding: MaybeSignal<string | null | undefined>) => {\n const titleStore = injectTitleStore();\n const markerId = Symbol('title-marker');\n\n applyHeadBinding(\n binding,\n (value) => titleStore.addMarker(markerId, value),\n () => titleStore.removeMarker(markerId),\n (value): value is string => value !== null && value !== undefined && value !== '',\n );\n};\n","import { computed, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport { Meta } from '@angular/platform-browser';\nimport { injectLocale } from '../providers';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding, createArrayPropertyBinding, createPropertyBinding, toStringBinding } from './head-binding';\nimport { applyHeadTitleBinding } from './title-binding';\n\nexport type MetaTagConfig = {\n /** Unique identifier for the tag */\n key?: string;\n\n /** Whether multiple instances of this tag are allowed */\n allowMultiple?: boolean;\n\n charset?: string;\n content?: string;\n httpEquiv?: string;\n id?: string;\n itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n};\n\ntype MetaTagBinding = {\n config: MetaTagConfig;\n priority: number;\n};\n\nexport type MetaConfig = {\n /**\n * A function to transform meta tag content based on locale.\n * Use `provideLocale()` to update the locale dynamically.\n */\n transformer: (content: string, locale: string) => string;\n\n /**\n * Tags that are allowed to have multiple instances\n * If you want to override the default set, extend your set from {@link DEFAULT_MULTI_INSTANCE_TAGS}.\n * Otherwise, common multiple instance tags may be removed unintentionally.\n * @example\n * ```ts\n * import { DEFAULT_MULTI_INSTANCE_TAGS, provideMetaConfig } from '@ethlete/core';\n *\n * provideMetaConfig({\n * multiInstanceTags: new Set([\n * ...DEFAULT_MULTI_INSTANCE_TAGS,\n * 'name=\"custom-multiple-tag\"',\n * ]),\n * });\n * ```\n */\n multiInstanceTags: Set<string>;\n};\n\nexport const DEFAULT_MULTI_INSTANCE_TAGS = /* @__PURE__ */ new Set([\n // Open Graph - Media\n 'property=\"og:image\"',\n 'property=\"og:image:url\"',\n 'property=\"og:image:secure_url\"',\n 'property=\"og:video\"',\n 'property=\"og:video:url\"',\n 'property=\"og:video:secure_url\"',\n 'property=\"og:audio\"',\n 'property=\"og:audio:url\"',\n 'property=\"og:audio:secure_url\"',\n\n // Open Graph - Locale alternatives\n 'property=\"og:locale:alternate\"',\n\n // Twitter Card\n 'name=\"twitter:image\"',\n 'name=\"twitter:player\"',\n\n // Article tags (arrays)\n 'property=\"article:author\"',\n 'property=\"article:tag\"',\n\n // Music tags (arrays)\n 'property=\"music:song\"',\n 'property=\"music:musician\"',\n 'property=\"music:album\"',\n\n // Video tags (arrays)\n 'property=\"video:actor\"',\n 'property=\"video:director\"',\n 'property=\"video:writer\"',\n 'property=\"video:tag\"',\n\n // Book tags (arrays)\n 'property=\"book:author\"',\n 'property=\"book:tag\"',\n\n // Profile (arrays)\n 'property=\"profile:username\"',\n\n // Product tags (arrays)\n 'property=\"product:category\"',\n 'property=\"product:retailer_item_id\"',\n\n // App Links (multiple platforms)\n 'property=\"al:ios:url\"',\n 'property=\"al:ios:app_store_id\"',\n 'property=\"al:ios:app_name\"',\n 'property=\"al:android:url\"',\n 'property=\"al:android:app_name\"',\n 'property=\"al:android:package\"',\n 'property=\"al:web:url\"',\n 'property=\"al:windows_phone:url\"',\n 'property=\"al:windows_phone:app_id\"',\n 'property=\"al:windows_phone:app_name\"',\n 'property=\"al:windows:url\"',\n 'property=\"al:windows:app_id\"',\n 'property=\"al:windows:app_name\"',\n 'property=\"al:windows_universal:url\"',\n 'property=\"al:windows_universal:app_id\"',\n 'property=\"al:windows_universal:app_name\"',\n\n // Dublin Core (can have multiple)\n 'name=\"DC.creator\"',\n 'name=\"DC.contributor\"',\n 'name=\"DC.subject\"',\n\n // Schema.org (via meta tags - though JSON-LD is preferred)\n 'itemprop=\"image\"',\n 'itemprop=\"author\"',\n\n // Apple iOS\n 'name=\"apple-itunes-app\"', // Can have multiple app arguments\n\n // Verification tags (multiple services)\n 'name=\"google-site-verification\"',\n 'name=\"msvalidate.01\"',\n 'name=\"yandex-verification\"',\n 'name=\"p:domain_verify\"', // Pinterest\n 'name=\"facebook-domain-verification\"',\n]);\n\nconst META_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<MetaConfig>(\n {\n transformer: (content: string) => content,\n multiInstanceTags: DEFAULT_MULTI_INSTANCE_TAGS,\n },\n { name: 'Meta Config' },\n);\n\nexport const provideMetaConfig = /* @__PURE__ */ toProvideFn(META_CONFIG_DEF);\nexport const injectMetaConfig = /* @__PURE__ */ toInjectFn(META_CONFIG_DEF);\n\nconst META_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const metaService = inject(Meta);\n const config = injectMetaConfig();\n const { currentLocale } = injectLocale();\n\n const metaTagsBySelector = signal<Map<string, Map<symbol, MetaTagBinding>>>(new Map());\n let priorityCounter = 0;\n\n const getSelector = (config: MetaTagConfig) => {\n if (config.name) return `name=\"${config.name}\"`;\n if (config.property) return `property=\"${config.property}\"`;\n if (config.httpEquiv) return `http-equiv=\"${config.httpEquiv}\"`;\n if (config.itemprop) return `itemprop=\"${config.itemprop}\"`;\n return config.key ?? '';\n };\n\n const isMultiInstanceTag = (selector: string) => {\n return config.multiInstanceTags.has(selector);\n };\n\n const applyTag = (rawConfig: MetaTagConfig, locale: string): HTMLMetaElement => {\n const transformedConfig = { ...rawConfig };\n\n if (transformedConfig.content) {\n transformedConfig.content = config.transformer(transformedConfig.content, locale);\n }\n\n const { key, allowMultiple, ...metaConfig } = transformedConfig;\n\n return metaService.addTag(metaConfig) as HTMLMetaElement;\n };\n\n const applyActiveTag = (selector: string) => {\n const locale = currentLocale();\n const bindings = untracked(() => metaTagsBySelector().get(selector));\n\n if (!bindings || bindings.size === 0) {\n metaService.removeTag(selector);\n\n return;\n }\n\n const allowMultiple =\n isMultiInstanceTag(selector) || Array.from(bindings.values()).some((b) => b.config.allowMultiple);\n\n const existingTags = metaService.getTags(selector);\n existingTags.forEach((tag) => metaService.removeTagElement(tag));\n\n if (allowMultiple) {\n const sortedBindings = Array.from(bindings.values()).sort((a, b) => a.priority - b.priority);\n\n sortedBindings.forEach((binding) => {\n applyTag(binding.config, locale);\n });\n } else {\n const activeBinding = Array.from(bindings.values()).reduce((highest, current) =>\n current.priority > highest.priority ? current : highest,\n );\n\n applyTag(activeBinding.config, locale);\n }\n };\n\n const addTag = (id: symbol, rawConfig: MetaTagConfig) => {\n const selector = getSelector(rawConfig);\n const priority = priorityCounter++;\n\n metaTagsBySelector.update((tagsBySelector) => {\n const newTagsBySelector = new Map(tagsBySelector);\n const selectorBindings = newTagsBySelector.get(selector) || new Map();\n\n selectorBindings.set(id, { config: rawConfig, priority });\n newTagsBySelector.set(selector, new Map(selectorBindings));\n\n return newTagsBySelector;\n });\n\n applyActiveTag(selector);\n };\n\n const removeTag = (id: symbol, selector?: string) => {\n if (selector) {\n metaTagsBySelector.update((tagsBySelector) => {\n const newTagsBySelector = new Map(tagsBySelector);\n const selectorBindings = newTagsBySelector.get(selector);\n\n if (selectorBindings) {\n selectorBindings.delete(id);\n\n if (selectorBindings.size === 0) {\n newTagsBySelector.delete(selector);\n } else {\n newTagsBySelector.set(selector, new Map(selectorBindings));\n }\n }\n\n return newTagsBySelector;\n });\n\n applyActiveTag(selector);\n\n return;\n }\n\n metaTagsBySelector.update((tagsBySelector) => {\n const newTagsBySelector = new Map(tagsBySelector);\n let affectedSelector: string | undefined;\n\n for (const [sel, bindings] of newTagsBySelector) {\n if (bindings.has(id)) {\n bindings.delete(id);\n affectedSelector = sel;\n\n if (bindings.size === 0) {\n newTagsBySelector.delete(sel);\n } else {\n newTagsBySelector.set(sel, new Map(bindings));\n }\n break;\n }\n }\n\n if (affectedSelector) {\n queueMicrotask(() => applyActiveTag(affectedSelector));\n }\n\n return newTagsBySelector;\n });\n };\n\n effect(() => {\n currentLocale();\n const tagsBySelector = untracked(() => metaTagsBySelector());\n\n tagsBySelector.forEach((_, selector) => {\n applyActiveTag(selector);\n });\n });\n\n return { addTag, removeTag, getSelector };\n },\n { name: 'Meta Store' },\n);\n\nexport const provideMetaStore = /* @__PURE__ */ toProvideFn(META_STORE_DEF);\nexport const injectMetaStore = /* @__PURE__ */ toInjectFn(META_STORE_DEF);\n\nexport const applyMetaBinding = (binding: MaybeSignal<MetaTagConfig | null | undefined>) => {\n const metaStore = injectMetaStore();\n const tagId = Symbol('meta-tag');\n let currentSelector: string | undefined;\n\n applyHeadBinding(\n binding,\n (config) => {\n currentSelector = metaStore.getSelector(config);\n metaStore.addTag(tagId, config);\n },\n () => metaStore.removeTag(tagId, currentSelector),\n );\n};\n\nexport const applyDescriptionBinding = /* @__PURE__ */ createPropertyBinding(\n (content) => ({ name: 'description', content }),\n applyMetaBinding,\n);\n\nexport const applyKeywordsBinding = (binding: MaybeSignal<string[] | null | undefined>) => {\n applyMetaBinding(\n computed(() => {\n const keywords = untracked(() => (isSignal(binding) ? binding() : binding));\n return keywords && keywords.length > 0 ? { name: 'keywords', content: keywords.join(', ') } : null;\n }),\n );\n};\n\nexport const applyAuthorBinding = /* @__PURE__ */ createPropertyBinding(\n (content) => ({ name: 'author', content }),\n applyMetaBinding,\n);\n\nexport type RobotsConfig = {\n index?: boolean;\n follow?: boolean;\n noarchive?: boolean;\n nosnippet?: boolean;\n noimageindex?: boolean;\n maxSnippet?: number;\n maxImagePreview?: 'none' | 'standard' | 'large';\n maxVideoPreview?: number;\n};\n\nexport const applyRobotsBinding = (binding: MaybeSignal<RobotsConfig | null | undefined>) => {\n applyMetaBinding(\n computed(() => {\n const config = untracked(() => (isSignal(binding) ? binding() : binding));\n if (!config) return null;\n\n const directives: string[] = [];\n\n if (config.index === false) directives.push('noindex');\n if (config.follow === false) directives.push('nofollow');\n if (config.noarchive) directives.push('noarchive');\n if (config.nosnippet) directives.push('nosnippet');\n if (config.noimageindex) directives.push('noimageindex');\n if (config.maxSnippet !== undefined) directives.push(`max-snippet:${config.maxSnippet}`);\n if (config.maxImagePreview) directives.push(`max-image-preview:${config.maxImagePreview}`);\n if (config.maxVideoPreview !== undefined) directives.push(`max-video-preview:${config.maxVideoPreview}`);\n\n return directives.length > 0 ? { name: 'robots', content: directives.join(', ') } : null;\n }),\n );\n};\n\nexport const applyOgBinding = (property: string, binding: MaybeSignal<string | null | undefined>) => {\n createPropertyBinding((content) => ({ property: `og:${property}`, content }), applyMetaBinding)(binding);\n};\n\nconst createOgArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n property: `og:${property}`,\n content: value,\n allowMultiple: true,\n key: `og:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport type OpenGraphConfig = {\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n url?: MaybeSignal<string | null | undefined>;\n type?: MaybeSignal<string | null | undefined>;\n siteName?: MaybeSignal<string | null | undefined>;\n locale?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n images?: MaybeSignal<string[] | null | undefined>;\n imageUrl?: MaybeSignal<string | null | undefined>;\n imageSecureUrl?: MaybeSignal<string | null | undefined>;\n imageType?: MaybeSignal<string | null | undefined>;\n imageWidth?: MaybeSignal<string | number | null | undefined>;\n imageHeight?: MaybeSignal<string | number | null | undefined>;\n imageAlt?: MaybeSignal<string | null | undefined>;\n video?: MaybeSignal<string | null | undefined>;\n videos?: MaybeSignal<string[] | null | undefined>;\n videoUrl?: MaybeSignal<string | null | undefined>;\n videoSecureUrl?: MaybeSignal<string | null | undefined>;\n videoType?: MaybeSignal<string | null | undefined>;\n videoWidth?: MaybeSignal<string | number | null | undefined>;\n videoHeight?: MaybeSignal<string | number | null | undefined>;\n audio?: MaybeSignal<string | null | undefined>;\n audios?: MaybeSignal<string[] | null | undefined>;\n};\n\nexport const applyOpenGraphBindings = (config: OpenGraphConfig) => {\n const applyOg = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (binding) applyOgBinding(property, binding);\n };\n\n applyOg('title', config.title);\n applyOg('description', config.description);\n applyOg('url', config.url);\n applyOg('type', config.type);\n applyOg('site_name', config.siteName);\n applyOg('locale', config.locale);\n applyOg('image', config.image);\n applyOg('image:url', config.imageUrl);\n applyOg('image:secure_url', config.imageSecureUrl);\n applyOg('image:type', config.imageType);\n applyOg('image:alt', config.imageAlt);\n applyOg('video', config.video);\n applyOg('video:url', config.videoUrl);\n applyOg('video:secure_url', config.videoSecureUrl);\n applyOg('video:type', config.videoType);\n applyOg('audio', config.audio);\n\n if (config.imageWidth) applyOg('image:width', toStringBinding(config.imageWidth));\n if (config.imageHeight) applyOg('image:height', toStringBinding(config.imageHeight));\n if (config.videoWidth) applyOg('video:width', toStringBinding(config.videoWidth));\n if (config.videoHeight) applyOg('video:height', toStringBinding(config.videoHeight));\n\n if (config.images) createOgArrayBinding('image')(config.images);\n if (config.videos) createOgArrayBinding('video')(config.videos);\n if (config.audios) createOgArrayBinding('audio')(config.audios);\n};\n\nexport type TwitterCardConfig = {\n card?: MaybeSignal<'summary' | 'summary_large_image' | 'app' | 'player' | null | undefined>;\n site?: MaybeSignal<string | null | undefined>;\n siteId?: MaybeSignal<string | null | undefined>;\n creator?: MaybeSignal<string | null | undefined>;\n creatorId?: MaybeSignal<string | null | undefined>;\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n images?: MaybeSignal<string[] | null | undefined>;\n imageAlt?: MaybeSignal<string | null | undefined>;\n player?: MaybeSignal<string | null | undefined>;\n playerWidth?: MaybeSignal<string | number | null | undefined>;\n playerHeight?: MaybeSignal<string | number | null | undefined>;\n playerStream?: MaybeSignal<string | null | undefined>;\n};\n\nconst createTwitterArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n name: `twitter:${property}`,\n content: value,\n allowMultiple: true,\n key: `twitter:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport const applyTwitterCardBindings = (config: TwitterCardConfig) => {\n const applyTwitter = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (!binding) return;\n createPropertyBinding((content) => ({ name: `twitter:${property}`, content }), applyMetaBinding)(binding);\n };\n\n applyTwitter('card', config.card);\n applyTwitter('site', config.site);\n applyTwitter('site:id', config.siteId);\n applyTwitter('creator', config.creator);\n applyTwitter('creator:id', config.creatorId);\n applyTwitter('title', config.title);\n applyTwitter('description', config.description);\n applyTwitter('image', config.image);\n applyTwitter('image:alt', config.imageAlt);\n applyTwitter('player', config.player);\n applyTwitter('player:stream', config.playerStream);\n\n if (config.playerWidth) applyTwitter('player:width', toStringBinding(config.playerWidth));\n if (config.playerHeight) applyTwitter('player:height', toStringBinding(config.playerHeight));\n\n if (config.images) createTwitterArrayBinding('image')(config.images);\n};\n\nexport type ArticleConfig = {\n publishedTime?: MaybeSignal<string | null | undefined>;\n modifiedTime?: MaybeSignal<string | null | undefined>;\n expirationTime?: MaybeSignal<string | null | undefined>;\n author?: MaybeSignal<string | null | undefined>;\n authors?: MaybeSignal<string[] | null | undefined>;\n section?: MaybeSignal<string | null | undefined>;\n tag?: MaybeSignal<string | null | undefined>;\n tags?: MaybeSignal<string[] | null | undefined>;\n};\n\nconst createArticleArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n property: `article:${property}`,\n content: value,\n allowMultiple: true,\n key: `article:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport const applyArticleBindings = (config: ArticleConfig) => {\n const applyArticle = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (!binding) return;\n createPropertyBinding((content) => ({ property: `article:${property}`, content }), applyMetaBinding)(binding);\n };\n\n applyArticle('published_time', config.publishedTime);\n applyArticle('modified_time', config.modifiedTime);\n applyArticle('expiration_time', config.expirationTime);\n applyArticle('author', config.author);\n applyArticle('section', config.section);\n applyArticle('tag', config.tag);\n\n if (config.authors) createArticleArrayBinding('author')(config.authors);\n if (config.tags) createArticleArrayBinding('tag')(config.tags);\n};\n\nexport type SocialMediaConfig = {\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n url?: MaybeSignal<string | null | undefined>;\n openGraph?: Partial<OpenGraphConfig>;\n twitter?: Partial<TwitterCardConfig>;\n article?: Partial<ArticleConfig>;\n};\n\nexport const applySocialMediaBindings = (config: SocialMediaConfig) => {\n if (config.title) applyHeadTitleBinding(config.title);\n if (config.description) applyDescriptionBinding(config.description);\n\n if (config.openGraph || config.title || config.description || config.image || config.url) {\n applyOpenGraphBindings({\n title: config.openGraph?.title ?? config.title,\n description: config.openGraph?.description ?? config.description,\n image: config.openGraph?.image ?? config.image,\n url: config.openGraph?.url ?? config.url,\n ...config.openGraph,\n });\n }\n\n if (config.twitter || config.title || config.description || config.image) {\n applyTwitterCardBindings({\n title: config.twitter?.title ?? config.title,\n description: config.twitter?.description ?? config.description,\n image: config.twitter?.image ?? config.image,\n ...config.twitter,\n });\n }\n\n if (config.article) applyArticleBindings(config.article);\n};\n","import { DOCUMENT } from '@angular/common';\nimport { inject, signal } from '@angular/core';\nimport { injectRenderer } from '../providers';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding } from './head-binding';\nimport * as JsonLD from './json-ld';\n\nexport type StructuredDataConfig = {\n /**\n * Where to place the JSON-LD script tag.\n * - 'head': Traditional placement, loaded before body content\n * - 'body': Google recommended, better for performance\n *\n * Note: You can also use the `StructuredDataComponent` to place structured data\n * directly within your component templates.\n *\n * @default 'body'\n */\n placement: 'head' | 'body';\n};\n\nconst STRUCTURED_DATA_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<StructuredDataConfig>(\n {\n placement: 'body',\n },\n { name: 'Structured Data Config' },\n);\n\nexport const provideStructuredDataConfig = /* @__PURE__ */ toProvideFn(STRUCTURED_DATA_CONFIG_DEF);\nexport const injectStructuredDataConfig = /* @__PURE__ */ toInjectFn(STRUCTURED_DATA_CONFIG_DEF);\n\nconst STRUCTURED_DATA_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const config = injectStructuredDataConfig();\n const scripts = signal<Map<symbol, HTMLScriptElement>>(new Map());\n\n const getTargetElement = (): HTMLElement => {\n return config.placement === 'head' ? document.head : document.body;\n };\n\n const addStructuredData = (id: symbol, data: JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph) => {\n scripts.update((scriptMap) => {\n const newScripts = new Map(scriptMap);\n\n const oldScript = newScripts.get(id);\n if (oldScript && oldScript.parentNode) {\n renderer.removeChild(oldScript.parentNode, oldScript);\n }\n\n const script = renderer.createElement('script');\n\n renderer.setAttributes(script, { type: 'application/ld+json' });\n // The JSON is the script's *content*, not an attribute. Written as text rather than markup so a\n // `</script>` inside a string can't close the tag early - the escaping problem\n // `StructuredDataComponent` has to solve by hand because it goes through `innerHTML`.\n renderer.setTextContent(script, JSON.stringify(data));\n\n const target = getTargetElement();\n renderer.appendChild(target, script);\n\n newScripts.set(id, script);\n return newScripts;\n });\n };\n\n const removeStructuredData = (id: symbol) => {\n scripts.update((scriptMap) => {\n const newScripts = new Map(scriptMap);\n const script = newScripts.get(id);\n\n if (script && script.parentNode) {\n renderer.removeChild(script.parentNode, script);\n\n newScripts.delete(id);\n }\n\n return newScripts;\n });\n };\n\n return { addStructuredData, removeStructuredData };\n },\n { name: 'Structured Data Store' },\n);\n\nexport const provideStructuredDataStore = /* @__PURE__ */ toProvideFn(STRUCTURED_DATA_STORE_DEF);\nexport const injectStructuredDataStore = /* @__PURE__ */ toInjectFn(STRUCTURED_DATA_STORE_DEF);\n\nexport const applyStructuredDataBinding = (\n binding: MaybeSignal<JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined>,\n) => {\n const store = injectStructuredDataStore();\n const scriptId = Symbol('structured-data');\n\n applyHeadBinding(\n binding,\n (data) => store.addStructuredData(scriptId, data),\n () => store.removeStructuredData(scriptId),\n );\n};\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport * as JsonLD from './json-ld';\n\n@Component({\n selector: 'et-structured-data',\n template: '',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: none',\n '[innerHTML]': 'jsonLD()',\n },\n})\nexport class StructuredDataComponent {\n private sanitizer = inject(DomSanitizer);\n\n data = input<JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined>(null);\n\n jsonLD = computed(() => {\n const data = this.data();\n\n if (!data) {\n return null;\n }\n\n const json = data ? JSON.stringify(data, null, 2).replace(/<\\/script>/g, '<\\\\/script>') : '';\n const html = `<script type=\"application/ld+json\">${json}</script>`;\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'et-color-interactive-styles',\n template: '',\n styleUrl: './color-interactive-styles.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ColorInteractiveStylesComponent {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { ColorInteractiveStylesComponent } from './color-interactive-styles.component';\n\n/**\n * Cascades hover/active-driven color DOWN to descendants explicitly marked with\n * `ColorInteractiveDirective` - this element does not color itself. Use it when a wrapper should\n * expand a nested control's hit/visual area (e.g. clicking a checkbox's label should light up the\n * checkbox itself), never to give a wrapper its own interactive coloring - that's\n * `ColorInteractiveDirective`.\n *\n * Does nothing unless at least one descendant carries `ColorInteractiveDirective` - check for\n * that before adding this. It was mistakenly added to a component with no such descendant once\n * already, where it did nothing but was confusing to read.\n */\n@Directive({\n selector: '[etColorInteractiveContainer]',\n host: {\n class: 'et-color-interactive-container',\n },\n})\nexport class ColorInteractiveContainerDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(ColorInteractiveStylesComponent);\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks a descendant as NOT counting toward an ancestor's `ColorInteractiveDirective`\n * `:hover`/`:active` reaction (via the `:has()` guard in color-interactive-styles.component.css).\n * Use it for content that's incidentally inside an interactive ancestor but isn't part of what\n * makes that ancestor interactive - e.g. a hint/error block sitting inside a form field's frame.\n *\n * This only suppresses the ancestor's OWN reaction to hovering/pressing the excluded element - it\n * has no effect on custom-property inheritance into descendants past the excluded element. If\n * what you actually need is \"stop my own cosmetic styling from reacting to a parent's unrelated\n * interaction,\" this is the wrong tool; that's the class of bug `ColorInteractiveHasFocusDirective`\n * used to have (see its own comment).\n */\n@Directive({\n selector: '[etColorInteractiveExclude]',\n host: {\n class: 'et-color-interactive-exclude',\n },\n})\nexport class ColorInteractiveExcludeDirective {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { ColorInteractiveStylesComponent } from './color-interactive-styles.component';\n\n/**\n * Tints `--et-theme-color-primary-*` etc. only when a descendant genuinely has `:focus-visible`\n * (`:has(:focus-visible)`) - never on mouse `:hover`/`:active`. Use this for a wrapper (like a\n * form field's frame) that should show the theme color while its control is focused, but must\n * NOT react to incidental mouse interaction with unrelated nested widgets (a toolbar button, a\n * rendered link) that happen to live inside the same wrapper.\n *\n * The color it resolves to is the theme's BASE accent, not the `-focus` variant: the `-focus`\n * shade is the treatment for an element that is itself focused, whereas a container only mirroring\n * a child's focus should read as the plain accent color.\n *\n * Deliberately does NOT also carry `ColorInteractiveDirective`'s `et-color-interactive` class:\n * that class's plain `:hover`/`:active` rules locally override the same (inheriting)\n * `--et-theme-color-primary-rgb`, so anything bubbling up from ANYWHERE in the subtree would\n * leak the transient hover/press color into every descendant reading it for unrelated cosmetics -\n * exactly the bug this directive's only consumer (form-field) shipped once, before the two\n * behaviors were split apart. If you need the plain hover/active reaction too, add\n * `ColorInteractiveDirective` explicitly and make sure you actually want both.\n */\n@Directive({\n selector: '[etColorInteractiveHasFocus]',\n host: {\n class: 'et-color-interactive--has-focus',\n },\n})\nexport class ColorInteractiveHasFocusDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(ColorInteractiveStylesComponent);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { ColorInteractiveStylesComponent } from './color-interactive-styles.component';\n\n/**\n * Makes an element react to ITS OWN `:hover`/`:active`/`:focus-visible`/`[disabled]` by tinting\n * `--et-theme-color-primary-*`/`-on-primary-*`/`-ink-*` with the current color theme. Use this on\n * a single, self-contained interactive element - a button, a checkbox, a segmented button.\n *\n * Do NOT apply this to a wrapper that also contains OTHER, independently-interactive elements\n * (e.g. a toolbar with its own buttons, or a form-field's control slot). These are ordinary\n * inheriting CSS custom properties, so a descendant reading them for its own cosmetics (a caret\n * color, a link color) gets swept along whenever ANYTHING inside the wrapper is hovered or\n * clicked - not just when the wrapper itself is the thing being interacted with. That exact bug\n * shipped once already; see ColorInteractiveContainerDirective/ColorInteractiveHasFocusDirective\n * for the shapes that avoid it.\n */\n@Directive({\n selector: '[etColorInteractive]',\n host: {\n class: 'et-color-interactive',\n },\n})\nexport class ColorInteractiveDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(ColorInteractiveStylesComponent);\n }\n}\n","import { defineStaticProvider, toInjectFn, toProvideFn } from '../utils';\n\nexport const SURFACE_TYPE = {\n LIGHT: 'light',\n DARK: 'dark',\n} as const;\n\nexport type SurfaceType = (typeof SURFACE_TYPE)[keyof typeof SURFACE_TYPE];\n\nexport type SurfaceThemeColor = `${number} ${number} ${number}`;\n\nexport type SurfaceInteractionColor = {\n default: SurfaceThemeColor;\n hover: SurfaceThemeColor;\n focus: SurfaceThemeColor;\n active: SurfaceThemeColor;\n disabled: SurfaceThemeColor;\n};\n\nexport type SurfaceTheme = {\n name: string;\n type: SurfaceType;\n elevation: number;\n isDefault?: boolean;\n interactionColor?: SurfaceInteractionColor;\n background: SurfaceThemeColor;\n color: SurfaceThemeColor;\n colorMuted: SurfaceThemeColor;\n colorSubtle: SurfaceThemeColor;\n border: SurfaceThemeColor;\n};\n\n/**\n * Augmentable registry for the literal set of surface theme names an app defines. Left\n * empty by default, which keeps surface-theme-name-accepting APIs (like `etProvideSurface`)\n * typed as plain `string`.\n *\n * Apps that want those APIs checked and autocompleted against their own surface theme\n * names should augment this interface once, near where their surface themes are defined:\n *\n * ```ts\n * declare module '@ethlete/core' {\n * interface EthleteSurfaceThemeNameRegistry {\n * name: 'card' | 'sheet' | 'popover';\n * }\n * }\n * ```\n */\n// This must stay an `interface`: consumers register their theme names by augmenting it from a\n// `declare module` block, which only works for interfaces.\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface, @typescript-eslint/consistent-type-definitions\nexport interface EthleteSurfaceThemeNameRegistry {\n // Intentionally empty - see doc comment above.\n}\n\nexport type RegisteredSurfaceThemeName = EthleteSurfaceThemeNameRegistry extends { name: infer N extends string }\n ? N\n : string;\n\nexport const createCssSurfaceName = (name: string) => name.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n\nexport const resolveSurfaceByElevation = (themes: SurfaceTheme[], type: SurfaceType, elevation: number) =>\n themes.find((t) => t.type === type && t.elevation === elevation) ?? null;\n\nconst SURFACE_THEMES_DEF = /* @__PURE__ */ defineStaticProvider<SurfaceTheme[]>(undefined, {\n name: 'Surface Themes',\n});\n\nexport const ɵProvideSurfaceThemes = /* @__PURE__ */ toProvideFn(SURFACE_THEMES_DEF);\nexport const injectSurfaceThemes = /* @__PURE__ */ toInjectFn(SURFACE_THEMES_DEF);\n\nconst SURFACE_THEMES_PREFIX_DEF = /* @__PURE__ */ defineStaticProvider('et', {\n name: 'Surface Themes Prefix',\n});\n\nexport const ɵProvideSurfaceThemesPrefix = /* @__PURE__ */ toProvideFn(SURFACE_THEMES_PREFIX_DEF);\nexport const injectSurfaceThemesPrefix = /* @__PURE__ */ toInjectFn(SURFACE_THEMES_PREFIX_DEF);\n\nexport const provideSurfaceThemesWithTailwind4 = (themes: SurfaceTheme[], prefix = 'et') => [\n ɵProvideSurfaceThemes(themes),\n ɵProvideSurfaceThemesPrefix(prefix),\n];\n","import {\n computed,\n Directive,\n effect,\n EffectRef,\n inject,\n InjectionToken,\n Injector,\n input,\n InputSignal,\n isDevMode,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n createCssSurfaceName,\n injectSurfaceThemes,\n injectSurfaceThemesPrefix,\n RegisteredSurfaceThemeName,\n SurfaceTheme,\n} from './surface-theme.util';\n\nexport const SURFACE_PROVIDER = new InjectionToken<ProvideSurfaceDirective>('SurfaceProvider');\n\nconst FORCED_SURFACE_UNSET = /* @__PURE__ */ Symbol('FORCED_SURFACE_UNSET');\n\ntype ForcedSurfaceState = RegisteredSurfaceThemeName | null | typeof FORCED_SURFACE_UNSET;\n\n@Directive({\n selector: '[etProvideSurface]',\n providers: [{ provide: SURFACE_PROVIDER, useExisting: ProvideSurfaceDirective }],\n host: {\n '[class]': 'surfaceClass()',\n },\n})\nexport class ProvideSurfaceDirective {\n private themes = injectSurfaceThemes({ optional: true });\n private prefix = injectSurfaceThemesPrefix({ optional: true });\n private injector = inject(Injector);\n\n private currentProviderSync: EffectRef | null = null;\n private forcedSurface = signal<ForcedSurfaceState>(FORCED_SURFACE_UNSET);\n\n surface: InputSignal<RegisteredSurfaceThemeName | null | undefined> = input<RegisteredSurfaceThemeName | null>(\n undefined,\n { alias: 'etProvideSurface' },\n );\n\n effectiveSurface = computed(() => {\n const forcedSurface = this.forcedSurface();\n\n if (forcedSurface !== FORCED_SURFACE_UNSET) {\n return forcedSurface;\n }\n\n return this.surface();\n });\n\n resolvedTheme = computed<SurfaceTheme | null>(() => {\n const value = this.effectiveSurface();\n\n if (!this.themes || !value) return null;\n\n const theme = this.themes.find((t) => t.name === value) ?? null;\n\n if (isDevMode() && !theme && value !== null) {\n console.error(\n `Surface theme ${value} does not exist. Please make sure to add it to provideSurfaceThemesWithTailwind4()`,\n );\n }\n\n return theme;\n });\n\n elevation = computed(() => this.resolvedTheme()?.elevation ?? 0);\n\n surfaceType = computed(() => this.resolvedTheme()?.type ?? null);\n\n surfaceName = computed(() => {\n const value = this.effectiveSurface();\n\n if (!this.themes || !value) return;\n\n return createCssSurfaceName(value);\n });\n\n protected surfaceClass = computed(() => {\n const prefix = this.prefix || 'et';\n\n if (this.surfaceName()) {\n return `${prefix}-surface--${this.surfaceName()}`;\n }\n\n return `${prefix}-surface--inherited`;\n });\n\n syncWithProvider(provider: ProvideSurfaceDirective) {\n this.currentProviderSync?.destroy();\n\n runInInjectionContext(this.injector, () => {\n this.currentProviderSync = effect(() => {\n const provideSurface = provider.effectiveSurface();\n\n untracked(() => {\n if (provideSurface === undefined) {\n this.clearForcedSurface();\n\n return;\n }\n\n this.forceSurface(provideSurface);\n });\n });\n });\n }\n\n stopSyncWithProvider() {\n const hadProviderSync = !!this.currentProviderSync;\n\n this.currentProviderSync?.destroy();\n this.currentProviderSync = null;\n\n if (hadProviderSync) {\n this.clearForcedSurface();\n }\n }\n\n /** @internal */\n forceSurface(surface: RegisteredSurfaceThemeName | null) {\n this.forcedSurface.set(surface);\n }\n\n /** @internal */\n clearForcedSurface() {\n if (this.forcedSurface() === FORCED_SURFACE_UNSET) {\n return;\n }\n\n this.forcedSurface.set(FORCED_SURFACE_UNSET);\n }\n}\n","import { computed, Signal, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { SurfaceType } from './surface-theme.util';\n\nexport type SurfaceContextEntry = {\n id: string;\n type: SurfaceType;\n elevation: number;\n element: HTMLElement;\n};\n\nexport type SurfaceContextSurface = {\n type: SurfaceType;\n elevation: number;\n};\n\nexport type SurfaceContextTracker = {\n topType: Signal<SurfaceType | null>;\n topElevation: Signal<number>;\n register: (type: SurfaceType, elevation: number, element: HTMLElement) => () => void;\n /**\n * The surface of the innermost registered overlay whose pane actually contains `host` in the DOM,\n * or `null` when `host` sits outside every open overlay. Reactive: reads the entries signal, so\n * calling it inside a computed re-runs when overlays open/close.\n */\n surfaceForElement: (host: HTMLElement) => SurfaceContextSurface | null;\n};\n\nlet uniqueId = 0;\n\nconst SURFACE_CONTEXT_TRACKER_DEF = /* @__PURE__ */ defineRootProvider(\n (): SurfaceContextTracker => {\n const entries = signal<SurfaceContextEntry[]>([]);\n\n const topEntry = computed(() => {\n const stack = entries();\n return stack.length > 0 ? (stack[stack.length - 1] ?? null) : null;\n });\n\n const topType = computed(() => topEntry()?.type ?? null);\n const topElevation = computed(() => topEntry()?.elevation ?? 0);\n\n const register = (type: SurfaceType, elevation: number, element: HTMLElement) => {\n const id = `surface-ctx-${uniqueId++}`;\n const entry: SurfaceContextEntry = { id, type, elevation, element };\n entries.update((e) => [...e, entry]);\n\n return () => {\n entries.update((e) => e.filter((item) => item.id !== id));\n };\n };\n\n const surfaceForElement = (host: HTMLElement): SurfaceContextSurface | null => {\n const stack = entries();\n\n // Walk newest-first so the innermost overlay containing `host` wins.\n for (let i = stack.length - 1; i >= 0; i--) {\n const entry = stack[i];\n\n if (entry && entry.element.contains(host)) {\n return { type: entry.type, elevation: entry.elevation };\n }\n }\n\n return null;\n };\n\n return { topType, topElevation, register, surfaceForElement };\n },\n { name: 'SurfaceContextTracker' },\n);\n\nexport const provideSurfaceContextTracker = /* @__PURE__ */ toProvideFn(SURFACE_CONTEXT_TRACKER_DEF);\nexport const injectSurfaceContextTracker = /* @__PURE__ */ toInjectFn(SURFACE_CONTEXT_TRACKER_DEF);\n","import {\n afterEveryRender,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { setInputSignal } from '../utils';\nimport { ProvideSurfaceDirective, SURFACE_PROVIDER } from './provide-surface.directive';\nimport { injectSurfaceContextTracker } from './surface-context-tracker';\nimport { injectSurfaceThemes, resolveSurfaceByElevation, SurfaceType } from './surface-theme.util';\n\n@Directive({\n selector: '[etAutoSurface]',\n hostDirectives: [ProvideSurfaceDirective],\n})\nexport class AutoSurfaceDirective {\n private ownSurfaceProvider = inject(ProvideSurfaceDirective);\n private contextSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n private surfaceThemes = injectSurfaceThemes({ optional: true });\n private surfaceContextTracker = injectSurfaceContextTracker();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Explicit surface provider to resolve the surface relative to. Falls back to the\n * surface provider from the surrounding (trigger) context when not set.\n */\n surfaceProvider = input<ProvideSurfaceDirective | null>(null);\n\n // An overlay *panel* that IS its overlay's own painted surface opts in (see\n // matchOverlaySurface) so it adopts the overlay's registered elevation exactly,\n // rather than layering one level above a parent surface.\n private isOverlaySurface = signal(false);\n\n // Bumped by the afterEveryRender watcher in the constructor whenever this element's overlay\n // containment changes. surfaceForElement() below does a non-reactive element.contains() read,\n // so the computed must be re-triggered when this element is (re)grafted into an overlay pane -\n // otherwise a value cached from before the graft (one elevation too low) sticks forever.\n private domSettleTick = signal(0);\n\n resolvedSurface = computed(() => {\n const themes = this.surfaceThemes;\n\n if (!themes) {\n return null;\n }\n\n // Establish a dependency on the DOM-settle tick so the non-reactive containment read below\n // is re-evaluated after the element is grafted into its final overlay pane.\n this.domSettleTick();\n\n const contextProvider = this.surfaceProvider() ?? this.contextSurfaceProvider ?? null;\n const contextElevation = contextProvider?.elevation() ?? null;\n const contextType = contextProvider?.surfaceType() ?? null;\n\n // An overlay's projected/portaled content keeps the injector of where it was\n // *declared* (the trigger location), not the pane it renders into - so the\n // injector-derived parent surface is one elevation too low. The surface-context\n // tracker records each open overlay's surface *and* its pane element, so we consult\n // only the overlay whose pane actually contains this element in the DOM (portaling\n // moves the DOM into the pane even though the injector stays at the trigger). An\n // auto-surface on the base page therefore stays put when an overlay opens elsewhere.\n const overlaySurface = this.surfaceContextTracker.surfaceForElement(this.elementRef.nativeElement);\n const overlayElevation = overlaySurface?.elevation ?? null;\n const overlayType = overlaySurface?.type ?? null;\n\n // A panel that IS its overlay's own surface (see matchOverlaySurface) must paint exactly the\n // overlay's elevation: the overlay container already resolved it (one above the trigger) and\n // registered it in the tracker. It must NOT re-derive from its declaration injector - that\n // points back at the trigger location and disagrees with the pane whenever the trigger itself\n // sits on a surface, which would double-elevate the panel relative to its own pane.\n if (this.isOverlaySurface()) {\n if (overlayElevation !== null) {\n return resolveSurfaceByElevation(themes, overlayType ?? contextType ?? 'dark', overlayElevation)?.name ?? null;\n }\n\n // Rendered outside any tracked overlay: fall back to the injector context unchanged.\n if (contextElevation !== null) {\n return resolveSurfaceByElevation(themes, contextType ?? 'dark', contextElevation)?.name ?? null;\n }\n\n return null;\n }\n\n // A regular auto-surface sits one elevation *above* the deeper of its injector context and the\n // overlay pane it renders into (content painted onto the surface it lives on).\n let parentElevation: number;\n let parentType: SurfaceType;\n\n if (overlayElevation !== null && (contextElevation === null || overlayElevation > contextElevation)) {\n parentElevation = overlayElevation;\n parentType = overlayType ?? contextType ?? 'dark';\n } else if (contextElevation !== null) {\n parentElevation = contextElevation;\n parentType = contextType ?? overlayType ?? 'dark';\n } else {\n return null;\n }\n\n return resolveSurfaceByElevation(themes, parentType, parentElevation + 1)?.name ?? null;\n });\n\n /**\n * Mark this auto-surface as its overlay's *own painted surface*. An overlay *panel*\n * (menu, select/date/cascader panel, tooltip, toggletip, rich-text-editor popups) is\n * the overlay's surface, so it must paint the overlay's registered elevation exactly -\n * not stack a level above a parent surface. The elevation is read from the surface-context\n * tracker (the pane it renders into), which is authoritative across the portal boundary;\n * the panel's own declaration injector points back at the trigger location and cannot be\n * trusted.\n */\n matchOverlaySurface() {\n this.isOverlaySurface.set(true);\n }\n\n constructor() {\n // Projected/portaled auto-surface content (e.g. a select option's avatar) can have its\n // resolvedSurface computed run *before* it is grafted into the overlay pane it visually lives\n // in - or while it is briefly mounted in an off-pane measuring container, as windowed lists do.\n // surfaceForElement()'s element.contains() check then returns the wrong (or no) overlay, so it\n // resolves off the declaration injector (the trigger location) one elevation too low. That check\n // is a plain DOM read, not a signal, so nothing re-runs the computed once the element reaches its\n // final pane. Watch the tracker result across renders and re-trigger the computed whenever the\n // element's overlay containment changes, settling (and unsubscribing) once it stops moving.\n let lastElevation: number | null =\n this.surfaceContextTracker.surfaceForElement(this.elementRef.nativeElement)?.elevation ?? null;\n let stableRenders = 0;\n const settleWatcher = afterEveryRender(() => {\n const el = this.elementRef.nativeElement;\n const elevation = this.surfaceContextTracker.surfaceForElement(el)?.elevation ?? null;\n\n if (elevation !== lastElevation) {\n lastElevation = elevation;\n stableRenders = 0;\n this.domSettleTick.update((v) => v + 1);\n } else if (el.isConnected && ++stableRenders >= 2) {\n // containment has held for a couple of renders and the element is in the DOM - done moving\n settleWatcher.destroy();\n }\n });\n\n effect(() => {\n const surface = this.resolvedSurface();\n\n untracked(() => {\n setInputSignal(this.ownSurfaceProvider.surface as any, surface);\n });\n });\n }\n}\n","import { isDevMode } from '@angular/core';\nimport { defineStaticProvider, toInjectFn, toProvideFn } from '../utils';\n\nexport type ThemeRGBColor = `${number} ${number} ${number}`;\nexport type ThemeHSLColor = `${number} ${number}% ${number}%`;\n\nexport type ThemeColor = ThemeRGBColor | ThemeHSLColor;\n\nexport type ThemeColorMap = {\n default: ThemeColor;\n hover: ThemeColor;\n focus?: ThemeColor;\n active: ThemeColor;\n disabled: ThemeColor;\n};\n\nexport type OnThemeColorMap = {\n default: ThemeColor;\n hover?: ThemeColor;\n focus?: ThemeColor;\n active?: ThemeColor;\n disabled?: ThemeColor;\n};\n\nexport type ThemeInkColorMap = {\n default: ThemeColor;\n hover?: ThemeColor;\n focus?: ThemeColor;\n active?: ThemeColor;\n disabled?: ThemeColor;\n};\n\nexport type ThemeSwatch = {\n color: ThemeColorMap;\n onColor: OnThemeColorMap;\n inkColor?: ThemeInkColorMap;\n};\n\nexport type ColorThemeType = 'success' | 'warning' | 'error';\n\nexport type ColorTheme = {\n name: string;\n type?: ColorThemeType;\n isDefault?: boolean;\n primary: ThemeSwatch;\n secondary?: ThemeSwatch;\n tertiary?: ThemeSwatch;\n};\n\n/**\n * Augmentable registry for the literal set of color theme names an app defines. Left\n * empty by default, which keeps theme-name-accepting APIs (like `etProvideColor`) typed\n * as plain `string`.\n *\n * Apps that want those APIs checked and autocompleted against their own theme names\n * should augment this interface once, near where their themes are defined:\n *\n * ```ts\n * declare module '@ethlete/core' {\n * interface EthleteColorThemeNameRegistry {\n * name: 'pitch-green' | 'red' | 'light-grey';\n * }\n * }\n * ```\n */\n// This must stay an `interface`: consumers register their theme names by augmenting it from a\n// `declare module` block, which only works for interfaces.\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface, @typescript-eslint/consistent-type-definitions\nexport interface EthleteColorThemeNameRegistry {\n // Intentionally empty - see doc comment above.\n}\n\nexport type RegisteredColorThemeName = EthleteColorThemeNameRegistry extends { name: infer N extends string }\n ? N\n : string;\n\nexport const createCssColorThemeName = (name: string) => name.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n\nconst COLOR_THEMES_DEF = /* @__PURE__ */ defineStaticProvider<ColorTheme[]>(undefined, {\n name: 'Color Themes',\n});\n\nexport const ɵProvideColorThemes = /* @__PURE__ */ toProvideFn(COLOR_THEMES_DEF);\nexport const injectColorThemes = /* @__PURE__ */ toInjectFn(COLOR_THEMES_DEF);\nconst COLOR_THEMES_PREFIX_DEF = /* @__PURE__ */ defineStaticProvider('et', {\n name: 'Themes Prefix',\n});\n\nexport const ɵProvideColorThemesPrefix = /* @__PURE__ */ toProvideFn(COLOR_THEMES_PREFIX_DEF);\nexport const injectColorThemesPrefix = /* @__PURE__ */ toInjectFn(COLOR_THEMES_PREFIX_DEF);\n\nexport const provideColorThemesWithTailwind4 = (themes: ColorTheme[], prefix = 'et') => [\n ɵProvideColorThemes(themes),\n ɵProvideColorThemesPrefix(prefix),\n];\n\nconst injectColorThemeByType = (type: ColorThemeType) => {\n const themes = injectColorThemes();\n\n if (!themes) {\n throw new Error(\n `[injectColorThemeByType] No color themes provided. Call provideColorThemesWithTailwind4() in your app config.`,\n );\n }\n\n const theme = themes.find((t) => t.type === type);\n\n if (!theme) {\n throw new Error(\n `[injectColorThemeByType] No color theme with type \"${type}\" found. Add a theme with type: \"${type}\" to provideColorThemesWithTailwind4().`,\n );\n }\n\n if (isDevMode()) {\n const duplicates = themes.filter((t) => t.type === type);\n\n if (duplicates.length > 1) {\n console.error(\n `[injectColorThemeByType] Multiple themes with type \"${type}\" found: ${duplicates.map((t) => t.name).join(', ')}. Only the first one will be used.`,\n );\n }\n }\n\n return theme;\n};\n\nexport const injectErrorTheme = () => injectColorThemeByType('error');\nexport const injectWarningTheme = () => injectColorThemeByType('warning');\nexport const injectSuccessTheme = () => injectColorThemeByType('success');\n\nexport const injectDefaultColorTheme = () => {\n const themes = injectColorThemes();\n\n if (!themes) {\n throw new Error(\n `[injectDefaultColorTheme] No color themes provided. Call provideColorThemesWithTailwind4() in your app config.`,\n );\n }\n\n const theme = themes.find((t) => t.isDefault);\n\n if (!theme) {\n throw new Error(\n `[injectDefaultColorTheme] No color theme with isDefault: true found. Mark one theme as the default in provideColorThemesWithTailwind4().`,\n );\n }\n\n if (isDevMode()) {\n const duplicates = themes.filter((t) => t.isDefault);\n\n if (duplicates.length > 1) {\n console.error(\n `[injectDefaultColorTheme] Multiple themes with isDefault: true found: ${duplicates.map((t) => t.name).join(', ')}. Only the first one will be used.`,\n );\n }\n }\n\n return theme;\n};\n","import { isDevMode } from '@angular/core';\nimport {\n ColorTheme,\n createCssColorThemeName,\n ThemeSwatch,\n ɵProvideColorThemes,\n ɵProvideColorThemesPrefix,\n} from './color-theme.util';\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createSwatchCss = (swatch: string, isAlt: boolean, data: ThemeSwatch) => {\n const varSuffix = isAlt ? 'alt-' + swatch : swatch;\n const varOnSuffix = isAlt ? 'alt-' : '';\n const inkDefault = data.inkColor?.default || data.color.default;\n const inkHover = data.inkColor?.hover || inkDefault;\n const inkFocus = data.inkColor?.focus || data.inkColor?.hover || inkDefault;\n const inkActive = data.inkColor?.active || inkDefault;\n const inkDisabled = data.inkColor?.disabled || inkDefault;\n\n return `\n --et-color-${varSuffix}: ${data.color.default};\n --et-color-${varSuffix}-hover: ${data.color.hover};\n --et-color-${varSuffix}-focus: ${data.color.focus || data.color.hover};\n --et-color-${varSuffix}-active: ${data.color.active};\n --et-color-${varSuffix}-disabled: ${data.color.disabled};\n \n --et-color-${varOnSuffix}on-${swatch}: ${data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-hover: ${data.onColor.hover || data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-focus: ${data.onColor.focus || data.onColor.hover || data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-active: ${data.onColor.active || data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-disabled: ${data.onColor.disabled || data.onColor.default};\n\n --et-color-${varSuffix}-ink: ${inkDefault};\n --et-color-${varSuffix}-ink-hover: ${inkHover};\n --et-color-${varSuffix}-ink-focus: ${inkFocus};\n --et-color-${varSuffix}-ink-active: ${inkActive};\n --et-color-${varSuffix}-ink-disabled: ${inkDisabled};\n `;\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createRootThemeCss = (themes: ColorTheme[]) => {\n const createVars = (name: string, swatch: ThemeSwatch) => {\n const inkDefault = swatch.inkColor?.default || swatch.color.default;\n const inkHover = swatch.inkColor?.hover || inkDefault;\n const inkFocus = swatch.inkColor?.focus || swatch.inkColor?.hover || inkDefault;\n const inkActive = swatch.inkColor?.active || inkDefault;\n const inkDisabled = swatch.inkColor?.disabled || inkDefault;\n\n return `\n --et-color-${name}: ${swatch.color.default};\n --et-color-${name}-hover: ${swatch.color.hover};\n --et-color-${name}-focus: ${swatch.color.focus || swatch.color.hover};\n --et-color-${name}-active: ${swatch.color.active};\n --et-color-${name}-disabled: ${swatch.color.disabled};\n \n --et-color-on-${name}: ${swatch.onColor.default};\n --et-color-on-${name}-hover: ${swatch.onColor.hover || swatch.onColor.default};\n --et-color-on-${name}-focus: ${swatch.onColor.focus || swatch.onColor.hover || swatch.onColor.default};\n --et-color-on-${name}-active: ${swatch.onColor.active || swatch.onColor.default};\n --et-color-on-${name}-disabled: ${swatch.onColor.disabled || swatch.onColor.default};\n\n --et-color-${name}-ink: ${inkDefault};\n --et-color-${name}-ink-hover: ${inkHover};\n --et-color-${name}-ink-focus: ${inkFocus};\n --et-color-${name}-ink-active: ${inkActive};\n --et-color-${name}-ink-disabled: ${inkDisabled};\n `;\n };\n\n const vars: string[] = [];\n\n for (const theme of themes) {\n const name = createCssColorThemeName(theme.name);\n\n if (theme.secondary || theme.tertiary) {\n vars.push(createVars(`${name}-primary`, theme.primary));\n\n if (theme.secondary) {\n vars.push(createVars(`${name}-secondary`, theme.secondary));\n }\n\n if (theme.tertiary) {\n vars.push(createVars(`${name}-tertiary`, theme.tertiary));\n }\n } else {\n vars.push(createVars(name, theme.primary));\n }\n }\n\n const css = `\n :root {\n ${vars.join('\\n')}\n }\n `;\n\n const style = document.createElement('style');\n style.id = `et-root-themes`;\n style.appendChild(document.createTextNode(css));\n document.head.appendChild(style);\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createThemeStyle = (theme: ColorTheme, isAlt: boolean) => {\n const cssThemeName = createCssColorThemeName(theme.name);\n const classPrefix = isAlt ? 'et-color-alt' : 'et-color';\n\n const selectors = [\n ...((theme.isDefault && !isAlt) || ((theme as ColorTheme & { isDefaultAlt?: boolean }).isDefaultAlt && isAlt)\n ? [':root', `.${classPrefix}--default`]\n : []),\n `.${classPrefix}--${cssThemeName}`,\n ];\n\n const css = `\n ${selectors.join(', ')} {\n ${createSwatchCss('primary', isAlt, theme.primary)}\n ${theme.secondary ? createSwatchCss('secondary', isAlt, theme.secondary) : ''}\n ${theme.tertiary ? createSwatchCss('tertiary', isAlt, theme.tertiary) : ''}\n }\n `;\n\n const style = document.createElement('style');\n style.id = `${classPrefix}--${cssThemeName}`;\n style.appendChild(document.createTextNode(css));\n document.head.appendChild(style);\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createTailwindCssVar = (name: string | undefined) => (name ? `rgb(var(--${name}) / <alpha-value>)` : null);\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport function createTailwindRgbVar(val: string): string;\nexport function createTailwindRgbVar(val: string | undefined): string | null;\nexport function createTailwindRgbVar(val: string | undefined) {\n return val ? `rgb(${val} / <alpha-value>)` : null;\n}\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createTailwindColorThemes = (themes: ColorTheme[], prefix = 'et') => {\n const twThemes: Record<\n string,\n {\n DEFAULT: string;\n hover: string;\n focus: string;\n active: string;\n disabled: string;\n }\n > = {};\n\n for (const theme of themes) {\n const key = `${prefix}-${theme.name}`;\n\n twThemes[key] = {\n DEFAULT: createTailwindRgbVar(theme.primary.color.default),\n hover: createTailwindRgbVar(theme.primary.color.hover),\n focus: createTailwindRgbVar(theme.primary.color.focus) || createTailwindRgbVar(theme.primary.color.hover),\n active: createTailwindRgbVar(theme.primary.color.active),\n disabled: createTailwindRgbVar(theme.primary.color.disabled),\n };\n\n const keyOn = `${prefix}-on-${theme.name}`;\n\n twThemes[keyOn] = {\n DEFAULT: createTailwindRgbVar(theme.primary.onColor.default),\n hover: createTailwindRgbVar(theme.primary.onColor.hover) || createTailwindRgbVar(theme.primary.onColor.default),\n focus:\n createTailwindRgbVar(theme.primary.onColor.focus) ||\n createTailwindRgbVar(theme.primary.onColor.hover) ||\n createTailwindRgbVar(theme.primary.onColor.default),\n active: createTailwindRgbVar(theme.primary.onColor.active) || createTailwindRgbVar(theme.primary.onColor.default),\n disabled:\n createTailwindRgbVar(theme.primary.onColor.disabled) || createTailwindRgbVar(theme.primary.onColor.default),\n };\n\n const keyInk = `${prefix}-${theme.name}-ink`;\n\n twThemes[keyInk] = {\n DEFAULT:\n createTailwindRgbVar(theme.primary.inkColor?.default) || createTailwindRgbVar(theme.primary.color.default),\n hover:\n createTailwindRgbVar(theme.primary.inkColor?.hover) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n focus:\n createTailwindRgbVar(theme.primary.inkColor?.focus) ||\n createTailwindRgbVar(theme.primary.inkColor?.hover) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n active:\n createTailwindRgbVar(theme.primary.inkColor?.active) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n disabled:\n createTailwindRgbVar(theme.primary.inkColor?.disabled) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n };\n }\n\n return twThemes;\n};\n\n/**\n * @deprecated Use provideColorThemesWithTailwind4 instead after migrating to Tailwind CSS v4. Intent to remove in v6.\n */\nexport const provideColorThemes = (themes: ColorTheme[]) => {\n if (isDevMode()) {\n const defaultCount = themes.filter((theme) => theme.isDefault).length;\n const defaultAltCount = themes.filter(\n (theme) => (theme as ColorTheme & { isDefaultAlt?: boolean }).isDefaultAlt,\n ).length;\n\n if (defaultCount === 0) {\n console.warn(\n 'No default theme provided. Please provide a default theme by setting the isDefault property to true on a theme.',\n );\n } else if (defaultCount > 1) {\n console.warn(\n 'More than one default theme provided. Please provide only one default theme by setting the isDefault property to true on a theme.',\n );\n }\n\n if (defaultAltCount > 1) {\n console.warn(\n 'More than one default alt theme provided. Please provide only one default alt theme by setting the isDefaultAlt property to true on a theme.',\n );\n }\n }\n\n for (const theme of themes) {\n createThemeStyle(theme, false);\n createThemeStyle(theme, true);\n }\n\n createRootThemeCss(themes);\n\n return [ɵProvideColorThemes(themes), ɵProvideColorThemesPrefix('et')];\n};\n","import {\n ApplicationRef,\n computed,\n Directive,\n effect,\n EffectRef,\n inject,\n InjectionToken,\n Injector,\n input,\n InputSignal,\n isDevMode,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n ColorTheme,\n createCssColorThemeName,\n injectColorThemes,\n injectColorThemesPrefix,\n RegisteredColorThemeName,\n} from './color-theme.util';\n\nexport const COLOR_PROVIDER = new InjectionToken<ProvideColorDirective>('ColorProvider');\n\n/**\n * The color provider attached to a bootstrapped root component (e.g. `ProvideColorDirective` in\n * the app component's `hostDirectives`), if any. Detached DOM such as overlay panes can't reach\n * it through element DI, so overlay containers fall back to this when resolving the provider to\n * `syncWithProvider()` - resolve at sync time, not at injection time, since root components only\n * register with `ApplicationRef` once bootstrap completes.\n *\n * @internal\n */\nexport const resolveAppRootColorProvider = (appRef: ApplicationRef): ProvideColorDirective | null => {\n for (const componentRef of appRef.components) {\n const provider = componentRef.injector.get(COLOR_PROVIDER, null);\n\n if (provider) {\n return provider;\n }\n }\n\n return null;\n};\n\nconst FORCED_COLOR_UNSET = /* @__PURE__ */ Symbol('FORCED_COLOR_UNSET');\n\ntype ForcedColorState = RegisteredColorThemeName | ColorTheme | null | typeof FORCED_COLOR_UNSET;\n\n@Directive({\n selector: '[etProvideColor]',\n providers: [{ provide: COLOR_PROVIDER, useExisting: ProvideColorDirective }],\n host: {\n '[class]': 'themeClass()',\n },\n})\nexport class ProvideColorDirective {\n private themes = injectColorThemes({ optional: true });\n private prefix = injectColorThemesPrefix({ optional: true });\n private injector = inject(Injector);\n private parentProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n private currentProviderSync: EffectRef | null = null;\n private forcedColor = signal<ForcedColorState>(FORCED_COLOR_UNSET);\n\n color: InputSignal<RegisteredColorThemeName | ColorTheme | null | undefined> = input<\n RegisteredColorThemeName | ColorTheme | null\n >(undefined, { alias: 'etProvideColor' });\n\n effectiveColor = computed(() => {\n const forcedColor = this.forcedColor();\n\n if (forcedColor !== FORCED_COLOR_UNSET) {\n return forcedColor;\n }\n\n return this.color();\n });\n\n /**\n * The color that actually applies at this provider's location: its own effective color, or -\n * when this provider is passive (no input, nothing forced) - the nearest ancestor provider's.\n * Mirrors the CSS cascade, which falls through a provider's `-color--inherited` scope class;\n * consumers that re-apply context across detached DOM (overlay panes) must use this instead\n * of `effectiveColor` or a passive in-between provider (e.g. a form field's) erases the theme.\n */\n resolvedColor = computed((): RegisteredColorThemeName | ColorTheme | null | undefined => {\n const own = this.effectiveColor();\n const ownName = typeof own === 'object' && own !== null ? own.name : own;\n\n if (ownName) {\n return own;\n }\n\n return this.parentProvider?.resolvedColor();\n });\n\n colorName = computed(() => {\n const raw = this.effectiveColor();\n const value = typeof raw === 'object' && raw !== null ? raw.name : raw;\n\n if (!this.themes || !value) return;\n\n if (isDevMode() && !this.themes.some((theme) => theme.name === value) && value !== null) {\n console.error(`Theme ${value} does not exist. Please make sure to add it to provideColorThemesWithTailwind4()`);\n }\n\n return createCssColorThemeName(value);\n });\n\n protected themeClass = computed(() => {\n const prefix = this.prefix || 'et';\n\n if (this.colorName()) {\n return `${prefix}-color--${this.colorName()}`;\n }\n\n return `${prefix}-color--inherited`;\n });\n\n syncWithProvider(provider: ProvideColorDirective) {\n this.currentProviderSync?.destroy();\n\n runInInjectionContext(this.injector, () => {\n this.currentProviderSync = effect(() => {\n const provideColor = provider.resolvedColor();\n\n untracked(() => {\n if (provideColor === undefined) {\n this.clearForcedColor();\n\n return;\n }\n\n this.forceColor(provideColor);\n });\n });\n });\n }\n\n stopSyncWithProvider() {\n const hadProviderSync = !!this.currentProviderSync;\n\n this.currentProviderSync?.destroy();\n this.currentProviderSync = null;\n\n if (hadProviderSync) {\n this.clearForcedColor();\n }\n }\n\n /** @internal */\n forceColor(color: RegisteredColorThemeName | ColorTheme | null) {\n this.forcedColor.set(color);\n }\n\n /** @internal */\n clearForcedColor() {\n if (this.forcedColor() === FORCED_COLOR_UNSET) {\n return;\n }\n\n this.forcedColor.set(FORCED_COLOR_UNSET);\n }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'et-surface-interactive-styles',\n template: '',\n styleUrl: './surface-interactive-styles.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SurfaceInteractiveStylesComponent {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { SurfaceInteractiveStylesComponent } from './surface-interactive-styles.component';\n\n/**\n * Same shape as `ColorInteractiveDirective` - reacts to its own `:hover`/`:focus-visible`/\n * `:active`/`[disabled]` - but drives `--et-surface-interaction-*`, a neutral/muted tint, instead\n * of the ambient color theme. Use it for chrome-level interaction feedback that shouldn't borrow\n * the page's brand color (a tab trigger's hover state, a toggle button that should look neutral\n * until it's actually active - see `ButtonDirective`'s `mutedUntilPressed`).\n *\n * Has no container/exclude/has-focus variants: it has no descendant-cascading CSS at all, so\n * applying it to a wrapper with independently-interactive children is safe by construction -\n * unlike `ColorInteractiveDirective`, there's no bubbling-leak failure mode to worry about here.\n */\n@Directive({\n selector: '[etSurfaceInteractive]',\n host: {\n class: 'et-surface-interactive',\n },\n})\nexport class SurfaceInteractiveDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(SurfaceInteractiveStylesComponent);\n }\n}\n","import { signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\n\n/**\n * Why a guard was abandoned. `'logout'` is issued by `@ethlete/query`'s auth provider; anything else\n * is app-defined.\n */\nexport type UnsavedChangesAbandonReason = 'logout' | (string & {});\n\n/** The second argument every {@link UnsavedChangesConfirmFn} receives. */\nexport type UnsavedChangesConfirmContext = {\n /**\n * Aborts when the session this confirm belongs to ends underneath it - a logout, or an explicit\n * `abandonAll()`. **Close your confirm dialog when it fires**, otherwise it is left on screen over\n * a page the user has already been redirected away from. The guard itself stops waiting either way.\n *\n * ```ts\n * confirm: (value, { signal }) => {\n * const ref = this.overlays.open(ConfirmDiscardComponent);\n * signal.addEventListener('abort', () => ref.close(false));\n * return ref.afterClosed();\n * };\n * ```\n */\n signal: AbortSignal;\n};\n\n/** @internal A live tracker, as seen by the coordinator. */\nexport type UnsavedChangesRegistration = {\n abandon: (reason: UnsavedChangesAbandonReason) => void;\n};\n\nconst UNSAVED_CHANGES_COORDINATOR_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const registrations = new Set<UnsavedChangesRegistration>();\n const _isCheckPending = signal(false);\n\n let pending: {\n promise: Promise<boolean>;\n controller: AbortController;\n settle: (result: boolean) => void;\n } | null = null;\n\n /** @internal Runs a tracker's confirm under the single-flight + abandon regime. */\n const runCheck = (runner: (context: UnsavedChangesConfirmContext) => Promise<boolean>): Promise<boolean> => {\n // A confirm is already on screen - adopt its answer rather than opening a second dialog.\n if (pending) {\n return pending.promise;\n }\n\n const controller = new AbortController();\n\n let settle!: (result: boolean) => void;\n const abandoned = new Promise<boolean>((resolve) => (settle = resolve));\n\n // Run the confirm synchronously - a dialog that opens a microtask later can miss a `signal` that\n // already aborted, and callers reasonably expect the dialog to be up when `runCheck()` returns.\n let confirmed: Promise<boolean>;\n\n try {\n confirmed = runner({ signal: controller.signal }).catch(() => false);\n } catch {\n confirmed = Promise.resolve(false);\n }\n\n // Whichever settles first wins: a late answer from an abandoned confirm is ignored.\n const promise = Promise.race([confirmed, abandoned]).then((result) => {\n pending = null;\n _isCheckPending.set(false);\n\n return result;\n });\n\n pending = { promise, controller, settle };\n _isCheckPending.set(true);\n\n return promise;\n };\n\n /** @internal */\n const register = (registration: UnsavedChangesRegistration) => {\n registrations.add(registration);\n\n return () => registrations.delete(registration);\n };\n\n const abandonAll = (reason: UnsavedChangesAbandonReason = 'session-end') => {\n if (pending) {\n pending.controller.abort(reason);\n // The changes are unrecoverable at this point, so the discard is allowed: whatever waited on\n // this check (an overlay close, a `canDeactivate`) proceeds instead of hanging.\n pending.settle(true);\n }\n\n for (const registration of Array.from(registrations)) {\n registration.abandon(reason);\n }\n };\n\n return {\n /** Whether a confirm is currently on screen. */\n isCheckPending: _isCheckPending.asReadonly(),\n abandonAll,\n runCheck,\n register,\n };\n },\n { name: 'Unsaved Changes Coordinator' },\n);\n\n/**\n * App-wide coordination for the unsaved-changes family. Two jobs:\n *\n * - **One confirm at a time.** A page form, an overlay form and a route guard can all want a decision\n * at once; stacking three \"discard your changes?\" dialogs is never the right answer. A check that\n * starts while another is pending adopts the pending decision instead of asking again.\n * - **Abandoning guards when the session ends.** `abandonAll()` resolves the pending confirm, tells\n * its dialog to close (via {@link UnsavedChangesConfirmContext.signal}), and switches every live\n * guard off: further checks pass, and the tab locks release. Called automatically by\n * `@ethlete/query`'s auth provider on logout - the edits cannot be saved anymore, so guarding them\n * only strands dialogs over the login page and blocks the tab.\n *\n * Root-provided; every tracker registers itself. Inject it to abandon guards from app code (a session\n * timeout of your own, a hard reset) or to read whether a confirm is currently on screen.\n */\nexport const provideUnsavedChangesCoordinator = /* @__PURE__ */ toProvideFn(UNSAVED_CHANGES_COORDINATOR_DEF);\nexport const injectUnsavedChangesCoordinator = /* @__PURE__ */ toInjectFn(UNSAVED_CHANGES_COORDINATOR_DEF);\n","import { computed, isSignal, Signal, untracked, WritableSignal } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { FieldTree } from '@angular/forms/signals';\nimport { controlValueSignal } from '../signals';\n\n/**\n * The value source an unsaved-changes tracker watches. In order of preference:\n *\n * - **`FieldTree<T>`** (signal forms - primary): read `field().value()`, restore `field().value.set(v)`.\n * - **`Signal<FieldTree<T> | null>`**: a late/async-created signal form - resolves once the field exists.\n * - **`AbstractControl`** (reactive forms - migration path): bridged via `controlValueSignal` + `setValue`.\n * - **`WritableSignal<T>`** (escape hatch for non-form state): read/write directly.\n */\nexport type UnsavedChangesSource<T> = FieldTree<T> | Signal<FieldTree<T> | null> | AbstractControl | WritableSignal<T>;\n\n/** A value source reduced to a read signal plus a writer, regardless of its original kind. */\nexport type NormalizedUnsavedChangesSource<T> = {\n /** The current value. `null` while a late/async source has not produced a value yet. */\n value: Signal<T | null>;\n /** Writes a value back to the source (used by `restoreDefaultValue`). No-op if the source isn't ready. */\n setValue: (value: T) => void;\n};\n\nconst isAbstractControl = (value: unknown): value is AbstractControl =>\n !!value &&\n typeof value === 'object' &&\n typeof (value as AbstractControl).getRawValue === 'function' &&\n typeof (value as AbstractControl).setValue === 'function';\n\n// A signal-forms field node is a callable that is NOT an Angular signal (signals are callable too).\nconst isFieldTree = <T>(value: unknown): value is FieldTree<T> => typeof value === 'function' && !isSignal(value);\n\n/** Reduces any {@link UnsavedChangesSource} to a uniform read-signal + writer pair. */\nexport const normalizeUnsavedChangesSource = <T>(\n source: UnsavedChangesSource<T>,\n): NormalizedUnsavedChangesSource<T> => {\n if (isAbstractControl(source)) {\n const value = controlValueSignal(source) as Signal<T | null>;\n\n return { value, setValue: (next) => source.setValue(next) };\n }\n\n if (isFieldTree<T>(source)) {\n return {\n value: computed(() => source().value()),\n // FieldTree's value type is a generic conditional that TS can't narrow here - cast the writer.\n setValue: (next) => (source().value as WritableSignal<T>).set(next),\n };\n }\n\n if (isSignal(source)) {\n const peek = untracked(source as Signal<unknown>);\n\n // A signal that currently holds a FieldTree - or nothing yet (the late/async form case).\n if (peek === null || peek === undefined || isFieldTree(peek)) {\n const fieldSignal = source as Signal<FieldTree<T> | null>;\n\n return {\n value: computed(() => {\n const field = fieldSignal();\n\n return isFieldTree<T>(field) ? field().value() : null;\n }),\n setValue: (next) => {\n const field = untracked(fieldSignal);\n\n if (isFieldTree<T>(field)) {\n (field().value as WritableSignal<T>).set(next);\n }\n },\n };\n }\n\n // A plain writable value signal (escape hatch). Initialize it with a non-null value so it isn't\n // mistaken for a late FieldTree source above.\n const writable = source as WritableSignal<T>;\n\n return { value: writable, setValue: (next) => writable.set(next) };\n }\n\n throw new Error(\n '[unsaved-changes] Unsupported source. Pass a signal-forms FieldTree, a Signal<FieldTree | null>, ' +\n 'an AbstractControl, or a WritableSignal.',\n );\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n assertInInjectionContext,\n computed,\n DestroyRef,\n effect,\n inject,\n PLATFORM_ID,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { injectFaviconStore, injectTitleStore } from '../seo';\nimport { injectIsDocumentVisible } from '../signals';\n\n/** The default tab title marker - a filled dot, prefixed while there are unsaved changes. */\nexport const UNSAVED_CHANGES_TITLE_MARKER = '●';\n\n/**\n * How an unsaved-changes tracker surfaces itself on the browser tab.\n *\n * Only the `beforeunload` lock is on by default - the title marker and the app badge write to\n * app-global surfaces, so they are opt-in.\n */\nexport type UnsavedChangesTabConfig = {\n /**\n * Make the browser ask for confirmation before the tab is closed, reloaded, or navigated away from\n * while there are unsaved changes (`beforeunload`).\n *\n * The prompt is the browser's own - its wording cannot be customized, and browsers only show it\n * after the user has interacted with the page at least once (sticky activation). The listener is\n * attached **only while changes exist**, so a clean page stays eligible for the back/forward cache.\n * @default true\n */\n lock?: boolean;\n\n /**\n * Prefix the tab title with a marker while there are unsaved changes. `true` uses\n * {@link UNSAVED_CHANGES_TITLE_MARKER}, a string is used as-is.\n *\n * Goes through the core title store (`injectTitleStore`), so the app's title must be owned by it\n * (`applyHeadTitleBinding` / the `etSeo` directive) - an app that writes `document.title` by some\n * other means would fight the store over it.\n * @default false\n */\n titleMarker?: boolean | string;\n\n /**\n * Blink the tab while there are unsaved changes: the title marker (and the favicon dot, if enabled)\n * is toggled on and off - the closest thing the web has to an \"attention needed\" tab flash, since no\n * browser exposes one. Implies `titleMarker` when that isn't set.\n *\n * By default it only blinks while the tab is **in the background** (`whenHidden`), which is the case\n * worth flagging - a title blinking in the tab the user is already reading is just noise. `interval`\n * is in ms and defaults to 1000; going faster is pointless because browsers clamp timers in hidden\n * tabs to roughly one second.\n * @default false\n */\n flash?: boolean | { interval?: number; whenHidden?: boolean };\n\n /**\n * Draw a dot on the site's favicon while there are unsaved changes, via the\n * [favicon store](/core/seo#favicon). Pass a color to override the theme accent.\n * @default false\n */\n favicon?: boolean | { color?: string };\n\n /**\n * Show an app badge while there are unsaved changes (Badging API). `true` shows a plain dot, a\n * number shows that count.\n *\n * The badge is a per-app surface, not a per-tab one: it is only visible when the app is installed\n * (PWA / desktop shortcut) and pinned, and it is a silent no-op everywhere else. Counts from\n * several trackers add up; the badge is cleared once the last one is clean.\n * @default false\n */\n badge?: boolean | number;\n};\n\nexport type CreateUnsavedChangesTabLockConfig = UnsavedChangesTabConfig & {\n /** Whether there are unsaved changes right now - typically a tracker's `hasChanges`. */\n hasChanges: Signal<boolean>;\n};\n\nexport type UnsavedChangesTabLockRef = {\n /**\n * Release the lock and remove the title marker / app badge. Also runs automatically when the\n * injector that created the lock is destroyed.\n */\n destroy: () => void;\n};\n\ntype BadgingNavigator = Navigator & {\n setAppBadge?: (contents?: number) => Promise<void>;\n clearAppBadge?: () => Promise<void>;\n};\n\n// The badge is a single app-wide surface, so every lock that wants one registers here and the badge\n// is derived from all of them - otherwise the first tracker to go clean would clear a badge that\n// another one still needs.\nconst BADGE_HOLDERS = /* @__PURE__ */ new Map<symbol, number | true>();\n\nconst syncAppBadge = () => {\n const nav = typeof navigator === 'undefined' ? null : (navigator as BadgingNavigator);\n\n if (!nav?.setAppBadge || !nav.clearAppBadge) {\n return;\n }\n\n // Unsupported, or not installed - the promise rejects instead of throwing synchronously.\n const ignore = () => undefined;\n\n if (!BADGE_HOLDERS.size) {\n nav.clearAppBadge().catch(ignore);\n\n return;\n }\n\n const count = Array.from(BADGE_HOLDERS.values()).reduce<number>(\n (total, contents) => (typeof contents === 'number' ? total + contents : total),\n 0,\n );\n\n // `setAppBadge()` without a count renders a plain dot.\n nav.setAppBadge(count || undefined).catch(ignore);\n};\n\n/**\n * The browser-tab flavor of the unsaved-changes family: while `hasChanges` reads `true`, the tab\n * cannot be closed or reloaded without the browser's confirm prompt, and - opt in - the tab title\n * carries a marker (optionally blinking), the favicon carries a dot, and the installed app carries a\n * badge.\n *\n * Every {@link createUnsavedChangesTracker} sets this up automatically (lock only); reach for it\n * directly when you track \"unsaved\" state that isn't a form, or want to lock the tab from a signal\n * you already have. Call from an injection context.\n *\n * ```ts\n * createUnsavedChangesTabLock({\n * hasChanges: computed(() => this.uploads().some((u) => u.pending)),\n * titleMarker: true,\n * flash: true,\n * });\n * ```\n */\nexport const createUnsavedChangesTabLock = (config: CreateUnsavedChangesTabLockConfig): UnsavedChangesTabLockRef => {\n assertInInjectionContext(createUnsavedChangesTabLock);\n\n const { hasChanges } = config;\n const lock = config.lock ?? true;\n const flash = config.flash === true ? {} : config.flash || null;\n const favicon = config.favicon === true ? {} : config.favicon || null;\n const badge = config.badge ?? false;\n\n // Blinking needs something to blink, so it implies the default marker.\n const titleMarker =\n config.titleMarker === true\n ? UNSAVED_CHANGES_TITLE_MARKER\n : (config.titleMarker ?? (flash && !favicon ? UNSAVED_CHANGES_TITLE_MARKER : null));\n\n const destroyRef = inject(DestroyRef);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n const releaseFns: (() => void)[] = [];\n\n // The blink phase. Always `true` unless flashing is on, so the marker/favicon effects below can read\n // one signal either way.\n const flashPhase = signal(true);\n\n if (isBrowser && flash) {\n const interval = flash.interval ?? 1000;\n const whenHidden = flash.whenHidden ?? true;\n const isDocumentVisible = injectIsDocumentVisible();\n const shouldFlash = computed(() => hasChanges() && (!whenHidden || !isDocumentVisible()));\n\n const flashEffect = effect((onCleanup) => {\n if (!shouldFlash()) {\n return;\n }\n\n const handle = setInterval(() => flashPhase.update((on) => !on), interval);\n\n onCleanup(() => {\n clearInterval(handle);\n flashPhase.set(true);\n });\n });\n\n releaseFns.push(() => {\n flashEffect.destroy();\n flashPhase.set(true);\n });\n }\n\n /** Dirty, and in the \"shown\" half of a blink. */\n const isMarked = computed(() => hasChanges() && flashPhase());\n\n if (titleMarker) {\n const titleStore = injectTitleStore();\n const markerId = Symbol('unsaved-changes-title-marker');\n\n const markerEffect = effect(() => {\n const marked = isMarked();\n\n untracked(() => (marked ? titleStore.addMarker(markerId, titleMarker) : titleStore.removeMarker(markerId)));\n });\n\n releaseFns.push(() => {\n markerEffect.destroy();\n titleStore.removeMarker(markerId);\n });\n }\n\n if (isBrowser && favicon) {\n const faviconStore = injectFaviconStore();\n const overlayId = Symbol('unsaved-changes-favicon');\n\n const faviconEffect = effect(() => {\n const marked = isMarked();\n\n untracked(() =>\n marked\n ? faviconStore.addOverlay(overlayId, { kind: 'dot', color: favicon.color })\n : faviconStore.removeOverlay(overlayId),\n );\n });\n\n releaseFns.push(() => {\n faviconEffect.destroy();\n faviconStore.removeOverlay(overlayId);\n });\n }\n\n if (isBrowser && lock) {\n const onBeforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n\n // Legacy Chrome / Safari gate the prompt on a truthy `returnValue` rather than on\n // `preventDefault()`. Deprecated, but still the only way to reach those engines.\n event.returnValue = true;\n };\n\n let attached = false;\n\n const attach = () => {\n if (attached) return;\n\n attached = true;\n window.addEventListener('beforeunload', onBeforeUnload);\n };\n\n const detach = () => {\n if (!attached) return;\n\n attached = false;\n window.removeEventListener('beforeunload', onBeforeUnload);\n };\n\n // Attached only while there are changes: a permanently registered `beforeunload` listener makes\n // the page ineligible for the back/forward cache, which would slow every back navigation.\n const lockEffect = effect(() => {\n const dirty = hasChanges();\n\n untracked(() => (dirty ? attach() : detach()));\n });\n\n releaseFns.push(() => {\n lockEffect.destroy();\n detach();\n });\n }\n\n if (isBrowser && badge !== false) {\n const badgeId = Symbol('unsaved-changes-badge');\n const contents = badge === true ? true : badge;\n\n const badgeEffect = effect(() => {\n const dirty = hasChanges();\n\n untracked(() => {\n if (dirty) {\n BADGE_HOLDERS.set(badgeId, contents);\n } else {\n BADGE_HOLDERS.delete(badgeId);\n }\n\n syncAppBadge();\n });\n });\n\n releaseFns.push(() => {\n badgeEffect.destroy();\n BADGE_HOLDERS.delete(badgeId);\n syncAppBadge();\n });\n }\n\n const destroy = () => {\n while (releaseFns.length) {\n releaseFns.pop()?.();\n }\n };\n\n destroyRef.onDestroy(destroy);\n\n return { destroy };\n};\n","import {\n assertInInjectionContext,\n computed,\n DestroyRef,\n effect,\n inject,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { catchError, defaultIfEmpty, firstValueFrom, isObservable, map, Observable, of, take } from 'rxjs';\nimport { equal } from '../utils';\nimport { injectUnsavedChangesCoordinator, UnsavedChangesConfirmContext } from './unsaved-changes-coordinator';\nimport { normalizeUnsavedChangesSource, UnsavedChangesSource } from './unsaved-changes-source';\nimport { createUnsavedChangesTabLock, UnsavedChangesTabConfig, UnsavedChangesTabLockRef } from './unsaved-changes-tab';\n\n/**\n * Decides whether a value with unsaved changes may be discarded. Called with the current value when\n * (and only when) changes exist. Return a truthy value / resolved Promise / emitted Observable value\n * to allow the discard, falsy to keep the changes. Typically opens a confirm dialog.\n *\n * The second argument carries an {@link UnsavedChangesConfirmContext.signal} that aborts when the\n * session ends underneath the confirm (a logout) - close your dialog when it fires.\n */\nexport type UnsavedChangesConfirmFn<T> = (\n value: T,\n context: UnsavedChangesConfirmContext,\n) => boolean | Promise<boolean> | Observable<boolean> | unknown;\n\nexport type CreateUnsavedChangesTrackerConfig<T> = {\n /** The form / value to watch. See {@link UnsavedChangesSource}. */\n source: UnsavedChangesSource<T>;\n\n /**\n * The baseline the current value is compared against.\n * If omitted, the first non-null value the source produces is captured automatically (so\n * async-filled forms work without wiring). A function is evaluated once, eagerly.\n */\n defaultValue?: T | (() => T);\n\n /**\n * Required, per call site. Runs only when there are changes to discard.\n * @see UnsavedChangesConfirmFn\n */\n confirm: UnsavedChangesConfirmFn<T>;\n\n /**\n * Custom equality between the current value and the default. Deep-equal by default.\n *\n * Note: this is snapshot-vs-default comparison, deliberately **not** signal-forms' `dirty()`\n * (which means \"was edited\", so typing then deleting stays dirty - here it's clean again).\n */\n compareFn?: (current: T, defaultValue: T) => boolean;\n\n /**\n * How the tracker guards the browser tab itself. The `beforeunload` lock - the browser's confirm\n * prompt before the tab is closed or reloaded - is **on by default**, since a guard that only\n * covers in-app navigation still loses the edits to <kbd>Ctrl</kbd>+<kbd>W</kbd>.\n *\n * Pass an object to also opt into a tab title marker or an app badge, or `false` to leave the tab\n * alone entirely. See {@link UnsavedChangesTabConfig}.\n * @default { lock: true }\n */\n tab?: UnsavedChangesTabConfig | false;\n};\n\nexport type UnsavedChangesTrackerRef<T> = {\n /** Whether the current value differs from the default. */\n hasChanges: Signal<boolean>;\n\n /**\n * Whether this guard was switched off because the session ended underneath it (a logout, or an\n * explicit `injectUnsavedChangesCoordinator().abandonAll()`). An abandoned tracker still reports\n * `hasChanges`, but `runCheck()` passes without confirming and the tab lock is released - the edits\n * cannot be saved anymore, so blocking on them only strands the user.\n */\n isAbandoned: Signal<boolean>;\n\n /** The current baseline. `null` until a value (or explicit default) exists. */\n defaultValue: Signal<T | null>;\n\n /**\n * Resolves `true` if there are no changes or the user confirmed the discard, `false` otherwise.\n * Normalizes the `confirm` return (value / Promise / Observable) to a `Promise<boolean>`.\n *\n * Only one confirm runs app-wide: a check that starts while another tracker's confirm is on screen\n * adopts that decision instead of opening a second dialog.\n */\n runCheck: () => Promise<boolean>;\n\n /** Re-baseline to the current value - e.g. after a save that keeps the form open. */\n refreshDefaultValue: () => void;\n\n /** Write the default back onto the source (revert edits). No-op if there is no default yet. */\n restoreDefaultValue: () => void;\n\n /**\n * The tab guard (`beforeunload` lock, title marker, app badge) driven by `hasChanges` - `null` when\n * the tracker was created with `tab: false`. Call `tab.destroy()` to release it before the\n * injector is destroyed, e.g. right before a deliberate `location.reload()`.\n */\n tab: UnsavedChangesTabLockRef | null;\n};\n\nconst toBooleanPromise = (result: boolean | Promise<boolean> | Observable<boolean> | unknown): Promise<boolean> => {\n if (result instanceof Promise) {\n return result.then(Boolean);\n }\n\n if (isObservable(result)) {\n return firstValueFrom(\n result.pipe(\n take(1),\n map(Boolean),\n defaultIfEmpty(false),\n catchError(() => of(false)),\n ),\n );\n }\n\n return Promise.resolve(Boolean(result));\n};\n\n/**\n * The framework-agnostic core of the unsaved-changes family: snapshots a default value, tracks\n * whether the watched form/value differs from it, and runs an async confirm before a discard.\n * Call from an injection context (a field initializer or constructor).\n *\n * While there are changes the browser tab is locked too (`beforeunload`), so closing or reloading the\n * tab needs a confirmation - see the `tab` config for the title-marker / app-badge extras and for\n * opting out.\n *\n * Every tracker registers with the app-wide {@link injectUnsavedChangesCoordinator}, which keeps a\n * single confirm on screen at a time and switches all guards off when the session ends (logout).\n *\n * Overlay and router flavors (`createOverlayUnsavedChangesGuard`, `createUnsavedChangesGuard`) build\n * on this - use them when you want the guard wired to a close/navigation event automatically.\n */\nexport const createUnsavedChangesTracker = <T>(\n config: CreateUnsavedChangesTrackerConfig<T>,\n): UnsavedChangesTrackerRef<T> => {\n assertInInjectionContext(createUnsavedChangesTracker);\n\n const { compareFn, confirm } = config;\n const normalized = normalizeUnsavedChangesSource(config.source);\n\n const hasExplicitDefault = config.defaultValue !== undefined;\n const initialDefault = hasExplicitDefault\n ? typeof config.defaultValue === 'function'\n ? (config.defaultValue as () => T)()\n : (config.defaultValue as T)\n : untracked(normalized.value);\n\n const _defaultValue = signal<T | null>(initialDefault);\n\n // No explicit default → capture the first non-null value the source produces as the baseline.\n // This makes async-filled forms \"just work\" while keeping snapshot (not dirty()) semantics.\n if (!hasExplicitDefault) {\n let captured = initialDefault !== null && initialDefault !== undefined;\n\n effect(() => {\n const current = normalized.value();\n\n if (!captured && current !== null && current !== undefined) {\n captured = true;\n untracked(() => _defaultValue.set(current));\n }\n });\n }\n\n const hasChanges = computed(() => {\n const current = normalized.value();\n\n if (current === null || current === undefined) {\n return false;\n }\n\n const defaultValue = _defaultValue() as T;\n\n return !(compareFn ? compareFn(current, defaultValue) : equal(current, defaultValue));\n });\n\n const tab = config.tab === false ? null : createUnsavedChangesTabLock({ ...config.tab, hasChanges });\n\n const coordinator = injectUnsavedChangesCoordinator();\n const _isAbandoned = signal(false);\n\n const unregister = coordinator.register({\n abandon: () => {\n _isAbandoned.set(true);\n // The session is gone: stop holding the tab hostage over edits that can no longer be saved.\n tab?.destroy();\n },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n\n const runCheck = (): Promise<boolean> => {\n if (untracked(_isAbandoned) || !untracked(hasChanges)) {\n return Promise.resolve(true);\n }\n\n return coordinator.runCheck((context) => toBooleanPromise(confirm(untracked(normalized.value) as T, context)));\n };\n\n const refreshDefaultValue = () => _defaultValue.set(untracked(normalized.value));\n\n const restoreDefaultValue = () => {\n const defaultValue = untracked(_defaultValue);\n\n if (defaultValue !== null && defaultValue !== undefined) {\n normalized.setValue(defaultValue);\n }\n };\n\n return {\n hasChanges,\n isAbandoned: _isAbandoned.asReadonly(),\n defaultValue: _defaultValue.asReadonly(),\n runCheck,\n refreshDefaultValue,\n restoreDefaultValue,\n tab,\n };\n};\n","import { assertInInjectionContext } from '@angular/core';\nimport {\n createUnsavedChangesTracker,\n CreateUnsavedChangesTrackerConfig,\n UnsavedChangesTrackerRef,\n} from './unsaved-changes-tracker';\n\nexport type CreateUnsavedChangesGuardConfig<T> = CreateUnsavedChangesTrackerConfig<T>;\n\nexport type UnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {\n /**\n * A `CanDeactivateFn`-compatible check: resolves `true` when the route may be left (no changes, or\n * the user confirmed the discard), `false` to stay. Wire it into a route's `canDeactivate`.\n *\n * ```ts\n * export const editGuard: CanDeactivateFn<EditComponent> = (component) => component.guard.canDeactivate();\n * ```\n */\n canDeactivate: () => Promise<boolean>;\n};\n\n/**\n * The router / manual flavor of the unsaved-changes family: a {@link createUnsavedChangesTracker}\n * plus a `canDeactivate` bridge for Angular route guards. It touches no overlay APIs, so it also\n * serves as a standalone \"does this form have unsaved changes, and may I discard them?\" helper.\n * Call from an injection context.\n */\nexport const createUnsavedChangesGuard = <T>(config: CreateUnsavedChangesGuardConfig<T>): UnsavedChangesGuardRef<T> => {\n assertInInjectionContext(createUnsavedChangesGuard);\n\n const tracker = createUnsavedChangesTracker(config);\n\n return {\n ...tracker,\n canDeactivate: () => tracker.runCheck(),\n };\n};\n","// Generated from package.json by tools/scripts/generate-version.js - do not edit.\n\n/** The version of `@ethlete/core` this build was cut from. */\nexport const CORE_VERSION = '5.0.0-next.45';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DOCUMENT","i1.AnimatableDirective","i1.ProvideSurfaceDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-core.mjs","sources":["../../../../libs/core/src/lib/animations/animation-debug.ts","../../../../libs/core/src/lib/animations/animatable.directive.ts","../../../../libs/core/src/lib/utils/angular/component-id.ts","../../../../libs/core/src/lib/utils/angular/destroy.ts","../../../../libs/core/src/lib/utils/angular/di.ts","../../../../libs/core/src/lib/utils/angular/form.ts","../../../../libs/core/src/lib/utils/angular/host-listener.ts","../../../../libs/core/src/lib/utils/angular/query-list-changes.ts","../../../../libs/core/src/lib/utils/angular/set-input-signal.ts","../../../../libs/core/src/lib/utils/angular/validators.ts","../../../../libs/core/src/lib/utils/clipboard.ts","../../../../libs/core/src/lib/utils/comparison.ts","../../../../libs/core/src/lib/utils/cookie.ts","../../../../libs/core/src/lib/utils/key-press-manager.ts","../../../../libs/core/src/lib/providers/renderer.ts","../../../../libs/core/src/lib/signals/element.ts","../../../../libs/core/src/lib/signals/render-utils.ts","../../../../libs/core/src/lib/signals/element-dimensions.ts","../../../../libs/core/src/lib/signals/signal-data-utils.ts","../../../../libs/core/src/lib/signals/media-queries.ts","../../../../libs/core/src/lib/signals/animated-block-size.ts","../../../../libs/core/src/lib/signals/animated-number.ts","../../../../libs/core/src/lib/providers/breakpoint-observer.ts","../../../../libs/core/src/lib/signals/breakpoint-input.ts","../../../../libs/core/src/lib/signals/control-value.ts","../../../../libs/core/src/lib/signals/element-mutations.ts","../../../../libs/core/src/lib/signals/element-children.ts","../../../../libs/core/src/lib/signals/element-data-binding.ts","../../../../libs/core/src/lib/scrolling/scrollable.ts","../../../../libs/core/src/lib/scrolling/snap.ts","../../../../libs/core/src/lib/signals/element-intersection.ts","../../../../libs/core/src/lib/signals/element-scroll-direction.ts","../../../../libs/core/src/lib/signals/document-visibility.ts","../../../../libs/core/src/lib/signals/element-scroll-state.ts","../../../../libs/core/src/lib/signals/recipes/css-vars.ts","../../../../libs/core/src/lib/signals/recipes/cursor-drag-scroll.ts","../../../../libs/core/src/lib/signals/router.ts","../../../../libs/core/src/lib/signals/recipes/scroll-restoration.ts","../../../../libs/core/src/lib/utils/logger.ts","../../../../libs/core/src/lib/utils/markdown.ts","../../../../libs/core/src/lib/utils/math.ts","../../../../libs/core/src/lib/utils/object.ts","../../../../libs/core/src/lib/utils/object-url.ts","../../../../libs/core/src/lib/utils/runtime-error.ts","../../../../libs/core/src/lib/utils/session-memory.ts","../../../../libs/core/src/lib/utils/swipe.ts","../../../../libs/core/src/lib/utils/text-selection.ts","../../../../libs/core/src/lib/providers/angular-root-element.ts","../../../../libs/core/src/lib/providers/boundary-element.ts","../../../../libs/core/src/lib/providers/file-download.ts","../../../../libs/core/src/lib/providers/focus-visible-tracker.ts","../../../../libs/core/src/lib/providers/locale.ts","../../../../libs/core/src/lib/providers/labels.ts","../../../../libs/core/src/lib/providers/style-manager.ts","../../../../libs/core/src/lib/providers/user-consent.ts","../../../../libs/core/src/lib/animations/animation-utils.ts","../../../../libs/core/src/lib/animations/animated-lifecycle.directive.ts","../../../../libs/core/src/lib/animations/animated-if.directive.ts","../../../../libs/core/src/lib/animations/flip-animation.ts","../../../../libs/core/src/lib/directives/click-outside.directive.ts","../../../../libs/core/src/lib/directives/repeat.directive.ts","../../../../libs/core/src/lib/directives/restore-scroll.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer-end.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer-start.directive.ts","../../../../libs/core/src/lib/drag-handle/drag-gesture.ts","../../../../libs/core/src/lib/drag-handle/drag-handle.directive.ts","../../../../libs/core/src/lib/notifications/notification.types.ts","../../../../libs/core/src/lib/notifications/notifications.ts","../../../../libs/core/src/lib/overlay/overlay-focus.ts","../../../../libs/core/src/lib/overlay/overlay-position.ts","../../../../libs/core/src/lib/overlay/overlay-position-anchored.ts","../../../../libs/core/src/lib/overlay/overlay-position-anchored-extras.ts","../../../../libs/core/src/lib/overlay/overlay-runtime-ref.ts","../../../../libs/core/src/lib/overlay/overlay-runtime.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-game-result-type.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-state.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-participants.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-score.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-type.pipe.ts","../../../../libs/core/src/lib/pipes/html-to-markdown.pipe.ts","../../../../libs/core/src/lib/pipes/infer-mime-type.pipe.ts","../../../../libs/core/src/lib/pipes/initials.pipe.ts","../../../../libs/core/src/lib/pipes/markdown-to-html.pipe.ts","../../../../libs/core/src/lib/pipes/slugify.pipe.ts","../../../../libs/core/src/lib/pipes/to-array.pipe.ts","../../../../libs/core/src/lib/props/create-prop-handlers.ts","../../../../libs/core/src/lib/props/element-dictionary.ts","../../../../libs/core/src/lib/props/props-binding.ts","../../../../libs/core/src/lib/props/create-props.ts","../../../../libs/core/src/lib/props/create-setup.ts","../../../../libs/core/src/lib/props/dependency-stash.ts","../../../../libs/core/src/lib/props/props.directive.ts","../../../../libs/core/src/lib/props/template-input.ts","../../../../libs/core/src/lib/resize-handles/resize-handles.component.ts","../../../../libs/core/src/lib/seo/head-binding.ts","../../../../libs/core/src/lib/seo/favicon-binding.ts","../../../../libs/core/src/lib/seo/link-binding.ts","../../../../libs/core/src/lib/seo/title-binding.ts","../../../../libs/core/src/lib/seo/meta-binding.ts","../../../../libs/core/src/lib/seo/structured-data-binding.ts","../../../../libs/core/src/lib/seo/structured-data.component.ts","../../../../libs/core/src/lib/theming/color-interactive-styles.component.ts","../../../../libs/core/src/lib/theming/color-interactive-container.directive.ts","../../../../libs/core/src/lib/theming/color-interactive-exclude.directive.ts","../../../../libs/core/src/lib/theming/color-interactive-has-focus.directive.ts","../../../../libs/core/src/lib/theming/color-interactive.directive.ts","../../../../libs/core/src/lib/theming/surface-theme.util.ts","../../../../libs/core/src/lib/theming/provide-surface.directive.ts","../../../../libs/core/src/lib/theming/surface-context-tracker.ts","../../../../libs/core/src/lib/theming/auto-surface.directive.ts","../../../../libs/core/src/lib/theming/color-palette.util.ts","../../../../libs/core/src/lib/theming/color-theme.util.ts","../../../../libs/core/src/lib/theming/legacy-theming.ts","../../../../libs/core/src/lib/theming/provide-color.directive.ts","../../../../libs/core/src/lib/theming/surface-interactive-styles.component.ts","../../../../libs/core/src/lib/theming/surface-interactive.directive.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-coordinator.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-source.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-tab.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-tracker.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-guard.ts","../../../../libs/core/src/lib/version.ts","../../../../libs/core/src/ethlete-core.ts"],"sourcesContent":["export const ANIMATION_DEBUG_STORAGE_KEY = 'et-overlay-debug';\n\nlet cachedEnabled: boolean | null = null;\n\n/**\n * Debug logging for overlay and animation lifecycle internals.\n * Enable via `localStorage.setItem('et-overlay-debug', 'true')` and reload.\n */\nexport const isAnimationDebugEnabled = () => {\n if (cachedEnabled === null) {\n try {\n cachedEnabled = globalThis.localStorage?.getItem(ANIMATION_DEBUG_STORAGE_KEY) === 'true';\n } catch {\n cachedEnabled = false;\n }\n }\n\n return cachedEnabled;\n};\n\nexport const animationDebugLog = (scope: string, ...args: unknown[]) => {\n if (!isAnimationDebugEnabled()) return;\n\n const timestamp = (globalThis.performance?.now() ?? 0).toFixed(1);\n\n console.log(`\\x1B[36m[et-overlay-debug ${timestamp}ms | ${scope}]\\x1B[m`, ...args);\n};\n","import { Directive, ElementRef, inject, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n Subject,\n tap,\n} from 'rxjs';\nimport { animationDebugLog } from './animation-debug';\n\nexport const ANIMATABLE_TOKEN = new InjectionToken<AnimatableDirective>('ANIMATABLE_DIRECTIVE_TOKEN');\n\nexport type AnimationEndEvent = {\n cancelled: boolean;\n transitionId?: string;\n};\n\n@Directive({\n selector: '[etAnimatable]',\n exportAs: 'etAnimatable',\n providers: [\n {\n provide: ANIMATABLE_TOKEN,\n useExisting: AnimatableDirective,\n },\n ],\n})\nexport class AnimatableDirective {\n private parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private animationStartSubject$ = new Subject<void>();\n private animationEndSubject$ = new Subject<AnimationEndEvent>();\n\n private activeAnimationCount = 0;\n private hostActiveAnimationCount$ = new BehaviorSubject<number>(0);\n\n private pendingTransitionIds: string[] = [];\n private activeBatchTransitionId: string | undefined;\n\n animationStart$ = this.animationStartSubject$.asObservable().pipe(debounceTime(0));\n animationEnd$ = this.animationEndSubject$.asObservable().pipe(debounceTime(0));\n\n totalActiveAnimationCount$: Observable<number> = this.parent\n ? combineLatest([this.parent.totalActiveAnimationCount$, this.hostActiveAnimationCount$]).pipe(\n map(([parentCount, hostCount]) => Math.max(0, parentCount + hostCount)),\n )\n : this.hostActiveAnimationCount$.pipe(map((count) => Math.max(0, count)));\n\n isAnimating$ = this.totalActiveAnimationCount$.pipe(map((count) => count > 0));\n\n constructor() {\n let didEmitStart = false;\n const el = this.elementRef.nativeElement;\n\n merge(\n merge(fromEvent<AnimationEvent>(el, 'animationstart'), fromEvent<TransitionEvent>(el, 'transitionrun')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'start' as const),\n ),\n merge(fromEvent<AnimationEvent>(el, 'animationend'), fromEvent<TransitionEvent>(el, 'transitionend')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'end' as const),\n ),\n merge(fromEvent<AnimationEvent>(el, 'animationcancel'), fromEvent<TransitionEvent>(el, 'transitioncancel')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'cancel' as const),\n ),\n )\n .pipe(\n tap((eventType) => {\n switch (eventType) {\n case 'start': {\n const startingNewBatch = this.activeAnimationCount === 0;\n this.updateActiveAnimationCount(1);\n\n if (startingNewBatch) {\n this.activeBatchTransitionId = this.pendingTransitionIds.shift();\n }\n\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `start (count ${this.activeAnimationCount}, batch \"${this.activeBatchTransitionId}\", pending [${this.pendingTransitionIds.join(', ')}])`,\n );\n\n if (!didEmitStart) {\n didEmitStart = true;\n this.animationStartSubject$.next();\n }\n\n break;\n }\n case 'end':\n case 'cancel': {\n if (this.activeAnimationCount > 0) {\n this.updateActiveAnimationCount(-1);\n\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `${eventType} (count ${this.activeAnimationCount}, batch \"${this.activeBatchTransitionId}\")`,\n );\n\n if (this.activeAnimationCount === 0 && didEmitStart) {\n didEmitStart = false;\n this.animationEndSubject$.next({\n cancelled: eventType === 'cancel',\n transitionId: this.activeBatchTransitionId,\n });\n this.activeBatchTransitionId = undefined;\n }\n } else {\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `${eventType} ignored - count already 0 (start ${didEmitStart ? '' : 'not '}emitted)`,\n );\n console.warn(\n `${el.tagName} received animation end/cancel event but activeAnimationCount is already 0. Start was ${didEmitStart ? '' : 'not '}emitted.`,\n );\n }\n break;\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n setTransitionId(id: string) {\n this.pendingTransitionIds.push(id);\n }\n\n private updateActiveAnimationCount(delta: number) {\n const newVal = this.activeAnimationCount + delta;\n const clampedVal = Math.max(0, newVal);\n\n this.activeAnimationCount = clampedVal;\n this.hostActiveAnimationCount$.next(clampedVal);\n }\n}\n","const componentIds = /* @__PURE__ */ new Map<string, number>();\n\nexport const createComponentId = (prefix: string) => {\n const id = componentIds.get(prefix) ?? 0;\n componentIds.set(prefix, id + 1);\n\n return `${prefix}-${id}`;\n};\n\nlet randomIdFallbackCounter = 0;\n\n/**\n * A unique id string. Uses `crypto.randomUUID()` when available, but falls back gracefully when it is\n * not - crucially in **insecure contexts** (a plain-HTTP page served from a LAN IP, not `localhost`),\n * where `crypto.randomUUID` is `undefined`. Calling it there throws, so anything using it during e.g.\n * an overlay/menu open would break on such hosts. Prefer this over `crypto.randomUUID()` directly.\n */\nexport const randomId = () => {\n const cryptoObj = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;\n\n if (typeof cryptoObj?.randomUUID === 'function') {\n return cryptoObj.randomUUID();\n }\n\n // `getRandomValues` is available even in insecure contexts - build an RFC-4122-ish v4 id from it.\n if (typeof cryptoObj?.getRandomValues === 'function') {\n const bytes = Array.from(cryptoObj.getRandomValues(new Uint8Array(16)));\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n const hex = bytes.map((byte) => (byte ?? 0).toString(16).padStart(2, '0'));\n\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n }\n\n // last resort: no Web Crypto at all - a session-unique (not cryptographic) id is enough for DOM ids\n return `et-id-${(randomIdFallbackCounter++).toString(36)}-${Date.now().toString(36)}`;\n};\n","import { DestroyRef, assertInInjectionContext, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport const createDestroy = () => {\n assertInInjectionContext(createDestroy);\n\n const destroy$ = new Subject<boolean>();\n\n const ref = inject(DestroyRef);\n\n ref.onDestroy(() => {\n destroy$.next(true);\n destroy$.complete();\n });\n\n return destroy$.asObservable();\n};\n","import { ElementRef, inject, InjectionToken, InjectOptions, Provider, TemplateRef } from '@angular/core';\nimport { createComponentId } from './component-id';\n\nexport const injectHostElement = <T = HTMLElement>() => inject<ElementRef<T>>(ElementRef).nativeElement;\n\nexport const injectTemplateRef = <C = unknown>() => inject<TemplateRef<C>>(TemplateRef);\n\nexport type ProviderDefinitionOptions = {\n /**\n * Optional name for the provider, useful for debugging.\n * If not provided, the name will be a generated string.\n */\n name?: string;\n\n /**\n * Optional existing InjectionToken to also provide the created provider under.\n */\n extraInjectionToken?: InjectionToken<unknown>;\n};\n\n/** The `inject`-shaped half of a provider definition: optional when asked, non-nullable otherwise. */\nexport type InjectFn<T> = {\n (): T;\n (options: InjectOptions & { optional?: false }): T;\n (options: InjectOptions): T | null;\n};\n\n/**\n * What {@link defineProvider} & co. return: the token plus the two functions a domain re-exports as its\n * `provideX` / `injectX` pair. Read the halves out with {@link toProvideFn}, {@link toInjectFn} and\n * {@link toToken} - never by destructuring, see {@link defineProvider}.\n */\nexport type ProviderDefinition<T> = {\n readonly provide: () => Provider[];\n readonly inject: InjectFn<T>;\n readonly token: InjectionToken<T>;\n};\n\n/** {@link ProviderDefinition} for a value provider, whose `provide` takes a partial override. */\nexport type StaticProviderDefinition<T> = {\n readonly provide: (valueOverride?: Partial<T>) => Provider[];\n readonly inject: InjectFn<T>;\n readonly token: InjectionToken<T>;\n};\n\nconst createInjectFunction = <T>(token: InjectionToken<T>): InjectFn<T> => {\n function injectFn(): T;\n function injectFn(options: InjectOptions & { optional?: false }): T;\n function injectFn(options: InjectOptions): T | null;\n function injectFn(options?: InjectOptions): T | null {\n return options ? inject(token, options) : inject(token);\n }\n return injectFn;\n};\n\nconst createProviders = <T>(\n token: InjectionToken<T>,\n factory: () => T,\n extraToken?: InjectionToken<unknown>,\n): Provider[] => [\n { provide: token, useFactory: factory },\n ...(extraToken ? [{ provide: extraToken, useExisting: token }] : []),\n];\n\n/**\n * Defines a provider that a subtree opts into - `provideX()` in some component's `providers`, then\n * `injectX()` below it. Nothing is created until the subtree provides it.\n *\n * Assign the result to one `const`, name the halves with {@link toProvideFn} / {@link toInjectFn} /\n * {@link toToken}, and put a `__PURE__` annotation comment on each of those declarations. Never destructure\n * the definition: that declaration cannot be tree-shaken, so it ships the factory's whole closure to\n * every consumer. Enforced by `ethlete/no-impure-top-level-provider`.\n */\nexport const defineProvider = <T>(factory: () => T, options?: ProviderDefinitionOptions): ProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('provider'));\n\n return {\n provide: () => createProviders(token, factory, options?.extraInjectionToken),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/**\n * Like {@link defineProvider}, but the factory also runs in the root injector, so `injectX()` works\n * without anyone calling `provideX()`. `provideX()` still exists, to give a subtree its own instance.\n */\nexport const defineRootProvider = <T>(factory: () => T, options?: ProviderDefinitionOptions): ProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('provider'), {\n providedIn: 'root',\n factory,\n });\n\n return {\n provide: () => createProviders(token, factory, options?.extraInjectionToken),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/**\n * Like {@link defineProvider} for a plain value rather than a factory: `provideX(override)` merges the\n * partial override over `defaultValue`, which is how every config object in the library is shaped.\n */\nexport const defineStaticProvider = <T>(\n defaultValue?: T,\n options?: ProviderDefinitionOptions,\n): StaticProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('static-provider'));\n\n return {\n provide: (valueOverride?: Partial<T>) => createValueProviders(token, defaultValue, valueOverride, options),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/**\n * {@link defineStaticProvider} whose default is also available in the root injector, so `injectX()`\n * resolves to `defaultValue` in an app that never provides it.\n */\nexport const defineStaticRootProvider = <T>(\n defaultValue?: T,\n options?: ProviderDefinitionOptions,\n): StaticProviderDefinition<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('static-provider'), {\n providedIn: 'root',\n factory: () => defaultValue as T,\n });\n\n return {\n provide: (valueOverride?: Partial<T>) => createValueProviders(token, defaultValue, valueOverride, options),\n inject: createInjectFunction(token),\n token,\n };\n};\n\n/** The `provideX` half of a provider definition. A call, so a `__PURE__` annotation makes it droppable. */\nexport const toProvideFn = <TDefinition extends { readonly provide: unknown }>(\n definition: TDefinition,\n): TDefinition['provide'] => definition.provide;\n\n/** The `injectX` half of a provider definition. */\nexport const toInjectFn = <TDefinition extends { readonly inject: unknown }>(\n definition: TDefinition,\n): TDefinition['inject'] => definition.inject;\n\n/** The token behind a provider definition. */\nexport const toToken = <TDefinition extends { readonly token: unknown }>(\n definition: TDefinition,\n): TDefinition['token'] => definition.token;\n\nconst createValueProviders = <T>(\n token: InjectionToken<T>,\n defaultValue: T | undefined,\n valueOverride: Partial<T> | undefined,\n options: ProviderDefinitionOptions | undefined,\n): Provider[] => [\n { provide: token, useValue: maybeMergeValues(defaultValue, valueOverride) },\n ...(options?.extraInjectionToken ? [{ provide: options.extraInjectionToken, useExisting: token }] : []),\n];\n\nconst maybeMergeValues = <T>(defaultValue: T | undefined, valueOverride?: Partial<T>) => {\n if (valueOverride && defaultValue && typeof defaultValue === 'object') {\n return { ...defaultValue, ...valueOverride };\n }\n\n return valueOverride ?? defaultValue;\n};\n","import { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nexport const cloneFormGroup = <T extends FormGroup<any>>(formGroup: T) => {\n const cloneLevel = (group: FormGroup, cloneGroup: FormGroup) => {\n Object.entries(group.controls).forEach(([key, control]) => {\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n\n cloneGroup.addControl(key, cloneControl);\n\n cloneLevel(control, cloneControl);\n } else if (control instanceof FormArray) {\n const cloneArrayControl = new FormArray<any>([], control.validator, control.asyncValidator);\n\n control.controls.forEach((control) => {\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n const innerClone = cloneLevel(control, cloneControl);\n cloneArrayControl.push(innerClone);\n } else {\n const cloneControlItem = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n cloneArrayControl.push(cloneControlItem);\n }\n });\n\n cloneGroup.addControl(key, cloneArrayControl);\n } else {\n const cloneControl = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n\n cloneGroup.addControl(key, cloneControl);\n }\n });\n\n return cloneGroup;\n };\n\n const clonedForm = cloneLevel(formGroup, new FormGroup({}));\n clonedForm.setValue(formGroup.value);\n clonedForm.updateValueAndValidity();\n\n return clonedForm as T;\n};\n\nexport const getFormGroupValue = <T extends FormGroup>(formGroup: T) => {\n const value: Record<string, unknown> = {};\n\n Object.entries(formGroup.controls).forEach(([key, control]) => {\n if (control instanceof FormGroup) {\n value[key] = getFormGroupValue(control);\n } else if (control instanceof FormArray) {\n value[key] = control.controls.map((control) => {\n if (control instanceof FormGroup) {\n return getFormGroupValue(control);\n } else {\n return control.value ?? null;\n }\n });\n } else {\n value[key] = control.value ?? null;\n }\n });\n\n return value;\n};\n","import { ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\n\nexport const createRxHostListener = <K extends keyof HTMLElementEventMap>(\n eventName: K,\n options?: EventListenerOptions,\n) => {\n const element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement as EventTarget;\n\n const observable = options\n ? fromEvent<HTMLElementEventMap[K]>(element, eventName, options)\n : fromEvent<HTMLElementEventMap[K]>(element, eventName);\n\n return observable.pipe(takeUntilDestroyed());\n};\n\nexport const applyHostListener = <K extends keyof HTMLElementEventMap>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: EventListenerOptions,\n) => createRxHostListener(eventName, options).subscribe(handler);\n\nexport const applyHostListeners = (\n listeners: Partial<{\n [K in keyof HTMLElementEventMap]: (event: HTMLElementEventMap[K]) => void;\n }>,\n options?: EventListenerOptions,\n) => {\n for (const eventName in listeners) {\n const handler = listeners[eventName as keyof HTMLElementEventMap];\n\n if (handler) {\n applyHostListener(eventName as keyof HTMLElementEventMap, handler as any, options);\n }\n }\n};\n","import { QueryList } from '@angular/core';\nimport { Observable, of, startWith, switchMap } from 'rxjs';\n\nexport class TypedQueryList<T> extends QueryList<T> {\n override get changes(): Observable<TypedQueryList<T>> {\n return super.changes as Observable<TypedQueryList<T>>;\n }\n}\n\nexport function switchQueryListChanges() {\n return function <T extends TypedQueryList<unknown> | null | undefined>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.changes.pipe(startWith(value)) ?? of(null))) as Observable<T>;\n };\n}\n","import { InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';\n\n/**\n * Sets the value of an input signal.\n * See issue: https://github.com/angular/angular/issues/54782\n */\nexport const setInputSignal = <T>(input: InputSignal<T> | InputSignalWithTransform<T, unknown>, value: T) => {\n const node = input[SIGNAL];\n\n signalSetFn(node, value);\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const AT_LEAST_ONE_REQUIRED = 'atLeastOneRequired';\n\nexport type ValidateAtLeastOneRequiredConfig = {\n /**\n * Keys of form controls to validate in the supplied form group\n */\n keys: string[];\n\n /**\n * If true, the value `false` will result in a validation error\n * @default false\n */\n checkFalse?: boolean;\n};\n\nexport const ValidateAtLeastOneRequired = (config: ValidateAtLeastOneRequiredConfig): ValidatorFn => {\n return (formGroup: AbstractControl): ValidationErrors | null => {\n const { keys, checkFalse } = config;\n\n if (!formGroup) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n\n const controlValues = keys.map((key) => formGroup.get(key)?.value);\n\n const areAllFalsy = controlValues.every(\n (value) =>\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (checkFalse && value === false),\n );\n\n if (areAllFalsy) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n\n return null;\n };\n};\n\nexport const IS_ARRAY_NOT_EMPTY = 'isArrayNotEmpty';\n\nexport const IsArrayNotEmpty = (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) {\n return null;\n }\n\n return value.length > 0 ? null : { [IS_ARRAY_NOT_EMPTY]: true };\n};\n\nexport const IS_EMAIL = 'isEmail';\n\nexport const IsEmail = (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/;\n return regex.test(value) ? null : { [IS_EMAIL]: true };\n};\n\nexport const MUST_MATCH = 'mustMatch';\n\nexport const MustMatch = (controlName: string, matchingControlName: string) => {\n return (formGroup: AbstractControl) => {\n const control = formGroup.get(controlName);\n const matchingControl = formGroup.get(matchingControlName);\n\n if (matchingControl?.errors && !matchingControl.errors[MUST_MATCH]) {\n return null;\n }\n\n if (control?.value !== matchingControl?.value) {\n matchingControl?.setErrors({ [MUST_MATCH]: true });\n\n return { [MUST_MATCH]: true };\n } else {\n matchingControl?.setErrors(null);\n return null;\n }\n };\n};\n\nexport const Validators = {\n MustMatch,\n IsEmail,\n IsArrayNotEmpty,\n ValidateAtLeastOneRequired,\n} as const;\n","import { Observable, catchError, defer, from, map, of } from 'rxjs';\n\nexport const copyToClipboard = (text: string): Observable<boolean> =>\n defer(() => {\n if (typeof navigator === 'undefined' || typeof document === 'undefined') {\n return of(false);\n }\n\n if (navigator.clipboard) {\n return from(navigator.clipboard.writeText(text)).pipe(\n map(() => true),\n // The async Clipboard API can be blocked (missing permission, insecure context) - try the legacy path.\n catchError(() => of(copyToClipboardViaExecCommand(text))),\n );\n }\n\n return of(copyToClipboardViaExecCommand(text));\n });\n\nexport const readFromClipboard = (): Observable<string | null> =>\n defer(() => {\n if (typeof navigator === 'undefined' || !navigator.clipboard) {\n return of(null);\n }\n\n return from(navigator.clipboard.readText()).pipe(catchError(() => of(null)));\n });\n\nconst copyToClipboardViaExecCommand = (text: string) => {\n const previouslyFocusedElement = document.activeElement;\n\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.setAttribute('aria-hidden', 'true');\n textarea.style.position = 'fixed';\n textarea.style.top = '-9999px';\n textarea.style.opacity = '0';\n\n document.body.appendChild(textarea);\n textarea.select();\n textarea.setSelectionRange(0, text.length);\n\n let didCopy = false;\n\n try {\n didCopy = document.execCommand('copy');\n } catch {\n // execCommand throws in some environments instead of returning false.\n }\n\n textarea.remove();\n\n if (previouslyFocusedElement instanceof HTMLElement) {\n previouslyFocusedElement.focus();\n }\n\n return didCopy;\n};\n","/* eslint-disable no-var, @typescript-eslint/no-non-null-assertion -- kept as upstream */\n\n/**\n * Stolen from klona to avoid adding a dependency\n * https://github.com/lukeed/klona\n *\n * MIT License\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nconst set = (obj: any, key: any, val: any) => {\n if (typeof val.value === 'object') val.value = clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n};\n\nexport const clone = <T>(original: T): T => {\n if (typeof original !== 'object') return original;\n\n var _og = original as any;\n\n var i = 0;\n var k;\n var list;\n var tmp: any;\n var str = Object.prototype.toString.call(_og);\n\n if (str === '[object Object]') {\n tmp = Object.create(_og.__proto__ || null);\n } else if (str === '[object Array]') {\n tmp = Array(_og.length);\n } else if (str === '[object Set]') {\n tmp = new Set();\n _og.forEach(function (val: any) {\n tmp.add(clone(val));\n });\n } else if (str === '[object Map]') {\n tmp = new Map();\n _og.forEach(function (val: any, key: any) {\n tmp.set(clone(key), clone(val));\n });\n } else if (str === '[object Date]') {\n tmp = new Date(+_og);\n } else if (str === '[object RegExp]') {\n tmp = new RegExp(_og.source, _og.flags);\n } else if (str === '[object DataView]') {\n tmp = new _og.constructor(clone(_og.buffer));\n } else if (str === '[object ArrayBuffer]') {\n tmp = _og.slice(0);\n } else if (str.slice(-6) === 'Array]') {\n tmp = new _og.constructor(_og);\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]!));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(_og); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i]!)) && tmp[k] === _og[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(_og, k));\n }\n }\n\n return tmp || _og;\n};\n\n/**\n * Stolen from dequal to avoid adding a dependency\n * https://github.com/lukeed/dequal\n *\n * The MIT License (MIT)\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst has = Object.prototype.hasOwnProperty;\n\nfunction find(iter: any, tar: any, key?: any) {\n for (key of iter.keys()) {\n if (equal(key, tar)) return key;\n }\n}\n\nexport const equal = (foo: any, bar: any) => {\n var ctor: any;\n var len: any;\n var tmp: any;\n if (foo === bar) return true;\n\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date) return foo.getTime() === bar.getTime();\n if (ctor === RegExp) return foo.toString() === bar.toString();\n\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && equal(foo[len], bar[len]));\n }\n\n return len === -1;\n }\n\n if (ctor === Set) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len;\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!bar.has(tmp)) return false;\n }\n\n return true;\n }\n\n if (ctor === Map) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len[0];\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!equal(len[1], bar.get(tmp))) {\n return false;\n }\n }\n\n return true;\n }\n\n if (ctor === ArrayBuffer) {\n foo = new Uint8Array(foo);\n bar = new Uint8Array(bar);\n } else if (ctor === DataView) {\n if ((len = foo.byteLength) === bar.byteLength) {\n while (len-- && foo.getInt8(len) === bar.getInt8(len));\n }\n\n return len === -1;\n }\n\n if (ArrayBuffer.isView(foo)) {\n if ((len = foo.byteLength) === bar.byteLength) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n while (len-- && foo[len] === bar[len]);\n }\n\n return len === -1;\n }\n\n if (!ctor || typeof foo === 'object') {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n if (!(ctor in bar) || !equal(foo[ctor], bar[ctor])) return false;\n }\n\n return Object.keys(bar).length === len;\n }\n }\n\n return foo !== foo && bar !== bar;\n};\n","export const hasCookie = (name: string) => {\n if (typeof document === 'undefined') {\n return false;\n }\n\n return document.cookie.split(';').some((c) => {\n return c.trim().startsWith(name + '=');\n });\n};\n\nexport const getCookie = (name: string) => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n // From https://stackoverflow.com/questions/10730362/get-cookie-by-name\n return ('; ' + document.cookie).split(`; ${name}=`).pop()?.split(';')[0];\n};\n\nexport const setCookie = (\n name: string,\n data: string,\n expiresInDays?: number | null,\n domain = getDomain(),\n path = '/',\n sameSite: 'strict' | 'none' | 'lax' = 'lax',\n) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const sameSiteUpper = sameSite.toUpperCase();\n\n const expires = expiresInDays ?? 30;\n\n let cookieString = `${name}=${data}; path=${path}`;\n\n if (expiresInDays !== null) {\n const date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n cookieString += `; expires=${date.toUTCString()}`;\n }\n\n cookieString += `; domain=${domain}; SameSite=${sameSiteUpper};`;\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, path = '/', domain = getDomain()) => {\n if (hasCookie(name)) {\n document.cookie =\n name +\n '=' +\n (path ? ';path=' + path : '') +\n (domain ? ';domain=' + domain : '') +\n ';expires=Thu, 01 Jan 1970 00:00:01 GMT';\n }\n};\n\nexport const getDomain = () => {\n if (typeof navigator === 'undefined') {\n return null;\n }\n\n const hostname = window.location.hostname;\n\n if (hostname.includes('localhost')) {\n return 'localhost';\n }\n\n const hostIsIP = hostname.match(/^(\\d{1,3}\\.){3}\\d{1,3}$/);\n\n if (hostIsIP) {\n return hostname;\n }\n\n const splitHost = hostname.split('.');\n\n if (splitHost.length > 2) {\n return `${splitHost[splitHost.length - 2]}.${splitHost[splitHost.length - 1]}`;\n }\n\n return hostname;\n};\n","import { BehaviorSubject, Subject, takeUntil, timer } from 'rxjs';\n\nexport class KeyPressManager {\n private readonly _isKeyPressed$ = new BehaviorSubject(false);\n private readonly _keyPressCount$ = new BehaviorSubject(0);\n\n private readonly _stopTimeout$ = new Subject<void>();\n\n constructor(public readonly key: number) {}\n\n isPressed(event: KeyboardEvent) {\n const key = event.keyCode;\n\n if (key === this.key) {\n this._isKeyPressed$.next(this._keyPressCount$.value > 1);\n this._keyPressCount$.next(this._keyPressCount$.value + 1);\n\n this._stopTimeout$.next();\n\n timer(100)\n .pipe(takeUntil(this._stopTimeout$))\n .subscribe(() => this.clear());\n } else {\n this.clear();\n }\n\n return this._isKeyPressed$.value;\n }\n\n clear() {\n this._isKeyPressed$.next(false);\n this._keyPressCount$.next(0);\n this._stopTimeout$.next();\n }\n}\n","import { inject, RendererFactory2, RendererStyleFlags2 } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\n\nconst RENDERER_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const rendererFactory = inject(RendererFactory2);\n const renderer = rendererFactory.createRenderer(null, null);\n\n const addClass = (element: HTMLElement, ...classes: string[]) => {\n classes.forEach((cls) => renderer.addClass(element, cls));\n };\n\n const removeClass = (element: HTMLElement, ...classes: string[]) => {\n classes.forEach((cls) => renderer.removeClass(element, cls));\n };\n\n const toggleClass = (element: HTMLElement, className: string, force?: boolean) => {\n const shouldAdd = force ?? !element.classList.contains(className);\n if (shouldAdd) {\n renderer.addClass(element, className);\n } else {\n renderer.removeClass(element, className);\n }\n return shouldAdd;\n };\n\n const setStyle = (\n element: HTMLElement,\n style: Partial<Record<keyof CSSStyleDeclaration, string | null>>,\n flags?: RendererStyleFlags2,\n ) => {\n Object.entries(style).forEach(([key, value]) => {\n if (!Number.isNaN(Number(key))) return;\n if (value !== null && value !== undefined) {\n renderer.setStyle(element, key, value, flags);\n } else {\n renderer.removeStyle(element, key, flags);\n }\n });\n };\n\n const removeStyle = (\n element: HTMLElement,\n style: keyof CSSStyleDeclaration | string,\n flags?: RendererStyleFlags2,\n ) => {\n if (!Number.isNaN(Number(style))) return;\n renderer.removeStyle(element, style as string, flags);\n };\n\n const removeStyles = (element: HTMLElement, ...styles: (keyof CSSStyleDeclaration | string)[]) => {\n styles.forEach((style) => removeStyle(element, style));\n };\n\n const setCssProperty = (element: HTMLElement, name: string, value: string | null) => {\n if (value !== null && value !== undefined) {\n renderer.setStyle(element, name, value, RendererStyleFlags2.DashCase);\n } else {\n renderer.removeStyle(element, name, RendererStyleFlags2.DashCase);\n }\n };\n\n const setCssProperties = (element: HTMLElement, properties: Record<string, string | null>) => {\n Object.entries(properties).forEach(([name, value]) => {\n setCssProperty(element, name, value);\n });\n };\n\n const setAttribute = (element: HTMLElement, name: string, value: string | null, namespace?: string | null) => {\n if (value !== null && value !== undefined) {\n renderer.setAttribute(element, name, value, namespace);\n } else {\n renderer.removeAttribute(element, name, namespace);\n }\n };\n\n const removeAttribute = (element: HTMLElement, ...names: string[]) => {\n names.forEach((name) => renderer.removeAttribute(element, name));\n };\n\n const setProperty = (element: HTMLElement, name: string, value: unknown) => {\n renderer.setProperty(element, name, value);\n };\n\n const setProperties = (element: HTMLElement, properties: Record<string, unknown>) => {\n Object.entries(properties).forEach(([name, value]) => {\n renderer.setProperty(element, name, value);\n });\n };\n\n const createElement = <K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n namespace?: string | null,\n ): HTMLElementTagNameMap[K] => {\n return renderer.createElement(tagName, namespace);\n };\n\n const createText = (value: string): Text => {\n return renderer.createText(value);\n };\n\n const createComment = (value: string): Comment => {\n return renderer.createComment(value);\n };\n\n const appendChild = (parent: HTMLElement, newChild: Node) => {\n renderer.appendChild(parent, newChild);\n };\n\n const insertBefore = (parent: Node, newChild: Node, refChild: Node | null) => {\n renderer.insertBefore(parent, newChild, refChild);\n };\n\n const removeChild = (parent: Node, oldChild: Node, isHostElement?: boolean) => {\n renderer.removeChild(parent, oldChild, isHostElement);\n };\n\n const selectRootElement = (selectorOrNode: string | HTMLElement, preserveContent?: boolean): HTMLElement => {\n return renderer.selectRootElement(selectorOrNode, preserveContent);\n };\n\n const parentNode = (node: Node): Node | null => {\n return renderer.parentNode(node);\n };\n\n const nextSibling = (node: Node): Node | null => {\n return renderer.nextSibling(node);\n };\n\n const setValue = (node: Node, value: string) => {\n renderer.setValue(node, value);\n };\n\n const listen = (\n target: HTMLElement | Window | Document | 'window' | 'document' | 'body',\n eventName: string,\n callback: (event: Event) => boolean | void,\n ): (() => void) => {\n return renderer.listen(target, eventName, callback);\n };\n\n const destroyNode = (node: Node) => {\n if (renderer.destroyNode) {\n renderer.destroyNode(node);\n }\n };\n\n const replaceChild = (parent: Node, newChild: Node, oldChild: Node) => {\n renderer.insertBefore(parent, newChild, oldChild);\n renderer.removeChild(parent, oldChild);\n };\n\n const empty = (element: HTMLElement) => {\n while (element.firstChild) {\n renderer.removeChild(element, element.firstChild);\n }\n };\n\n const setTextContent = (element: HTMLElement, text: string) => {\n renderer.setProperty(element, 'textContent', text);\n };\n\n const setInnerHTML = (element: HTMLElement, html: string) => {\n renderer.setProperty(element, 'innerHTML', html);\n };\n\n const setAttributes = (\n element: HTMLElement,\n attributes: Record<string, string | null>,\n namespace?: string | null,\n ) => {\n Object.entries(attributes).forEach(([name, value]) => {\n setAttribute(element, name, value, namespace);\n });\n };\n\n const setDataAttributes = (element: HTMLElement, data: Record<string, string | null>) => {\n Object.entries(data).forEach(([key, value]) => {\n setAttribute(element, `data-${key}`, value);\n });\n };\n\n const moveBefore = (config: { newParent: HTMLElement; child: HTMLElement; before?: Node | null }) => {\n type NodeWithMoveBefore = HTMLElement & { moveBefore: (child: Node, before: Node | null) => void };\n\n const { newParent, child, before = null } = config;\n if ('moveBefore' in newParent) {\n try {\n (newParent as NodeWithMoveBefore).moveBefore(child, before);\n } catch {\n newParent.insertBefore(child, before);\n }\n } else {\n (newParent as HTMLElement).insertBefore(child, before);\n }\n };\n\n return {\n addClass,\n removeClass,\n toggleClass,\n setStyle,\n removeStyle,\n removeStyles,\n setAttribute,\n removeAttribute,\n setProperty,\n setProperties,\n createElement,\n createText,\n createComment,\n appendChild,\n insertBefore,\n removeChild,\n selectRootElement,\n parentNode,\n nextSibling,\n setValue,\n listen,\n destroyNode,\n\n replaceChild,\n empty,\n setTextContent,\n setInnerHTML,\n setAttributes,\n setDataAttributes,\n setCssProperty,\n setCssProperties,\n\n moveBefore,\n\n renderer,\n };\n },\n { name: 'Angular Renderer' },\n);\n\nexport const provideRenderer = /* @__PURE__ */ toProvideFn(RENDERER_DEF);\nexport const injectRenderer = /* @__PURE__ */ toInjectFn(RENDERER_DEF);\n\nexport type AngularRenderer = NonNullable<ReturnType<typeof injectRenderer>>;\n","import {\n DOCUMENT,\n ElementRef,\n QueryList,\n Signal,\n computed,\n inject,\n isDevMode,\n isSignal,\n linkedSignal,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Observable, map, pairwise, startWith } from 'rxjs';\n\nconst coerceElement = <T>(el: ElementRef<T> | T): T => (el instanceof ElementRef ? el.nativeElement : el);\n\nexport type SignalElementBindingComplexType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | Array<ElementRef<HTMLElement> | HTMLElement>\n | null\n | undefined;\n\nexport type SignalElementBindingType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | Observable<SignalElementBindingComplexType>\n | Signal<SignalElementBindingComplexType>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | ElementSignal;\n\nexport type ElementSignal = Signal<{\n currentElements: HTMLElement[];\n previousElements: HTMLElement[];\n}>;\n\nexport type ElementSignalValue = ReturnType<ElementSignal>;\n\nexport const isElementSignal = (el: unknown): el is ElementSignal => {\n if (!isSignal(el)) return false;\n\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElements' in val && 'previousElements' in val;\n};\n\nexport const createDocumentElementSignal = (): ElementSignal => {\n const documentElement = inject(DOCUMENT).documentElement;\n return signal({\n currentElements: [documentElement],\n previousElements: [],\n });\n};\n\nexport const createEmptyElementSignal = (): ElementSignal =>\n signal({\n currentElements: [],\n previousElements: [],\n });\n\nconst areElementArraysEqual = (a: HTMLElement[], b: HTMLElement[]) => {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nconst areElementSignalValuesEqual = (a: ElementSignalValue, b: ElementSignalValue) =>\n areElementArraysEqual(a.currentElements, b.currentElements) &&\n areElementArraysEqual(a.previousElements, b.previousElements);\n\nexport const buildElementSignal = (el: SignalElementBindingType | null | undefined): ElementSignal => {\n if (el === null || el === undefined) return createEmptyElementSignal();\n if (isElementSignal(el)) return el;\n\n if (el instanceof HTMLElement || el instanceof ElementRef) {\n const element = coerceElement(el);\n if (!element) return createEmptyElementSignal();\n\n return signal({\n currentElements: [element],\n previousElements: [],\n });\n }\n\n if (isSignal(el)) return createElementSignalFromSignal(el);\n\n return createElementSignalFromObservable(createElementsObservable(el));\n};\n\nconst createElementSignalFromSignal = (input: Signal<SignalElementBindingComplexType>): ElementSignal => {\n return linkedSignal({\n source: input,\n computation: (source, previous) => {\n const currentElements = coerceValueToElementArray(source);\n const previousElements = previous?.value.currentElements ?? [];\n\n return {\n currentElements,\n previousElements,\n };\n },\n equal: areElementSignalValuesEqual,\n });\n};\n\nconst createElementSignalFromObservable = (elements$: Observable<HTMLElement[]>): ElementSignal => {\n return toSignal(\n elements$.pipe(\n startWith([]),\n pairwise(),\n map(([previousElements, currentElements]) => {\n if (isDevMode()) {\n const invalidElement = currentElements.find((el) => el && !(el instanceof HTMLElement));\n if (invalidElement) {\n console.error(\n 'Received an element that is not an HTMLElement. You are probably using viewChild or contentChild on a component without the read option set to ElementRef.',\n invalidElement,\n );\n }\n }\n\n return {\n previousElements,\n currentElements,\n };\n }),\n ),\n {\n initialValue: {\n previousElements: [],\n currentElements: [],\n },\n equal: areElementSignalValuesEqual,\n },\n ) as ElementSignal;\n};\n\nconst coerceValueToElementArray = (value: SignalElementBindingComplexType): HTMLElement[] => {\n if (value === null || value === undefined) return [];\n\n const items = value instanceof QueryList ? value.toArray() : Array.isArray(value) ? value : [value];\n\n const result: HTMLElement[] = [];\n for (const item of items) {\n const el = coerceElement(item);\n if (el) result.push(el);\n }\n return result;\n};\n\nconst createElementsObservable = (\n input: Observable<SignalElementBindingComplexType> | QueryList<ElementRef<HTMLElement> | HTMLElement>,\n): Observable<HTMLElement[]> => {\n if (input instanceof QueryList) {\n return input.changes.pipe(\n startWith(input),\n map(() => coerceValueToElementArray(input)),\n );\n }\n\n return input.pipe(map(coerceValueToElementArray));\n};\n\nexport const firstElementSignal = (el: ElementSignal) =>\n computed(\n () => {\n const { currentElements, previousElements } = el();\n\n if (isDevMode() && currentElements.length > 1) {\n console.warn(\n 'More than one element is bound to the signal. Only the first element will be used.',\n currentElements,\n );\n }\n\n return {\n currentElement: currentElements[0] ?? null,\n previousElement: previousElements[0] ?? null,\n };\n },\n {\n equal: (a, b) => a.currentElement === b.currentElement && a.previousElement === b.previousElement,\n },\n );\n","import { afterNextRender, effect, signal } from '@angular/core';\nimport { nextFrame } from '../animations';\n\nexport const signalIsRendered = () => {\n const isRendered = signal(false);\n\n afterNextRender(() => isRendered.set(true));\n\n return isRendered.asReadonly();\n};\n\nexport const createIsRenderedSignal = () => {\n const value = signal(false);\n\n nextFrame(() => {\n if (!value()) {\n console.error(\n 'Render signal was not set to true. This can cause unexpected behavior. Make sure to .bind() the render signal at the end of the constructor.',\n );\n }\n });\n\n return {\n state: value,\n bind: () => effect(() => value.set(true)),\n };\n};\n\nexport const createCanAnimateSignal = () => {\n const value = signal(false);\n\n nextFrame(() => {\n value.set(true);\n });\n\n return {\n state: value.asReadonly(),\n };\n};\n","import { DOCUMENT } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n isDevMode,\n NgZone,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { equal } from '../utils';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport type LogicalSize = {\n inlineSize: number;\n blockSize: number;\n};\n\nexport type ElementRect = {\n bottom: number;\n height: number;\n left: number;\n right: number;\n top: number;\n width: number;\n x: number;\n y: number;\n};\n\nexport type ElementSize = {\n width: number;\n height: number;\n};\n\nexport const boundingClientRectToElementRect = (rect: DOMRectReadOnly): ElementRect => ({\n bottom: rect.bottom,\n height: rect.height,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n width: rect.width,\n x: rect.x,\n y: rect.y,\n});\n\nexport const createElementDimensions = (el: HTMLElement | null, rect?: DOMRect): NullableElementDimensions => {\n if (!el) {\n return {\n rect: null,\n client: null,\n scroll: null,\n offset: null,\n };\n }\n\n const cachedNormalizedRect = rect ? boundingClientRectToElementRect(rect) : null;\n const rectFn = () =>\n cachedNormalizedRect ? cachedNormalizedRect : boundingClientRectToElementRect(el.getBoundingClientRect());\n\n return {\n rect: rectFn,\n client: { width: el.clientWidth, height: el.clientHeight },\n scroll: { width: el.scrollWidth, height: el.scrollHeight },\n offset: { width: el.offsetWidth, height: el.offsetHeight },\n };\n};\n\nexport type ElementDimensions = {\n rect: () => ElementRect;\n client: ElementSize;\n scroll: ElementSize;\n offset: ElementSize;\n};\n\nexport type NullableElementDimensions = {\n [K in keyof ElementDimensions]: ElementDimensions[K] | null;\n};\n\nexport const signalElementDimensions = (el: SignalElementBindingType) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const initialValue = () => createElementDimensions(firstEl().currentElement);\n\n const elementDimensionsSignal = signal<NullableElementDimensions>(initialValue());\n\n const observer = new ResizeObserver((e) => {\n if (!isRendered()) return;\n\n const entry = e[0];\n\n if (entry) {\n const target = entry.target as HTMLElement;\n const newDimensions = createElementDimensions(target);\n\n zone.run(() => elementDimensionsSignal.set(newDimensions));\n }\n });\n\n effect(() => {\n const els = firstEl();\n\n untracked(() => {\n elementDimensionsSignal.set(initialValue());\n\n if (els.previousElement) {\n observer.disconnect();\n }\n\n if (els.currentElement) {\n const computedDisplay = getComputedStyle(els.currentElement).display;\n const currentElIsAngularComponent = els.currentElement?.tagName.toLowerCase().includes('-');\n\n if (computedDisplay === 'inline' && isDevMode() && currentElIsAngularComponent) {\n console.error(\n `Element <${els.currentElement?.tagName.toLowerCase()}> is an Angular component and has a display of 'inline'. Inline elements cannot be observed for dimensions. Please change it to 'block' or something else.`,\n );\n }\n\n observer.observe(els.currentElement);\n }\n });\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return computed(() => elementDimensionsSignal(), {\n equal: (a, b) => equal(a, b),\n });\n};\n\nexport const signalHostElementDimensions = () => signalElementDimensions(inject<ElementRef<HTMLElement>>(ElementRef));\n\nexport const injectViewportSize = (): Signal<ElementSize> => {\n const document = inject(DOCUMENT);\n const zone = inject(NgZone);\n const destroyRef = inject(DestroyRef);\n\n const getSize = (): ElementSize => {\n const vv = (document.defaultView as Window | null)?.visualViewport;\n if (vv) return { width: vv.width, height: vv.height };\n const win = document.defaultView;\n return { width: win?.innerWidth ?? 0, height: win?.innerHeight ?? 0 };\n };\n\n const size = signal<ElementSize>(getSize());\n\n const onResize = () => zone.run(() => size.set(getSize()));\n\n const vv = (document.defaultView as Window | null)?.visualViewport;\n if (vv) {\n vv.addEventListener('resize', onResize);\n destroyRef.onDestroy(() => vv.removeEventListener('resize', onResize));\n } else {\n const win = document.defaultView;\n win?.addEventListener('resize', onResize);\n destroyRef.onDestroy(() => win?.removeEventListener('resize', onResize));\n }\n\n return size;\n};\n","import {\n EnvironmentInjector,\n Signal,\n WritableSignal,\n afterNextRender,\n effect,\n inject,\n isDevMode,\n isSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { map, pairwise } from 'rxjs';\n\nexport const previousSignalValue = <T>(signal: Signal<T>) => {\n const obs = toObservable(signal).pipe(\n pairwise(),\n map(([prev]) => prev),\n );\n\n return toSignal(obs);\n};\n\nexport type SyncSignalOptions = {\n /**\n * If true, the target signal will not be updated with the source signal's value in a sync operation.\n * This should be set to true for signals that need to be initialized first before syncing (eg. required inputs)\n * @default false\n */\n skipSyncRead?: boolean;\n\n /**\n * If true, the first time the effect will be triggered will be skipped.\n * @default false\n */\n skipFirstRun?: boolean;\n};\n\nexport const syncSignal = <T>(from: Signal<T>, to: WritableSignal<T>, options?: SyncSignalOptions) => {\n let isFirstRun = options?.skipSyncRead ? false : true;\n\n if (!options?.skipSyncRead) {\n try {\n // this might throw if the signal is not yet initialized (eg. a required signal input inside the constructor)\n // in that case we just skip the initial sync\n to.set(from());\n } catch {\n isFirstRun = false;\n\n if (isDevMode()) {\n console.warn('Failed to sync signals. The target signal is not yet initialized.', { from, to });\n }\n }\n }\n\n const ref = effect(() => {\n const formVal = from();\n\n if (options?.skipFirstRun && isFirstRun) {\n isFirstRun = false;\n\n return;\n }\n\n untracked(() => {\n to.set(formVal);\n });\n });\n\n return ref;\n};\n\nexport type MaybeSignal<T> = T | Signal<T>;\n\nexport const maybeSignalValue = <T>(value: MaybeSignal<T>) => {\n if (isSignal(value)) {\n return value();\n }\n\n return value;\n};\n\n/**\n * A computed that will only be reactive until the source signal contains a truthy value.\n * All subsequent changes inside the computation will be ignored.\n */\nexport const computedTillTruthy = <T>(source: Signal<T>) => {\n const value = signal<T | null>(null);\n\n const ref = effect(() => {\n const val = source();\n\n if (val) {\n value.set(val);\n ref.destroy();\n }\n });\n\n return value.asReadonly();\n};\n\n/**\n * A computed that will only be reactive until the source signal contains a falsy value.\n * All subsequent changes inside the computation will be ignored.\n */\nexport const computedTillFalsy = <T>(source: Signal<T>) => {\n const value = signal<T | null>(null);\n\n const ref = effect(() => {\n const val = source();\n\n if (!val) {\n value.set(val);\n ref.destroy();\n }\n });\n\n return value.asReadonly();\n};\n\n/**\n * A writeable signal that will be set to the provided value once all inputs are set.\n * During that time, the signal will be set to `null`.\n */\nexport const deferredSignal = <T extends () => unknown>(valueFn: T) => {\n const valueSignal = signal<ReturnType<T> | null>(null);\n\n afterNextRender(() => {\n valueSignal.set(valueFn() as ReturnType<T>);\n });\n\n return valueSignal;\n};\n\nexport const memoizeSignal = <T>(factory: () => Signal<T>) => {\n const cache = new WeakMap<EnvironmentInjector, Signal<T>>();\n\n return () => {\n const envInjector = inject(EnvironmentInjector);\n\n let cached = cache.get(envInjector);\n if (!cached) {\n cached = runInInjectionContext(envInjector, factory);\n cache.set(envInjector, cached);\n }\n\n return cached;\n };\n};\n","import { computed, DOCUMENT, inject } from '@angular/core';\nimport {\n Breakpoint,\n BREAKPOINT_ORDER,\n BuildMediaQueryOptions,\n injectBreakpointObserver,\n injectRenderer,\n} from '../providers';\nimport { createDocumentElementSignal } from './element';\nimport { signalElementDimensions } from './element-dimensions';\nimport { memoizeSignal } from './signal-data-utils';\n\n/** Inject a signal containing a boolean value indicating if the viewport is xs */\nexport const injectIsXs = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ max: 'xs' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is sm */\nexport const injectIsSm = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'sm', max: 'sm' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is md */\nexport const injectIsMd = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'md', max: 'md' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is lg */\nexport const injectIsLg = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'lg', max: 'lg' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is xl */\nexport const injectIsXl = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: 'xl', max: 'xl' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is 2xl */\nexport const injectIs2Xl = /* @__PURE__ */ memoizeSignal(() => injectObserveBreakpoint({ min: '2xl' }));\n\n/**\n * Inject a boolean value indicating if the viewport is matching the provided options.\n * This value is not reactive. If you want to react to changes, use the {@link injectObserveBreakpoint} function instead.\n */\nexport const injectBreakpointIsMatched = (options: BuildMediaQueryOptions) =>\n injectBreakpointObserver().isBreakpointMatched(options);\n\n/**\n * Inject a boolean value indicating if the media query is matched.\n * This value is not reactive. If you want to react to changes, use the {@link injectObserveMediaQuery} function instead.\n */\nexport const injectMediaQueryIsMatched = (mediaQuery: string) =>\n injectBreakpointObserver().isMediaQueryMatched(mediaQuery);\n\n/**\n * Inject a signal containing a boolean value indicating if the viewport is matching the provided options.\n */\nexport const injectObserveBreakpoint = (options: BuildMediaQueryOptions) =>\n injectBreakpointObserver().observeBreakpoint(options);\n\n/**\n * Inject a signal containing a boolean value indicating if the media query is matched.\n */\nexport const injectObserveMediaQuery = (mediaQuery: string) => injectBreakpointObserver().observeMediaQuery(mediaQuery);\n\n/** Inject a signal containing the current breakpoint. */\nexport const injectCurrentBreakpoint = /* @__PURE__ */ memoizeSignal(() => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const first = BREAKPOINT_ORDER[0]!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const last = BREAKPOINT_ORDER[BREAKPOINT_ORDER.length - 1]!;\n const highToLow = [...BREAKPOINT_ORDER].reverse() as Breakpoint[];\n const signals = highToLow.map((bp) =>\n injectObserveBreakpoint(bp === first ? { max: bp } : bp === last ? { min: bp } : { min: bp, max: bp }),\n );\n\n return computed(() => {\n for (let i = 0; i < highToLow.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (signals[i]!()) return highToLow[i]!;\n }\n return first;\n });\n});\n\n/** Inject a signal that indicates if the user is using a portrait display */\nexport const injectIsPortrait = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(orientation: portrait)'));\n\n/** Inject a signal that indicates if the user is using a landscape display */\nexport const injectIsLandscape = /* @__PURE__ */ memoizeSignal(() =>\n injectObserveMediaQuery('(orientation: landscape)'),\n);\n\n/** Inject a signal containing the current display orientation */\nexport const injectDisplayOrientation = /* @__PURE__ */ memoizeSignal(() => {\n const isPortrait = injectIsPortrait();\n\n return computed(() => {\n if (isPortrait()) return 'portrait';\n return 'landscape';\n });\n});\n\n/** Inject a signal that indicates if the device has a touch input */\nexport const injectHasTouchInput = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(pointer: coarse)'));\n\n/** Inject a signal that indicates if the device has a fine input (mouse or stylus) */\nexport const injectHasPrecisionInput = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(pointer: fine)'));\n\n/** Inject a signal containing the current device input type */\nexport const injectDeviceInputType = /* @__PURE__ */ memoizeSignal(() => {\n const isTouch = injectHasTouchInput();\n\n return computed(() => {\n if (isTouch()) return 'touch';\n return 'mouse';\n });\n});\n\n/** Inject a signal that indicates if the user prefers reduced motion */\nexport const injectPrefersReducedMotion = /* @__PURE__ */ memoizeSignal(() =>\n injectObserveMediaQuery('(prefers-reduced-motion: reduce)'),\n);\n\n/** Inject a signal containing a boolean value indicating if the user can hover (eg. using a mouse) */\nexport const injectCanHover = /* @__PURE__ */ memoizeSignal(() => injectObserveMediaQuery('(hover: hover)'));\n\n/** Inject a signal containing the viewport dimensions */\nexport const injectViewportDimensions = /* @__PURE__ */ memoizeSignal(() =>\n signalElementDimensions(createDocumentElementSignal()),\n);\n\n/** Inject a signal containing the scrollbar dimensions. Dimensions will be 0 if scrollbars overlap the page contents (like on mobile). */\nexport const injectScrollbarDimensions = /* @__PURE__ */ memoizeSignal(() => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n\n const scrollbarRuler = renderer.createElement('div');\n scrollbarRuler.style.width = '100px';\n scrollbarRuler.style.height = '100px';\n scrollbarRuler.style.overflow = 'scroll';\n scrollbarRuler.style.position = 'absolute';\n scrollbarRuler.style.top = '-9999px';\n scrollbarRuler.style.scrollbarWidth = getComputedStyle(document.documentElement).scrollbarWidth;\n renderer.appendChild(document.body, scrollbarRuler);\n\n const scrollContainerDimensions = signalElementDimensions(scrollbarRuler);\n\n return computed(() => {\n const client = scrollContainerDimensions().client;\n if (!client) return null;\n return {\n width: Math.max(0, 100 - client.width),\n height: Math.max(0, 100 - client.height),\n };\n });\n});\n","import { afterNextRender, DestroyRef, effect, ElementRef, inject, isSignal, Signal, untracked } from '@angular/core';\nimport { injectRenderer } from '../providers/renderer';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { injectPrefersReducedMotion } from './media-queries';\n\nexport type AnimatedSizeAxis = 'block' | 'inline';\n\nexport type AnimatedBlockSizeConfig = {\n /** The element whose size is animated. Defaults to the host `ElementRef`. */\n host?: SignalElementBindingType;\n /**\n * The content element(s) whose size changes drive the animation. Observe the content (children),\n * **not** the animated host - observing the host would feed the animation back into itself.\n * For the `inline` axis this also means the observed content must be content-sized (e.g.\n * `inline-size: max-content`); a plain block child just mirrors the host's animated width back.\n */\n observe: SignalElementBindingType | SignalElementBindingType[];\n /**\n * The axes to animate. May be a signal - e.g. to drop the `inline` axis while a panel is in a\n * presentation whose width follows the viewport instead of its content. @default ['block']\n */\n axes?: AnimatedSizeAxis[] | Signal<AnimatedSizeAxis[]>;\n /** Animation duration in ms. @default 160 */\n duration?: number;\n /** Animation easing. @default 'ease' */\n easing?: string;\n /** Class toggled on the host while animating - use it to `overflow: clip` during the resize. */\n resizingClass?: string;\n};\n\n/**\n * Smoothly animates an element's `block-size` (and optionally `inline-size`, via `axes`) when its\n * content changes size (e.g. a list filtering, a loading state resolving, a column being added).\n * Set up once in an injection context; it observes the given content element(s) and animates the\n * host from its previous size to its new natural size.\n *\n * Robustness notes: the baseline size is captured on the first render (via `afterNextRender`) and\n * only later changes animate, so the initial layout settling never plays as a grow-from-0.\n * A change that interrupts an in-flight animation continues from the current animated size, and\n * zero/pre-layout measurements are ignored. Respects `prefers-reduced-motion`.\n *\n * The animation starts synchronously inside the `ResizeObserver` callback - it runs after layout\n * but **before paint**, so the host never paints a frame at its new natural size. Routing the\n * resize through a signal + effect instead would apply the animation one change-detection cycle\n * (= one painted frame) late: a growing panel would flash at its final size, snap back, and only\n * then animate.\n */\nexport const injectAnimatedBlockSize = (config: AnimatedBlockSizeConfig) => {\n const hostBinding = config.host ?? inject<ElementRef<HTMLElement>>(ElementRef);\n const renderer = injectRenderer();\n const prefersReducedMotion = injectPrefersReducedMotion();\n const destroyRef = inject(DestroyRef);\n\n const hostSignal = firstElementSignal(buildElementSignal(hostBinding));\n const observeTargets = Array.isArray(config.observe) ? config.observe : [config.observe];\n const observedElements = observeTargets.map((target) => firstElementSignal(buildElementSignal(target)));\n\n const duration = config.duration ?? 160;\n const easing = config.easing ?? 'ease';\n const axes = () => (isSignal(config.axes) ? untracked(config.axes) : (config.axes ?? ['block']));\n\n let lastBlockSize: number | null = null;\n let lastInlineSize: number | null = null;\n let animation: Animation | null = null;\n let ready = false;\n\n const hostElement = () => hostSignal().currentElement;\n\n const run = () => {\n const host = hostElement();\n\n if (!host) return;\n\n // continue from the current animated size when interrupting a running animation\n const currentRect = animation?.playState === 'running' ? host.getBoundingClientRect() : null;\n const fromBlock = currentRect ? currentRect.height : lastBlockSize;\n const fromInline = currentRect ? currentRect.width : lastInlineSize;\n\n animation?.cancel();\n animation = null;\n\n const targetRect = host.getBoundingClientRect();\n const toBlock = targetRect.height;\n const toInline = targetRect.width;\n\n // never record or animate a zero / pre-layout size\n if (toBlock === 0 || toInline === 0) return;\n\n lastBlockSize = toBlock;\n lastInlineSize = toInline;\n\n if (prefersReducedMotion()) {\n return;\n }\n\n const activeAxes = axes();\n const animatesAxis = (from: number | null, to: number) => from !== null && from >= 1 && Math.abs(from - to) >= 1;\n const animateBlock = activeAxes.includes('block') && animatesAxis(fromBlock, toBlock);\n const animateInline = activeAxes.includes('inline') && animatesAxis(fromInline, toInline);\n\n if (!animateBlock && !animateInline) {\n return;\n }\n\n if (config.resizingClass && renderer) {\n renderer.addClass(host, config.resizingClass);\n }\n\n const fromFrame: Keyframe = {};\n const toFrame: Keyframe = {};\n\n if (animateBlock) {\n fromFrame['blockSize'] = `${fromBlock}px`;\n toFrame['blockSize'] = `${toBlock}px`;\n }\n\n if (animateInline) {\n fromFrame['inlineSize'] = `${fromInline}px`;\n toFrame['inlineSize'] = `${toInline}px`;\n }\n\n const nextAnimation = host.animate([fromFrame, toFrame], { duration, easing });\n\n const cleanup = () => {\n // Cancelling an animation to start the next one rejects its `finished` promise, firing this\n // cleanup after a newer animation has already taken over. That newer animation owns the\n // resizing class, so only strip it when no other animation is mid-flight - otherwise an\n // interrupted resize (rapid content changes, e.g. async search typing) would un-clip the\n // scroller while it is still animating and flash a scrollbar.\n if (animation !== null && animation !== nextAnimation) {\n return;\n }\n\n if (config.resizingClass && renderer) {\n renderer.removeClass(host, config.resizingClass);\n }\n\n if (animation === nextAnimation) {\n animation = null;\n }\n };\n\n nextAnimation.finished.then(cleanup).catch(cleanup);\n animation = nextAnimation;\n };\n\n // no zone/signal indirection - see the pre-paint timing note in the doc comment above\n const observer = new ResizeObserver(() => {\n if (!ready) return;\n\n run();\n });\n\n effect(() => {\n const elements = observedElements.map((element) => element().currentElement);\n\n untracked(() => {\n observer.disconnect();\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n });\n });\n\n // Capture the settled size of the first render as the baseline, then only animate later changes.\n afterNextRender(() => {\n const host = hostElement();\n const rect = host ? host.getBoundingClientRect() : null;\n\n lastBlockSize = rect ? rect.height || null : null;\n lastInlineSize = rect ? rect.width || null : null;\n ready = true;\n });\n\n destroyRef.onDestroy(() => {\n observer.disconnect();\n animation?.cancel();\n });\n};\n","import { inject, isSignal, NgZone, signal, Signal, untracked } from '@angular/core';\nimport { MaybeSignal } from './signal-data-utils';\n\nexport type SignalAnimatedNumberOptions = {\n /**\n * The initial value to start animating from.\n * If not provided, the animation will start from 0\n */\n initialValue?: number;\n\n /**\n * Duration of the animation in milliseconds.\n * @default 1000\n */\n duration?: number;\n\n /**\n * Easing function that takes a progress value (0 to 1) and returns an eased value (0 to 1).\n * Options:\n * - `easeLinear()`\n * - `easeIn()`\n * - `easeOut()`\n * - `easeInOut()`\n * - `easeElastic()`\n * - `easeOutBack()`\n * - `easeOutBackStrong()`\n * @default easeOut()\n */\n easing?: (t: number) => number;\n\n /**\n * Function to round the animated value.\n * @default (v: number) => Math.round(v)\n */\n round?: (value: number) => number;\n\n /**\n * Callback invoked when the animation starts.\n */\n onAnimationStart?: () => void;\n\n /**\n * Callback invoked when the animation ends.\n */\n onAnimationEnd?: () => void;\n};\n\nexport type AnimatedNumberSignal = Signal<number> & {\n /**\n * Starts the animation from the current value to the target value.\n * @returns The animated signal for chaining\n */\n play: () => AnimatedNumberSignal;\n\n /**\n * Resets the animation to the initial value and stops any ongoing animation.\n * @returns The animated signal for chaining\n */\n reset: () => AnimatedNumberSignal;\n\n /**\n * Stops the current animation at its current position.\n * @returns The animated signal for chaining\n */\n stop: () => AnimatedNumberSignal;\n};\n\n/**\n * Creates a signal that animates the transition of a numeric signal's value over time.\n */\nexport const signalAnimatedNumber = (\n source: MaybeSignal<number>,\n options: SignalAnimatedNumberOptions = {},\n): AnimatedNumberSignal => {\n const ngZone = inject(NgZone);\n const duration = options.duration ?? 1000;\n const easing = options.easing ?? easeOut;\n const round = options.round ?? ((v: number) => Math.round(v));\n\n const initialValue = options.initialValue ?? 0;\n const animatedValue = signal(initialValue);\n\n let rafId: number | null = null;\n let currentAnimatedValue = initialValue;\n\n const cancelAnimation = () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n };\n\n const readonlySignal = animatedValue.asReadonly() as AnimatedNumberSignal;\n\n const play = () => {\n const targetValue = isSignal(source) ? source() : source;\n\n cancelAnimation();\n\n const startValue = currentAnimatedValue;\n const startTime = performance.now();\n const delta = targetValue - startValue;\n\n // Skip animation if no change\n if (delta === 0) {\n options.onAnimationEnd?.();\n\n return readonlySignal;\n }\n\n options.onAnimationStart?.();\n\n ngZone.runOutsideAngular(() => {\n const animate = (timestamp: number) => {\n const elapsed = timestamp - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n\n const value = startValue + delta * easedProgress;\n currentAnimatedValue = value;\n\n untracked(() => {\n animatedValue.set(round(value));\n });\n\n if (progress < 1) {\n rafId = requestAnimationFrame(animate);\n } else {\n rafId = null;\n\n ngZone.run(() => {\n options.onAnimationEnd?.();\n });\n }\n };\n\n rafId = requestAnimationFrame(animate);\n });\n\n return readonlySignal;\n };\n\n const reset = () => {\n cancelAnimation();\n currentAnimatedValue = initialValue;\n animatedValue.set(initialValue);\n return readonlySignal;\n };\n\n const stop = () => {\n cancelAnimation();\n return readonlySignal;\n };\n\n readonlySignal.play = play;\n readonlySignal.reset = reset;\n readonlySignal.stop = stop;\n\n return readonlySignal;\n};\n\n/* Linear easing function */\nexport const easeLinear = (t: number) => t;\n\n/* Ease in (slow start) */\nexport const easeIn = (t: number) => t * t;\n\n/* Ease out (slow end) */\nexport const easeOut = (t: number) => t * (2 - t);\n\n/* Ease in-out (slow start and end) */\nexport const easeInOut = (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t);\n\n/** Elastic easing function (overshoots) */\nexport const easeElastic = (t: number) => {\n const c4 = (2 * Math.PI) / 3;\n return t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\n};\n\n/** Back easing function (overshoots slightly then settles) */\nexport const easeOutBack = (t: number) => {\n const c1 = 1.70158;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n};\n\n/** Back easing function with more overshoot */\nexport const easeOutBackStrong = (t: number) => {\n const c1 = 2.5;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n};\n","import { DOCUMENT, Signal, inject, signal } from '@angular/core';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\n\nexport type Vec2 = [number, number];\n\nexport type ViewportConfig = {\n breakpoints: {\n xs: Vec2;\n sm: Vec2;\n md: Vec2;\n lg: Vec2;\n xl: Vec2;\n '2xl': Vec2;\n };\n};\n\nexport type Breakpoint = keyof ViewportConfig['breakpoints'];\n\nexport const BREAKPOINT_ORDER: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];\n\n/**\n * Default viewport config based on Tailwind CSS.\n * @see https://tailwindcss.com/docs/screens\n */\nexport const DEFAULT_VIEWPORT_CONFIG: ViewportConfig = {\n breakpoints: {\n xs: [0, 639],\n sm: [640, 767],\n md: [768, 1023],\n lg: [1024, 1279],\n xl: [1280, 1535],\n '2xl': [1536, Infinity],\n },\n};\n\nconst VIEWPORT_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<ViewportConfig>(DEFAULT_VIEWPORT_CONFIG, {\n name: 'Viewport Config',\n});\n\nexport const provideViewportConfig = /* @__PURE__ */ toProvideFn(VIEWPORT_CONFIG_DEF);\nexport const injectViewportConfig = /* @__PURE__ */ toInjectFn(VIEWPORT_CONFIG_DEF);\n\nexport type BuildMediaQueryOptions = {\n min?: number | Breakpoint;\n max?: number | Breakpoint;\n};\n\nconst BREAKPOINT_OBSERVER_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const viewportConfig = injectViewportConfig();\n const defaultView = inject(DOCUMENT).defaultView;\n const matchMedia = defaultView?.matchMedia?.bind(defaultView) ?? null;\n const queryLists = new Map<string, MediaQueryList>();\n const querySignals = new Map<string, Signal<boolean>>();\n\n const getQueryList = (mediaQuery: string) => {\n if (!matchMedia) return null;\n\n let queryList = queryLists.get(mediaQuery);\n\n if (!queryList) {\n queryList = matchMedia(mediaQuery);\n queryLists.set(mediaQuery, queryList);\n }\n\n return queryList;\n };\n\n const isMediaQueryMatched = (mediaQuery: string) => getQueryList(mediaQuery)?.matches ?? false;\n\n const observeMediaQuery = (mediaQuery: string): Signal<boolean> => {\n const existing = querySignals.get(mediaQuery);\n\n if (existing) return existing;\n\n const queryList = getQueryList(mediaQuery);\n const matches = signal(queryList?.matches ?? false);\n\n // the root provider outlives every consumer, so the listener is intentionally never removed -\n // the same query list is shared by all of them\n queryList?.addEventListener('change', (event) => matches.set(event.matches));\n\n const result = matches.asReadonly();\n querySignals.set(mediaQuery, result);\n\n return result;\n };\n\n const observeBreakpoint = (options: BuildMediaQueryOptions) => observeMediaQuery(buildMediaQueryString(options));\n\n const isBreakpointMatched = (options: BuildMediaQueryOptions) =>\n isMediaQueryMatched(buildMediaQueryString(options));\n\n const getBreakpointSize = (type: Breakpoint, option: 'min' | 'max') => {\n const index = option === 'min' ? 0 : 1;\n const size = viewportConfig.breakpoints[type][index];\n\n if (size === Infinity || size === 0) {\n return size;\n }\n\n if (option === 'min') {\n return size;\n }\n\n // Due to scaling, the actual size of the viewport may be a decimal number.\n // Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px\n // and thus not matching any of the default breakpoints.\n return size + 0.9;\n };\n\n const buildMediaQueryString = (options: BuildMediaQueryOptions) => {\n if (!options.min && !options.max) {\n throw new Error('At least one of min or max must be defined');\n }\n\n const mediaQueryParts: string[] = [];\n\n if (options.min) {\n if (typeof options.min === 'number') {\n mediaQueryParts.push(`(min-width: ${options.min}px)`);\n } else {\n mediaQueryParts.push(`(min-width: ${getBreakpointSize(options.min, 'min')}px)`);\n }\n }\n\n if (options.min && options.max) {\n mediaQueryParts.push('and');\n }\n\n if (options.max) {\n if (typeof options.max === 'number') {\n mediaQueryParts.push(`(max-width: ${options.max}px)`);\n } else {\n mediaQueryParts.push(`(max-width: ${getBreakpointSize(options.max, 'max')}px)`);\n }\n }\n\n return mediaQueryParts.join(' ');\n };\n\n return {\n observeBreakpoint,\n isBreakpointMatched,\n getBreakpointSize,\n buildMediaQueryString,\n observeMediaQuery,\n isMediaQueryMatched,\n };\n },\n { name: 'Breakpoint Observer' },\n);\n\nexport const provideBreakpointObserver = /* @__PURE__ */ toProvideFn(BREAKPOINT_OBSERVER_DEF);\nexport const injectBreakpointObserver = /* @__PURE__ */ toInjectFn(BREAKPOINT_OBSERVER_DEF);\n","import {\n InjectionToken,\n Injector,\n InputSignalWithTransform,\n Signal,\n booleanAttribute,\n computed,\n effect,\n inject,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { SIGNAL } from '@angular/core/primitives/signals';\nimport { BREAKPOINT_ORDER, Breakpoint } from '../providers/breakpoint-observer';\nimport { setInputSignal } from '../utils';\nimport { injectCurrentBreakpoint } from './media-queries';\n\nexport type BreakpointMap<T> = Partial<Record<Breakpoint, T>>;\nexport type BreakpointInput<T> = T | BreakpointMap<T>;\n\nconst BREAKPOINT_KEY_SET = /* @__PURE__ */ new Set<string>(BREAKPOINT_ORDER);\n\nconst isBreakpointMap = (value: unknown): value is BreakpointMap<unknown> => {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return false;\n const keys = Object.keys(value);\n\n if (keys.length === 0) return false;\n\n const invalidKeys = keys.filter((key) => !BREAKPOINT_KEY_SET.has(key));\n\n if (!invalidKeys.length) return true;\n\n // One bad key makes the whole map inert - it stops being a breakpoint map and becomes a plain value, which\n // for an attribute binding means `[object Object]` and no effect at all. Silent, and expensive to find.\n if (ngDevMode && invalidKeys.length < keys.length) {\n console.warn(\n `[ethlete] A breakpoint map used the unknown key(s) ${invalidKeys.map((key) => `\"${key}\"`).join(', ')}, so ` +\n `the whole map was ignored. Valid keys are ${BREAKPOINT_ORDER.join(', ')} - there is no \"default\"; the ` +\n 'smallest breakpoint is the fallback.',\n );\n }\n\n return false;\n};\n\nconst resolveFromMap = <T>(map: BreakpointMap<T>, bp: Breakpoint, defaultValue: T): T => {\n const idx = BREAKPOINT_ORDER.indexOf(bp);\n for (let i = idx; i >= 0; i--) {\n const v = map[BREAKPOINT_ORDER[i] as Breakpoint];\n if (v !== undefined) return v;\n }\n return defaultValue;\n};\n\nexport const breakpointTransformBase = <T, WriteT = BreakpointInput<T>>(\n coerce: (value: WriteT) => T,\n): ((value: WriteT) => T) => {\n const currentBp = injectCurrentBreakpoint();\n const injector = inject(Injector);\n const raw = signal<BreakpointInput<T> | undefined>(undefined);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n let capturedDefault: T = undefined!;\n let initialized = false;\n\n let cachedSig: InputSignalWithTransform<T, any> | null = null;\n\n const transformFn = (value: WriteT): T => {\n const coerced: BreakpointInput<T> = isBreakpointMap(value) ? (value as unknown as BreakpointMap<T>) : coerce(value);\n if (!initialized) {\n capturedDefault = coerced as T;\n initialized = true;\n }\n raw.set(coerced);\n return isBreakpointMap(coerced)\n ? resolveFromMap(coerced as BreakpointMap<T>, currentBp(), capturedDefault)\n : (coerced as T);\n };\n\n effect(() => {\n const bp = currentBp();\n const r = raw();\n\n if (!cachedSig) {\n const instance = injector.get(BREAKPOINT_INSTANCE_TOKEN) as any;\n for (const key of Object.keys(instance)) {\n const val = instance[key];\n\n if (val && typeof val === 'function' && (val as any)[SIGNAL]?.transformFn === transformFn) {\n cachedSig = val as InputSignalWithTransform<T, any>;\n break;\n }\n }\n }\n\n if (!cachedSig || r === undefined || !isBreakpointMap(r)) return;\n const resolved = resolveFromMap(r as BreakpointMap<T>, bp, capturedDefault);\n\n untracked(() => setInputSignal(cachedSig as InputSignalWithTransform<T, any>, resolved));\n });\n\n return transformFn;\n};\n\n/**\n * Transform factory for boolean inputs.\n * Coerces plain values with `booleanAttribute`; resolves {@link BreakpointMap} mobile-first.\n *\n * @example\n * snap = input(false, { transform: boolBreakpointTransform() });\n * // Template: `snap` | `[snap]=\"true\"` | `[snap]=\"{ xs: false, md: true }\"`\n */\nexport const boolBreakpointTransform = (): ((value: BreakpointInput<boolean> | string) => boolean) =>\n breakpointTransformBase<boolean, BreakpointInput<boolean> | string>(booleanAttribute);\n\n/**\n * Transform factory for number inputs.\n * Coerces plain values with `numberAttribute`; resolves {@link BreakpointMap} mobile-first.\n *\n * @example\n * scrollMargin = input(0, { transform: numberBreakpointTransform() });\n * // Template: `[scrollMargin]=\"16\"` | `[scrollMargin]=\"{ xs: 0, md: 16 }\"`\n */\nexport const numberBreakpointTransform = (): ((value: BreakpointInput<number> | string) => number) =>\n breakpointTransformBase<number, BreakpointInput<number> | string>((v) => numberAttribute(v));\n\n/**\n * Transform factory for any typed input (string unions, arrays, objects, etc.).\n * Passes plain values through as-is; resolves {@link BreakpointMap} mobile-first.\n * A value is treated as a {@link BreakpointMap} only when all its keys are valid breakpoint names.\n *\n * @example\n * itemSize = input('auto', { transform: typedBreakpointTransform<ScrollableItemSize>() });\n * tags = input([], { transform: typedBreakpointTransform<string[]>() });\n * // Template: `[itemSize]=\"'third'\"` | `[itemSize]=\"{ xs: 'full', md: 'third' }\"`\n */\nexport const typedBreakpointTransform = <T>(): ((value: BreakpointInput<T>) => T) =>\n breakpointTransformBase((v) => v as T);\n\nexport type BoolBreakpointSignal = InputSignalWithTransform<boolean, BreakpointInput<boolean> | string>;\nexport type NumberBreakpointSignal = InputSignalWithTransform<number, BreakpointInput<number> | string>;\nexport type TypedBreakpointSignal<T> = InputSignalWithTransform<T, BreakpointInput<T>>;\n\nexport const injectBreakpointInput = <T>(inputSignal: Signal<BreakpointInput<T>>, defaultValue: T): Signal<T> => {\n const currentBreakpoint = injectCurrentBreakpoint();\n\n return computed(() => {\n const value = inputSignal();\n if (!isBreakpointMap(value)) return value as T;\n return resolveFromMap(value, currentBreakpoint(), defaultValue);\n });\n};\n\nexport const booleanBreakpointAttribute = (value: unknown): BreakpointInput<boolean> => {\n if (isBreakpointMap(value)) return value as BreakpointMap<boolean>;\n return booleanAttribute(value);\n};\n\nexport const numberBreakpointAttribute = (value: unknown): BreakpointInput<number> => {\n if (isBreakpointMap(value)) return value as BreakpointMap<number>;\n return numberAttribute(value);\n};\n\nexport const BREAKPOINT_INSTANCE_TOKEN = new InjectionToken<unknown>('BREAKPOINT_INSTANCE_TOKEN');\n\nexport const provideBreakpointInstance = (componentClass: unknown) => ({\n provide: BREAKPOINT_INSTANCE_TOKEN,\n useExisting: componentClass,\n});\n","import { Signal, isSignal, linkedSignal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl } from '@angular/forms';\nimport { Observable, debounceTime, distinctUntilChanged, map, merge, of, startWith, switchMap } from 'rxjs';\nimport { equal } from '../utils';\n\nexport type ControlValueSignalOptions = {\n debounceTime?: number;\n\n /**\n * @default false\n */\n debounceFirst?: boolean;\n};\n\nexport const controlValueSignal = <\n TControlInput extends Signal<AbstractControl | null> | AbstractControl,\n TControl extends (TControlInput extends Signal<infer TSignalControl> ? TSignalControl : TControlInput),\n>(\n control: TControlInput,\n options?: ControlValueSignalOptions,\n) => {\n type TValue = ReturnType<NonNullable<TControl>['getRawValue']>;\n\n const getRawValueSafe = (ctrl: Signal<AbstractControl | null> | AbstractControl | null): TValue | null => {\n try {\n return isSignal(ctrl) ? (ctrl()?.getRawValue() ?? null) : (ctrl?.getRawValue() ?? null);\n } catch {\n // Ignore errors. This can happen if the passed control is a required input and is not yet initialized.\n return null;\n }\n };\n\n const initialValue = getRawValueSafe(control);\n\n const controlStream = isSignal(control)\n ? toObservable<AbstractControl | null>(control)\n : of<AbstractControl | null>(control);\n\n const controlObs = controlStream.pipe(\n switchMap((ctrl) => {\n if (!ctrl) return of(null);\n\n const vcsObs = options?.debounceTime\n ? ctrl.valueChanges.pipe(debounceTime(options.debounceTime))\n : ctrl.valueChanges;\n\n return vcsObs.pipe(\n startWith(ctrl.getRawValue()),\n map(() => ctrl.getRawValue()),\n );\n }),\n );\n\n const obs: Observable<TValue | null> = !options?.debounceFirst ? merge(of(initialValue), controlObs) : controlObs;\n\n return toSignal(obs.pipe(distinctUntilChanged((a, b) => equal(a, b))), {\n initialValue,\n });\n};\n\n/**\n * The first item in the pair is the previous value and the second item is the current value.\n */\nexport const controlValueSignalWithPrevious = <T extends AbstractControl>(\n control: T,\n options?: ControlValueSignalOptions,\n) => {\n type TValue = ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>['getRawValue']>;\n\n const data = linkedSignal<TValue | null, [TValue | null, TValue | null]>({\n source: controlValueSignal(control, options),\n computation: (curr, prev) => [prev?.source ?? null, curr],\n });\n\n return data.asReadonly();\n};\n","import { DestroyRef, effect, ElementRef, inject, NgZone, signal } from '@angular/core';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport const signalElementMutations = (el: SignalElementBindingType, options?: MutationObserverInit) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const elementMutationsSignal = signal<MutationRecord | null>(null);\n\n const observer = new MutationObserver((e) => {\n if (!isRendered()) return;\n\n const entry = e[0];\n\n if (entry) {\n zone.run(() => elementMutationsSignal.set(entry));\n }\n });\n\n effect(() => {\n const els = firstEl();\n\n elementMutationsSignal.set(null);\n\n if (els.previousElement) {\n observer.disconnect();\n }\n\n if (els.currentElement) {\n observer.observe(els.currentElement, options);\n }\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return elementMutationsSignal.asReadonly();\n};\n\nexport const signalHostElementMutations = (options?: MutationObserverInit) =>\n signalElementMutations(inject<ElementRef<HTMLElement>>(ElementRef), options);\n","import { computed } from '@angular/core';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from './element';\nimport { signalElementMutations } from './element-mutations';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementChildrenOptions = {\n /**\n * What the underlying `MutationObserver` watches for. The default is deliberately broad, because any DOM\n * change *might* change which children an element has.\n *\n * Narrow it wherever the consumer knows better. `attributes: true` in particular makes every inline style\n * or class write anywhere in the subtree re-run this - which for a scroll container whose descendants are\n * written to per animation frame is a change detection tick per frame for nothing. Pass an\n * `attributeFilter` (or drop `attributes`) in that case.\n */\n mutations?: MutationObserverInit;\n};\n\nconst DEFAULT_CHILDREN_MUTATIONS: MutationObserverInit = { childList: true, subtree: true, attributes: true };\n\nexport const signalElementChildren = (el: SignalElementBindingType, options?: SignalElementChildrenOptions) => {\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const isRendered = signalIsRendered();\n const elementMutations = signalElementMutations(elements, options?.mutations ?? DEFAULT_CHILDREN_MUTATIONS);\n\n return computed(\n () => {\n if (!isRendered()) return [];\n\n const els = firstEl();\n\n // We are not interested what the mutation is, just that there is one.\n // Changes to the DOM may affect the children of the element.\n elementMutations();\n\n if (!els.currentElement) return [];\n\n const children: HTMLElement[] = [];\n\n for (let index = 0; index < els.currentElement.children.length; index++) {\n const element = els.currentElement.children[index];\n\n if (element instanceof HTMLElement) {\n children.push(element);\n }\n }\n\n return children;\n },\n { equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) },\n );\n};\n","import {\n effect,\n EffectRef,\n ElementRef,\n inject,\n Injector,\n RendererStyleFlags2,\n runInInjectionContext,\n Signal,\n untracked,\n} from '@angular/core';\nimport { injectRenderer } from '../providers';\nimport { buildElementSignal, SignalElementBindingType } from './element';\n\nexport type BuildSignalEffectsConfig<T extends Record<string, Signal<unknown>>> = {\n /** The tokens to apply and their signal value */\n tokenMap: T;\n\n /** This function will be invoked for elements that were removed from the signal effects */\n cleanupFn: (el: HTMLElement, tokens: string[]) => void;\n\n /** This function will be invoked for elements that were added to the signal effects or when their signal value changes */\n updateFn: (el: HTMLElement, tokens: string[], conditionResult: unknown) => void;\n};\n\nexport const buildSignalEffects = <T extends Record<string, Signal<unknown>>>(\n el: SignalElementBindingType,\n config: BuildSignalEffectsConfig<T>,\n) => {\n const elements = buildElementSignal(el);\n const injector = inject(Injector);\n\n effect(() => {\n const { currentElements, previousElements } = elements();\n\n for (const previousEl of previousElements) {\n if (currentElements.includes(previousEl)) continue;\n\n const tokens = Object.keys(config.tokenMap)\n .map((key) => key.split(' '))\n .flat();\n\n if (!tokens.length) continue;\n\n config.cleanupFn(previousEl, tokens);\n }\n\n for (const currentEl of currentElements) {\n if (previousElements.includes(currentEl)) continue;\n\n for (const [tokens, condition] of Object.entries(config.tokenMap)) {\n untracked(() => {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length) return;\n\n config.updateFn(currentEl, tokenArray, condition());\n });\n }\n }\n });\n\n const effects: Record<string, EffectRef> = {};\n\n const has = (tokens: string) => tokens in effects;\n\n const push = (tokens: string, signal: Signal<unknown>) => {\n if (has(tokens)) return;\n\n runInInjectionContext(injector, () => {\n effects[tokens] = effect(() => {\n const { currentElements } = untracked(() => elements());\n const value = signal();\n\n for (const el of currentElements) {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length) continue;\n\n config.updateFn(el, tokenArray, value);\n }\n });\n });\n };\n\n const pushMany = (map: Record<string, Signal<unknown>>) => {\n for (const [tokens, signal] of Object.entries(map)) {\n push(tokens, signal);\n }\n };\n\n const remove = (tokens: string) => {\n effects[tokens]?.destroy();\n\n delete effects[tokens];\n\n for (const el of elements().currentElements) {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length) continue;\n\n config.cleanupFn(el, tokenArray);\n }\n };\n\n const removeMany = (tokens: string[]) => {\n for (const token of tokens) {\n remove(token);\n }\n };\n\n pushMany(config.tokenMap);\n\n return { remove, removeMany, has, push, pushMany };\n};\n\nexport const signalClasses = <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, classMap: T) => {\n const renderer = injectRenderer();\n\n return buildSignalEffects(el, {\n tokenMap: classMap,\n cleanupFn: (el, tokens) => tokens.forEach((token) => renderer.removeClass(el, token)),\n updateFn: (el, tokens, condition) => {\n if (!condition) {\n tokens.forEach((token) => renderer.removeClass(el, token));\n } else {\n tokens.forEach((token) => renderer.addClass(el, token));\n }\n },\n });\n};\n\nexport const signalHostClasses = <T extends Record<string, Signal<unknown>>>(classMap: T) =>\n signalClasses(inject<ElementRef<HTMLElement>>(ElementRef), classMap);\n\nconst ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected', 'hidden', 'inert'];\n\nexport const signalAttributes = <T extends Record<string, Signal<unknown>>>(\n el: SignalElementBindingType,\n attributeMap: T,\n) => {\n const renderer = injectRenderer();\n\n return buildSignalEffects(el, {\n tokenMap: attributeMap,\n cleanupFn: (el, tokens) => tokens.forEach((token) => el.removeAttribute(token)),\n updateFn: (el, tokens, condition) => {\n for (const token of tokens) {\n if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(token)) {\n if (condition) {\n renderer.setAttribute(el, token, '');\n } else {\n renderer.removeAttribute(el, token);\n }\n continue;\n }\n\n if (condition === null || condition === undefined) {\n renderer.removeAttribute(el, token);\n } else {\n renderer.setAttribute(el, token, `${condition}`);\n }\n }\n },\n });\n};\n\nexport const signalHostAttributes = <T extends Record<string, Signal<unknown>>>(attributeMap: T) =>\n signalAttributes(inject<ElementRef<HTMLElement>>(ElementRef), attributeMap);\n\nexport const signalStyles = <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, styleMap: T) => {\n const renderer = injectRenderer();\n\n return buildSignalEffects(el, {\n tokenMap: styleMap,\n cleanupFn: (el, tokens) =>\n tokens.forEach((token) =>\n renderer.removeStyle(el, token as keyof CSSStyleDeclaration, RendererStyleFlags2.DashCase),\n ),\n updateFn: (el, tokens, condition) => {\n for (const token of tokens) {\n if (condition === null || condition === undefined) {\n renderer.removeStyle(el, token as keyof CSSStyleDeclaration, RendererStyleFlags2.DashCase);\n } else {\n renderer.setStyle(\n el,\n {\n [token]: `${condition}`,\n },\n RendererStyleFlags2.DashCase,\n );\n }\n }\n },\n });\n};\n\nexport const signalHostStyles = <T extends Record<string, Signal<unknown>>>(styleMap: T) =>\n signalStyles(inject<ElementRef<HTMLElement>>(ElementRef), styleMap);\n","import { clamp } from '../utils';\n\nexport const elementCanScroll = (element?: HTMLElement | null, direction?: 'x' | 'y') => {\n // Omitting the element means \"the document scroller\". Resolved lazily and guarded so a call on the\n // server answers \"cannot scroll\" instead of throwing on a missing `document`.\n const el = element || (typeof document === 'undefined' ? null : document.documentElement);\n\n if (!el) {\n return false;\n }\n\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = el;\n\n if (direction === 'x') {\n return scrollWidth > clientWidth;\n } else if (direction === 'y') {\n return scrollHeight > clientHeight;\n }\n\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n};\n\nconst createViewportRect = (): DOMRect => {\n // Collapses to a zero rect where there is no window (server). `isElementVisible` never reaches the\n // intersection math there anyway - `elementCanScroll` already reports the document as unscrollable\n // - so the rect only has to be a valid shape.\n const hasWindow = typeof window !== 'undefined';\n const width = hasWindow ? window.innerWidth : 0;\n const height = hasWindow ? window.innerHeight : 0;\n\n return {\n left: 0,\n top: 0,\n right: width,\n bottom: height,\n width,\n height,\n x: 0,\n y: 0,\n toJSON: () => ({}),\n } as DOMRect;\n};\n\nexport type IsElementVisibleOptions = {\n /**\n * The element to check if it is visible inside a container.\n */\n element?: HTMLElement | null;\n\n /**\n * The container to check if the element is visible inside.\n * If null or undefined, uses the viewport as the container.\n * @default null (viewport)\n */\n container?: HTMLElement | null;\n\n /**\n * The container's rect to check if the element is visible inside. Can be supplied to reduce the amount of DOM reads.\n * Only used when container is provided and not null.\n * @default container.getBoundingClientRect()\n */\n containerRect?: DOMRect | null;\n\n /**\n * The element's rect. Can be supplied to reduce the amount of DOM reads.\n * @default element.getBoundingClientRect()\n */\n elementRect?: DOMRect | null;\n};\n\nexport type CurrentElementVisibility = {\n /**\n * Whether the element is visible in the inline direction.\n */\n inline: boolean;\n\n /**\n * Whether the element is visible in the block direction.\n */\n block: boolean;\n\n /**\n * The percentage of the element that is visible in the inline direction.\n */\n inlineIntersection: number;\n\n /**\n * The percentage of the element that is visible in the block direction.\n */\n blockIntersection: number;\n\n /**\n * Whether the element is intersecting the container.\n */\n isIntersecting: boolean;\n\n /**\n * The ratio of the element that is intersecting the container.\n */\n intersectionRatio: number;\n\n /**\n * The element that is being checked for visibility.\n */\n element: HTMLElement;\n\n /**\n * The container's rect used for the calculation.\n */\n containerRect: DOMRect;\n\n /**\n * The element's rect used for the calculation.\n */\n elementRect: DOMRect;\n};\n\nexport const isElementVisible = (options: IsElementVisibleOptions): CurrentElementVisibility | null => {\n const { container, element } = options;\n\n if (!element) {\n return null;\n }\n\n const elementRect = options.elementRect || element.getBoundingClientRect();\n const containerRect = container ? options.containerRect || container.getBoundingClientRect() : createViewportRect();\n\n const canScroll = elementCanScroll(container);\n\n if (!canScroll) {\n return {\n inline: true,\n block: true,\n blockIntersection: 1,\n inlineIntersection: 1,\n intersectionRatio: 1,\n isIntersecting: true,\n element,\n containerRect,\n elementRect,\n };\n }\n\n const elLeft = elementRect.left;\n const elTop = elementRect.top;\n const elWidth = elementRect.width || 1;\n const elHeight = elementRect.height || 1;\n const elRight = elLeft + elWidth;\n const elBottom = elTop + elHeight;\n\n const conLeft = containerRect.left;\n const conTop = containerRect.top;\n const conRight = conLeft + containerRect.width;\n const conBottom = conTop + containerRect.height;\n\n const isElementInlineVisible = elLeft >= conLeft && elRight <= conRight;\n const isElementBlockVisible = elTop >= conTop && elBottom <= conBottom;\n\n const inlineIntersection = Math.min(elRight, conRight) - Math.max(elLeft, conLeft);\n const blockIntersection = Math.min(elBottom, conBottom) - Math.max(elTop, conTop);\n\n const inlineIntersectionPercentage = clamp(inlineIntersection / elWidth, 0, 1);\n const blockIntersectionPercentage = clamp(blockIntersection / elHeight, 0, 1);\n\n return {\n inline: isElementInlineVisible,\n block: isElementBlockVisible,\n inlineIntersection: inlineIntersectionPercentage,\n blockIntersection: blockIntersectionPercentage,\n isIntersecting: isElementInlineVisible && isElementBlockVisible,\n element,\n containerRect,\n elementRect,\n\n // Round the intersection ratio to the nearest 0.01 to avoid floating point errors and system scaling issues.\n intersectionRatio: Math.round(Math.min(inlineIntersectionPercentage, blockIntersectionPercentage) * 100) / 100,\n };\n};\n\nexport const getElementScrollCoordinates = (options: ScrollToElementOptions): ScrollToOptions => {\n const {\n container,\n element,\n direction,\n behavior = 'smooth',\n origin = 'nearest',\n scrollBlockMargin = 0,\n scrollInlineMargin = 0,\n } = options;\n\n if (!element || !container || !elementCanScroll(container)) {\n return {\n behavior,\n left: undefined,\n top: undefined,\n };\n }\n\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const { scrollLeft, scrollTop } = container;\n const elWidth = elementRect.width;\n const elHeight = elementRect.height;\n const elLeft = elementRect.left;\n const elTop = elementRect.top;\n const elRight = elementRect.right;\n const elBottom = elementRect.bottom;\n\n const conWidth = containerRect.width;\n const conHeight = containerRect.height;\n const conLeft = containerRect.left;\n const conTop = containerRect.top;\n const conRight = containerRect.right;\n const conBottom = containerRect.bottom;\n\n const shouldScrollLeft = direction === 'inline' || direction === 'both' || !direction;\n const shouldScrollTop = direction === 'block' || direction === 'both' || !direction;\n\n let scrollLeftTo = scrollLeft;\n let scrollTopTo = scrollTop;\n\n const relativeTop = elTop - conTop;\n const relativeLeft = elLeft - conLeft;\n\n const calculateScrollToStart = () => {\n scrollLeftTo = scrollLeft + relativeLeft - scrollInlineMargin;\n scrollTopTo = scrollTop + relativeTop - scrollBlockMargin;\n };\n\n const calculateScrollToEnd = () => {\n scrollLeftTo = scrollLeft + relativeLeft - conWidth + elWidth + scrollInlineMargin;\n scrollTopTo = scrollTop + relativeTop - conHeight + elHeight + scrollBlockMargin;\n };\n\n const calculateScrollToCenter = () => {\n scrollLeftTo = scrollLeft + relativeLeft - conWidth / 2 + elWidth / 2;\n scrollTopTo = scrollTop + relativeTop - conHeight / 2 + elHeight / 2;\n };\n\n const calculateScrollToNearest = () => {\n const isAbove = elBottom < conTop;\n const isPartialAbove = elTop < conTop && elBottom > conTop;\n const isBelow = elTop > conBottom;\n const isPartialBelow = elTop < conBottom && elBottom > conBottom;\n\n const isLeft = elRight < conLeft;\n const isPartialLeft = elLeft < conLeft && elRight > conLeft;\n const isRight = elLeft > conRight;\n const isPartialRight = elLeft < conRight && elRight > conRight;\n\n if (isAbove || isPartialAbove || isLeft || isPartialLeft) {\n calculateScrollToStart();\n } else if (isBelow || isPartialBelow || isRight || isPartialRight) {\n calculateScrollToEnd();\n }\n };\n\n switch (origin) {\n case 'start':\n calculateScrollToStart();\n break;\n case 'end':\n calculateScrollToEnd();\n break;\n case 'center':\n calculateScrollToCenter();\n break;\n case 'nearest':\n calculateScrollToNearest();\n break;\n }\n\n return {\n behavior,\n left: shouldScrollLeft ? scrollLeftTo : undefined,\n top: shouldScrollTop ? scrollTopTo : undefined,\n };\n};\n\nexport type ScrollToElementOptions = {\n /**\n * The element to scroll to.\n */\n element?: HTMLElement | null;\n\n /**\n * The scroll container to scroll to the element in.\n * Must be provided - cannot scroll the viewport programmatically with this function.\n */\n container?: HTMLElement | null;\n\n /**\n * The direction to scroll in.\n * @default 'both'\n */\n direction?: 'inline' | 'block' | 'both';\n\n /**\n * The origin of the element to scroll to.\n * @default 'nearest'\n */\n origin?: 'start' | 'end' | 'center' | 'nearest';\n\n /**\n * The scroll behavior.\n * @default 'smooth'\n */\n behavior?: ScrollBehavior;\n\n /**\n * The scroll inline-margin\n * @default 0\n */\n scrollInlineMargin?: number;\n\n /**\n * The scroll block-margin\n * @default 0\n */\n scrollBlockMargin?: number;\n};\n\nexport const scrollToElement = (options: ScrollToElementOptions) => {\n options.container?.scrollTo(getElementScrollCoordinates(options));\n};\n","const MIN_SNAP_DELTA_PX = 1;\n\nexport type ScrollSnapOrigin = 'auto' | 'start' | 'center' | 'end';\n\nexport type ScrollSnapTarget = {\n /** The element to snap to. */\n element: HTMLElement;\n /** The resolved alignment to use when scrolling to the element. */\n origin: 'start' | 'center' | 'end';\n} | null;\n\nexport const getScrollSnapTarget = (\n items: HTMLElement[],\n container: HTMLElement,\n direction: 'horizontal' | 'vertical',\n origin: ScrollSnapOrigin,\n margin = 0,\n): ScrollSnapTarget => {\n if (!items.length) return null;\n\n const containerRect = container.getBoundingClientRect();\n const containerSize = direction === 'horizontal' ? containerRect.width : containerRect.height;\n\n let bestElement: HTMLElement | null = null;\n let bestOrigin: 'start' | 'center' | 'end' = 'start';\n let bestAbsDelta = Infinity;\n\n const updateBest = (element: HTMLElement, o: 'start' | 'center' | 'end', delta: number) => {\n const abs = Math.abs(delta);\n if (abs < bestAbsDelta) {\n bestAbsDelta = abs;\n bestElement = element;\n bestOrigin = o;\n }\n };\n\n for (const item of items) {\n const itemRect = item.getBoundingClientRect();\n const itemSize = direction === 'horizontal' ? itemRect.width : itemRect.height;\n\n const relativeStart =\n direction === 'horizontal' ? itemRect.left - containerRect.left : itemRect.top - containerRect.top;\n const relativeEnd = relativeStart + itemSize;\n\n if (itemSize > containerSize) {\n const isStartEdgeVisible = relativeStart >= 0;\n const isEndEdgeVisible = relativeEnd <= containerSize;\n\n if (!isStartEdgeVisible && !isEndEdgeVisible) continue;\n\n if (isStartEdgeVisible) {\n updateBest(item, 'start', relativeStart - margin);\n } else {\n updateBest(item, 'end', relativeEnd - containerSize + margin);\n }\n continue;\n }\n\n const computeDelta = (o: 'start' | 'center' | 'end') => {\n switch (o) {\n case 'start':\n return relativeStart - margin;\n case 'end':\n return relativeEnd - containerSize + margin;\n case 'center':\n return relativeStart + itemSize / 2 - containerSize / 2;\n }\n };\n\n if (origin === 'auto') {\n for (const o of ['start', 'center', 'end'] as const) {\n updateBest(item, o, computeDelta(o));\n }\n } else {\n updateBest(item, origin, computeDelta(origin));\n }\n }\n\n if (!bestElement || bestAbsDelta < MIN_SNAP_DELTA_PX) return null;\n\n return { element: bestElement, origin: bestOrigin };\n};\n\nexport type ScrollContainerTarget = {\n element: HTMLElement;\n origin: 'start' | 'end';\n} | null;\n\nexport const getScrollContainerTarget = (\n entries: IntersectionObserverEntry[],\n direction: 'start' | 'end',\n): ScrollContainerTarget => {\n const firstVisible = entries.find((i) => i.intersectionRatio > 0);\n const lastVisible = [...entries].reverse().find((i) => i.intersectionRatio > 0);\n const relevantEntry = direction === 'start' ? firstVisible : lastVisible;\n\n if (!relevantEntry) return null;\n\n const relevantIndex = entries.indexOf(relevantEntry);\n const nextIndex =\n relevantEntry.intersectionRatio !== 1\n ? relevantIndex\n : direction === 'start'\n ? relevantIndex - 1\n : relevantIndex + 1;\n\n const element = (entries[nextIndex]?.target as HTMLElement) ?? (relevantEntry.target as HTMLElement);\n\n return { element, origin: direction === 'end' ? 'start' : 'end' };\n};\n\nexport type ScrollItemTarget = {\n element: HTMLElement;\n index: number;\n origin: 'start' | 'end' | 'center';\n} | null;\n\nexport const getScrollItemTarget = (\n entries: IntersectionObserverEntry[],\n container: HTMLElement,\n direction: 'start' | 'end',\n scrollOrigin: 'auto' | 'center' | 'start' | 'end',\n axisDirection: 'horizontal' | 'vertical',\n): ScrollItemTarget => {\n const firstVisible = entries.find((i) => i.intersectionRatio > 0);\n const lastVisible = [...entries].reverse().find((i) => i.intersectionRatio > 0);\n\n if (!firstVisible || !lastVisible) return null;\n\n const firstIndex = entries.indexOf(firstVisible);\n const lastIndex = entries.indexOf(lastVisible);\n const containerRect = container.getBoundingClientRect();\n\n // Only a single item is visible - it must be oversized (wider/taller than the container).\n if (firstVisible === lastVisible) {\n const itemRect = firstVisible.target.getBoundingClientRect();\n const isStartEdgeVisible =\n axisDirection === 'horizontal'\n ? Math.round(itemRect.left) >= Math.round(containerRect.left)\n : Math.round(itemRect.top) >= Math.round(containerRect.top);\n const isEndEdgeVisible =\n axisDirection === 'horizontal'\n ? Math.round(itemRect.right) <= Math.round(containerRect.right)\n : Math.round(itemRect.bottom) <= Math.round(containerRect.bottom);\n\n if (!isStartEdgeVisible || !isEndEdgeVisible) {\n if (direction === 'start') {\n if (isStartEdgeVisible) {\n const prevIndex = firstIndex - 1;\n const element = entries[prevIndex]?.target as HTMLElement | undefined;\n if (!element) return null;\n\n return { element, index: prevIndex, origin: 'end' };\n }\n\n return { element: firstVisible.target as HTMLElement, index: firstIndex, origin: 'start' };\n } else {\n if (isEndEdgeVisible) {\n const nextIndex = lastIndex + 1;\n const element = entries[nextIndex]?.target as HTMLElement | undefined;\n if (!element) return null;\n\n return { element, index: nextIndex, origin: 'start' };\n }\n return { element: lastVisible.target as HTMLElement, index: lastIndex, origin: 'end' };\n }\n }\n } else if (scrollOrigin === 'center') {\n const entry = direction === 'start' ? firstVisible : lastVisible;\n const index = direction === 'start' ? firstIndex : lastIndex;\n\n return { element: entry.target as HTMLElement, index, origin: 'center' };\n }\n\n const entry = direction === 'start' ? firstVisible : lastVisible;\n const entryIndex = direction === 'start' ? firstIndex : lastIndex;\n\n if (Math.round(entry.intersectionRatio) === 1) {\n if (direction === 'start' && entryIndex === 0) return null;\n if (direction === 'end' && entryIndex === entries.length - 1) return null;\n\n const nextIndex = direction === 'start' ? entryIndex - 1 : entryIndex + 1;\n const element = entries[nextIndex]?.target as HTMLElement | undefined;\n if (!element) return null;\n\n return { element, index: nextIndex, origin: direction };\n }\n\n return { element: entry.target as HTMLElement, index: entryIndex, origin: direction };\n};\n","import { DestroyRef, ElementRef, NgZone, Signal, effect, inject, signal, untracked } from '@angular/core';\nimport { isElementVisible } from '../scrolling';\nimport {\n ElementSignalValue,\n SignalElementBindingType,\n buildElementSignal,\n createEmptyElementSignal,\n firstElementSignal,\n} from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {\n root?: SignalElementBindingType;\n enabled?: Signal<boolean>;\n};\n\nexport type IntersectionObserverEntryWithDetails = IntersectionObserverEntry & {\n isAbove: boolean;\n isBelow: boolean;\n isLeft: boolean;\n isRight: boolean;\n isVisible: boolean;\n};\n\nconst createPositionObject = (entry: IntersectionObserverEntry) => {\n const boundingRect = entry.boundingClientRect;\n const rootBounds = entry.rootBounds;\n\n let isAbove = false;\n let isBelow = false;\n let isLeft = false;\n let isRight = false;\n\n if (rootBounds) {\n isAbove = boundingRect.bottom < rootBounds.top;\n isBelow = boundingRect.top > rootBounds.bottom;\n isLeft = boundingRect.right < rootBounds.left;\n isRight = boundingRect.left > rootBounds.right;\n }\n\n // We cant use entry.isIntersecting to determine actual visibility since we are using a big threshold array to get more intersection events.\n const isVisible = !isAbove && !isBelow && !isLeft && !isRight && entry.intersectionRatio > 0;\n\n return {\n isAbove,\n isBelow,\n isLeft,\n isRight,\n isVisible,\n };\n};\n\nexport const signalElementIntersection = (el: SignalElementBindingType, options?: SignalElementIntersectionOptions) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const root = firstElementSignal(options?.root ? buildElementSignal(options?.root) : createEmptyElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = options?.enabled ?? signal(true);\n\n const elementIntersectionSignal = signal<IntersectionObserverEntryWithDetails[]>([]);\n const observer = signal<IntersectionObserver | null>(null);\n\n const currentlyObservedElements = new Set<HTMLElement>();\n\n const updateIntersections = (entries: IntersectionObserverEntry[]) => {\n let currentValues = [...elementIntersectionSignal()];\n\n for (const entry of entries) {\n const existingEntryIndex = currentValues.findIndex((v) => v.target === entry.target);\n\n // Round the intersection ratio to the nearest 0.01 to avoid floating point errors and system scaling issues.\n const roundedIntersectionRatio = Math.round(entry.intersectionRatio * 100) / 100;\n\n const intersectionEntry: IntersectionObserverEntryWithDetails = {\n boundingClientRect: entry.boundingClientRect,\n intersectionRatio: roundedIntersectionRatio,\n intersectionRect: entry.intersectionRect,\n isIntersecting: entry.isIntersecting,\n rootBounds: entry.rootBounds,\n target: entry.target,\n time: entry.time,\n ...createPositionObject(entry),\n };\n\n if (existingEntryIndex !== -1) {\n currentValues = [\n ...currentValues.slice(0, existingEntryIndex),\n intersectionEntry,\n ...currentValues.slice(existingEntryIndex + 1),\n ];\n } else {\n currentValues = [...currentValues, intersectionEntry];\n }\n }\n\n zone.run(() => elementIntersectionSignal.set(currentValues));\n };\n\n const updateIntersectionObserver = (rendered: boolean, enabled: boolean, rootEl: HTMLElement | null) => {\n observer()?.disconnect();\n currentlyObservedElements.clear();\n\n if (!rendered || !enabled) {\n observer.set(null);\n\n return;\n }\n\n const newObserver = new IntersectionObserver((entries) => updateIntersections(entries), {\n ...options,\n root: rootEl,\n });\n\n observer.set(newObserver);\n };\n\n const updateObservedElements = (observer: IntersectionObserver | null, elements: ElementSignalValue) => {\n const rootEl = root().currentElement;\n\n if (!observer) return;\n\n const currIntersectionValue = elementIntersectionSignal();\n const newIntersectionValue: IntersectionObserverEntryWithDetails[] = [];\n\n for (const el of elements.currentElements) {\n if (currentlyObservedElements.has(el)) {\n const existingEntryIndex = currIntersectionValue.findIndex((v) => v.target === el);\n const existingEntry = currIntersectionValue[existingEntryIndex];\n\n if (!existingEntry) {\n console.warn('Could not find existing entry for element. The intersection observer might be broken now.', el);\n continue;\n }\n\n newIntersectionValue.push(existingEntry);\n continue;\n }\n\n const initialElementVisibility = isElementVisible({\n container: rootEl,\n element: el,\n });\n\n if (!initialElementVisibility) {\n console.error('No visibility data found for element.', {\n element: el,\n container: rootEl,\n });\n\n continue;\n }\n\n const intersectionEntry: IntersectionObserverEntry = {\n boundingClientRect: initialElementVisibility.elementRect,\n intersectionRatio: initialElementVisibility.intersectionRatio,\n intersectionRect: initialElementVisibility.elementRect,\n isIntersecting: initialElementVisibility.isIntersecting,\n rootBounds: initialElementVisibility.containerRect,\n target: el,\n time: performance.now(),\n };\n\n newIntersectionValue.push({\n ...intersectionEntry,\n ...createPositionObject(intersectionEntry),\n });\n\n currentlyObservedElements.add(el);\n observer.observe(el);\n }\n\n for (const el of elements.previousElements) {\n if (elements.currentElements.includes(el)) continue;\n\n observer.unobserve(el);\n currentlyObservedElements.delete(el);\n }\n\n elementIntersectionSignal.set(newIntersectionValue);\n };\n\n effect(() => {\n const rootEl = root().currentElement;\n const rendered = isRendered();\n const enabled = isEnabled();\n\n untracked(() => updateIntersectionObserver(rendered, enabled, rootEl));\n });\n\n effect(() => {\n const els = elements();\n const obs = observer();\n\n untracked(() => updateObservedElements(obs, els));\n });\n\n destroyRef.onDestroy(() => observer()?.disconnect());\n\n return elementIntersectionSignal.asReadonly();\n};\n\nexport const signalHostElementIntersection = (options?: SignalElementIntersectionOptions) =>\n signalElementIntersection(inject<ElementRef<HTMLElement>>(ElementRef), options);\n","import { DestroyRef, ElementRef, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, of, switchMap, tap } from 'rxjs';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from './element';\n\nexport type ElementLastScrollDirectionType = 'up' | 'down' | 'left' | 'right';\n\nexport type ElementLastScrollDirection = {\n type: ElementLastScrollDirectionType;\n time: number;\n};\n\nexport const signalElementLastScrollDirection = (el: SignalElementBindingType) => {\n const elements = buildElementSignal(el);\n const element = firstElementSignal(elements);\n const destroyRef = inject(DestroyRef);\n const lastScrollDirection = signal<ElementLastScrollDirection | null>(null);\n\n let lastScrollTop = 0;\n let lastScrollLeft = 0;\n\n toObservable(element)\n .pipe(\n switchMap(({ currentElement }) => {\n if (!currentElement) {\n lastScrollDirection.set(null);\n lastScrollTop = 0;\n lastScrollLeft = 0;\n\n return of(null);\n }\n\n return fromEvent(currentElement, 'scroll').pipe(\n tap(() => {\n const { scrollTop, scrollLeft } = currentElement;\n const time = Date.now();\n\n if (scrollTop > lastScrollTop) {\n lastScrollDirection.set({ type: 'down', time });\n } else if (scrollTop < lastScrollTop) {\n lastScrollDirection.set({ type: 'up', time });\n } else if (scrollLeft > lastScrollLeft) {\n lastScrollDirection.set({ type: 'right', time });\n } else if (scrollLeft < lastScrollLeft) {\n lastScrollDirection.set({ type: 'left', time });\n }\n\n lastScrollTop = scrollTop;\n lastScrollLeft = scrollLeft;\n }),\n );\n }),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n\n return lastScrollDirection.asReadonly();\n};\n\nexport const signalHostElementLastScrollDirection = () =>\n signalElementLastScrollDirection(inject<ElementRef<HTMLElement>>(ElementRef));\n","import { DOCUMENT, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map } from 'rxjs';\nimport { memoizeSignal } from './signal-data-utils';\n\n/**\n * A signal for whether this page is the one the reader is actually looking at - `false` for a backgrounded\n * tab or a minimised window.\n *\n * Not the same question as whether an element is on screen: an IntersectionObserver reports a fully visible\n * element in a background tab, because the tab's own visibility is no part of what it measures. Anything\n * that moves on its own needs to ask both, and a timer is not a substitute - browsers throttle timers in a\n * hidden tab rather than stopping them, so work keeps piling up out of sight.\n */\nexport const injectIsDocumentVisible = /* @__PURE__ */ memoizeSignal<boolean>(() => {\n const document = inject(DOCUMENT);\n const isVisible = () => document.visibilityState === 'visible';\n\n return toSignal(fromEvent(document, 'visibilitychange').pipe(map(isVisible)), { initialValue: isVisible() });\n});\n","import { ElementRef, Signal, computed, effect, inject } from '@angular/core';\nimport { equal } from '../utils';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from './element';\nimport { NullableElementDimensions, signalElementDimensions } from './element-dimensions';\nimport { signalElementMutations } from './element-mutations';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementScrollStateOptions = {\n /** The initial scroll position to scroll to. Once a truthy value get's emitted, all further values will be ignored. */\n initialScrollPosition?: Signal<ScrollToOptions | null>;\n\n /**\n * What the underlying `MutationObserver` watches for - a proxy for \"the content may have changed size, so\n * re-measure whether it still overflows\". The default is deliberately broad.\n *\n * Narrow it wherever the consumer knows better. `attributes: true` means every inline style or class write\n * anywhere in the subtree re-runs the measurement, and the measurement reads `scrollWidth`/`scrollHeight`\n * - so a descendant written to per animation frame buys a forced layout per frame.\n */\n mutations?: MutationObserverInit;\n};\n\nconst DEFAULT_SCROLL_STATE_MUTATIONS: MutationObserverInit = { childList: true, subtree: true, attributes: true };\n\nexport type ElementScrollState = {\n canScroll: boolean;\n canScrollHorizontally: boolean;\n canScrollVertically: boolean;\n elementDimensions: NullableElementDimensions;\n};\n\nexport const areScrollStatesEqual = (a: ElementScrollState, b: ElementScrollState) => {\n return (\n a.canScroll === b.canScroll &&\n a.canScrollHorizontally === b.canScrollHorizontally &&\n a.canScrollVertically === b.canScrollVertically &&\n equal(a.elementDimensions, b.elementDimensions)\n );\n};\n\nexport const signalElementScrollState = (el: SignalElementBindingType, options?: SignalElementScrollStateOptions) => {\n const elements = buildElementSignal(el);\n const observedEl = firstElementSignal(elements);\n const elementDimensions = signalElementDimensions(elements);\n const elementMutations = signalElementMutations(elements, options?.mutations ?? DEFAULT_SCROLL_STATE_MUTATIONS);\n const isRendered = signalIsRendered();\n\n const initialScrollPosition = options?.initialScrollPosition;\n\n if (initialScrollPosition) {\n const ref = effect(() => {\n if (!isRendered()) return;\n\n const scrollPosition = initialScrollPosition();\n const element = observedEl().currentElement;\n\n if (scrollPosition && element) {\n if (scrollPosition.left !== undefined) element.scrollLeft = scrollPosition.left;\n if (scrollPosition.top !== undefined) element.scrollTop = scrollPosition.top;\n ref.destroy();\n }\n });\n }\n\n const notScrollable = (dimensions: NullableElementDimensions) => ({\n canScroll: false,\n canScrollHorizontally: false,\n canScrollVertically: false,\n elementDimensions: dimensions,\n });\n\n return computed<ElementScrollState>(\n () => {\n const element = observedEl().currentElement;\n const dimensions = elementDimensions();\n\n // We are not interested what the mutation is, just that there is one.\n // Changes to the DOM can affect the scroll state of the element.\n elementMutations();\n\n if (!element || !isRendered()) return notScrollable(dimensions);\n\n const { scrollWidth, scrollHeight, clientHeight, clientWidth } = element;\n\n const canScrollHorizontally = scrollWidth > clientWidth;\n const canScrollVertically = scrollHeight > clientHeight;\n\n return {\n canScroll: canScrollHorizontally || canScrollVertically,\n canScrollHorizontally,\n canScrollVertically,\n elementDimensions: dimensions,\n };\n },\n { equal: (a, b) => areScrollStatesEqual(a, b) },\n );\n};\n\nexport const signalHostElementScrollState = () => signalElementScrollState(inject<ElementRef<HTMLElement>>(ElementRef));\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, effect, inject, PLATFORM_ID } from '@angular/core';\nimport { injectRenderer } from '../../providers';\nimport { injectScrollbarDimensions, injectViewportDimensions } from '../media-queries';\n\nlet hasWrittenScrollbarSizes = false;\n\n/**\n * Applies scrollbar size CSS variables to the documentElement (html tag) in pixels.\n * - `--et-sw`: scrollbar width\n * - `--et-sh`: scrollbar height\n */\nexport const writeScrollbarSizeToCssVariables = () => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n if (hasWrittenScrollbarSizes) {\n return;\n }\n hasWrittenScrollbarSizes = true;\n\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const scrollbarDimensions = injectScrollbarDimensions();\n\n effect(() => {\n const dimensions = scrollbarDimensions();\n\n if (!dimensions) return;\n\n renderer.setCssProperties(document.documentElement, {\n '--et-sw': `${dimensions.width}px`,\n '--et-sh': `${dimensions.height}px`,\n });\n });\n};\n\nlet hasWrittenViewportSizes = false;\n\n/**\n * Applies viewport size CSS variables to the documentElement (html tag) in pixels.\n * - `--et-vw`: viewport width excluding scrollbar width\n * - `--et-vh`: viewport height excluding scrollbar height\n */\nexport const writeViewportSizeToCssVariables = () => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n if (hasWrittenViewportSizes) {\n return;\n }\n hasWrittenViewportSizes = true;\n\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const htmlElementDimensions = injectViewportDimensions();\n\n effect(() => {\n const dimensions = htmlElementDimensions().rect?.();\n\n if (!dimensions) return;\n\n renderer.setCssProperties(document.documentElement, {\n '--et-vw': `${dimensions.width}px`,\n '--et-vh': `${dimensions.height}px`,\n });\n });\n};\n","import { DOCUMENT, DestroyRef, Signal, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, map, merge, of, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { injectRenderer } from '../../providers';\nimport { SignalElementBindingType, buildElementSignal, firstElementSignal } from '../element';\nimport { signalElementScrollState } from '../element-scroll-state';\nimport { MaybeSignal, maybeSignalValue } from '../signal-data-utils';\n\nexport type CursorDragScrollDirection = 'horizontal' | 'vertical' | 'both';\n\nexport type CursorDragScrollOptions = {\n /** If true, cursor drag scrolling will be enabled. */\n enabled?: Signal<boolean>;\n\n /** The allowed scroll direction. */\n allowedDirection?: MaybeSignal<CursorDragScrollDirection>;\n\n /**\n * Whether the element overflows in the allowed direction - there is nothing to drag if it does not.\n *\n * Measured here when it isn't supplied, which means a MutationObserver and a ResizeObserver of its own.\n * Hand it over wherever the caller already knows: a scrollable that tracks its own scroll state was ending\n * up with two observers watching the same element for the same thing, and both of them re-measured\n * `scrollWidth` - a forced layout - on every inline style written anywhere inside it.\n */\n canScroll?: Signal<boolean>;\n};\n\n/** The deadzone in pixels after which the cursor drag scroll will take effect. */\nconst CURSOR_DRAG_SCROLL_DEADZONE = 5;\n\n/** `MouseEvent.button` for the primary button. A secondary click opens a menu; it does not drag. */\nconst PRIMARY_MOUSE_BUTTON = 0;\n\n/** The class that is added to the element when the cursor is being dragged. */\nconst CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';\nconst CURSOR_DRAG_INIT_CLASS = 'et-cursor-drag-scroll--init';\n\n/** A function to apply cursor drag scroll behavior to an element. */\nexport const useCursorDragScroll = (el: SignalElementBindingType, options?: CursorDragScrollOptions) => {\n const elements = buildElementSignal(el);\n const element = firstElementSignal(elements);\n const destroyRef = inject(DestroyRef);\n const { enabled = signal(true), allowedDirection = 'both' } = options ?? {};\n const renderer = injectRenderer();\n const isDragging = signal(false);\n const isInitDragging = signal(false);\n const initialDragPosition = signal({ x: 0, y: 0 });\n const initialScrollPosition = signal({ x: 0, y: 0 });\n const dragAmount = signal({ x: 0, y: 0 });\n const document = inject(DOCUMENT);\n\n // Only measured when the caller hasn't already: this costs a MutationObserver and a ResizeObserver.\n const suppliedCanScroll = options?.canScroll;\n const measuredScrollState = suppliedCanScroll ? null : signalElementScrollState(elements);\n\n const measuredCanScroll = computed(() => {\n const currentScrollState = measuredScrollState?.();\n\n if (!currentScrollState) return false;\n\n const direction = maybeSignalValue(allowedDirection);\n\n switch (direction) {\n case 'both':\n return currentScrollState.canScrollHorizontally || currentScrollState.canScrollVertically;\n case 'horizontal':\n return currentScrollState.canScrollHorizontally;\n case 'vertical':\n return currentScrollState.canScrollVertically;\n }\n });\n\n const canScroll = suppliedCanScroll ?? measuredCanScroll;\n\n // Cleanup if the element the cursor drag scroll is bound to gets changed\n effect(() => {\n const { previousElement } = element();\n\n if (previousElement) {\n renderer.removeStyle(previousElement, 'cursor');\n }\n });\n\n // Conditionally apply styles/classes to the element and the document\n effect(() => {\n const currCanScroll = canScroll();\n const isEnabled = enabled();\n const currIsDragging = isDragging();\n const currIsInitDragging = isInitDragging();\n\n untracked(() => {\n const el = element().currentElement;\n\n if (!el) return;\n\n if (!currCanScroll || !isEnabled) {\n renderer.removeStyles(el, 'cursor', 'scrollSnapType', 'scrollBehavior');\n renderer.removeStyle(document.documentElement, 'cursor');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_INIT_CLASS);\n\n return;\n }\n\n if (currIsInitDragging) {\n renderer.addClass(el, CURSOR_DRAG_INIT_CLASS);\n }\n\n if (currIsDragging) {\n renderer.addClass(el, CURSOR_DRAG_SCROLLING_CLASS);\n renderer.setStyle(el, {\n cursor: 'grabbing',\n scrollSnapType: 'none',\n scrollBehavior: 'unset',\n });\n\n renderer.setStyle(document.documentElement, {\n cursor: 'grabbing',\n });\n }\n\n if (!currIsInitDragging && !currIsDragging) {\n renderer.setStyle(el, {\n cursor: 'grab',\n });\n renderer.removeStyles(el, 'scrollSnapType', 'scrollBehavior');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_INIT_CLASS);\n renderer.removeStyle(document.documentElement, 'cursor');\n }\n });\n });\n\n // Update the element's scroll position when the user drags\n effect(() => {\n const currDragAmount = dragAmount();\n\n untracked(() => {\n const currIsDragging = isDragging();\n const el = element().currentElement;\n const { x: dragX, y: dragY } = currDragAmount;\n const { x: scrollX, y: scrollY } = initialScrollPosition();\n const currAllowedDirection = maybeSignalValue(allowedDirection);\n\n if (!el || !currIsDragging) return;\n\n switch (currAllowedDirection) {\n case 'both':\n el.scroll({\n top: dragY + scrollY,\n left: dragX + scrollX,\n behavior: 'instant',\n });\n break;\n case 'horizontal':\n el.scroll({\n left: dragX + scrollX,\n behavior: 'instant',\n });\n break;\n case 'vertical':\n el.scroll({\n top: dragY + scrollY,\n behavior: 'instant',\n });\n break;\n }\n });\n });\n\n const updateDragging = (e: MouseEvent) => {\n const el = element().currentElement;\n\n if (!el) return;\n\n const dx = (e.clientX - initialDragPosition().x) * -1;\n const dy = (e.clientY - initialDragPosition().y) * -1;\n\n dragAmount.set({ x: dx, y: dy });\n\n if (Math.abs(dx) > CURSOR_DRAG_SCROLL_DEADZONE || Math.abs(dy) > CURSOR_DRAG_SCROLL_DEADZONE) {\n isDragging.set(true);\n }\n };\n\n const updateDraggingEnd = () => {\n isDragging.set(false);\n isInitDragging.set(false);\n initialDragPosition.set({ x: 0, y: 0 });\n initialScrollPosition.set({ x: 0, y: 0 });\n dragAmount.set({ x: 0, y: 0 });\n };\n\n const setupDragging = (e: MouseEvent) => {\n // A context menu takes the pointer away without ever delivering a `mouseup` - so without it in here, a\n // right click (or a ctrl-click on a Mac, which is the primary button) leaves the drag latched on and\n // every later mouse move scrolls the container.\n const dragEnd = merge(fromEvent<MouseEvent>(document, 'mouseup'), fromEvent<MouseEvent>(document, 'contextmenu'));\n const mouseMove = fromEvent<MouseEvent>(document, 'mousemove');\n const el = element().currentElement;\n\n if (!el) return;\n\n mouseMove\n .pipe(\n takeUntilDestroyed(destroyRef),\n takeUntil(dragEnd),\n tap((e) => updateDragging(e)),\n )\n .subscribe();\n\n dragEnd\n .pipe(\n take(1),\n takeUntilDestroyed(destroyRef),\n tap(() => updateDraggingEnd()),\n )\n .subscribe();\n\n initialDragPosition.set({ x: e.clientX, y: e.clientY });\n initialScrollPosition.set({ x: el.scrollLeft, y: el.scrollTop });\n isInitDragging.set(true);\n };\n\n toObservable(element)\n .pipe(\n map((e) => e?.currentElement),\n switchMap((el) => (el ? fromEvent<MouseEvent>(el, 'mousedown') : of(null))),\n filter((e): e is MouseEvent => !!e),\n filter((e) => e.button === PRIMARY_MOUSE_BUTTON),\n filter(() => enabled()),\n tap((e) => setupDragging(e)),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n return {\n isDragging: isDragging.asReadonly(),\n currentDragAmount: dragAmount.asReadonly(),\n };\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injector, PLATFORM_ID, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Data, NavigationEnd, NavigationSkipped, Params, Router } from '@angular/router';\nimport { equal } from '../utils';\nimport { memoizeSignal, previousSignalValue } from './signal-data-utils';\n\nexport type RouterState = {\n data: Data;\n pathParams: Params;\n queryParams: Params;\n title: string | null;\n fragment: string | null;\n};\n\nexport const ET_PROPERTY_REMOVED = /* @__PURE__ */ Symbol('ET_PROPERTY_REMOVED');\n\nexport type InjectUtilConfig = {\n /** The injector to use for the injection. Must be provided if the function is not called from within a injection context. */\n injector?: Injector;\n};\n\nexport type InjectUtilTransformConfig<In, Out> = {\n /**\n * A transform function similar to the `transform` function in Angular input bindings.\n * Can be used to transform the value before it is returned.\n * E.g. transforming `\"true\"` to `true` for a boolean attribute.\n */\n transform?: (value: In) => Out;\n};\n\nexport const transformOrReturn = <In, Out>(src: Signal<In>, config?: InjectUtilTransformConfig<In, Out>) => {\n const transformer = config?.transform;\n\n if (transformer) {\n return computed(() => transformer(src()));\n }\n\n return src as unknown as Signal<Out>;\n};\n\nconst createInitialRoute = () => {\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const router = inject(Router);\n\n if (!isBrowser) {\n return router.url;\n }\n\n return window.location.pathname + window.location.search + window.location.hash;\n};\n\n/** Inject the current router event */\nexport const injectRouterEvent = /* @__PURE__ */ memoizeSignal(() => {\n const router = inject(Router);\n\n const initialRoute = createInitialRoute();\n\n return toSignal(router.events, {\n initialValue: new NavigationEnd(-1, initialRoute, initialRoute),\n });\n});\n\n/**\n * Signal that indicates whether the router has been initialized.\n * The router is considered initialized once the first NavigationEnd event with an id different than -1 has been emitted.\n */\nexport const injectIsRouterInitialized = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n\n return computed(() => {\n const e = event();\n\n return (e instanceof NavigationEnd && e.id !== -1) || e instanceof NavigationSkipped;\n });\n});\n\n/**\n * Inject the current url.\n * The url includes query params as well as the fragment. Use `injectRoute` instead if you are not intrusted in those.\n * @example \"/my-page?query=1&param=true#fragment\"\n */\nexport const injectUrl = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n const router = inject(Router);\n\n // Captured once for reads that happen before the router has committed any\n // navigation (SSR / initial load), where `router.url` isn't reliable yet.\n const initialRoute = createInitialRoute();\n\n return computed(() => {\n // We depend on `event` and `currentNavigation` only to get re-evaluated\n // around each navigation, but we read the *committed* url straight from the\n // router. The router commits `currentUrlTree` before it activates components,\n // so `router.url` is already correct inside a child component's constructor -\n // unlike the NavigationEnd event, which only reaches this signal *after*\n // activation.\n event();\n const currentNavigation = router.currentNavigation();\n\n // Before the very first navigation the router url isn't populated yet (e.g.\n // SSR / a deep link read before the initial navigation runs), so fall back\n // to the browser location captured at startup. `navigated` flips only at\n // NavigationEnd, so we also check for an in-flight navigation to stay correct\n // during the initial navigation's component construction.\n if (router.navigated || currentNavigation !== null) {\n return router.url;\n }\n\n return initialRoute;\n });\n});\n\n/**\n * Inject the current route\n * @example \"/my-page\"\n */\nexport const injectRoute = /* @__PURE__ */ memoizeSignal(() => {\n const url = injectUrl();\n\n return computed(() => {\n const fullUrl = url();\n const urlWithoutQueryParams = fullUrl.split('?')[0] ?? '';\n const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';\n\n return withoutFragment;\n });\n});\n\nexport const createRouterState = (router: Router): RouterState => {\n let route = router.routerState.snapshot.root;\n\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n const { data, params, queryParams, title, fragment } = route;\n\n return {\n data,\n pathParams: params,\n queryParams,\n title: title ?? null,\n fragment,\n };\n};\n\n/**\n * Read the current route (the committed url without query params and fragment) straight from the router.\n * Unlike the `injectRoute` signal this reads synchronously, so it can be used inside a `router.events` handler\n * where `router.url` is already committed. Falls back to the browser location before the first navigation commits.\n */\nexport const createRoute = (router: Router) => {\n const url = router.navigated ? router.url : window.location.pathname + window.location.search + window.location.hash;\n\n return url.split('?')[0]?.split('#')[0] ?? '';\n};\n\n/**\n * Inject the complete router state. This includes the current route data, path params, query params, title and fragment.\n */\nexport const injectRouterState = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n const router = inject(Router);\n\n return computed<RouterState>(\n () => {\n event();\n\n return createRouterState(router);\n },\n { equal },\n );\n});\n\n/** Inject a signal containing the current route fragment (the part after the # inside the url if present) */\nexport const injectFragment = <T = string | null>(\n config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>,\n) => {\n const routerState = injectRouterState();\n const fragment = computed(() => routerState().fragment);\n\n return transformOrReturn(fragment, config);\n};\n\n/** Inject all currently available query parameters as a signal */\nexport const injectQueryParams = () => {\n const routerState = injectRouterState();\n\n const queryParams = computed(() => routerState().queryParams);\n\n return queryParams;\n};\n\n/** Inject all currently available route data as a signal */\nexport const injectRouteData = () => {\n const routerState = injectRouterState();\n\n const data = computed(() => routerState().data);\n\n return data;\n};\n\n/** Inject the current route title as a signal */\nexport const injectRouteTitle = <T = string | null>(config?: InjectUtilTransformConfig<string | null, T>) => {\n const routerState = injectRouterState();\n const title = computed(() => routerState().title);\n\n return transformOrReturn(title, config);\n};\n\n/** Inject all currently available path parameters as a signal */\nexport const injectPathParams = () => {\n const routerState = injectRouterState();\n\n const pathParams = computed(() => routerState().pathParams);\n\n return pathParams;\n};\n\nexport type InjectQueryParamConfig<T> = InjectUtilTransformConfig<string | null, T> & {\n /**\n * If true, the initial value will be read from the browser's url.\n * Note that this will not work with arrays or complex objects.\n */\n requireSync?: boolean;\n};\n\nconst getQueryParamFromUrl = (key: string): string | null => {\n if (typeof window === 'undefined') return null;\n\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(key);\n};\n\n/** Inject a specific query parameter as a signal */\nexport const injectQueryParam = <T = string | null>(key: string, config?: InjectQueryParamConfig<T>) => {\n const queryParams = injectQueryParams();\n const src = computed(() => queryParams()[key] ?? (config?.requireSync ? getQueryParamFromUrl(key) : null)) as Signal<\n string | null\n >;\n\n return transformOrReturn(src, config);\n};\n\n/** Inject a specific route data item as a signal */\nexport const injectRouteDataItem = <T = unknown>(key: string, config?: InjectUtilTransformConfig<unknown, T>) => {\n const data = injectRouteData();\n const src = computed(() => data()[key] ?? null) as Signal<T>;\n\n return transformOrReturn(src, config);\n};\n\n/** Inject a specific path parameter as a signal */\nexport const injectPathParam = <T = string | null>(\n key: string,\n config?: InjectUtilTransformConfig<string | null, T>,\n) => {\n const pathParams = injectPathParams();\n const src = computed(() => pathParams()[key] ?? null) as Signal<string | null>;\n\n return transformOrReturn(src, config);\n};\n\n/**\n * Inject query params that changed during navigation. Unchanged query params will be ignored.\n * Removed query params will be represented by the symbol `ET_PROPERTY_REMOVED`.\n */\nexport const injectQueryParamChanges = /* @__PURE__ */ memoizeSignal(() => {\n const queryParams = injectQueryParams();\n const prevQueryParams = previousSignalValue(queryParams);\n\n return computed(() => {\n const current = queryParams();\n const previous = prevQueryParams() ?? {};\n\n const changes: Record<string, unknown> = {};\n\n const allKeys = new Set<keyof typeof previous & keyof typeof current>([\n ...Object.keys(previous),\n ...Object.keys(current),\n ]);\n\n for (const key of allKeys) {\n if (!equal(previous[key], current[key])) {\n const val = current[key] === undefined ? ET_PROPERTY_REMOVED : current[key];\n\n changes[key] = val;\n }\n }\n\n return changes;\n });\n});\n\n/**\n * Inject path params that changed during navigation. Unchanged path params will be ignored.\n * Removed path params will be represented by the symbol `ET_PROPERTY_REMOVED`.\n */\nexport const injectPathParamChanges = /* @__PURE__ */ memoizeSignal(() => {\n const pathParams = injectPathParams();\n const prevPathParams = previousSignalValue(pathParams);\n\n return computed(() => {\n const current = pathParams();\n const previous = prevPathParams() ?? {};\n\n const changes: Record<string, unknown> = {};\n\n const allKeys = new Set<keyof typeof previous & keyof typeof current>([\n ...Object.keys(previous),\n ...Object.keys(current),\n ]);\n\n for (const key of allKeys) {\n if (!equal(previous[key], current[key])) {\n const val = current[key] === undefined ? ET_PROPERTY_REMOVED : current[key];\n\n changes[key] = val;\n }\n }\n\n return changes;\n });\n});\n\n/**\n * The state handed to the navigation that is currently in progress, i.e. what\n * `router.navigate(…, { state })` passed - typed to whatever you expect.\n *\n * Read **synchronously**, in a constructor or a resolver, and deliberately not a signal: navigation state exists\n * only for the duration of the navigation that carries it. By the time an effect flushed, the navigation would be\n * over and the answer always `null`. Returns `null` when there is no navigation in flight or it carried no state -\n * which is the normal case for a page arrived at by typing its URL, so always handle it.\n *\n * Use it for the things a URL should not carry: a \"you were redirected because…\" reason, a pre-fetched object the\n * previous page already had, a scroll intent. Anything the page needs to survive a reload belongs in the URL.\n *\n * @example\n * type CheckoutNavState = { fromCart: boolean };\n *\n * export class CheckoutComponent {\n * private navState = injectRouterNavigationState<CheckoutNavState>();\n *\n * protected cameFromCart = this.navState?.fromCart ?? false;\n * }\n */\nexport const injectRouterNavigationState = <T>(): T | null => {\n const router = inject(Router);\n\n return (router.getCurrentNavigation()?.extras.state as T | undefined) ?? null;\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, DestroyRef, DOCUMENT, inject, Injector, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationSkipped, NavigationStart, Params, Router } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { defineRootProvider, toInjectFn } from '../../utils';\nimport { createRoute, createRouterState } from '../router';\n\n/**\n * The element that gets scrolled. Pass a function if the scroll container is created per route or\n * only exists after the app shell rendered - it is resolved on every navigation instead of once at\n * setup time.\n * @default document.documentElement\n */\nexport type ScrollRestorationScrollElement = HTMLElement | (() => HTMLElement | null | undefined);\n\nexport type ScrollRestorationRestoreConfig = {\n /**\n * Restore the previous scroll offset when the user navigates back or forward through the browser\n * history, instead of scrolling to top.\n *\n * The offset is not applied on the loading frame: query driven pages render skeletons/empty states\n * first, so the document is far shorter than it was when the user left. Restoration waits until\n * the content is tall enough to actually reach the saved offset (see `timeout`).\n * @default false\n */\n enabled?: boolean;\n\n /**\n * How long to keep waiting (in ms) for the content to grow tall enough to reach the saved offset.\n * The clock is suspended while a {@link holdScrollRestoration} registration reads `true`.\n * @default 1000\n */\n timeout?: number;\n\n /**\n * Absolute upper bound (in ms) for a single restoration attempt, regardless of\n * {@link holdScrollRestoration} registrations. Guards against a page that never stops loading.\n * @default 10000\n */\n maxTimeout?: number;\n\n /**\n * Whether to apply the saved offset clamped to the reachable maximum once `timeout` elapsed\n * without the content getting tall enough. Landing close to the previous position is usually\n * better than staying at the top.\n * @default true\n */\n clampOnTimeout?: boolean;\n};\n\nexport type SetupScrollRestorationConfig = {\n /**\n * The scrollable container.\n * @default document.documentElement\n */\n scrollElement?: ScrollRestorationScrollElement;\n /**\n * A list of query params that should trigger a scroll to top.\n * @default []\n * @example ['page'] // will scroll to top when the page query param changes\n */\n queryParamTriggerList?: string[];\n /**\n * Config for fragment scrolling.\n */\n fragment?: {\n /**\n * Enable fragment scrolling (scroll to element with id)\n * @default false\n */\n enabled?: boolean;\n /**\n * Whether to use smooth scrolling or not.\n * @default false\n */\n smooth?: boolean;\n };\n /**\n * Config for restoring the previous scroll offset on browser back/forward navigation.\n * Disabled by default - without it, history navigation scrolls to top like any other navigation.\n */\n restore?: ScrollRestorationRestoreConfig;\n};\n\nexport const ET_DISABLE_SCROLL_TOP = /* @__PURE__ */ Symbol('ET_DISABLE_SCROLL_TOP');\nexport const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE = /* @__PURE__ */ Symbol('ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE');\nexport const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE = /* @__PURE__ */ Symbol(\n 'ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE',\n);\n\nexport type RouterDisableScrollTopConfig = {\n /**\n * Whether to disable scroll to top ONLY when navigating back to this route.\n * @default false\n */\n asReturnRoute?: boolean;\n\n /**\n * Whether to disable scroll to top when a path param changes.\n * @default false\n */\n onPathParamChange?: boolean;\n};\n\nexport const routerDisableScrollTop = (config: RouterDisableScrollTopConfig = {}) => {\n return {\n ...(!config.asReturnRoute ? { [ET_DISABLE_SCROLL_TOP]: true } : { [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: true }),\n ...(config.onPathParamChange ? { [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]: true } : {}),\n };\n};\n\nexport const ET_RESTORE_SCROLL = /* @__PURE__ */ Symbol('ET_RESTORE_SCROLL');\n\n/**\n * Marks a navigation as a return to a page the user has already seen, so it restores that page's last\n * scroll offset instead of scrolling to top - what a \"back to the overview\" link means, as opposed to\n * a link that opens the overview fresh. Spread into `NavigationExtras.state`; for a `routerLink`, use\n * {@link RestoreScrollDirective} instead.\n *\n * Needs `restore.enabled` on {@link setupScrollRestoration}, and only ever restores an offset the\n * session actually recorded - the first visit to a page has none, so it scrolls to top as usual.\n *\n * @example\n * router.navigate(['/teams'], { state: routerRestoreScroll() });\n */\nexport const routerRestoreScroll = () => ({ [ET_RESTORE_SCROLL]: true });\n\nconst SCROLL_RESTORATION_HOLDS_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const holds = new Set<() => boolean>();\n\n return {\n add: (isPending: () => boolean) => {\n holds.add(isPending);\n\n return () => holds.delete(isPending);\n },\n isHeld: () => {\n for (const isPending of holds) {\n if (isPending()) return true;\n }\n\n return false;\n },\n };\n },\n { name: 'ScrollRestorationHolds' },\n);\n\n/**\n * Registry of \"not settled yet\" reporters. Lives in the root injector so a route component can\n * reach the registration created by the app level `setupScrollRestoration` call.\n * @internal\n */\nconst injectScrollRestorationHolds = /* @__PURE__ */ toInjectFn(SCROLL_RESTORATION_HOLDS_DEF);\n\n/**\n * Suspend scroll restoration while `isPending` reads `true`.\n *\n * Restoration already waits for the scroll container to grow tall enough to reach the saved offset,\n * so this is only needed when the content may take longer than `restore.timeout` to get there -\n * a slow list request, for instance. Registers for the lifetime of the current injection context.\n *\n * @example\n * // inside a route component\n * holdScrollRestoration(() => query.isLoading());\n */\nexport const holdScrollRestoration = (isPending: () => boolean) => {\n const remove = injectScrollRestorationHolds().add(isPending);\n\n inject(DestroyRef).onDestroy(remove);\n};\n\n/** Upper bound on remembered history entries. Each entry is a single number, so this is generous. */\nconst MAX_STORED_POSITIONS = 200;\n\nconst DEFAULT_RESTORE_TIMEOUT = 1000;\nconst DEFAULT_RESTORE_MAX_TIMEOUT = 10_000;\n\n/** Events that mean the user took over scrolling, so a pending restoration must be abandoned. */\nconst INTERACTION_EVENTS = ['wheel', 'touchmove', 'keydown'] as const;\n\n/** What a visited history entry left behind: where it was scrolled to, and which page that was. */\ntype StoredPosition = {\n top: number;\n route: string;\n search: string;\n};\n\n/** Key order is navigation order, not declaration order, so two spellings of one URL compare equal. */\nconst serializeQueryParams = (queryParams: Params) =>\n Object.keys(queryParams)\n .sort()\n .map((key) => `${key}=${queryParams[key]}`)\n .join('&');\n\nexport const setupScrollRestoration = (config: SetupScrollRestorationConfig = {}) => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n const router = inject(Router);\n const document = inject(DOCUMENT);\n const injector = inject(Injector);\n const holds = injectScrollRestorationHolds();\n\n const restoreEnabled = config.restore?.enabled === true;\n const restoreTimeout = config.restore?.timeout ?? DEFAULT_RESTORE_TIMEOUT;\n const restoreMaxTimeout = config.restore?.maxTimeout ?? DEFAULT_RESTORE_MAX_TIMEOUT;\n const clampOnTimeout = config.restore?.clampOnTimeout ?? true;\n\n const resolveScrollElement = () => {\n const el = typeof config.scrollElement === 'function' ? config.scrollElement() : config.scrollElement;\n\n return el ?? document.documentElement;\n };\n\n // The browser restores the offset against the still-loading (much shorter) document, which is the\n // exact problem we are solving - take it over completely.\n if (restoreEnabled && 'scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n\n /** Saved offsets keyed by the router's per-history-entry `navigationId`, in least-recent-first order. */\n const positions = new Map<number, StoredPosition>();\n\n // Mirrors Angular's own `RouterScroller`: the offset of the currently displayed page belongs to\n // the navigation that produced it, and a popstate reports the id of the entry it moves to.\n let lastNavigationId = 0;\n let restoredNavigationId = 0;\n let isPopstate = false;\n let wantsRestore = false;\n\n let prev = { state: createRouterState(router), route: createRoute(router) };\n\n let pendingRestore: (() => void) | null = null;\n\n const cancelPendingRestore = () => {\n pendingRestore?.();\n pendingRestore = null;\n };\n\n const scheduleRestore = (target: number) => {\n cancelPendingRestore();\n\n let frame = 0;\n let started = false;\n let cancelled = false;\n\n // The user scrolling always wins over a restoration we have not committed yet.\n const abortByUser = () => cancelPendingRestore();\n\n const hardDeadline = Date.now() + Math.max(restoreTimeout, restoreMaxTimeout);\n let deadline = Date.now() + restoreTimeout;\n\n const step = () => {\n frame = 0;\n\n if (cancelled) return;\n\n const el = resolveScrollElement();\n const maxOffset = Math.max(0, el.scrollHeight - el.clientHeight);\n\n if (maxOffset >= target) {\n el.scrollTop = target;\n cancelPendingRestore();\n\n return;\n }\n\n const now = Date.now();\n\n // A registered hold means the page knows more data is coming, so the content is expected to\n // grow - suspend the clock instead of giving up on a still loading page.\n if (holds.isHeld() && now < hardDeadline) {\n deadline = now + restoreTimeout;\n }\n\n if (now < deadline && now < hardDeadline) {\n frame = requestAnimationFrame(step);\n\n return;\n }\n\n if (clampOnTimeout && maxOffset > 0) {\n el.scrollTop = Math.min(target, maxOffset);\n }\n\n cancelPendingRestore();\n };\n\n // Wait for the new route to actually render before reading any geometry - on `NavigationEnd` the\n // components exist but the DOM still shows the previous page, whose height would be measured\n // instead. The timeout is a safety net in case no render pass follows.\n const start = () => {\n if (started || cancelled) return;\n started = true;\n\n frame = requestAnimationFrame(step);\n };\n\n const renderRef = afterNextRender({ read: start }, { injector });\n\n const fallback = setTimeout(start);\n\n for (const eventName of INTERACTION_EVENTS) {\n document.addEventListener(eventName, abortByUser, { capture: true, passive: true });\n }\n\n pendingRestore = () => {\n // `cancelled` is not redundant with destroying the render hook: a superseded restoration must\n // not apply its (now stale) offset even if its hook had already been queued to run.\n cancelled = true;\n renderRef.destroy();\n\n if (frame) cancelAnimationFrame(frame);\n clearTimeout(fallback);\n\n for (const eventName of INTERACTION_EVENTS) {\n document.removeEventListener(eventName, abortByUser, { capture: true });\n }\n };\n };\n\n /**\n * The offset the most recently left entry for this page had. A target without query params means\n * \"that page\", whichever query state it was last in - the crumb linking to an overview does not\n * know, and should not have to reproduce, the filter the user left it under.\n */\n const findLastVisitedOffset = (route: string, search: string) => {\n const entries = [...positions.values()];\n\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n\n if (!entry || entry.route !== route) continue;\n if (search && entry.search !== search) continue;\n\n return entry.top;\n }\n\n return undefined;\n };\n\n const onNavigationStart = (event: NavigationStart) => {\n // A new navigation supersedes a restoration that has not committed yet.\n cancelPendingRestore();\n\n if (!restoreEnabled) return;\n\n // Re-inserted rather than overwritten so map order stays least-recently-left first, which is both\n // what `findLastVisitedOffset` walks backwards and what the cap below evicts from.\n positions.delete(lastNavigationId);\n positions.set(lastNavigationId, {\n top: resolveScrollElement().scrollTop,\n route: prev.route,\n search: serializeQueryParams(prev.state.queryParams),\n });\n\n if (positions.size > MAX_STORED_POSITIONS) {\n const oldest = positions.keys().next();\n\n if (!oldest.done) positions.delete(oldest.value);\n }\n\n isPopstate = event.navigationTrigger === 'popstate';\n restoredNavigationId = event.restoredState?.navigationId ?? 0;\n\n // Read off the navigation rather than `history.state`: a symbol key does not survive being\n // structured-cloned into the history entry, which is what keeps the mark from outliving this\n // navigation and re-firing when the user later pops back to the entry it created.\n const navigationState = router.getCurrentNavigation()?.extras.state as Record<symbol, unknown> | undefined;\n\n wantsRestore = !isPopstate && navigationState?.[ET_RESTORE_SCROLL] === true;\n };\n\n const onNavigationEnd = (event: NavigationEnd | NavigationSkipped) => {\n const curr = { state: createRouterState(router), route: createRoute(router) };\n\n const prevState = prev.state;\n const currState = curr.state;\n const sameUrlNavigation = prev.route === curr.route;\n const didFragmentChange = prevState.fragment !== currState.fragment;\n\n prev = curr;\n\n const wasMarkedAsReturn = wantsRestore;\n\n wantsRestore = false;\n\n if (event instanceof NavigationEnd) {\n lastNavigationId = event.id;\n } else {\n // A skipped same url navigation is not a history move, so there is nothing to restore.\n isPopstate = false;\n restoredNavigationId = 0;\n }\n\n if (restoreEnabled && isPopstate) {\n const target = positions.get(restoredNavigationId);\n\n // The saved offset wins over both scroll to top and fragment scrolling: the user may well have\n // scrolled away from the anchor before leaving the page.\n if (target !== undefined) {\n scheduleRestore(target.top);\n\n return;\n }\n }\n\n if (restoreEnabled && wasMarkedAsReturn) {\n const target = findLastVisitedOffset(curr.route, serializeQueryParams(currState.queryParams));\n\n if (target !== undefined) {\n scheduleRestore(target);\n\n return;\n }\n }\n\n if (sameUrlNavigation) {\n const allQueryParams = [\n ...new Set(Object.keys(prevState.queryParams).concat(Object.keys(currState.queryParams))),\n ];\n\n const changedQueryParams = allQueryParams.filter(\n (key) => currState.queryParams[key] !== prevState.queryParams[key],\n );\n\n if (!config.queryParamTriggerList?.length && !didFragmentChange) {\n return;\n }\n\n const caseQueryParams = changedQueryParams.some((key) => config.queryParamTriggerList?.includes(key));\n const caseFragment = didFragmentChange && config.fragment?.enabled;\n\n if (caseQueryParams) {\n resolveScrollElement().scrollTop = 0;\n } else if (caseFragment) {\n const fragmentElement = document.getElementById(currState.fragment ?? '');\n\n if (fragmentElement) {\n fragmentElement.scrollIntoView({ behavior: config.fragment?.smooth ? 'smooth' : 'auto' });\n }\n }\n } else {\n const viaReturnRoute =\n currState.data[ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE] && prevState.data[ET_DISABLE_SCROLL_TOP];\n const explicitly = currState.data[ET_DISABLE_SCROLL_TOP];\n const pathParamsChange = currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE];\n\n if (viaReturnRoute || explicitly || pathParamsChange) {\n return;\n }\n\n resolveScrollElement().scrollTop = 0;\n }\n };\n\n router.events\n .pipe(\n filter(\n (e): e is NavigationStart | NavigationEnd | NavigationSkipped =>\n e instanceof NavigationStart || e instanceof NavigationEnd || e instanceof NavigationSkipped,\n ),\n takeUntilDestroyed(),\n )\n .subscribe((event) => {\n if (event instanceof NavigationStart) {\n onNavigationStart(event);\n\n return;\n }\n\n onNavigationEnd(event);\n });\n};\n","import { injectQueryParam } from '../signals';\n\nexport const DISABLE_LOGGER_PARAM = 'et-logger-quiet';\n\nexport type CreateLoggerConfig = {\n scope: string;\n feature: string;\n};\n\nexport const createLogger = (config: CreateLoggerConfig) => {\n const { scope, feature } = config;\n const disableLogging = injectQueryParam(DISABLE_LOGGER_PARAM);\n\n const writeLog = (...args: unknown[]) => {\n if (disableLogging()) {\n return;\n }\n console.log(...args);\n };\n\n return {\n log: (...args: unknown[]) => writeLog(`\\x1B[32;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n warn: (...args: unknown[]) => writeLog(`\\x1B[93;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n error: (...args: unknown[]) => writeLog(`\\x1B[31;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n };\n};\n","const escapeHtml = (str: string) =>\n str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n\n/** Escapes HTML-special characters but leaves existing entity references intact - for input that\n * may already contain entities (e.g. Markdown serialized from the editor's DOM, where `&` is\n * stored as `&amp;`), where plain escaping would double-escape them. */\nconst escapeHtmlPreservingEntities = (str: string) =>\n str\n .replace(/&(?![a-z]+;|#\\d+;|#x[0-9a-f]+;)/gi, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n/** Rejects URL schemes that execute script when navigated. Whitespace/control characters are\n * stripped before checking - browsers ignore them inside URLs, so `java\\tscript:` would\n * otherwise slip through. */\nconst isSafeUrl = (url: string) =>\n // eslint-disable-next-line no-control-regex -- stripping control characters is the point: browsers ignore them inside URLs\n !/^(javascript|data|vbscript):/i.test(url.replace(/[\\s\\u0000-\\u001f]/g, ''));\n\nconst unescapeHtml = (str: string) =>\n str\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&nbsp;/g, ' ');\n\nconst stripTags = (str: string) => str.replace(/<[^>]+>/g, '');\n\nconst parseTableRow = (line: string): string[] =>\n line\n .split('|')\n .slice(1, -1)\n .map((cell) => cell.trim());\n\nconst isTableSeparatorLine = (line: string) => /^\\|?(\\s*:?-+:?\\s*\\|)+\\s*$/.test(line);\n\ntype TableAlign = 'left' | 'center' | 'right' | null;\n\n/** Column alignments from a GFM separator line: `:---` left, `:---:` center, `---:` right. */\nconst parseSeparatorAligns = (line: string): TableAlign[] =>\n parseTableRow(line).map((cell) => {\n const left = cell.startsWith(':');\n const right = cell.endsWith(':');\n\n return left && right ? 'center' : right ? 'right' : left ? 'left' : null;\n });\n\n/** The GFM separator token for a column alignment. */\nconst separatorFor = (align: TableAlign) =>\n align === 'center' ? ':---:' : align === 'right' ? '---:' : align === 'left' ? ':---' : '---';\n\nconst alignStyle = (align: TableAlign) => (align ? ` style=\"text-align: ${align}\"` : '');\n\n/** Wraps `content` in an emphasis `marker`, hoisting boundary whitespace outside the delimiters -\n * CommonMark emphasis must not face whitespace on the inside (`** fett**` doesn't parse), and\n * `&nbsp;` counts as whitespace there too. Whitespace-only content stays unwrapped. */\nconst emphasize = (marker: string, content: string) => {\n const lead = /^(?:\\s|&nbsp;)+/i.exec(content)?.[0] ?? '';\n const rest = content.slice(lead.length);\n const trail = /(?:\\s|&nbsp;)+$/i.exec(rest)?.[0] ?? '';\n const core = rest.slice(0, rest.length - trail.length);\n\n return core ? `${lead}${marker}${core}${marker}${trail}` : content;\n};\n\nconst makePlaceholder = (kind: string, idx: number) => `\\u{E000}${kind}${idx}\\u{E001}`;\nconst placeholderRe = (kind: string) => new RegExp(`\\u{E000}${kind}(\\\\d+)\\u{E001}`, 'gu');\nconst isPlaceholder = (kind: string, str: string) => new RegExp(`^\\u{E000}${kind}\\\\d+\\u{E001}$`, 'u').test(str);\n\n/** Tags allowed to survive inside an aligned block's raw-HTML passthrough. */\nconst SAFE_INLINE_TAGS = /* @__PURE__ */ new Set(['strong', 'em', 'b', 'i', 'del', 's', 'u', 'code', 'br']);\n\n/** Reduces raw inline HTML to the editor's own vocabulary: allowed tags lose all their attributes\n * (`<a>` keeps a safe `href`), everything else - including any event-handler attribute - is\n * dropped, and the remaining text is escaped. */\nconst sanitizeInlineHtml = (html: string) => {\n const kept: string[] = [];\n\n const stashed = html.replace(/<\\s*(\\/?)\\s*([a-z][a-z0-9]*)\\b[^>]*>/gi, (full, closing: string, tag: string) => {\n const name = tag.toLowerCase();\n\n if (name === 'a') {\n const href = closing ? null : /\\bhref\\s*=\\s*\"([^\"]*)\"/i.exec(full)?.[1];\n const anchor = closing ? '</a>' : href && isSafeUrl(href) ? `<a href=\"${href}\">` : '<a>';\n\n return makePlaceholder('TAG', kept.push(anchor) - 1);\n }\n\n if (!SAFE_INLINE_TAGS.has(name)) return '';\n\n return makePlaceholder('TAG', kept.push(closing ? `</${name}>` : `<${name}>`) - 1);\n });\n\n return escapeHtmlPreservingEntities(stashed).replace(placeholderRe('TAG'), (_, i) => kept[+i] ?? '');\n};\n\nconst processInline = (text: string): string => {\n const inlineCodes: string[] = [];\n text = text.replace(/`([^`]+)`/g, (_, code: string) => {\n const idx = inlineCodes.push(`<code>${escapeHtml(code)}</code>`) - 1;\n return makePlaceholder('IC', idx);\n });\n\n // \"Open in new tab\" links round-trip as raw HTML because Markdown has no `target` syntax. Extract\n // them before the raw-HTML escape below, keeping only a safe href, `target=\"_blank\"` and a forced\n // `rel=\"noopener noreferrer\"` (any other attribute - including event handlers - is dropped); their\n // inner markup is processed recursively. Anything else that looks like raw HTML is still escaped.\n const newTabLinks: string[] = [];\n text = text.replace(/<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi, (full, attrs: string, inner: string) => {\n const href = /\\bhref\\s*=\\s*\"([^\"]*)\"/i.exec(attrs)?.[1];\n const newTab = /\\btarget\\s*=\\s*\"_blank\"/i.test(attrs);\n\n if (!newTab || !href || !isSafeUrl(href)) return full;\n\n const anchor = `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${processInline(inner)}</a>`;\n\n return makePlaceholder('NTLINK', newTabLinks.push(anchor) - 1);\n });\n\n // Raw HTML in Markdown text is escaped, not rendered - the editor writes this HTML straight\n // into the DOM via innerHTML, so anything else would let a crafted value inject markup. `<u>`\n // is the one deliberate exception: underline has no Markdown form and round-trips as raw <u>.\n text = escapeHtmlPreservingEntities(text).replace(/&lt;(\\/?)u&gt;/gi, '<$1u>');\n\n // Bold + italic - *** before ** before *. A delimiter flanking whitespace doesn't open/close a\n // run (CommonMark's flanking rule), so literal asterisks as in `2 * 3 * 4` stay text.\n text = text.replace(/\\*\\*\\*([^\\s*](?:.*?[^\\s*])?)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n text = text.replace(/\\*\\*([^\\s*](?:.*?[^\\s*])?)\\*\\*/g, '<strong>$1</strong>');\n text = text.replace(/__([^\\s_](?:.*?[^\\s_])?)__/g, '<strong>$1</strong>');\n text = text.replace(/\\*([^\\s*](?:.*?[^\\s*])?)\\*/g, '<em>$1</em>');\n // Single-underscore emphasis must not fire inside a word (snake_case identifiers).\n text = text.replace(/(?<![\\w*_])_([^\\s_](?:.*?[^\\s_])?)_(?![\\w_])/g, '<em>$1</em>');\n text = text.replace(/~~([^\\s~](?:.*?[^\\s~])?)~~/g, '<del>$1</del>');\n\n // Images before links (order matters); URLs with script-running schemes stay literal text\n text = text.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (match, alt: string, src: string) =>\n isSafeUrl(src) ? `<img src=\"${src}\" alt=\"${alt}\">` : match,\n );\n text = text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (match, label: string, href: string) =>\n isSafeUrl(href) ? `<a href=\"${href}\">${label}</a>` : match,\n );\n\n return text\n .replace(placeholderRe('IC'), (_, i) => inlineCodes[+i] ?? '')\n .replace(placeholderRe('NTLINK'), (_, i) => newTabLinks[+i] ?? '');\n};\n\n// --- Nested list helpers (regex can't match balanced nesting, so these scan by tag depth) ---\n\n/** The first top-level `<ul>`/`<ol>` in `html`, matched with balanced nesting. */\nconst findList = (html: string): { start: number; end: number; ordered: boolean; inner: string } | null => {\n const open = /<(ul|ol)\\b[^>]*>/i.exec(html);\n\n if (!open) return null;\n\n const openTagName = open[1] ?? '';\n const innerStart = open.index + open[0].length;\n const tag = /<(\\/?)(?:ul|ol)\\b[^>]*>/gi;\n tag.lastIndex = innerStart;\n\n let depth = 1;\n let match: RegExpExecArray | null;\n\n while ((match = tag.exec(html))) {\n depth += match[1] ? -1 : 1;\n\n if (depth === 0) {\n return {\n start: open.index,\n end: tag.lastIndex,\n ordered: openTagName.toLowerCase() === 'ol',\n inner: html.slice(innerStart, match.index),\n };\n }\n }\n\n return null;\n};\n\n/** The inner HTML of each direct `<li>` child of a list's inner HTML (balanced over nested lists). */\nconst findListItems = (inner: string): string[] => {\n const items: string[] = [];\n const tag = /<(\\/?)li\\b[^>]*>/gi;\n\n let depth = 0;\n let start = -1;\n let match: RegExpExecArray | null;\n\n while ((match = tag.exec(inner))) {\n if (match[1]) {\n depth--;\n if (depth === 0 && start >= 0) {\n items.push(inner.slice(start, match.index));\n start = -1;\n }\n } else {\n if (depth === 0) start = match.index + match[0].length;\n depth++;\n }\n }\n\n return items;\n};\n\n/** The first top-level `<blockquote>` in `html`, matched with balanced nesting. */\nconst findBlockquote = (html: string): { start: number; end: number; inner: string } | null => {\n const open = /<blockquote\\b[^>]*>/i.exec(html);\n\n if (!open) return null;\n\n const innerStart = open.index + open[0].length;\n const tag = /<(\\/?)blockquote\\b[^>]*>/gi;\n tag.lastIndex = innerStart;\n\n let depth = 1;\n let match: RegExpExecArray | null;\n\n while ((match = tag.exec(html))) {\n depth += match[1] ? -1 : 1;\n\n if (depth === 0) {\n return { start: open.index, end: tag.lastIndex, inner: html.slice(innerStart, match.index) };\n }\n }\n\n return null;\n};\n\n/** The lines of quoted text in a blockquote's own (non-nested) HTML, each with its `> ` prefix.\n * `<br>` and paragraph boundaries are the line breaks - the tag-strip would swallow them. */\nconst quotedLines = (html: string, prefix: string): string[] => {\n const text = stripTags(html.replace(/<br\\s*\\/?>/gi, '\\n').replace(/<\\/p\\s*>/gi, '\\n')).trim();\n\n return text ? text.split('\\n').map((line) => `${prefix}${line.trim()}`) : [];\n};\n\n/** Serializes a blockquote's inner HTML to Markdown, one `>` per nesting level. */\nconst blockquoteToMarkdown = (inner: string, depth: number): string => {\n const prefix = '> '.repeat(depth + 1);\n const lines: string[] = [];\n let rest = inner;\n\n for (let nested = findBlockquote(rest); nested; nested = findBlockquote(rest)) {\n lines.push(...quotedLines(rest.slice(0, nested.start), prefix));\n lines.push(blockquoteToMarkdown(nested.inner, depth + 1));\n rest = rest.slice(nested.end);\n }\n\n lines.push(...quotedLines(rest, prefix));\n\n // An empty quote still needs its marker, or it would vanish from the value entirely.\n return lines.length > 0 ? lines.join('\\n') : prefix.trim();\n};\n\n/** Builds a `<blockquote>` from `> `-prefixed lines, recursing into runs of deeper (`>>`) lines. */\nconst buildBlockquoteHtml = (lines: string[]): string => {\n let html = '';\n let run: string[] = [];\n\n const flushRun = () => {\n if (run.length > 0) html += run.map(processInline).join('<br>');\n run = [];\n };\n\n for (let i = 0; i < lines.length;) {\n const stripped = (lines[i] ?? '').replace(/^>[ \\t]?/, '');\n\n if (!stripped.startsWith('>')) {\n run.push(stripped);\n i++;\n continue;\n }\n\n flushRun();\n\n const nested: string[] = [];\n\n while (i < lines.length) {\n const line = (lines[i] ?? '').replace(/^>[ \\t]?/, '');\n\n if (!line.startsWith('>')) break;\n\n nested.push(line);\n i++;\n }\n\n html += buildBlockquoteHtml(nested);\n }\n\n flushRun();\n\n // `<br>` so an empty quote has a line box the caret can sit in (the editor writes this HTML live)\n return `<blockquote>${html || '<br>'}</blockquote>`;\n};\n\n/** Serializes a list's inner HTML to Markdown, indenting nested lists two spaces per level. */\nconst listToMarkdown = (inner: string, ordered: boolean, depth: number): string => {\n const indent = ' '.repeat(depth);\n let n = 1;\n\n return findListItems(inner)\n .map((itemInner) => {\n let content = itemInner;\n let nestedMarkdown = '';\n\n for (let nested = findList(content); nested; nested = findList(content)) {\n nestedMarkdown += `\\n${listToMarkdown(nested.inner, nested.ordered, depth + 1)}`;\n content = content.slice(0, nested.start) + content.slice(nested.end);\n }\n\n const marker = ordered ? `${n++}. ` : '- ';\n\n // list items are single-line in this serializer, so a <br> degrades to a space\n return `${indent}${marker}${stripTags(content.replace(/<br\\s*\\/?>/gi, ' ')).trim()}${nestedMarkdown}`;\n })\n .join('\\n');\n};\n\ntype ParsedListLine = { indent: number; ordered: boolean; text: string };\n\n/** Parses list lines into (indent-level, ordered, text) - two leading spaces per nesting level. */\nconst parseListLines = (lines: string[]): ParsedListLine[] =>\n lines\n .map((line): ParsedListLine | null => {\n const match = /^(\\s*)([-*+]|\\d+\\.)\\s+(.*)$/.exec(line);\n\n return match\n ? { indent: Math.floor((match[1] ?? '').length / 2), ordered: /\\d/.test(match[2] ?? ''), text: match[3] ?? '' }\n : null;\n })\n .filter((line): line is ParsedListLine => line !== null);\n\n/** Builds nested `<ul>`/`<ol>` HTML from parsed list lines starting at `start`, for one indent level. */\nconst buildListHtml = (lines: ParsedListLine[], start: number, baseIndent: number): { html: string; next: number } => {\n const ordered = lines[start]?.ordered ?? false;\n let items = '';\n let i = start;\n\n for (let line = lines[i]; line?.indent === baseIndent; line = lines[i]) {\n let item = processInline(line.text);\n i++;\n\n const nested = lines[i];\n\n if (nested && nested.indent > baseIndent) {\n const built = buildListHtml(lines, i, nested.indent);\n item += built.html;\n i = built.next;\n }\n\n items += `<li>${item}</li>`;\n }\n\n const tag = ordered ? 'ol' : 'ul';\n\n return { html: `<${tag}>${items}</${tag}>`, next: i };\n};\n\n/**\n * Converts a markdown string to HTML.\n * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,\n * links, images, block quotes, unordered/ordered (and nested) lists, tables, horizontal rules, and paragraphs.\n */\nexport const markdownToHtml = (markdown: string) => {\n if (!markdown) return '';\n\n let text = markdown.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Extract fenced code blocks before any other processing\n const codeBlocks: string[] = [];\n text = text.replace(/```(\\w*)\\n([\\s\\S]*?)```/g, (_, lang: string, code: string) => {\n const langAttr = lang ? ` class=\"language-${lang}\"` : '';\n const idx = codeBlocks.push(`<pre><code${langAttr}>${escapeHtml(code.trim())}</code></pre>`) - 1;\n return makePlaceholder('CODE', idx);\n });\n\n // Markdown headings don't require blank lines around them, but blocks are\n // split on blank lines below. Isolate each heading line into its own block so\n // a heading directly followed by a list/paragraph isn't swallowed into it.\n text = text.replace(/^(#{1,6}\\s+.+)$/gm, '\\n\\n$1\\n\\n');\n\n const html = text\n .split(/\\n\\n+/)\n .map((block) => {\n const trimmed = block.trim();\n if (!trimmed) return '';\n\n if (isPlaceholder('CODE', trimmed)) return trimmed;\n\n // Aligned block: text-align has no Markdown form, so it round-trips as raw native HTML.\n // Rebuild it instead of passing it through verbatim: only the alignment survives on the tag\n // (no other attributes, e.g. event handlers) and the inner markup is reduced to the editor's\n // own inline vocabulary.\n const aligned = /^<(p|h[1-6]|div)\\b[^>]*\\bstyle=[\"'][^\"']*text-align:\\s*([a-z]+)[^>]*>([\\s\\S]*)<\\/\\1>$/i.exec(\n trimmed,\n );\n\n if (aligned) {\n const tag = (aligned[1] ?? 'p').toLowerCase();\n const align = (aligned[2] ?? 'left').toLowerCase();\n\n return `<${tag} style=\"text-align: ${align}\">${sanitizeInlineHtml(aligned[3] ?? '')}</${tag}>`;\n }\n\n // Heading\n const headingMatch = trimmed.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch?.[1] && headingMatch?.[2]) {\n const level = headingMatch[1].length;\n\n return `<h${level}>${processInline(headingMatch[2].trim())}</h${level}>`;\n }\n\n // Horizontal rule\n if (/^(---|\\*\\*\\*|___)\\s*$/.test(trimmed)) return '<hr>';\n\n // Table (GFM) - column alignment from the separator line lands as text-align on every cell\n const tableLines = trimmed.split('\\n');\n if (tableLines.length >= 2 && /\\|/.test(tableLines[0] ?? '') && isTableSeparatorLine(tableLines[1] ?? '')) {\n const aligns = parseSeparatorAligns(tableLines[1] ?? '');\n const headers = parseTableRow(tableLines[0] ?? '');\n const thead = `<thead><tr>${headers\n .map((h, i) => `<th${alignStyle(aligns[i] ?? null)}>${processInline(h)}</th>`)\n .join('')}</tr></thead>`;\n const bodyRows = tableLines.slice(2);\n const tbody =\n bodyRows.length > 0\n ? `<tbody>${bodyRows\n .map(\n (row) =>\n `<tr>${parseTableRow(row)\n .map((cell, i) => `<td${alignStyle(aligns[i] ?? null)}>${processInline(cell)}</td>`)\n .join('')}</tr>`,\n )\n .join('')}</tbody>`\n : '';\n\n return `<table>${thead}${tbody}</table>`;\n }\n\n // Blockquote - each line runs through the inline pass on its own (processInline escapes raw\n // HTML, so joining first would escape the <br> separators too), and a `>>` run nests\n if (/^>/.test(trimmed)) return buildBlockquoteHtml(trimmed.split('\\n'));\n\n // List (unordered/ordered, with indentation-based nesting)\n if (/^([-*+]|\\d+\\.)\\s/.test(trimmed)) {\n const lines = parseListLines(trimmed.split('\\n'));\n const [firstLine] = lines;\n\n if (firstLine) {\n return buildListHtml(lines, 0, firstLine.indent).html;\n }\n }\n\n // Paragraph - single newlines within a block become <br>\n return `<p>${trimmed\n .split('\\n')\n .map((l) => processInline(l))\n .join('<br>')}</p>`;\n })\n .filter(Boolean)\n .join('\\n');\n\n return html.replace(placeholderRe('CODE'), (_, i) => codeBlocks[+i] ?? '');\n};\n\n/**\n * Converts an HTML string to markdown.\n * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,\n * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.\n */\nexport const htmlToMarkdown = (html: string) => {\n if (!html) return '';\n\n let md = html;\n\n // Aligned blocks: text-align has no Markdown form, so preserve them verbatim as native HTML (their\n // inner markup stays HTML) and round-trip via a placeholder - extracted before the block passes\n // below rewrite them, restored after the final tag-strip.\n const alignedBlocks: string[] = [];\n md = md.replace(/<(p|h[1-6]|div)\\b[^>]*\\bstyle=\"[^\"]*text-align[^\"]*\"[^>]*>[\\s\\S]*?<\\/\\1>/gi, (match) =>\n makePlaceholder('ALIGN', alignedBlocks.push(match) - 1),\n );\n\n // Code blocks - process before inline code\n md = md.replace(\n /<pre[^>]*><code[^>]*class=\"language-([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi,\n (_, lang: string, code: string) => `\\n\\`\\`\\`${lang}\\n${unescapeHtml(code.trim())}\\n\\`\\`\\`\\n`,\n );\n md = md.replace(\n /<pre[^>]*><code[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi,\n (_, code: string) => `\\n\\`\\`\\`\\n${unescapeHtml(code.trim())}\\n\\`\\`\\`\\n`,\n );\n md = md.replace(\n /<pre[^>]*>([\\s\\S]*?)<\\/pre>/gi,\n (_, code: string) => `\\n\\`\\`\\`\\n${unescapeHtml(code.trim())}\\n\\`\\`\\`\\n`,\n );\n\n // Headings - keep the inner markup so the inline passes below turn any nested\n // bold/italic/link/code into markdown; leftover tags are stripped at the end.\n for (let i = 6; i >= 1; i--) {\n md = md.replace(\n new RegExp(`<h${i}[^>]*>([\\\\s\\\\S]*?)<\\\\/h${i}>`, 'gi'),\n (_, content: string) => `\\n${'#'.repeat(i)} ${content.trim()}\\n`,\n );\n }\n\n // Bold + italic (combined before individual). Boundary whitespace is hoisted out of the\n // delimiters (emphasize) - `<strong> x</strong>` must become ` **x**`, not the invalid `** x**`.\n md = md.replace(/<strong[^>]*><em[^>]*>([\\s\\S]*?)<\\/em><\\/strong>/gi, (_, c: string) => emphasize('***', c));\n md = md.replace(/<em[^>]*><strong[^>]*>([\\s\\S]*?)<\\/strong><\\/em>/gi, (_, c: string) => emphasize('***', c));\n md = md.replace(/<(strong|b)[^>]*>([\\s\\S]*?)<\\/\\1>/gi, (_, _tag, c: string) => emphasize('**', c));\n md = md.replace(/<(em|i)[^>]*>([\\s\\S]*?)<\\/\\1>/gi, (_, _tag, c: string) => emphasize('*', c));\n md = md.replace(/<(del|s|strike)[^>]*>([\\s\\S]*?)<\\/\\1>/gi, (_, _tag, c: string) => emphasize('~~', c));\n\n // Inline code\n md = md.replace(/<code[^>]*>([\\s\\S]*?)<\\/code>/gi, (_, code: string) => `\\`${unescapeHtml(code)}\\``);\n\n // Links and images. A link with `target=\"_blank\"` has no Markdown form, so it round-trips as raw\n // HTML (keeping only href + target + rel) via a placeholder - like underline below; ordinary links\n // become `[text](url)`.\n const newTabLinks: string[] = [];\n md = md.replace(/<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi, (_, attrs: string, inner: string) => {\n const href = /\\bhref\\s*=\\s*\"([^\"]*)\"/i.exec(attrs)?.[1] ?? '';\n\n if (/\\btarget\\s*=\\s*\"_blank\"/i.test(attrs) && href) {\n const anchor = `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${inner}</a>`;\n\n return makePlaceholder('NTLINK', newTabLinks.push(anchor) - 1);\n }\n\n return href ? `[${inner}](${href})` : inner;\n });\n md = md.replace(/<img[^>]+src=\"([^\"]*)\"[^>]*alt=\"([^\"]*)\"[^>]*\\/?>/gi, '![$2]($1)');\n md = md.replace(/<img[^>]+alt=\"([^\"]*)\"[^>]*src=\"([^\"]*)\"[^>]*\\/?>/gi, '![$1]($2)');\n md = md.replace(/<img[^>]+src=\"([^\"]*)\"[^>]*\\/?>/gi, '![]($1)');\n\n // Underline has no Markdown form - preserve it as raw <u> so it round-trips. Extract it now (its\n // inner markup is already converted above) so the block passes below don't strip the tag; the\n // placeholder is restored after the final tag-strip.\n const underlines: string[] = [];\n md = md.replace(/<u[^>]*>([\\s\\S]*?)<\\/u>/gi, (_, inner: string) => makePlaceholder('U', underlines.push(inner) - 1));\n\n // Block quotes - replace each top-level <blockquote> with its recursively-serialized Markdown, so\n // a quote inside a quote becomes `>>` (regex alone can't match balanced nesting).\n for (let quote = findBlockquote(md); quote; quote = findBlockquote(md)) {\n md = `${md.slice(0, quote.start)}\\n${blockquoteToMarkdown(quote.inner, 0)}\\n${md.slice(quote.end)}`;\n }\n\n // Lists - replace each top-level list with its recursively-serialized Markdown (handles nesting).\n for (let list = findList(md); list; list = findList(md)) {\n md = `${md.slice(0, list.start)}\\n${listToMarkdown(list.inner, list.ordered, 0)}\\n${md.slice(list.end)}`;\n }\n\n // Tables\n md = md.replace(/<table[^>]*>([\\s\\S]*?)<\\/table>/gi, (_, tableContent: string) => {\n // GFM cells are single-line, so a <br> inside one degrades to a space (not silently dropped)\n const extractCells = (row: string) =>\n [...row.matchAll(/<t[hd][^>]*>([\\s\\S]*?)<\\/t[hd]>/gi)].map((m) =>\n stripTags((m[1] ?? '').replace(/<br\\s*\\/?>/gi, ' ')).trim(),\n );\n\n // GFM alignment is per column, read from the header cells' text-align styles\n const extractAligns = (row: string): TableAlign[] =>\n [...row.matchAll(/<t[hd]([^>]*)>/gi)].map((m) => {\n const align = /text-align:\\s*(left|center|right)/i.exec(m[1] ?? '')?.[1]?.toLowerCase();\n\n return (align as TableAlign) ?? null;\n });\n\n const theadMatch = tableContent.match(/<thead[^>]*>([\\s\\S]*?)<\\/thead>/i);\n const firstTrMatch = tableContent.match(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/i);\n const headerRow = theadMatch?.[1] ?? firstTrMatch?.[1] ?? '';\n const headerCells = headerRow ? extractCells(headerRow) : [];\n\n if (headerCells.length === 0) return '';\n\n const aligns = extractAligns(headerRow);\n const separator = headerCells.map((_cell, i) => separatorFor(aligns[i] ?? null)).join(' | ');\n const bodySource = theadMatch\n ? tableContent.replace(theadMatch[0], '')\n : tableContent.replace(firstTrMatch?.[0] ?? '', '');\n\n const bodyRows = [...bodySource.matchAll(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi)].map((m) =>\n extractCells(m[1] ?? '').join(' | '),\n );\n\n const lines = [`| ${headerCells.join(' | ')} |`, `| ${separator} |`, ...bodyRows.map((r) => `| ${r} |`)];\n return `\\n${lines.join('\\n')}\\n`;\n });\n\n // Block elements - a <br> inside a paragraph is a soft line break; turn it into a newline before\n // the tag-strip removes it, so it round-trips (a single newline within a block renders as <br>)\n md = md.replace(\n /<p[^>]*>([\\s\\S]*?)<\\/p>/gi,\n (_, content: string) => `\\n${stripTags(content.replace(/<br\\s*\\/?>/gi, '\\n')).trim()}\\n`,\n );\n // A <div> boundary acts as a paragraph boundary - clipboard HTML commonly uses divs as\n // paragraphs, and silently stripping them would merge adjacent blocks into one.\n md = md.replace(/<\\/div\\s*>/gi, '\\n\\n').replace(/<div[^>]*>/gi, '\\n\\n');\n md = md.replace(/<br\\s*\\/?>/gi, '\\n');\n md = md.replace(/<hr\\s*\\/?>/gi, '\\n---\\n');\n\n md = unescapeHtml(stripTags(md)).replace(placeholderRe('U'), (_, i) => `<u>${underlines[+i] ?? ''}</u>`);\n // new-tab links survive the tag-strip as raw HTML (restored after it, like underline)\n md = md.replace(placeholderRe('NTLINK'), (_, i) => newTabLinks[+i] ?? '');\n // aligned blocks are block-level, so pad with blank lines before collapsing so they survive as\n // their own Markdown block\n md = md.replace(placeholderRe('ALIGN'), (_, i) => `\\n\\n${alignedBlocks[+i] ?? ''}\\n\\n`);\n\n return md.replace(/\\n{3,}/g, '\\n\\n').trim();\n};\n","export const clamp = (value: number, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n\nexport const round = (value: number, precision = 0) => {\n const multiplier = Math.pow(10, precision);\n return Math.round(value * multiplier) / multiplier;\n};\n","export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value);\n};\n\nexport const getObjectProperty = (obj: Record<string, unknown>, prop: string) => {\n const hasDotNotation = prop.includes('.');\n const hasBracketNotation = prop.includes('[');\n\n if (!hasDotNotation && !hasBracketNotation) return obj[prop];\n\n const props = prop.split('.');\n\n let value: unknown = obj;\n\n for (const prop of props) {\n if (!isObject(value)) return undefined;\n\n if (prop.includes('[')) {\n const [key, index] = prop.split('[').map((part) => part.replace(']', '')) as [string, string];\n const arr = value[key];\n if (!Array.isArray(arr)) return undefined;\n\n value = arr[+index];\n } else {\n value = value[prop];\n }\n }\n\n return value;\n};\n","/** A `blob:` URL together with the only call that releases it again. See {@link createObjectUrlHandle}. */\nexport type ObjectUrlHandle = {\n /** The `blob:` URL, or `null` where there is no browser to mint one. */\n url: string | null;\n\n /** Releases the URL. Idempotent - a second call does nothing. */\n revoke: () => void;\n};\n\n/**\n * Creates an object URL for a `Blob`/`File` and hands back a handle that owns it. Keep the handle\n * for as long as the URL is on screen and call `revoke()` when it is not - the browser holds the\n * blob in memory until then.\n *\n * A handle rather than a bare string, so the URL and the call that frees it cannot drift apart. Use\n * `injectFileDownload()` instead when the URL only has to survive a single click.\n *\n * @example\n * const preview = createObjectUrlHandle(file);\n * // later\n * preview.revoke();\n */\nexport const createObjectUrlHandle = (object: Blob | MediaSource): ObjectUrlHandle => {\n const url = typeof URL === 'undefined' || !URL.createObjectURL ? null : URL.createObjectURL(object);\n\n let revoked = false;\n\n return {\n url,\n revoke: () => {\n if (!url || revoked) return;\n\n revoked = true;\n URL.revokeObjectURL(url);\n },\n };\n};\n","export const RUNTIME_ERROR_NO_DATA = '__ET_NO_DATA__';\n\nexport class RuntimeError<T extends number> extends Error {\n constructor(\n public code: T,\n message: null | false | string,\n public data: unknown = RUNTIME_ERROR_NO_DATA,\n ) {\n super(formatRuntimeError<T>(code, message));\n\n if (data !== RUNTIME_ERROR_NO_DATA) {\n // deferred so the error itself is logged first - consoles render the live object, so a\n // mutation after the throw is visible in the log\n setTimeout(() => {\n console.error(data);\n }, 1);\n }\n }\n}\n\nexport function formatRuntimeError<T extends number>(code: T, message: null | false | string): string {\n // prefix code with zeros if it's less than 100\n const codeWithZeros = code < 10 ? `00${code}` : code < 100 ? `0${code}` : code;\n\n const fullCode = `ET${codeWithZeros}`;\n return `${fullCode}${message ? ': ' + message : ''}`;\n}\n","export type CreateSessionMemoryConfig<TValue> = {\n key: string;\n parse: (storedValue: string) => TValue | null;\n serialize: (value: TValue) => string;\n};\n\nexport const createAutoSessionMemoryKey = ({ element, prefix }: { element: HTMLElement; prefix: string }) => {\n const pathSegments: string[] = [];\n let currentElement: HTMLElement | null = element;\n\n while (currentElement) {\n const currentElementName = currentElement.localName;\n const parentElement: HTMLElement | null = currentElement.parentElement;\n\n if (!parentElement) {\n pathSegments.unshift(currentElementName);\n\n break;\n }\n\n const siblingElements = Array.from(parentElement.children as HTMLCollectionOf<HTMLElement>);\n const siblingIndex = siblingElements.indexOf(currentElement);\n\n pathSegments.unshift(`${currentElementName}[${siblingIndex}]`);\n currentElement = parentElement;\n }\n\n const locationPath = element.ownerDocument.defaultView?.location.pathname ?? 'root';\n\n return `${prefix}:${locationPath}:${pathSegments.join('/')}`;\n};\n\nexport const canUseSessionMemory = () => {\n try {\n if (typeof globalThis.window === 'undefined') {\n return false;\n }\n\n if (typeof globalThis.document === 'undefined') {\n return false;\n }\n\n return globalThis.sessionStorage !== null && globalThis.sessionStorage !== undefined;\n } catch {\n return false;\n }\n};\n\nconst getSessionStorage = () => {\n if (!canUseSessionMemory()) {\n return null;\n }\n\n return globalThis.sessionStorage;\n};\n\nexport const createSessionMemory = <TValue>({ key, parse, serialize }: CreateSessionMemoryConfig<TValue>) => {\n const read = () => {\n const sessionStorage = getSessionStorage();\n\n if (!sessionStorage) {\n return null;\n }\n\n try {\n const storedValue = sessionStorage.getItem(key);\n\n if (storedValue === null) {\n return null;\n }\n\n return parse(storedValue);\n } catch {\n return null;\n }\n };\n\n const write = (value: TValue) => {\n const sessionStorage = getSessionStorage();\n\n if (!sessionStorage) {\n return false;\n }\n\n try {\n sessionStorage.setItem(key, serialize(value));\n\n return true;\n } catch {\n return false;\n }\n };\n\n const remove = () => {\n const sessionStorage = getSessionStorage();\n\n if (!sessionStorage) {\n return false;\n }\n\n try {\n sessionStorage.removeItem(key);\n\n return true;\n } catch {\n return false;\n }\n };\n\n return {\n read,\n write,\n remove,\n };\n};\n","export type SwipeTracker = {\n update(event: TouchEvent | MouseEvent): SwipeUpdateEvent;\n end(): SwipeEndEvent;\n cancel(): void;\n};\n\nexport type SwipeEndEvent = {\n /**\n * Speed at the moment of release, measured over the trailing {@link SWIPE_VELOCITY_WINDOW_MS} of\n * the gesture - not the whole-gesture average. A slow drag that ends in a flick reports the\n * flick, and a flick that ends parked reports ~0.\n */\n positivePixelPerSecondX: number;\n positivePixelPerSecondY: number;\n pixelPerSecondX: number;\n pixelPerSecondY: number;\n movementX: number;\n movementY: number;\n positiveMovementX: number;\n positiveMovementY: number;\n originClientX: number;\n originClientY: number;\n};\n\nexport type SwipeUpdateEvent = {\n originClientX: number;\n originClientY: number;\n timestamp: number;\n movementX: number;\n movementY: number;\n positiveMovementX: number;\n positiveMovementY: number;\n isScrolling: boolean;\n isSwiping: boolean;\n};\n\nconst getClientXY = (event: TouchEvent | MouseEvent): { clientX: number; clientY: number } => {\n if (event.type[0] === 't') {\n const touch = (event as TouchEvent).targetTouches[0] ?? (event as TouchEvent).changedTouches[0];\n\n return touch ? { clientX: touch.clientX, clientY: touch.clientY } : { clientX: 0, clientY: 0 };\n }\n return { clientX: (event as MouseEvent).clientX, clientY: (event as MouseEvent).clientY };\n};\n\n/** Trailing window over which {@link SwipeTracker.end} measures the release velocity. */\nexport const SWIPE_VELOCITY_WINDOW_MS = 100;\n\ntype SwipeSample = { t: number; movementX: number; movementY: number };\n\nexport const createSwipeTracker = (startEvent: TouchEvent | MouseEvent): SwipeTracker => {\n const { clientX: originClientX, clientY: originClientY } = getClientXY(startEvent);\n const startTime = Date.now();\n\n let movementX = 0;\n let movementY = 0;\n let isSwiping = false;\n let isScrolling = false;\n\n /**\n * Recent positions, oldest first, used to derive the release velocity. Trimmed to the trailing\n * window plus the one sample just before it, which serves as that window's baseline.\n */\n let samples: SwipeSample[] = [{ t: startTime, movementX: 0, movementY: 0 }];\n\n const update = (event: TouchEvent | MouseEvent): SwipeUpdateEvent => {\n const { clientX, clientY } = getClientXY(event);\n movementX = clientX - originClientX;\n movementY = clientY - originClientY;\n\n const now = Date.now();\n samples.push({ t: now, movementX, movementY });\n\n // Trim against the newest sample rather than `now + window`: `end()` measures from its own\n // timestamp, which is never earlier, so this always keeps a superset of what it needs.\n const cutoff = now - SWIPE_VELOCITY_WINDOW_MS;\n let dropCount = 0;\n for (let next = samples[dropCount + 1]; next && next.t < cutoff; next = samples[dropCount + 1]) dropCount++;\n if (dropCount) samples = samples.slice(dropCount);\n\n const positiveMovementX = Math.abs(movementX);\n const positiveMovementY = Math.abs(movementY);\n\n if (!isSwiping && !isScrolling) {\n if (positiveMovementY > positiveMovementX) {\n isScrolling = true;\n } else {\n isSwiping = true;\n }\n }\n\n return {\n originClientX,\n originClientY,\n timestamp: startTime,\n movementX,\n movementY,\n positiveMovementX,\n positiveMovementY,\n isScrolling,\n isSwiping,\n };\n };\n\n const measureReleaseVelocity = (endTime: number) => {\n const windowStart = endTime - SWIPE_VELOCITY_WINDOW_MS;\n const firstInWindow = samples.findIndex((sample) => sample.t >= windowStart);\n\n // Nothing moved during the window: the pointer was held still before release, so the gesture\n // carries no momentum no matter how fast it started out.\n if (firstInWindow === -1) return { x: 0, y: 0 };\n\n const newest = samples.at(-1);\n\n // Measure across the window when it holds a span of its own. With a single sample in it - a\n // pointer emitting moves slower than the window - reach back one sample for a baseline instead\n // of reporting nothing.\n const hasSpanInWindow = samples.length - firstInWindow >= 2;\n const baseline = samples[hasSpanInWindow ? firstInWindow : Math.max(0, firstInWindow - 1)];\n\n if (!newest || !baseline) return { x: 0, y: 0 };\n\n const elapsed = newest.t - baseline.t;\n\n if (elapsed <= 0) return { x: 0, y: 0 };\n\n return {\n x: ((newest.movementX - baseline.movementX) / elapsed) * 1000,\n y: ((newest.movementY - baseline.movementY) / elapsed) * 1000,\n };\n };\n\n const end = (): SwipeEndEvent => {\n const positiveMovementX = Math.abs(movementX);\n const positiveMovementY = Math.abs(movementY);\n const { x: pixelPerSecondX, y: pixelPerSecondY } = measureReleaseVelocity(Date.now());\n\n return {\n movementX,\n movementY,\n positiveMovementX,\n positiveMovementY,\n pixelPerSecondX,\n pixelPerSecondY,\n positivePixelPerSecondX: Math.abs(pixelPerSecondX),\n positivePixelPerSecondY: Math.abs(pixelPerSecondY),\n originClientX,\n originClientY,\n };\n };\n\n const cancel = () => {\n movementX = 0;\n movementY = 0;\n samples = [{ t: Date.now(), movementX: 0, movementY: 0 }];\n };\n\n return { update, end, cancel };\n};\n","type SuppressionState = { count: number; previousInlineValue: string };\n\nconst suppressions = /* @__PURE__ */ new WeakMap<Document, SuppressionState>();\n\n/**\n * Stop the browser from starting a text selection, until the returned function is called.\n *\n * Pointer-driven gestures (drag, resize, scrub) otherwise sweep a selection across everything the\n * pointer passes over. Call this when the gesture starts and release it when the gesture ends -\n * including when it is cancelled, or the page stays unselectable.\n *\n * Nested or concurrent calls are counted, so the last release restores the document's original\n * inline `user-select`. Releasing twice is a no-op.\n */\nexport const suppressTextSelection = (doc: Document): (() => void) => {\n const existing = suppressions.get(doc);\n\n if (existing) {\n existing.count++;\n } else {\n suppressions.set(doc, { count: 1, previousInlineValue: doc.documentElement.style.userSelect });\n doc.documentElement.style.userSelect = 'none';\n }\n\n let released = false;\n\n return () => {\n const state = suppressions.get(doc);\n\n if (released || !state) return;\n\n released = true;\n state.count--;\n\n if (state.count > 0) return;\n\n suppressions.delete(doc);\n doc.documentElement.style.userSelect = state.previousInlineValue;\n };\n};\n","import { ApplicationRef, inject, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn } from '../utils';\n\nconst ANGULAR_ROOT_ELEMENT_DEF = /* @__PURE__ */ defineRootProvider(() => {\n const appRef = inject(ApplicationRef);\n\n const rootElement = signal<HTMLElement | null>(null);\n\n const poll = () => {\n const appComponents = appRef.components;\n if (appComponents.length > 0) {\n rootElement.set(appComponents[0]?.location.nativeElement);\n } else {\n setTimeout(poll, 25);\n }\n };\n\n setTimeout(poll);\n\n return rootElement;\n});\n\nexport const injectAngularRootElement = /* @__PURE__ */ toInjectFn(ANGULAR_ROOT_ELEMENT_DEF);\n","import { computed, DOCUMENT, ElementRef, inject, signal } from '@angular/core';\nimport { defineProvider, toInjectFn, toProvideFn, toToken } from '../utils';\n\nconst BOUNDARY_ELEMENT_DEF = /* @__PURE__ */ defineProvider(\n () => {\n const hostElement = inject<ElementRef<HTMLElement>>(ElementRef, { optional: true });\n const document = inject(DOCUMENT);\n\n const override = signal<HTMLElement | null>(null);\n\n const value = computed(() => override() ?? hostElement?.nativeElement ?? document.documentElement);\n\n return {\n value,\n override,\n };\n },\n { name: 'Boundary Element' },\n);\n\nexport const provideBoundaryElement = /* @__PURE__ */ toProvideFn(BOUNDARY_ELEMENT_DEF);\nexport const injectBoundaryElement = /* @__PURE__ */ toInjectFn(BOUNDARY_ELEMENT_DEF);\nexport const BOUNDARY_ELEMENT_TOKEN = /* @__PURE__ */ toToken(BOUNDARY_ELEMENT_DEF);\n","import { DOCUMENT, inject } from '@angular/core';\nimport { injectRenderer } from './renderer';\n\nexport type FileDownloadOptions = {\n /**\n * The file's body - a string, a `Blob`, or the parts to build one from. A `Blob` is re-wrapped, so\n * {@link FileDownloadOptions.type} still decides the MIME type.\n */\n content: BlobPart | BlobPart[];\n\n /** The name the browser saves the file under, extension included. */\n filename: string;\n\n /** MIME type of the generated blob, e.g. `application/json`. */\n type?: string;\n};\n\n/**\n * Hands the user a file the browser downloads. Call it once from an injection context - a field\n * initializer - and the function it hands back can then be called from anywhere, including a click\n * handler.\n *\n * A no-op where there is no browser (server-side rendering), so a toolbar button needs no platform\n * check of its own. Use {@link createObjectUrlHandle} instead when the URL has to outlive the call.\n *\n * @example\n * private download = injectFileDownload();\n *\n * protected save() {\n * this.download({ content: json, filename: 'session.json', type: 'application/json' });\n * }\n */\nexport const injectFileDownload = () => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n\n return (options: FileDownloadOptions) => {\n // No window means no browser: server-side there is nothing to hand a file to.\n const view = document.defaultView;\n\n if (!view) return;\n\n const { content, filename, type } = options;\n const parts = Array.isArray(content) ? content : [content];\n const url = view.URL.createObjectURL(new view.Blob(parts, type ? { type } : undefined));\n const link = renderer.createElement('a');\n\n renderer.setProperties(link, { href: url, download: filename, rel: 'noopener' });\n renderer.setStyle(link, { display: 'none' });\n\n // Firefox only follows the click of an anchor that is in the document.\n renderer.appendChild(document.body, link);\n link.click();\n renderer.removeChild(document.body, link);\n\n // The blob would otherwise be held until the tab closes; the click has already read it.\n view.URL.revokeObjectURL(url);\n };\n};\n","import { DestroyRef, DOCUMENT, inject, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn, toToken } from '../utils/angular/di';\n\nconst FOCUS_VISIBLE_TRACKER_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n\n const isFocusVisible = signal(false);\n let hadKeyboardEvent = false;\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Tab' || e.key === 'Shift' || e.key === 'Meta' || e.key === 'Alt' || e.key === 'Control') {\n hadKeyboardEvent = true;\n queueMicrotask(() => isFocusVisible.set(true));\n }\n };\n\n const onPointerDown = () => {\n hadKeyboardEvent = false;\n queueMicrotask(() => isFocusVisible.set(false));\n };\n\n const onFocus = () => {\n if (hadKeyboardEvent) {\n queueMicrotask(() => isFocusVisible.set(true));\n }\n };\n\n const onBlur = () => {\n queueMicrotask(() => isFocusVisible.set(false));\n };\n\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('focus', onFocus, true);\n document.addEventListener('blur', onBlur, true);\n\n destroyRef.onDestroy(() => {\n document.removeEventListener('keydown', onKeyDown, true);\n document.removeEventListener('mousedown', onPointerDown, true);\n document.removeEventListener('pointerdown', onPointerDown, true);\n document.removeEventListener('touchstart', onPointerDown, true);\n document.removeEventListener('focus', onFocus, true);\n document.removeEventListener('blur', onBlur, true);\n });\n\n return {\n isFocusVisible: isFocusVisible.asReadonly(),\n };\n },\n { name: 'Focus Visible Tracker' },\n);\n\nexport const provideFocusVisibleTracker = /* @__PURE__ */ toProvideFn(FOCUS_VISIBLE_TRACKER_DEF);\nexport const injectFocusVisibleTracker = /* @__PURE__ */ toInjectFn(FOCUS_VISIBLE_TRACKER_DEF);\nexport const FOCUS_VISIBLE_TRACKER_TOKEN = /* @__PURE__ */ toToken(FOCUS_VISIBLE_TRACKER_DEF);\n","import { signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\n\nconst LOCALE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const currentLocale = signal('en');\n\n return {\n currentLocale,\n };\n },\n {\n name: 'Locale',\n },\n);\n\nexport const provideLocale = /* @__PURE__ */ toProvideFn(LOCALE_DEF);\nexport const injectLocale = /* @__PURE__ */ toInjectFn(LOCALE_DEF);\n","import { computed, inject, InjectionToken, Provider, Signal } from '@angular/core';\nimport { injectLocale } from './locale';\n\n/**\n * A label set, or a function building one for a locale. The function form is called again whenever\n * {@link injectLocale}'s `currentLocale` changes, so a locale switch re-renders the wording without\n * reloading - that is the seam an app's i18n library plugs into.\n */\nexport type LabelsSource<T> = Partial<T> | ((locale: string) => Partial<T>);\n\n/** What {@link defineLabels} returns. */\nexport type LabelsDefinition<T> = {\n readonly provide: (labels: LabelsSource<T>) => Provider;\n readonly inject: () => Signal<T>;\n readonly token: InjectionToken<LabelsSource<T>>;\n};\n\nconst resolveSource = <T>(source: T | ((locale: string) => T), locale: string): T =>\n typeof source === 'function' ? (source as (locale: string) => T)(locale) : source;\n\n/**\n * The one mechanism for the strings a component renders or announces itself. Every domain in the UI\n * library that has such strings exposes exactly this pair - `provide<Domain>Labels` to localize a\n * subtree, `inject<Domain>Labels()` to read the result - so localizing an app is the same move\n * repeated per domain rather than a different one each time.\n *\n * `defaults` may itself be locale-derived, for a domain that ships more than one language (the\n * `@ethlete/query` error tables, say). Overrides are partial and layer on top of whatever the locale\n * resolved to, so translating into a third language while keeping a shipped one as the base is the\n * same call.\n *\n * The injector returns a **signal**, because both halves can change at runtime - read it in a\n * template or computed, never destructure it once.\n *\n * @example\n * export type BreadcrumbLabels = { navigation: string; overflow: string };\n *\n * export const DEFAULT_BREADCRUMB_LABELS: BreadcrumbLabels = {\n * navigation: 'Breadcrumb',\n * overflow: 'Show hidden levels',\n * };\n *\n * const BREADCRUMB_LABELS_DEF = defineLabels<BreadcrumbLabels>('BREADCRUMB_LABELS', DEFAULT_BREADCRUMB_LABELS);\n *\n * export const provideBreadcrumbLabels = toProvideFn(BREADCRUMB_LABELS_DEF);\n * export const injectBreadcrumbLabels = toInjectFn(BREADCRUMB_LABELS_DEF);\n * export const BREADCRUMB_LABELS = toToken(BREADCRUMB_LABELS_DEF);\n *\n * @example\n * // consumer, fixed wording\n * provideBreadcrumbLabels({ navigation: 'Brotkrumen' });\n *\n * // consumer, driven by the app's i18n and re-resolved on a locale change\n * provideBreadcrumbLabels((locale) => ({ navigation: translate('breadcrumb.nav', locale) }));\n */\nexport const defineLabels = <T extends object>(\n name: string,\n defaults: T | ((locale: string) => T),\n): LabelsDefinition<T> => {\n const token = new InjectionToken<LabelsSource<T>>(name, {\n providedIn: 'root',\n factory: () => ({}),\n });\n\n return {\n provide: (labels: LabelsSource<T>): Provider => ({ provide: token, useValue: labels }),\n inject: (): Signal<T> => {\n const source = inject(token);\n const { currentLocale } = injectLocale();\n\n return computed(() => {\n const locale = currentLocale();\n\n return { ...resolveSource(defaults, locale), ...resolveSource(source, locale) };\n });\n },\n token,\n };\n};\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DestroyRef,\n DOCUMENT,\n EnvironmentInjector,\n inject,\n Type,\n} from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { injectRenderer } from './renderer';\n\nexport type StyleManager = {\n mount: <TComponent>(component: Type<TComponent>) => ComponentRef<TComponent>;\n};\n\nconst STYLE_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n (): StyleManager => {\n const appRef = inject(ApplicationRef);\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const envInjector = inject(EnvironmentInjector);\n const renderer = injectRenderer();\n\n let container: HTMLDivElement | null = null;\n const mountedComponents = new Map<Type<unknown>, ComponentRef<unknown>>();\n\n const getContainerParent = () => {\n return document.body ?? document.documentElement;\n };\n\n const ensureContainer = () => {\n if (container) {\n return container;\n }\n\n const nextContainer = renderer.createElement('div');\n renderer.addClass(nextContainer, 'et-style-manager');\n renderer.setAttribute(nextContainer, 'aria-hidden', 'true');\n renderer.setStyle(nextContainer, { display: 'none' });\n renderer.appendChild(getContainerParent(), nextContainer);\n container = nextContainer;\n\n return nextContainer;\n };\n\n const cleanupContainer = () => {\n if (!container) {\n return;\n }\n\n const parent = renderer.parentNode(container);\n if (parent) {\n renderer.removeChild(parent, container);\n }\n\n container = null;\n };\n\n const mount = <TComponent>(component: Type<TComponent>) => {\n const existingComponent = mountedComponents.get(component);\n if (existingComponent) {\n return existingComponent as ComponentRef<TComponent>;\n }\n\n const componentRef = createComponent(component, { environmentInjector: envInjector });\n appRef.attachView(componentRef.hostView);\n renderer.appendChild(ensureContainer(), componentRef.location.nativeElement);\n mountedComponents.set(component, componentRef);\n\n return componentRef;\n };\n\n destroyRef.onDestroy(() => {\n if (appRef.destroyed) {\n mountedComponents.clear();\n cleanupContainer();\n\n return;\n }\n\n mountedComponents.forEach((componentRef) => {\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n mountedComponents.clear();\n\n cleanupContainer();\n });\n\n return { mount };\n },\n { name: 'StyleManager' },\n);\n\nexport const provideStyleManager = /* @__PURE__ */ toProvideFn(STYLE_MANAGER_DEF);\nexport const injectStyleManager = /* @__PURE__ */ toInjectFn(STYLE_MANAGER_DEF);\n","import { InjectionToken, Provider, Signal } from '@angular/core';\n\nexport type ConsentHandler = {\n /** Signal that is `true` when consent has been granted. */\n isGranted: Signal<boolean>;\n /** Grants consent and writes the decision back to the source. */\n grant: () => void;\n /** Revokes consent and writes the decision back to the source. */\n revoke?: () => void;\n};\n\nexport type CreateUserConsentProviderOptions = {\n /** The provider result returned by `createStaticProvider` that this consent provider should be associated with. */\n for: InjectionToken<ConsentHandler | null>;\n\n /**\n * Factory executed inside the injection context that returns a `Signal<boolean>`.\n *\n * @example\n * isGranted: () => inject(CookieService).hasMediaConsent\n */\n isGranted: () => Signal<boolean>;\n\n /**\n * Factory executed inside the injection context that returns the grant function.\n *\n * @example\n * grant: () => () => inject(CookieService).acceptAll()\n */\n grant: () => () => void;\n\n /**\n * Factory executed inside the injection context that returns the revoke function.\n *\n * @example\n * revoke : () => () => inject(CookieService).revokeAll()\n */\n revoke?: () => () => void;\n};\n\nexport const createUserConsentProvider = (options: CreateUserConsentProviderOptions): Provider => ({\n provide: options.for,\n useFactory: (): ConsentHandler => ({\n isGranted: options.isGranted(),\n grant: options.grant(),\n ...(options.revoke ? { revoke: options.revoke() } : {}),\n }),\n});\n","import { Observable } from 'rxjs';\n\nexport const nextFrame = (cb: () => void) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n};\n\nexport const fromNextFrame = () => {\n return new Observable<void>((observer) => {\n nextFrame(() => {\n observer.next();\n observer.complete();\n });\n });\n};\n\nexport const forceReflow = (element?: HTMLElement) => {\n // The `document.body` fallback is resolved lazily and guarded: there is nothing to reflow on the\n // server, so this becomes a no-op instead of throwing on a missing `document`.\n const el = element ?? (typeof document === 'undefined' ? null : document.body);\n\n return el?.offsetHeight ?? 0;\n};\n\n/**\n * Whether the user asked for reduced motion, read straight from `matchMedia`.\n *\n * Inside a component, prefer the reactive `injectPrefersReducedMotion()`. This is for the animation\n * helpers that run from effects, event handlers and imperative APIs, where there is no injection\n * context. Pass the element being animated so the query resolves against its own window - otherwise\n * an animation inside an iframe would read the top-level document's preference.\n */\nexport const matchesReducedMotion = (element?: Element) => {\n const view = element?.ownerDocument.defaultView ?? (typeof window === 'undefined' ? null : window);\n\n return view?.matchMedia('(prefers-reduced-motion: reduce)').matches ?? false;\n};\n","import { AfterViewInit, DestroyRef, Directive, ElementRef, inject, InjectionToken, model } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, filter, map, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { injectRenderer } from '../providers';\nimport { ANIMATABLE_TOKEN, AnimatableDirective, AnimationEndEvent } from './animatable.directive';\nimport { animationDebugLog } from './animation-debug';\nimport { forceReflow, fromNextFrame } from './animation-utils';\n\nexport const ANIMATED_LIFECYCLE_TOKEN = new InjectionToken<AnimatedLifecycleDirective>(\n 'ANIMATED_LIFECYCLE_DIRECTIVE_TOKEN',\n);\n\nconst ANIMATION_CLASSES = {\n enterFrom: 'et-animation-enter-from',\n enterActive: 'et-animation-enter-active',\n enterTo: 'et-animation-enter-to',\n enterDone: 'et-animation-enter-done',\n enterInterrupt: 'et-animation-enter-interrupt',\n leaveFrom: 'et-animation-leave-from',\n leaveActive: 'et-animation-leave-active',\n leaveTo: 'et-animation-leave-to',\n leaveDone: 'et-animation-leave-done',\n leaveInterrupt: 'et-animation-leave-interrupt',\n} as const;\n\nconst FORCE_INVISIBLE_CLASS = 'et-force-invisible';\n\nexport type AnimatedLifecycleState = 'entering' | 'entered' | 'leaving' | 'left' | 'init';\n\n@Directive({\n selector: '[etAnimatedLifecycle]',\n exportAs: 'etAnimatedLifecycle',\n providers: [\n {\n provide: ANIMATED_LIFECYCLE_TOKEN,\n useExisting: AnimatedLifecycleDirective,\n },\n ],\n hostDirectives: [AnimatableDirective],\n host: {\n class: FORCE_INVISIBLE_CLASS,\n },\n})\nexport class AnimatedLifecycleDirective implements AfterViewInit {\n private destroyRef = inject(DestroyRef);\n private cancelCurrentAnimation$ = new Subject<void>();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private animatable = inject(ANIMATABLE_TOKEN);\n private renderer = injectRenderer();\n private element = this.elementRef.nativeElement;\n\n private isConstructed = false;\n private transitionIdCounter = 0;\n\n private forcedAtFrameId: number | null = null;\n private currentFrameId = 0;\n\n state$ = new BehaviorSubject<AnimatedLifecycleState>('init');\n\n stateChange = outputFromObservable(this.state$);\n\n skipNextEnter = model(false);\n\n constructor() {\n this.state$\n .pipe(\n tap((state) => {\n if (state !== 'init') {\n this.removeClass(FORCE_INVISIBLE_CLASS);\n } else {\n this.addClass(FORCE_INVISIBLE_CLASS);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.trackFrameId();\n }\n\n private trackFrameId() {\n const updateFrameId = () => {\n this.currentFrameId = requestAnimationFrame(updateFrameId);\n };\n this.currentFrameId = requestAnimationFrame(updateFrameId);\n\n this.destroyRef.onDestroy(() => {\n cancelAnimationFrame(this.currentFrameId);\n });\n }\n\n ngAfterViewInit() {\n this.isConstructed = true;\n }\n\n enter() {\n const currentState = this.state$.value;\n\n if (currentState === 'entering') return;\n\n if ((currentState === 'init' && !this.isConstructed) || this.skipNextEnter()) {\n this.debugLog('enter: instant (not constructed or skipNextEnter)', { currentState });\n this.updateState('entered');\n this.skipNextEnter.set(false);\n this.addClass(ANIMATION_CLASSES.enterDone);\n this.forcedAtFrameId = null;\n\n return;\n }\n\n const isInterrupting = currentState === 'leaving';\n\n this.updateState('entering');\n this.removeClass(ANIMATION_CLASSES.leaveDone);\n\n const previousCancel$ = this.cancelCurrentAnimation$;\n this.cancelCurrentAnimation$ = new Subject<void>();\n\n const transitionId = `enter-${++this.transitionIdCounter}`;\n this.animatable.setTransitionId(transitionId);\n\n const skipAnimation = this.forcedAtFrameId !== null && this.forcedAtFrameId === this.currentFrameId;\n this.forcedAtFrameId = null;\n\n this.debugLog(\n `enter: ${skipAnimation ? 'skip (forced this frame)' : isInterrupting ? 'interrupting leave' : 'normal'}`,\n {\n currentState,\n transitionId,\n },\n );\n\n if (skipAnimation) {\n this.removeClasses(\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n ANIMATION_CLASSES.leaveInterrupt,\n );\n this.updateState('entered');\n this.addClass(ANIMATION_CLASSES.enterDone);\n previousCancel$.next();\n previousCancel$.complete();\n\n return;\n }\n\n if (isInterrupting) {\n this.handleInterruptedTransition({\n removeClasses: [\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n ANIMATION_CLASSES.leaveInterrupt,\n ],\n addClasses: [ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo, ANIMATION_CLASSES.enterInterrupt],\n expectedState: 'entering',\n transitionId,\n onComplete: () => {\n this.updateState('entered');\n this.removeClasses(ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n this.addClass(ANIMATION_CLASSES.enterDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n } else {\n this.handleNormalTransition({\n fromClass: ANIMATION_CLASSES.enterFrom,\n activeClass: ANIMATION_CLASSES.enterActive,\n toClass: ANIMATION_CLASSES.enterTo,\n expectedState: 'entering',\n transitionId,\n onComplete: () => {\n this.updateState('entered');\n this.removeClasses(ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n this.addClass(ANIMATION_CLASSES.enterDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n }\n\n previousCancel$.next();\n previousCancel$.complete();\n }\n\n leave() {\n const currentState = this.state$.value;\n\n if (currentState === 'leaving') return;\n\n if (currentState === 'init') {\n this.debugLog('leave: instant (state is init, enter never ran)');\n this.updateState('left');\n this.addClass(ANIMATION_CLASSES.leaveDone);\n this.forcedAtFrameId = null;\n\n return;\n }\n\n const isInterrupting = currentState === 'entering';\n\n this.updateState('leaving');\n this.removeClass(ANIMATION_CLASSES.enterDone);\n\n const previousCancel$ = this.cancelCurrentAnimation$;\n this.cancelCurrentAnimation$ = new Subject<void>();\n\n const transitionId = `leave-${++this.transitionIdCounter}`;\n this.animatable.setTransitionId(transitionId);\n\n const skipAnimation = this.forcedAtFrameId !== null && this.forcedAtFrameId === this.currentFrameId;\n this.forcedAtFrameId = null;\n\n this.debugLog(\n `leave: ${skipAnimation ? 'skip (forced this frame)' : isInterrupting ? 'interrupting enter' : 'normal'}`,\n {\n currentState,\n transitionId,\n },\n );\n\n if (skipAnimation) {\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.enterInterrupt,\n );\n this.updateState('left');\n this.addClass(ANIMATION_CLASSES.leaveDone);\n previousCancel$.next();\n previousCancel$.complete();\n\n return;\n }\n\n if (isInterrupting) {\n this.handleInterruptedTransition({\n removeClasses: [\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.enterInterrupt,\n ],\n addClasses: [ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo, ANIMATION_CLASSES.leaveInterrupt],\n expectedState: 'leaving',\n transitionId,\n onComplete: () => {\n this.updateState('left');\n this.removeClasses(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this.addClass(ANIMATION_CLASSES.leaveDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n } else {\n this.handleNormalTransition({\n fromClass: ANIMATION_CLASSES.leaveFrom,\n activeClass: ANIMATION_CLASSES.leaveActive,\n toClass: ANIMATION_CLASSES.leaveTo,\n expectedState: 'leaving',\n transitionId,\n onComplete: () => {\n this.updateState('left');\n this.removeClasses(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this.addClass(ANIMATION_CLASSES.leaveDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n }\n\n previousCancel$.next();\n previousCancel$.complete();\n }\n\n forceEnteredState() {\n this.cancelCurrentAnimation$.next();\n\n this.updateState('entered');\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n );\n this.addClass(ANIMATION_CLASSES.enterDone);\n this.forcedAtFrameId = this.currentFrameId;\n }\n\n forceLeftState() {\n this.cancelCurrentAnimation$.next();\n\n this.updateState('left');\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n );\n this.addClass(ANIMATION_CLASSES.leaveDone);\n this.forcedAtFrameId = this.currentFrameId;\n }\n\n private handleNormalTransition(config: {\n fromClass: string;\n activeClass: string;\n toClass: string;\n expectedState: 'entering' | 'leaving';\n transitionId: string;\n onComplete: () => void;\n cancelSignal: Subject<void>;\n }) {\n const { fromClass, activeClass, toClass, expectedState, transitionId, onComplete, cancelSignal } = config;\n\n this.removeClasses(ANIMATION_CLASSES.enterInterrupt, ANIMATION_CLASSES.leaveInterrupt);\n\n this.addClass(fromClass);\n forceReflow();\n this.addClass(activeClass);\n\n fromNextFrame()\n .pipe(\n tap(() => {\n if (this.state$.value === expectedState) {\n this.removeClass(fromClass);\n this.addClass(toClass);\n }\n }),\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n switchMap((isAnimating) => {\n if (isAnimating) return of(true);\n\n // Nothing started yet on the first check - give a transition with a delay one more\n // frame before concluding none is coming (mirrors handleInterruptedTransition).\n return fromNextFrame().pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n );\n }),\n switchMap((isAnimating) => {\n if (!isAnimating) {\n // No transition ever started - e.g. `prefers-reduced-motion` collapsed every\n // transition-duration to 0, which per spec never fires transitionrun/transitionend.\n // Waiting on animationEnd$ here would hang forever, so treat it as settled.\n this.debugLog(`${transitionId}: completes via fallback (no transition started)`);\n\n return of(true);\n }\n\n return this.animatable.animationEnd$.pipe(\n filter(() => this.state$.value === expectedState),\n switchMap((e) => {\n if (!e.cancelled && e.transitionId === transitionId) {\n return of(true);\n }\n\n // The batch ended cancelled or under a different id - e.g. the browser cancelled and\n // restarted a running transition mid-flight (an anchored overlay whose ancestor pane got\n // destroyed) or a foreign transition on the same element finished. If nothing is\n // animating anymore the expected end event can never arrive, so treat the transition as\n // settled instead of waiting forever (mirrors the fallback in handleInterruptedTransition).\n return this.animatable.isAnimating$.pipe(\n take(1),\n tap((stillAnimating) => {\n if (!stillAnimating) {\n this.debugLog(\n `${transitionId}: completes via fallback (batch id \"${e.transitionId ?? 'none'}\", cancelled ${e.cancelled})`,\n );\n }\n }),\n map((stillAnimating) => !stillAnimating),\n );\n }),\n );\n }),\n filter((settled) => settled && this.state$.value === expectedState),\n tap(onComplete),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private handleInterruptedTransition(config: {\n removeClasses: string[];\n addClasses: string[];\n expectedState: 'entering' | 'leaving';\n transitionId: string;\n onComplete: () => void;\n cancelSignal: Subject<void>;\n }) {\n const { removeClasses, addClasses, expectedState, transitionId, onComplete, cancelSignal } = config;\n\n this.removeClasses(...removeClasses);\n addClasses.forEach((cls) => this.addClass(cls));\n\n fromNextFrame()\n .pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n switchMap((isAnimating) => {\n if (isAnimating) {\n return of(true);\n }\n\n this.debugLog(`${transitionId}: interrupt found no running transition, re-checking next frame`);\n\n return fromNextFrame().pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n );\n }),\n take(1),\n switchMap((isAnimating) => {\n if (!isAnimating && this.state$.value === expectedState) {\n this.debugLog(`${transitionId}: interrupt completes INSTANTLY (no transition running after class swap)`);\n\n return of({ cancelled: false, transitionId } as AnimationEndEvent);\n }\n\n this.debugLog(`${transitionId}: interrupt waiting for animation end`, { isAnimating });\n\n return this.animatable.animationEnd$.pipe(\n switchMap((e) => {\n if (e.transitionId === transitionId) {\n return of(e);\n }\n\n return this.animatable.isAnimating$.pipe(\n take(1),\n switchMap((stillAnimating) => {\n if (!stillAnimating && this.state$.value === expectedState) {\n this.debugLog(\n `${transitionId}: interrupt completes via foreign animation end (batch id was \"${e.transitionId}\")`,\n { stillAnimating },\n );\n\n return of({ cancelled: false, transitionId } as AnimationEndEvent);\n }\n\n return of(null);\n }),\n );\n }),\n filter((e): e is AnimationEndEvent => e !== null && e.transitionId === transitionId),\n );\n }),\n filter((e) => this.state$.value === expectedState && !e.cancelled),\n tap(() => {\n this.debugLog(`${transitionId}: interrupt complete`);\n onComplete();\n }),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private addClass(className: string) {\n this.renderer.addClass(this.element, className);\n }\n\n private removeClass(className: string) {\n this.renderer.removeClass(this.element, className);\n }\n\n private removeClasses(...classNames: string[]) {\n this.renderer.removeClass(this.element, ...classNames);\n }\n\n private updateState(newState: AnimatedLifecycleState) {\n this.debugLog(`state: ${this.state$.value} → ${newState}`);\n this.state$.next(newState);\n }\n\n private debugLog(message: string, data?: Record<string, unknown>) {\n const el = this.element;\n const scope = `lifecycle ${el.tagName.toLowerCase()}${el.classList.contains('et-overlay') ? '.et-overlay' : ''}`;\n\n if (data) {\n animationDebugLog(scope, message, data);\n } else {\n animationDebugLog(scope, message);\n }\n }\n}\n","import { Directive, InjectionToken, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap } from 'rxjs';\nimport { ANIMATED_LIFECYCLE_TOKEN } from './animated-lifecycle.directive';\n\nexport const ANIMATED_IF_TOKEN = new InjectionToken<AnimatedIfDirective>('ANIMATED_IF_TOKEN');\n\n@Directive({\n selector: '[etAnimatedIf]',\n providers: [\n {\n provide: ANIMATED_IF_TOKEN,\n useExisting: AnimatedIfDirective,\n },\n ],\n})\nexport class AnimatedIfDirective {\n private templateRef = inject(TemplateRef);\n private viewContainerRef = inject(ViewContainerRef);\n private animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);\n\n private hasView = false;\n\n ifValue = input<unknown>(null, { alias: 'etAnimatedIf' });\n\n constructor() {\n toObservable(this.ifValue)\n .pipe(\n switchMap((value) => {\n if (value) {\n if (!this.hasView) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n this.hasView = true;\n }\n\n this.animatedLifecycle.enter();\n\n return of(null);\n }\n\n if (!this.hasView) {\n return of(null);\n }\n\n this.animatedLifecycle.leave();\n\n return this.animatedLifecycle.state$.pipe(\n filter((state) => state === 'left'),\n tap(() => {\n this.viewContainerRef.clear();\n this.hasView = false;\n }),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { combineLatest, Subject } from 'rxjs';\nimport { matchesReducedMotion } from './animation-utils';\n\ntype FlipAnimationGroupConfig = {\n /**\n * The elements to animate\n */\n elements: Array<HTMLElement | { element: HTMLElement; originElement?: HTMLElement }>;\n\n /**\n * The duration of the animation in milliseconds\n * @default 250\n */\n duration?: number;\n\n /**\n * The easing function to use for the animation\n * @default 'cubic-bezier(0.4, 0, 0.2, 1)'\n */\n easing?: string;\n\n /**\n * Play the animation even when the user prefers reduced motion.\n *\n * Only set this for movement that carries meaning the user would otherwise miss - decorative\n * movement should stay gated.\n *\n * @default false\n */\n ignoreReducedMotion?: boolean;\n};\n\nexport const createFlipAnimationGroup = (config: FlipAnimationGroupConfig) => {\n const { elements, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)', ignoreReducedMotion } = config;\n\n const flips = elements.map((el) => {\n const element = 'element' in el ? el.element : el;\n const originElement = 'originElement' in el ? el.originElement : undefined;\n\n return createFlipAnimation({ element, originElement, duration, easing, ignoreReducedMotion });\n });\n\n const onStart$ = combineLatest(flips.map((animation) => animation.onStart$));\n const onFinish$ = combineLatest(flips.map((animation) => animation.onFinish$));\n const onCancel$ = combineLatest(flips.map((animation) => animation.onCancel$));\n\n const updateInit = () => {\n flips.forEach((animation) => animation.updateInit());\n };\n\n const play = () => {\n flips.forEach((animation) => animation.play());\n };\n\n const cancel = () => {\n flips.forEach((animation) => animation.cancel());\n };\n\n return {\n updateInit,\n play,\n cancel,\n onStart$,\n onFinish$,\n onCancel$,\n };\n};\n\nexport type FlipAnimationConfig = {\n /**\n * The element to animate\n */\n element: HTMLElement;\n\n /**\n * The element to use as the origin for the animation\n * @default element\n */\n originElement?: HTMLElement;\n\n /**\n * The duration of the animation in milliseconds\n * @default 250\n */\n duration?: number;\n\n /**\n * The easing function to use for the animation\n * @default 'cubic-bezier(0.4, 0, 0.2, 1)'\n */\n easing?: string;\n\n /**\n * Play the animation even when the user prefers reduced motion.\n *\n * Only set this for movement that carries meaning the user would otherwise miss - decorative\n * movement should stay gated.\n *\n * @default false\n */\n ignoreReducedMotion?: boolean;\n};\n\nexport const createFlipAnimation = (config: FlipAnimationConfig) => {\n const {\n element: el,\n originElement = el,\n duration = 250,\n easing = 'cubic-bezier(0.4, 0, 0.2, 1)',\n ignoreReducedMotion = false,\n } = config;\n\n let initialRect = originElement.getBoundingClientRect();\n let animation: Animation | null = null;\n\n const onStart$ = new Subject<void>();\n const onFinish$ = new Subject<void>();\n const onCancel$ = new Subject<void>();\n\n const onAnimationFinish = () => {\n cleanup();\n onFinish$.next();\n };\n\n const onAnimationCancel = () => {\n cleanup();\n onCancel$.next();\n };\n\n const cleanup = () => {\n if (!animation) {\n return;\n }\n\n animation.removeEventListener('finish', onAnimationFinish);\n animation.removeEventListener('cancel', onAnimationCancel);\n };\n\n const updateInit = () => {\n initialRect = originElement.getBoundingClientRect();\n };\n\n const play = () => {\n const lastRect = el.getBoundingClientRect();\n\n const delta = {\n x: initialRect.left - lastRect.left,\n y: initialRect.top - lastRect.top,\n scaleX: initialRect.width / lastRect.width,\n scaleY: initialRect.height / lastRect.height,\n };\n\n // Under reduced motion the element jumps straight to its final position. Collapsing the duration\n // instead of bailing out keeps the `Animation` lifecycle intact, so callers that wait on\n // `onFinish$` to clean up still get their event.\n const effectiveDuration = !ignoreReducedMotion && matchesReducedMotion(el) ? 0 : duration;\n\n animation = el.animate(\n [\n {\n transformOrigin: 'top left',\n transform: `\n translate(${delta.x}px, ${delta.y}px)\n scale(${delta.scaleX}, ${delta.scaleY})\n `,\n },\n {\n transformOrigin: 'top left',\n transform: 'none',\n },\n ],\n {\n duration: effectiveDuration,\n easing,\n fill: 'both',\n },\n );\n\n animation.addEventListener('finish', onAnimationFinish);\n animation.addEventListener('cancel', onAnimationCancel);\n\n onStart$.next();\n };\n\n const cancel = () => {\n animation?.cancel();\n\n cleanup();\n };\n\n return {\n updateInit,\n play,\n cancel,\n onStart$: onStart$.asObservable(),\n onFinish$: onFinish$.asObservable(),\n onCancel$: onCancel$.asObservable(),\n };\n};\n","import { Directive, DOCUMENT, ElementRef, inject, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, tap } from 'rxjs';\n\n@Directive({\n selector: '[etClickOutside]',\n})\nexport class ClickOutsideDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private document = inject(DOCUMENT);\n\n didClickOutside = output<MouseEvent>({ alias: 'etClickOutside' });\n\n constructor() {\n fromEvent<MouseEvent>(this.document.documentElement, 'click')\n .pipe(\n tap((event) => {\n const activeElement = event.target as HTMLElement;\n const isInside = this.elementRef.nativeElement.contains(activeElement);\n\n if (isInside) return;\n\n this.didClickOutside.emit(event);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import {\n Directive,\n effect,\n EmbeddedViewRef,\n inject,\n input,\n linkedSignal,\n numberAttribute,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[etRepeat]',\n})\nexport class RepeatDirective {\n private mainTemplateRef = inject<TemplateRef<unknown>>(TemplateRef);\n private viewContainerRef = inject(ViewContainerRef);\n\n repeatCount = input(2, { alias: 'etRepeat', transform: numberAttribute });\n\n views = linkedSignal<number, EmbeddedViewRef<unknown>[]>({\n source: this.repeatCount,\n computation: (count, previous) => {\n const prevCount = previous?.source ?? 0;\n const views: EmbeddedViewRef<unknown>[] = previous?.value ?? [];\n\n if (count === prevCount && previous?.value) {\n return previous.value;\n }\n\n const viewsToCreate = count - prevCount;\n\n if (viewsToCreate > 0) {\n for (let i = 0; i < viewsToCreate; i++) {\n views.push(this.viewContainerRef.createEmbeddedView(this.mainTemplateRef));\n }\n } else if (viewsToCreate < 0) {\n for (let i = 0; i < -viewsToCreate; i++) {\n this.viewContainerRef.remove(this.viewContainerRef.length - 1);\n }\n\n views.splice(viewsToCreate);\n }\n\n return views;\n },\n });\n\n constructor() {\n // Ugly but needed to trigger the linked signal.\n // Otherwise it has no consumers and won't run.\n effect(() => this.views());\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { routerRestoreScroll } from '../signals';\n\n/**\n * Marks a `routerLink` as a return to a page the user has already seen - a \"back to the overview\"\n * link - so it restores that page's last scroll offset instead of scrolling to top.\n *\n * Needs `restore.enabled` on `setupScrollRestoration`. A page the session has no offset for (the\n * first visit, or a reload since) scrolls to top as usual.\n *\n * @example\n * <a routerLink=\"/teams\" etRestoreScroll>Teams</a>\n */\n@Directive({\n selector: '[routerLink][etRestoreScroll]',\n})\nexport class RestoreScrollDirective {\n private routerLink = inject(RouterLink);\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n // Capture, so the mark is on `state` before `RouterLink`'s own click handler reads it. Applied\n // per click rather than once, because a `[state]` binding on the same element would overwrite it\n // on any later change detection run.\n this.elementRef.nativeElement.addEventListener(\n 'click',\n () => (this.routerLink.state = { ...this.routerLink.state, ...routerRestoreScroll() }),\n { capture: true },\n );\n }\n}\n","import { Directive, ElementRef, Signal, computed, inject, isSignal, model, signal } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { signalElementIntersection } from '../signals/element-intersection';\n\n@Directive({\n selector: '[etScrollObserver]',\n exportAs: 'etScrollObserver',\n})\nexport class ScrollObserverDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n enabled = model<MaybeSignal<boolean>>(true);\n\n private enabledValue = computed(() => {\n const enabled = this.enabled();\n\n if (isSignal(enabled)) return enabled();\n\n return enabled;\n });\n\n private _startEl = signal<ElementRef<HTMLElement> | null>(null);\n private _endEl = signal<ElementRef<HTMLElement> | null>(null);\n\n private _startIntersection = signalElementIntersection(this._startEl as Signal<ElementRef<HTMLElement> | null>, {\n root: this.elementRef,\n enabled: this.enabledValue,\n });\n private _endIntersection = signalElementIntersection(this._endEl as Signal<ElementRef<HTMLElement> | null>, {\n root: this.elementRef,\n enabled: this.enabledValue,\n });\n\n isAtStart = computed(() => this._startIntersection()[0]?.isIntersecting ?? false);\n isAtEnd = computed(() => this._endIntersection()[0]?.isIntersecting ?? false);\n\n _registerStart(el: ElementRef<HTMLElement>) {\n this._startEl.set(el);\n }\n\n _registerEnd(el: ElementRef<HTMLElement>) {\n this._endEl.set(el);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { ScrollObserverDirective } from './scroll-observer.directive';\n\n@Directive({\n selector: '[etScrollObserverEnd]',\n})\nexport class ScrollObserverEndDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private host = inject(ScrollObserverDirective);\n\n constructor() {\n this.host._registerEnd(this.elementRef);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { ScrollObserverDirective } from './scroll-observer.directive';\n\n@Directive({\n selector: '[etScrollObserverStart]',\n})\nexport class ScrollObserverStartDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private host = inject(ScrollObserverDirective);\n\n constructor() {\n this.host._registerStart(this.elementRef);\n }\n}\n","import {\n EMPTY,\n Observable,\n concat,\n concatMap,\n defer,\n filter,\n finalize,\n fromEvent,\n merge,\n of,\n take,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { suppressTextSelection } from '../utils/text-selection';\n\nexport type DragStartEvent = {\n /** Pointer position at pointerdown - NOT at commit-threshold crossing. */\n readonly clientX: number;\n readonly clientY: number;\n};\n\nexport type DragMoveEvent = {\n readonly stepX: number;\n readonly stepY: number;\n readonly clientX: number;\n readonly clientY: number;\n /** Cumulative delta from the pointerdown position. */\n readonly totalDx: number;\n readonly totalDy: number;\n};\n\nexport type DragEndEvent = {\n /** Pointer position at release - the last move can lag it by a frame of movement. */\n readonly clientX: number;\n readonly clientY: number;\n /** Cumulative delta from the pointerdown position. */\n readonly totalDx: number;\n readonly totalDy: number;\n};\n\nexport type DragGestureEvent =\n | { readonly type: 'tapped' }\n | { readonly type: 'start'; readonly data: DragStartEvent }\n | { readonly type: 'move'; readonly data: DragMoveEvent }\n | { readonly type: 'end'; readonly data: DragEndEvent }\n | { readonly type: 'cancelled' };\n\n// jsdom and other non-browser DOMs ship no pointer capture; the document listeners track the\n// gesture either way, so a failure here only costs events over a cross-origin frame.\nconst capturePointer = (el: HTMLElement, pointerId: number) => {\n try {\n el.setPointerCapture(pointerId);\n } catch {\n return;\n }\n};\n\nconst setupDragObservable = (\n startEvent: PointerEvent,\n el: HTMLElement,\n commitThreshold: number,\n): Observable<DragGestureEvent> => {\n const { pointerId, clientX: startX, clientY: startY } = startEvent;\n\n let cancelled = false;\n let endX = startX;\n let endY = startY;\n\n const end$ = merge(\n fromEvent<PointerEvent>(document, 'pointerup'),\n fromEvent<PointerEvent>(document, 'pointercancel'),\n ).pipe(\n filter((e) => e.pointerId === pointerId),\n take(1),\n // Read below by the terminating `defer`, which only runs once this has completed the moves.\n tap((e) => {\n cancelled = e.type === 'pointercancel';\n endX = e.clientX;\n endY = e.clientY;\n }),\n );\n\n let lastX = startX;\n let lastY = startY;\n let committed = false;\n\n const moves$ = fromEvent<PointerEvent>(document, 'pointermove').pipe(\n filter((e) => e.pointerId === pointerId),\n concatMap((e): Observable<DragGestureEvent> => {\n if (!committed) {\n if (Math.abs(e.clientX - startX) < commitThreshold && Math.abs(e.clientY - startY) < commitThreshold) {\n return EMPTY;\n }\n committed = true;\n capturePointer(el, pointerId);\n lastX = e.clientX;\n lastY = e.clientY;\n // Emit the catch-up move together with start so consumers snap to the pointer\n // at commit instead of trailing it by the threshold distance until the next move.\n const start: DragGestureEvent = { type: 'start', data: { clientX: startX, clientY: startY } };\n const catchUpMove: DragGestureEvent = {\n type: 'move',\n data: {\n stepX: e.clientX - startX,\n stepY: e.clientY - startY,\n clientX: e.clientX,\n clientY: e.clientY,\n totalDx: e.clientX - startX,\n totalDy: e.clientY - startY,\n },\n };\n\n return of(start, catchUpMove);\n }\n\n const stepX = e.clientX - lastX;\n const stepY = e.clientY - lastY;\n lastX = e.clientX;\n lastY = e.clientY;\n return of({\n type: 'move' as const,\n data: {\n stepX,\n stepY,\n clientX: e.clientX,\n clientY: e.clientY,\n totalDx: e.clientX - startX,\n totalDy: e.clientY - startY,\n },\n });\n }),\n takeUntil(end$),\n );\n\n return defer(() => {\n const releaseSelection = suppressTextSelection(el.ownerDocument);\n\n return concat(\n moves$,\n defer((): Observable<DragGestureEvent> => {\n if (cancelled) return of({ type: 'cancelled' as const });\n if (!committed) return of({ type: 'tapped' as const });\n\n return of({\n type: 'end' as const,\n data: { clientX: endX, clientY: endY, totalDx: endX - startX, totalDy: endY - startY },\n });\n }),\n ).pipe(finalize(releaseSelection));\n });\n};\n\n/**\n * Observe one drag gesture, starting from a `pointerdown` on `element`.\n *\n * Emits `start` once the pointer has travelled `commitThreshold` px (so a click is not a drag),\n * immediately followed by a catch-up `move`, then a `move` per pointer move, and finally `end`\n * carrying the release position. A pointer released before crossing the threshold emits a single\n * `tapped` instead - its position is the `pointerdown` the caller already holds. The stream\n * completes with the gesture, so there is nothing to unsubscribe on the happy path.\n *\n * Text selection is suppressed on the element's document for as long as the gesture runs, so a drag\n * does not sweep a selection across the page.\n *\n * A gesture the browser takes away - a `pointercancel` from a system gesture, an incoming call, the\n * tab going to the background - ends on `cancelled` rather than `end` or `tapped`. Treat it as\n * \"revert\", not \"drop here\": the user never let go, so there is no position they chose.\n *\n * This is the primitive behind {@link DragHandleDirective}. Prefer the directive; reach for this when\n * the draggable element belongs to someone else's template (e.g. a table feature attaching a drag to\n * header cells the table itself renders) and you can only work from a delegated `pointerdown`.\n */\nexport const dragGestureFrom = (\n event: PointerEvent,\n element: HTMLElement,\n options?: { commitThreshold?: number },\n): Observable<DragGestureEvent> => setupDragObservable(event, element, options?.commitThreshold ?? 8);\n","import { Directive, ElementRef, booleanAttribute, inject, input } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Subject, distinctUntilChanged, exhaustMap, filter, map, share } from 'rxjs';\nimport { DragEndEvent, DragGestureEvent, DragMoveEvent, DragStartEvent, dragGestureFrom } from './drag-gesture';\nimport { applyHostListener } from '../utils/angular/host-listener';\n\n@Directive({\n selector: '[etDragHandle]',\n host: {\n // Without this the browser claims touch pointermoves for scrolling and fires pointercancel,\n // so a touch drag never gets past the commit threshold. Scrolling stays available while the\n // handle is disabled.\n '[style.touch-action]': \"disabled() ? null : 'none'\",\n },\n})\nexport class DragHandleDirective {\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n commitThreshold = input(8);\n disabled = input(false, { transform: booleanAttribute });\n\n private gestureStart$ = new Subject<PointerEvent>();\n\n private gesture$ = this.gestureStart$.pipe(\n exhaustMap((event) => dragGestureFrom(event, this.el.nativeElement, { commitThreshold: this.commitThreshold() })),\n takeUntilDestroyed(),\n share(),\n );\n\n dragTapped = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'tapped'),\n map(() => undefined),\n ),\n );\n\n dragStarted = outputFromObservable<DragStartEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<DragGestureEvent, { type: 'start' }> => e.type === 'start'),\n map((e) => e.data),\n ),\n );\n\n dragMoved = outputFromObservable<DragMoveEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<DragGestureEvent, { type: 'move' }> => e.type === 'move'),\n map((e) => e.data),\n ),\n );\n\n dragEnded = outputFromObservable<DragEndEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<DragGestureEvent, { type: 'end' }> => e.type === 'end'),\n map((e) => e.data),\n ),\n );\n\n /**\n * The browser took the gesture away mid-drag (a system gesture, an incoming call, the tab going to\n * the background). Revert to where the drag started - the user never chose a drop position. A\n * consumer that does not handle this leaves the item wherever the pointer happened to be.\n */\n dragCancelled = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'cancelled'),\n map(() => undefined),\n ),\n );\n\n isDragging = toSignal(\n this.gesture$.pipe(\n map((e) => e.type === 'start' || e.type === 'move'),\n distinctUntilChanged(),\n ),\n { initialValue: false },\n );\n\n constructor() {\n applyHostListener('pointerdown', (e) => this.startGesture(e));\n }\n\n startGesture(event: PointerEvent) {\n if (event.button !== 0 || this.disabled()) return;\n event.stopPropagation();\n this.gestureStart$.next(event);\n }\n}\n","import { Signal } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * The browser's notification permission, widened with `'unsupported'` - which covers both a browser\n * without the Notification API and the server, where there is no `Notification` global to ask.\n */\nexport type NotificationPermissionState = NotificationPermission | 'unsupported';\n\n/**\n * Which of the two ways of putting a notification on screen was used.\n *\n * - `page` - the `Notification` constructor. Its events come back to the page, so `onClick`,\n * `onClose`, `onShow` and `onError` all work, but the notification dies with the tab.\n * - `service-worker` - `ServiceWorkerRegistration.showNotification()`. The only path Android Chrome\n * and installed iOS web apps have, and the only one that can render `actions` - but its clicks are\n * delivered to the service worker rather than to the page, see {@link ShowNotificationConfig.onClick}.\n * - `unavailable` - nothing was shown: no API, permission not granted, the page path threw and no\n * service worker was registered to fall back to, or the notification was closed before it appeared.\n */\nexport type NotificationDeliveryPath = 'page' | 'service-worker' | 'unavailable';\n\n/**\n * A button rendered on a notification. Service-worker path only - `show()` routes a notification with\n * actions there automatically, and a notification pinned to `path: 'page'` drops them.\n */\nexport type NotificationActionConfig = {\n /** Identifies this button in the service worker's `notificationclick` handler (`event.action`). */\n action: string;\n\n /** The button's label. */\n title: string;\n\n /** Icon URL for the button. Rendered on Android, ignored on desktop. */\n icon?: string;\n};\n\n/** What {@link ShowNotificationConfig.onClick} is called with. */\nexport type NotificationClickContext = {\n /** The notification's tag - the generated one when the config did not set one. */\n tag: string;\n\n /** Whatever was passed as {@link ShowNotificationConfig.data}. */\n data: unknown;\n\n /** The action button that was clicked. Service-worker path only, and absent for the body itself. */\n action?: string;\n\n /** The underlying DOM event. Page path only. */\n event?: Event;\n};\n\n/**\n * The message a service worker posts to relay a notification click back to the page. Matches what\n * {@link NOTIFICATION_CLICK_MESSAGE_TYPE} documents.\n */\nexport type NotificationClickMessage = {\n type: typeof NOTIFICATION_CLICK_MESSAGE_TYPE;\n tag: string;\n data?: unknown;\n action?: string;\n};\n\n/**\n * The `message` type a service worker must post for `onClick` to fire on the service-worker path,\n * where the click event is dispatched to the worker and never reaches the page.\n *\n * Nothing in the SDK can install this handler - a service worker's code is the app's. Add it to yours\n * to make `onClick` work on Android Chrome and installed iOS web apps:\n *\n * ```js\n * self.addEventListener('notificationclick', (event) => {\n * event.notification.close();\n *\n * event.waitUntil(\n * self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => {\n * for (const client of clients) {\n * client.postMessage({\n * type: 'et:notification-click',\n * tag: event.notification.tag,\n * data: event.notification.data,\n * action: event.action || undefined,\n * });\n * }\n * }),\n * );\n * });\n * ```\n */\nexport const NOTIFICATION_CLICK_MESSAGE_TYPE = 'et:notification-click';\n\nexport type ShowNotificationConfig = {\n /** The notification's headline. The only required field. */\n title: string;\n\n /** Body text below the title. */\n body?: string;\n\n /** URL of the image shown as the notification's icon. */\n icon?: string;\n\n /** URL of a small monochrome badge, shown in the Android status bar when the icon does not fit. */\n badge?: string;\n\n /**\n * URL of a large image shown inside the notification. Service-worker path only, and only honored by\n * Chromium.\n */\n image?: string;\n\n /**\n * Identity of the notification: showing another one with the same tag **replaces** it instead of\n * stacking, and it is what `close()` matches on the service-worker path.\n *\n * Leave it unset for a stand-alone notification - a unique tag is generated, which is what makes\n * `close()` and click relaying work at all. Set it to coalesce repeated notifications about the same\n * thing (one per chat, one per upload); `close()` on such a ref closes every notification sharing\n * the tag.\n */\n tag?: string;\n\n /** Arbitrary payload, handed back to `onClick` and to the service worker's `notificationclick`. */\n data?: unknown;\n\n /** Language of the title and body, as a BCP 47 tag. */\n lang?: string;\n\n /** Text direction of the title and body. */\n dir?: NotificationDirection;\n\n /** Show without sound or vibration. */\n silent?: boolean;\n\n /**\n * Keep the notification on screen until the user dismisses it, rather than auto-hiding it. Desktop\n * Chromium only; ignored elsewhere.\n */\n requireInteraction?: boolean;\n\n /**\n * Alert the user again when this notification replaces one with the same tag - by default a\n * replacement is silent. Requires `tag`; service-worker path only.\n */\n renotify?: boolean;\n\n /**\n * Vibration pattern in milliseconds, alternating vibrate and pause. Service-worker path only, and\n * Android only.\n */\n vibrate?: number[];\n\n /**\n * The time the notification is *about*, as an epoch timestamp - not when it is shown. Used for\n * ordering in the notification tray. Service-worker path only.\n */\n timestamp?: number;\n\n /** Buttons on the notification. Forces the service-worker path, since the page path cannot render them. */\n actions?: NotificationActionConfig[];\n\n /**\n * Which delivery path to use.\n *\n * - `auto` (default) - the page path first, falling back to the service worker when the constructor\n * throws, which is how Android Chrome reports that it only does persistent notifications. A\n * notification with `actions` goes straight to the service worker.\n * - `page` - constructor only. Fails to `'unavailable'` where the constructor is illegal, and drops\n * `actions`, `image`, `renotify`, `vibrate` and `timestamp`.\n * - `service-worker` - persistent only. Fails to `'unavailable'` when no service worker is\n * registered.\n * @default 'auto'\n */\n path?: 'auto' | 'page' | 'service-worker';\n\n /**\n * Close the notification this many milliseconds after it is shown. Off by default, which leaves the\n * lifetime to the platform - desktop Chromium hides a notification after about 20 seconds and keeps\n * it in the tray, Android keeps it until dismissed.\n */\n autoClose?: number;\n\n /**\n * Called when the user clicks the notification (or one of its `actions`).\n *\n * On the page path this is wired directly to the notification's `click` event. On the\n * service-worker path the event goes to the worker instead, so this only fires if that worker\n * relays it - see {@link NOTIFICATION_CLICK_MESSAGE_TYPE} for the handler to add.\n *\n * A click does not focus the tab. Call `window.focus()` yourself if that is what you want.\n */\n onClick?: (context: NotificationClickContext) => void;\n\n /** Called when the notification is closed, by the user or by `close()`. Page path only. */\n onClose?: () => void;\n\n /** Called once the notification is on screen. Page path only. */\n onShow?: () => void;\n\n /** Called when the browser failed to display the notification. Page path only. */\n onError?: () => void;\n};\n\n/** Handle on a notification handed to {@link Notifications.show}. */\nexport type NotificationRef = {\n /** The notification's tag - generated when the config did not provide one. */\n readonly tag: string;\n\n /**\n * Emits once the browser has taken the notification, with the path that carried it - or\n * `'unavailable'` if nothing was shown - and completes. Never errors.\n *\n * The notification is shown whether or not anyone subscribes, and the result is replayed, so a late\n * subscriber still gets it.\n */\n readonly shown$: Observable<NotificationDeliveryPath>;\n\n /**\n * Dismiss the notification. Safe to call before `shown$` emits (the notification is then never\n * displayed) and safe to call twice.\n */\n readonly close: () => void;\n};\n\n/** The notification API, injected with `injectNotifications()`. */\nexport type Notifications = {\n /**\n * Whether this browser exposes a Notification API at all - `false` on the server and in engines\n * without it. Not a promise that a notification will show: permission still has to be granted, and\n * a browser that only supports persistent notifications still needs a service worker.\n */\n readonly isSupported: boolean;\n\n /**\n * The current permission, kept in sync while the app runs: through the Permissions API where it has\n * a `notifications` descriptor (Chromium, Firefox), and by re-reading it whenever the tab comes back\n * to the foreground everywhere else - which is how a permission revoked in browser settings is\n * picked up on WebKit.\n */\n readonly permission: Signal<NotificationPermissionState>;\n\n /**\n * Show the browser's permission prompt, emitting the outcome once and completing. Cold - nothing is\n * asked until it is subscribed to.\n *\n * Subscribe from a user gesture: Safari requires one, and Chromium blocks the prompt entirely on\n * sites that ask on page load. Emits the current state without prompting when permission was already\n * granted or denied - the prompt can only be shown once, after which only the user can change it in\n * site settings.\n */\n readonly request: () => Observable<NotificationPermissionState>;\n\n /**\n * Show a notification, if permission has been granted - this never prompts on its own, so run\n * `request()` first.\n *\n * Returns synchronously, and the notification is shown without anyone subscribing to anything; the\n * ref's `shown$` reports which path carried it.\n */\n readonly show: (config: ShowNotificationConfig) => NotificationRef;\n\n /**\n * Close every notification this app has open - the ones shown through `show()` plus any persistent\n * ones still in the tray from an earlier page load.\n */\n readonly closeAll: () => void;\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, PLATFORM_ID, effect, inject, signal, untracked } from '@angular/core';\nimport {\n EMPTY,\n Observable,\n Subject,\n catchError,\n defer,\n filter,\n from,\n fromEvent,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n tap,\n timer,\n} from 'rxjs';\nimport { injectIsDocumentVisible } from '../signals';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport {\n NOTIFICATION_CLICK_MESSAGE_TYPE,\n NotificationClickContext,\n NotificationClickMessage,\n NotificationDeliveryPath,\n NotificationPermissionState,\n NotificationRef,\n Notifications,\n ShowNotificationConfig,\n} from './notification.types';\n\n/** The options a persistent (service-worker) notification accepts on top of the constructor's. */\ntype PersistentNotificationOptions = NotificationOptions & {\n actions?: { action: string; title: string; icon?: string }[];\n image?: string;\n renotify?: boolean;\n timestamp?: number;\n vibrate?: number[];\n};\n\nconst toNotificationOptions = (config: ShowNotificationConfig, tag: string): PersistentNotificationOptions => ({\n body: config.body,\n icon: config.icon,\n badge: config.badge,\n image: config.image,\n tag,\n data: config.data,\n lang: config.lang,\n dir: config.dir,\n silent: config.silent,\n requireInteraction: config.requireInteraction,\n renotify: config.renotify,\n vibrate: config.vibrate,\n timestamp: config.timestamp,\n actions: config.actions,\n});\n\n// The constructor rejects `actions` with a TypeError rather than ignoring them, so the page path gets\n// a copy without the options only a persistent notification understands.\nconst toPageNotificationOptions = (options: PersistentNotificationOptions): NotificationOptions => {\n const { actions, image, renotify, timestamp, vibrate, ...pageOptions } = options;\n\n return pageOptions;\n};\n\nconst NOTIFICATIONS_DEF = /* @__PURE__ */ defineRootProvider(\n (): Notifications => {\n const destroyRef = inject(DestroyRef);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const isSupported = isBrowser && typeof Notification !== 'undefined';\n\n // Streams here outlive the call that created them, and `close()` can be called after teardown -\n // where `takeUntilDestroyed()` would throw rather than unsubscribe.\n const destroyed$ = new Subject<void>();\n\n destroyRef.onDestroy(() => {\n destroyed$.next();\n destroyed$.complete();\n });\n\n const permission = signal<NotificationPermissionState>(isSupported ? Notification.permission : 'unsupported');\n\n if (isSupported) {\n // Chromium and Firefox report permission changes here, including a revoke made in site settings\n // while the tab is open. WebKit has no `notifications` descriptor and rejects the query.\n const permissionStatus$ = navigator.permissions\n ? from(navigator.permissions.query({ name: 'notifications' as PermissionName })).pipe(catchError(() => EMPTY))\n : EMPTY;\n\n permissionStatus$\n .pipe(\n switchMap((status) =>\n fromEvent(status, 'change').pipe(\n map(() => status.state),\n startWith(status.state),\n ),\n ),\n map((state): NotificationPermissionState => (state === 'prompt' ? 'default' : state)),\n tap((state) => permission.set(state)),\n takeUntil(destroyed$),\n )\n .subscribe();\n\n const isDocumentVisible = injectIsDocumentVisible();\n\n // The fallback for engines without that descriptor: a permission changed in browser settings is\n // only observable by reading it again, and coming back to the tab is when that matters.\n effect(() => {\n if (!isDocumentVisible()) {\n return;\n }\n\n untracked(() => permission.set(Notification.permission));\n });\n }\n\n const request = (): Observable<NotificationPermissionState> =>\n defer((): Observable<NotificationPermissionState> => {\n if (!isSupported) {\n return of('unsupported');\n }\n\n // The prompt can only be shown once - after that only the user can change it in site settings.\n if (Notification.permission !== 'default') {\n return of(Notification.permission);\n }\n\n return from(\n new Promise<NotificationPermission>((resolve) => {\n // WebKit only gained the promise-returning form in Safari 16 and hands the result to the\n // deprecated callback before that. Passing both is spec-legal; the later resolve is a no-op.\n const requested = Notification.requestPermission(resolve) as Promise<NotificationPermission> | undefined;\n\n requested?.then(resolve, () => resolve(Notification.permission));\n }),\n );\n }).pipe(tap((state) => permission.set(state)));\n\n let nextTagId = 0;\n const clickHandlers = new Map<string, (context: NotificationClickContext) => void>();\n const openCloseFns = new Set<() => void>();\n let isClickRelayAttached = false;\n\n const attachClickRelay = () => {\n const serviceWorker = navigator.serviceWorker;\n\n if (isClickRelayAttached || !serviceWorker) {\n return;\n }\n\n isClickRelayAttached = true;\n\n fromEvent<MessageEvent>(serviceWorker, 'message')\n .pipe(\n map((event) => event.data as NotificationClickMessage | null),\n filter((message): message is NotificationClickMessage => message?.type === NOTIFICATION_CLICK_MESSAGE_TYPE),\n tap((message) =>\n clickHandlers.get(message.tag)?.({ tag: message.tag, data: message.data, action: message.action }),\n ),\n takeUntil(destroyed$),\n )\n .subscribe();\n };\n\n // `getRegistration()` rather than `ready`: `ready` never settles in an app without a service\n // worker, which would leave every `shown$` hanging instead of reporting 'unavailable'.\n const serviceWorkerRegistration = (): Observable<ServiceWorkerRegistration | undefined> =>\n defer(() =>\n navigator.serviceWorker\n ? from(navigator.serviceWorker.getRegistration()).pipe(catchError(() => of(undefined)))\n : of(undefined),\n );\n\n const closePersistentNotifications = (tag?: string): Observable<Notification[]> =>\n serviceWorkerRegistration().pipe(\n switchMap((registration) =>\n registration\n ? // Firefox rejects getNotifications() when the worker is not the one that showed them.\n from(registration.getNotifications(tag ? { tag } : undefined)).pipe(catchError(() => of([])))\n : of<Notification[]>([]),\n ),\n tap((notifications) => notifications.forEach((notification) => notification.close())),\n );\n\n const show = (config: ShowNotificationConfig): NotificationRef => {\n const tag = config.tag ?? `et-notification-${++nextTagId}`;\n const options = toNotificationOptions(config, tag);\n const path = config.path ?? 'auto';\n // Actions only redirect a notification that has not been pinned to a path - `path: 'page'` is a\n // caller saying they would rather have it without the buttons than not at all.\n const needsPersistent = path === 'auto' && !!config.actions?.length;\n\n const closed$ = new Subject<void>();\n let isClosed = false;\n let pageNotification: Notification | null = null;\n\n const close = () => {\n if (isClosed) {\n return;\n }\n\n isClosed = true;\n closed$.next();\n closed$.complete();\n clickHandlers.delete(tag);\n openCloseFns.delete(close);\n pageNotification?.close();\n\n // A no-op unless this notification took the persistent path.\n closePersistentNotifications(tag).pipe(takeUntil(destroyed$)).subscribe();\n };\n\n const showViaPage = (): NotificationDeliveryPath => {\n let notification: Notification;\n\n try {\n notification = new Notification(config.title, toPageNotificationOptions(options));\n } catch {\n // How Android Chrome says \"persistent notifications only\" - there is no feature flag to test.\n return 'unavailable';\n }\n\n pageNotification = notification;\n\n notification.onclick = (event) => config.onClick?.({ tag, data: config.data, event });\n notification.onclose = () => {\n // The user dismissed it - forget the ref so `closeAll()` has nothing stale to walk.\n openCloseFns.delete(close);\n config.onClose?.();\n };\n notification.onshow = () => config.onShow?.();\n notification.onerror = () => config.onError?.();\n\n if (isClosed) {\n notification.close();\n\n return 'unavailable';\n }\n\n return 'page';\n };\n\n const showViaServiceWorker = (): Observable<NotificationDeliveryPath> =>\n serviceWorkerRegistration().pipe(\n switchMap((registration): Observable<NotificationDeliveryPath> => {\n if (!registration || isClosed) {\n return of('unavailable');\n }\n\n if (config.onClick) {\n clickHandlers.set(tag, config.onClick);\n attachClickRelay();\n }\n\n return from(registration.showNotification(config.title, options)).pipe(\n switchMap((): Observable<NotificationDeliveryPath> =>\n isClosed\n ? // Closed while the worker was still putting it up - take back what just appeared.\n closePersistentNotifications(tag).pipe(map((): NotificationDeliveryPath => 'unavailable'))\n : of('service-worker'),\n ),\n catchError(() => {\n clickHandlers.delete(tag);\n\n return of<NotificationDeliveryPath>('unavailable');\n }),\n );\n }),\n );\n\n const shown$ = defer((): Observable<NotificationDeliveryPath> => {\n // Permission is never requested here - an app that wants the prompt calls `request()`.\n if (!isSupported || Notification.permission !== 'granted' || isClosed) {\n return of('unavailable');\n }\n\n if (path === 'service-worker' || needsPersistent) {\n return showViaServiceWorker();\n }\n\n const pagePath = showViaPage();\n\n if (pagePath !== 'unavailable' || path === 'page') {\n return of(pagePath);\n }\n\n return showViaServiceWorker();\n }).pipe(\n tap((deliveryPath) => {\n if (deliveryPath === 'unavailable') {\n openCloseFns.delete(close);\n }\n }),\n // Shown once, replayed to every later subscriber - `refCount: false` keeps the result after\n // the eager subscription below has completed.\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n\n openCloseFns.add(close);\n\n // `show()` is imperative: the notification appears whether or not anyone subscribes.\n shown$.pipe(takeUntil(destroyed$)).subscribe();\n\n if (config.autoClose) {\n shown$\n .pipe(\n filter((deliveryPath) => deliveryPath !== 'unavailable'),\n switchMap(() => timer(config.autoClose ?? 0)),\n tap(() => close()),\n takeUntil(closed$),\n takeUntil(destroyed$),\n )\n .subscribe();\n }\n\n return { tag, shown$, close };\n };\n\n const closeAll = () => {\n for (const close of Array.from(openCloseFns)) {\n close();\n }\n\n closePersistentNotifications().pipe(takeUntil(destroyed$)).subscribe();\n };\n\n destroyRef.onDestroy(() => {\n clickHandlers.clear();\n openCloseFns.clear();\n });\n\n return { isSupported, permission: permission.asReadonly(), request, show, closeAll };\n },\n { name: 'Notifications' },\n);\n\nexport const provideNotifications = /* @__PURE__ */ toProvideFn(NOTIFICATIONS_DEF);\nexport const injectNotifications = /* @__PURE__ */ toInjectFn(NOTIFICATIONS_DEF);\n","import { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport { OverlayRuntimeAutoFocusTarget } from './overlay-runtime.types';\n\nexport const FOCUSABLE_SELECTOR = /* @__PURE__ */ [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nexport const isHTMLElement = (value: unknown): value is HTMLElement => {\n return value instanceof HTMLElement;\n};\n\nexport const isFocusable = (element: HTMLElement, document: Document) => {\n const view = document.defaultView;\n const style = view?.getComputedStyle(element);\n const isVisible = style?.display !== 'none' && style?.visibility !== 'hidden' && element.getClientRects().length > 0;\n\n return isVisible && !element.hasAttribute('disabled') && element.tabIndex >= 0;\n};\n\nexport const getFocusableElements = (container: HTMLElement, document: Document) => {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter((el) =>\n isFocusable(el, document),\n );\n};\n\nexport const getHeadingElement = (container: HTMLElement) => {\n return container.querySelector<HTMLElement>('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n};\n\nexport const focusElement = (element: HTMLElement | null) => {\n if (!element) {\n return;\n }\n\n element.focus({ preventScroll: true });\n};\n\nexport const applyInitialFocus = (\n paneElement: HTMLElement,\n autoFocus: OverlayRuntimeAutoFocusTarget | string | false,\n document: Document,\n) => {\n if (autoFocus === false) {\n return;\n }\n\n if (autoFocus === 'container') {\n focusElement(paneElement);\n\n return;\n }\n\n if (autoFocus === 'first-heading') {\n focusElement(getHeadingElement(paneElement) ?? paneElement);\n\n return;\n }\n\n if (autoFocus === 'first-tabbable') {\n focusElement(getFocusableElements(paneElement, document)[0] ?? paneElement);\n\n return;\n }\n\n focusElement(paneElement.querySelector<HTMLElement>(autoFocus) ?? paneElement);\n};\n\nexport const setupFocusTrap = (\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n enabled: boolean,\n isTopMost: (ref: OverlayRuntimeRef<object, unknown>) => boolean,\n document: Document,\n) => {\n if (!enabled) {\n return () => undefined;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || !isTopMost(overlayRef)) {\n return;\n }\n\n const focusableElements = getFocusableElements(paneElement, document);\n if (focusableElements.length === 0) {\n event.preventDefault();\n focusElement(paneElement);\n\n return;\n }\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement;\n\n if (event.shiftKey && activeElement === firstElement) {\n event.preventDefault();\n focusElement(lastElement ?? null);\n\n return;\n }\n\n if (!event.shiftKey && activeElement === lastElement) {\n event.preventDefault();\n focusElement(firstElement ?? null);\n }\n };\n\n paneElement.addEventListener('keydown', onKeyDown);\n\n return () => {\n paneElement.removeEventListener('keydown', onKeyDown);\n };\n};\n","import { isDevMode } from '@angular/core';\nimport { AngularRenderer } from '../providers';\nimport { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport {\n OverlayRuntimeAnchoredPosition,\n OverlayRuntimeCenteredPosition,\n OverlayRuntimeGlobalPosition,\n OverlayRuntimeMountConfig,\n} from './overlay-runtime.types';\n\nexport const setBaseElementStyles = (\n config: OverlayRuntimeMountConfig<object>,\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n) => {\n renderer.setStyle(hostElement, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n display: 'block',\n pointerEvents: config.hasBackdrop === false ? 'none' : 'auto',\n });\n\n renderer.setStyle(paneElement, {\n pointerEvents: 'auto',\n outline: 'none',\n });\n};\n\nexport const setBackdropStyles = (backdropElement: HTMLElement, renderer: AngularRenderer) => {\n renderer.setStyle(backdropElement, {\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n });\n};\n\nexport const applyCenteredPosition = (\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n _config: OverlayRuntimeCenteredPosition,\n) => {\n renderer.setStyle(hostElement, {\n display: 'grid',\n placeItems: 'center',\n padding: '16px',\n overflow: 'auto',\n });\n\n renderer.setStyle(paneElement, {\n position: 'relative',\n });\n};\n\nexport const applyGlobalPosition = (\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n config: OverlayRuntimeGlobalPosition,\n) => {\n renderer.setStyle(hostElement, {\n display: 'grid',\n // an explicit full-size cell keeps the grid area definite so percentage\n // based pane sizes (e.g. max-height: calc(100% - 72px)) can resolve\n gridTemplateRows: '100%',\n gridTemplateColumns: '100%',\n placeItems: `${config.vertical ?? 'center'} ${config.horizontal ?? 'center'}`,\n padding: config.padding ?? '0',\n });\n\n renderer.setStyle(paneElement, {\n position: 'relative',\n });\n};\n\n/**\n * Clears every inline style any position strategy kind may have set and\n * restores the base element styles, so a different strategy can be applied afterwards.\n */\nexport const resetPositioningStyles = (\n config: OverlayRuntimeMountConfig<object>,\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n renderer: AngularRenderer,\n) => {\n renderer.setStyle(hostElement, {\n gridTemplateRows: null,\n gridTemplateColumns: null,\n placeItems: null,\n padding: null,\n overflow: null,\n });\n\n renderer.setStyle(paneElement, {\n position: null,\n top: null,\n left: null,\n width: null,\n transform: null,\n visibility: null,\n });\n\n renderer.setCssProperties(paneElement, {\n '--et-overlay-max-width': null,\n '--et-overlay-max-height': null,\n '--et-overlay-anchored-x': null,\n '--et-overlay-anchored-y': null,\n });\n\n renderer.removeAttribute(paneElement, 'data-overlay-placement');\n\n setBaseElementStyles(config, hostElement, paneElement, renderer);\n};\n\n/**\n * Positions an anchored overlay pane and returns the cleanup for its auto-update loop.\n */\nexport type AnchoredPositionSetup = (\n strategy: OverlayRuntimeAnchoredPosition,\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n renderer: AngularRenderer,\n) => () => void;\n\nlet anchoredPositionSetup: AnchoredPositionSetup | null = null;\n\n/**\n * Installs the anchored positioning implementation. Called by `anchoredOverlayPosition()`, which is\n * the only thing that pulls `@floating-ui/dom` into the bundle - apps that never anchor an overlay\n * do not ship it.\n *\n * @internal\n */\nexport const registerAnchoredPositionSetup = (setup: AnchoredPositionSetup) => {\n anchoredPositionSetup = setup;\n};\n\nexport const setupPositioning = (\n config: OverlayRuntimeMountConfig<object>,\n hostElement: HTMLElement,\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n renderer: AngularRenderer,\n) => {\n const strategy = config.positionStrategy ?? { kind: 'center' };\n\n if (strategy.kind === 'anchored') {\n renderer.setStyle(hostElement, {\n pointerEvents: config.hasBackdrop === false ? 'none' : 'auto',\n });\n\n if (!anchoredPositionSetup) {\n if (isDevMode()) {\n console.error(\n 'An overlay was mounted with an anchored position strategy, but anchored positioning is not installed. Build the strategy with `anchoredOverlayPosition()` from @ethlete/core so the positioning code is part of the bundle.',\n strategy,\n );\n }\n\n applyCenteredPosition(hostElement, paneElement, renderer, { kind: 'center' });\n\n return () => undefined;\n }\n\n return anchoredPositionSetup(strategy, paneElement, overlayRef, renderer);\n }\n\n if (strategy.kind === 'global') {\n applyGlobalPosition(hostElement, paneElement, renderer, strategy);\n\n return () => undefined;\n }\n\n applyCenteredPosition(hostElement, paneElement, renderer, strategy);\n\n return () => undefined;\n};\n","import { isDevMode } from '@angular/core';\nimport {\n autoUpdate,\n computePosition,\n flip,\n limitShift,\n Middleware,\n offset,\n Padding,\n Placement,\n shift,\n} from '@floating-ui/dom';\nimport { AngularRenderer } from '../providers';\nimport { isHTMLElement } from './overlay-focus';\nimport { registerAnchoredPositionSetup } from './overlay-position';\nimport { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport { OverlayRuntimeAnchoredPosition } from './overlay-runtime.types';\n\n/**\n * The floating-ui middleware only a subset of anchored overlays needs. Installed by\n * `enableAnchoredOverlayPositionExtras()`.\n *\n * @internal\n */\nexport type AnchoredPositionMiddlewareExtras = {\n size: typeof import('@floating-ui/dom').size;\n arrow: typeof import('@floating-ui/dom').arrow;\n hide: typeof import('@floating-ui/dom').hide;\n};\n\nlet middlewareExtras: AnchoredPositionMiddlewareExtras | null = null;\n\n/**\n * Installs the `size` / `arrow` / `hide` middleware. Called by\n * `enableAnchoredOverlayPositionExtras()`.\n *\n * @internal\n */\nexport const registerAnchoredPositionMiddlewareExtras = (extras: AnchoredPositionMiddlewareExtras) => {\n middlewareExtras = extras;\n};\n\nconst requireMiddlewareExtras = (feature: string) => {\n if (!middlewareExtras && isDevMode()) {\n console.error(\n `An anchored overlay uses \"${feature}\", but the matching floating-ui middleware is not installed. Call \\`enableAnchoredOverlayPositionExtras()\\` from @ethlete/core once during app setup.`,\n );\n }\n\n return middlewareExtras;\n};\n\ntype AnchoredSide = 'top' | 'bottom' | 'left' | 'right';\n\nconst OPPOSITE_SIDE: Record<AnchoredSide, AnchoredSide> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n};\n\nconst PREFERRED_SIDE_NAME = 'etPreferredSide';\n\ntype PreferredSideData = { availableSpace?: Partial<Record<AnchoredSide, number>> };\n\nconst getAnchoredSide = (placement: Placement) => placement.split('-')[0] as AnchoredSide;\n\nconst toOppositeSidePlacement = (placement: Placement) => {\n const [side, alignment] = placement.split('-') as [AnchoredSide, string | undefined];\n const opposite = OPPOSITE_SIDE[side];\n\n return (alignment ? `${opposite}-${alignment}` : opposite) as Placement;\n};\n\n/**\n * The `flip` replacement behind `minAvailableSpace` - see that option. Every decision here has to\n * stay derived from the space around the reference alone: the moment the pane's own size enters it,\n * `size`'s cap feeds back into the next placement and an open pane starts flipping on its own.\n */\nconst preferredSide = (options: {\n minAvailableSpace: number;\n padding: Padding;\n boundary: Element | Element[] | undefined;\n}): Middleware => ({\n name: PREFERRED_SIDE_NAME,\n options,\n async fn(state) {\n const { placement, initialPlacement, rects, middlewareData } = state;\n const side = getAnchoredSide(placement);\n // via the platform, like every built-in middleware - importing `detectOverflow` from\n // `@floating-ui/dom` instead pulls a second copy of it into the bundle\n const overflow = await state.platform.detectOverflow(state, {\n padding: options.padding,\n boundary: options.boundary,\n });\n const isYAxis = side === 'top' || side === 'bottom';\n // the pane's own size cancels out of `size - overflow[side]`: what remains is the distance from\n // its anchored edge to the boundary - the same number the `size` middleware caps the pane to\n const available = (isYAxis ? rects.floating.height : rects.floating.width) - overflow[side];\n const availableSpace: Partial<Record<AnchoredSide, number>> = {\n ...(middlewareData[PREFERRED_SIDE_NAME] as PreferredSideData | undefined)?.availableSpace,\n [side]: available,\n };\n\n if (available >= options.minAvailableSpace) {\n return {};\n }\n\n const oppositeAvailable = availableSpace[OPPOSITE_SIDE[side]];\n\n if (oppositeAvailable === undefined) {\n return { data: { availableSpace }, reset: { placement: toOppositeSidePlacement(placement) } };\n }\n\n // ties go to the placement's own side, which also terminates the reset loop after at most one\n // measurement per side\n const keepSide =\n side === getAnchoredSide(initialPlacement) ? available >= oppositeAvailable : available > oppositeAvailable;\n\n return keepSide\n ? { data: { availableSpace } }\n : { data: { availableSpace }, reset: { placement: toOppositeSidePlacement(placement) } };\n },\n});\n\nexport const createAnchoredPositionCleanup = (\n strategy: OverlayRuntimeAnchoredPosition,\n paneElement: HTMLElement,\n overlayRef: OverlayRuntimeRef<object, unknown>,\n renderer: AngularRenderer,\n) => {\n // mirrorWidth needs a real element to measure; virtual references fall back to max-content\n const mirrorWidthElement =\n strategy.mirrorWidth && isHTMLElement(strategy.referenceElement) ? strategy.referenceElement : null;\n\n if (strategy.minAvailableSpace !== undefined && !strategy.autoResize && isDevMode()) {\n console.error(\n 'An anchored overlay sets `minAvailableSpace` without `autoResize`, so it is kept on a side it does not fit on with nothing capping it to the space there. Enable `autoResize` or drop `minAvailableSpace`.',\n );\n }\n\n renderer.setStyle(paneElement, {\n position: 'absolute',\n top: '0',\n left: '0',\n width: mirrorWidthElement ? `${mirrorWidthElement.offsetWidth}px` : 'max-content',\n });\n\n /**\n * What to do when the reference is not somewhere the pane can be positioned against: either removed\n * from the document, or scrolled out of a clipping ancestor. Both measure as a rect the pane must not\n * be moved to - a detached element reports zeros, which is the viewport's top-left corner.\n */\n const handleUnusableReference = () => {\n if (strategy.autoCloseIfReferenceHidden) {\n // Closed before any transform is applied, so the exit animation does not run from the corner.\n overlayRef.close(undefined, 'reference-detached');\n\n return;\n }\n\n if (strategy.autoHide) {\n renderer.setStyle(paneElement, { visibility: 'hidden' });\n }\n };\n\n const cleanup = autoUpdate(strategy.referenceElement, paneElement, () => {\n // Checked here rather than left to the `hide` middleware, which is only in the list when `autoHide`\n // or `autoCloseIfReferenceHidden` asked for it: a trigger destroyed while its overlay is open (a\n // menu item that removes the button it was opened from) would otherwise fly to the corner for the\n // frames the overlay takes to animate out.\n if (isHTMLElement(strategy.referenceElement) && !strategy.referenceElement.isConnected) {\n handleUnusableReference();\n\n return;\n }\n\n const arrowElement = paneElement.querySelector<HTMLElement>('[et-floating-arrow]');\n const middleware = [];\n\n middleware.push(offset(strategy.offset ?? 8));\n middleware.push(\n strategy.minAvailableSpace === undefined\n ? flip({\n fallbackPlacements: strategy.fallbackPlacements ?? undefined,\n fallbackAxisSideDirection: 'start',\n boundary: strategy.boundary,\n })\n : preferredSide({\n minAvailableSpace: strategy.minAvailableSpace,\n // must stay the padding `size` measures with: the threshold is then compared against the\n // very height the pane ends up capped to\n padding: strategy.viewportPadding ?? 8,\n boundary: strategy.boundary,\n }),\n );\n\n if (strategy.shift !== false) {\n middleware.push(\n shift({\n // floating-ui's cross axis points at the reference, so shifting on it slides the pane over\n // the reference instead of letting it shrink - and `size` then reports the whole boundary\n // as available height rather than the space on the pane's side\n crossAxis:\n strategy.minAvailableSpace === undefined &&\n (typeof strategy.shift === 'object' ? (strategy.shift.crossAxis ?? false) : false),\n limiter: limitShift(),\n padding: strategy.viewportPadding ?? 8,\n boundary: strategy.boundary,\n }),\n );\n }\n\n // size must run AFTER shift so the available space is measured from the shifted position -\n // otherwise a cross-axis-shifted pane gets its max size capped to the unshifted leftover space\n if (strategy.autoResize) {\n const extras = requireMiddlewareExtras('autoResize');\n\n if (extras) {\n middleware.push(\n extras.size({\n padding: strategy.viewportPadding ?? 8,\n apply({ availableHeight, availableWidth }) {\n renderer.setCssProperties(paneElement, {\n '--et-overlay-max-width': `${availableWidth}px`,\n '--et-overlay-max-height': `${availableHeight}px`,\n });\n },\n }),\n );\n }\n }\n\n if (arrowElement) {\n const extras = requireMiddlewareExtras('arrow');\n\n if (extras) {\n middleware.push(\n extras.arrow({\n element: arrowElement,\n // keeps the arrow off a rounded pane corner by default: 12px covers the radius of the\n // built-in boxed panes (--et-overlay-radius). Panes with a larger radius have to pass their\n // own - an arrow whose base sits on the corner arc looks detached from the pane.\n padding: strategy.arrowPadding ?? 12,\n }),\n );\n }\n }\n\n if (strategy.autoHide || strategy.autoCloseIfReferenceHidden) {\n const extras = requireMiddlewareExtras('autoHide');\n\n if (extras) {\n middleware.push(\n extras.hide({\n strategy: 'referenceHidden',\n }),\n );\n }\n }\n\n computePosition(strategy.referenceElement, paneElement, {\n placement: strategy.placement ?? 'bottom',\n strategy: 'absolute',\n middleware,\n }).then(({ x, y, placement, middlewareData }) => {\n if (middlewareData.hide?.referenceHidden) {\n handleUnusableReference();\n\n return;\n }\n\n renderer.setStyle(paneElement, {\n transform: `translate3d(${x}px, ${y}px, 0)`,\n width: mirrorWidthElement ? `${mirrorWidthElement.offsetWidth}px` : null,\n visibility: null,\n });\n // exposed so animations can compose their transforms with the anchored position\n renderer.setCssProperties(paneElement, {\n '--et-overlay-anchored-x': `${x}px`,\n '--et-overlay-anchored-y': `${y}px`,\n });\n renderer.setAttribute(paneElement, 'data-overlay-placement', placement);\n\n if (arrowElement && middlewareData.arrow) {\n renderer.setCssProperty(\n arrowElement,\n '--et-floating-arrow-translate',\n `translate3d(${middlewareData.arrow.x ?? 0}px, ${middlewareData.arrow.y ?? 0}px, 0)`,\n );\n }\n });\n });\n\n return () => {\n cleanup();\n };\n};\n\n/**\n * Builds an anchored position strategy and installs the anchored positioning implementation.\n *\n * Anchored positioning is the only part of the overlay runtime that needs `@floating-ui/dom`, and it\n * is reachable only through this function - an app that positions its overlays centered or globally\n * never bundles it. Always build anchored strategies with this helper instead of a plain\n * `{ kind: 'anchored', ... }` literal.\n *\n * Overlays that set `autoResize`, `autoHide`, `autoCloseIfReferenceHidden` or render an arrow\n * additionally need `enableAnchoredOverlayPositionExtras()`.\n */\nexport const anchoredOverlayPosition = (\n config: Omit<OverlayRuntimeAnchoredPosition, 'kind'>,\n): OverlayRuntimeAnchoredPosition => {\n registerAnchoredPositionSetup(createAnchoredPositionCleanup);\n\n return { kind: 'anchored', ...config };\n};\n","import { arrow, hide, size } from '@floating-ui/dom';\nimport { registerAnchoredPositionMiddlewareExtras } from './overlay-position-anchored';\n\n/**\n * Installs the floating-ui middleware anchored overlays need for `autoResize`, `autoHide`,\n * `autoCloseIfReferenceHidden` and arrows. Call it once wherever such an overlay is built - an\n * anchored overlay that uses none of those features does not bundle this middleware.\n */\nexport const enableAnchoredOverlayPositionExtras = () => {\n registerAnchoredPositionMiddlewareExtras({ size, arrow, hide });\n};\n","import { ComponentRef, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n OverlayRuntimeCloseEvent,\n OverlayRuntimeCloseGuard,\n OverlayRuntimeCloseSource,\n OverlayRuntimeElements,\n OverlayRuntimeMountConfig,\n OverlayRuntimePositionStrategy,\n} from './overlay-runtime.types';\n\nexport type OverlayRuntimeState = 'mounting' | 'mounted' | 'closing' | 'closed';\n\nexport const createOverlayRuntimeRef = <TComponent extends object, TResult = unknown>(\n id: string,\n config: Omit<OverlayRuntimeMountConfig<TComponent>, 'component'>,\n elements: OverlayRuntimeElements,\n requestClose: (result: TResult | undefined, source: OverlayRuntimeCloseSource) => void,\n) => {\n const _state = signal<OverlayRuntimeState>('mounting');\n const _componentInstance = signal<TComponent | null>(null);\n\n let positionUpdater: ((strategy: OverlayRuntimePositionStrategy) => void) | null = null;\n\n const beforeOpenedSubject = new Subject<void>();\n const afterOpenedSubject = new Subject<void>();\n const beforeClosedSubject = new Subject<OverlayRuntimeCloseEvent<TResult>>();\n const afterClosedSubject = new Subject<OverlayRuntimeCloseEvent<TResult>>();\n const closeGuards = new Set<OverlayRuntimeCloseGuard<TResult>>();\n\n return {\n id,\n config,\n elements,\n state: _state.asReadonly(),\n componentInstance: _componentInstance.asReadonly(),\n\n // Internal - driven by overlay-runtime.ts\n beforeOpenedSubject,\n\n close(result?: TResult, source: OverlayRuntimeCloseSource = 'api') {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n // `reference-detached` is a forced teardown (the anchor is gone) - never vetoable.\n if (source !== 'reference-detached') {\n for (const guard of closeGuards) {\n if (!guard({ result, source })) {\n return;\n }\n }\n }\n\n requestClose(result, source);\n },\n\n /** Close bypassing every registered close guard - used by a guard's owner to commit a\n * close it previously vetoed (e.g. after an async confirm resolved). */\n forceClose(result?: TResult, source: OverlayRuntimeCloseSource = 'api') {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n requestClose(result, source);\n },\n\n /** Register a synchronous veto for pending closes. Returns an unregister function. */\n registerCloseGuard(guard: OverlayRuntimeCloseGuard<TResult>): () => void {\n closeGuards.add(guard);\n\n return () => closeGuards.delete(guard);\n },\n\n beforeOpened(): Observable<void> {\n return beforeOpenedSubject.asObservable();\n },\n afterOpened(): Observable<void> {\n return afterOpenedSubject.asObservable();\n },\n beforeClosed(): Observable<OverlayRuntimeCloseEvent<TResult>> {\n return beforeClosedSubject.asObservable();\n },\n afterClosed(): Observable<OverlayRuntimeCloseEvent<TResult>> {\n return afterClosedSubject.asObservable();\n },\n\n attachComponentRef(componentRef: ComponentRef<TComponent>) {\n _componentInstance.set(componentRef.instance);\n },\n\n /** @internal */\n attachPositionUpdater(updater: (strategy: OverlayRuntimePositionStrategy) => void) {\n positionUpdater = updater;\n },\n\n updatePositionStrategy(strategy: OverlayRuntimePositionStrategy) {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n positionUpdater?.(strategy);\n },\n\n markOpened() {\n if (_state() !== 'mounting') {\n return;\n }\n\n _state.set('mounted');\n afterOpenedSubject.next();\n afterOpenedSubject.complete();\n },\n\n beginClose(closeEvent: OverlayRuntimeCloseEvent<TResult>) {\n if (_state() === 'closing' || _state() === 'closed') {\n return false;\n }\n\n _state.set('closing');\n beforeClosedSubject.next(closeEvent);\n beforeClosedSubject.complete();\n\n return true;\n },\n\n finishClose(closeEvent: OverlayRuntimeCloseEvent<TResult>) {\n if (_state() === 'closed') {\n return;\n }\n\n _state.set('closed');\n _componentInstance.set(null);\n afterClosedSubject.next(closeEvent);\n afterClosedSubject.complete();\n },\n };\n};\n\nexport type OverlayRuntimeRef<TComponent extends object = object, TResult = unknown> = ReturnType<\n typeof createOverlayRuntimeRef<TComponent, TResult>\n>;\n","import {\n ApplicationRef,\n DOCUMENT,\n DestroyRef,\n EnvironmentInjector,\n Injector,\n computed,\n createComponent,\n inject,\n signal,\n} from '@angular/core';\nimport { filter, take } from 'rxjs';\nimport { ANIMATED_LIFECYCLE_TOKEN, animationDebugLog, nextFrame } from '../animations';\nimport { injectRenderer } from '../providers';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyInitialFocus, isHTMLElement, setupFocusTrap } from './overlay-focus';\nimport { resetPositioningStyles, setBackdropStyles, setBaseElementStyles, setupPositioning } from './overlay-position';\nimport { OverlayRuntimeRef, createOverlayRuntimeRef } from './overlay-runtime-ref';\nimport {\n OverlayRuntimeCloseEvent,\n OverlayRuntimeComponentBase,\n OverlayRuntimeMountConfig,\n} from './overlay-runtime.types';\n\ntype OverlayRuntime = {\n mount: <TComponent extends object, TResult = unknown>(\n config: OverlayRuntimeMountConfig<TComponent>,\n ) => OverlayRuntimeRef<TComponent, TResult>;\n openEntries: ReturnType<typeof computed<OverlayRuntimeRef<object, unknown>[]>>;\n};\n\nconst OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(\n (): OverlayRuntime => {\n const appRef = inject(ApplicationRef);\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const environmentInjector = inject(EnvironmentInjector);\n const renderer = injectRenderer();\n\n const openEntriesState = signal<OverlayRuntimeRef<object, unknown>[]>([]);\n const openEntries = computed(() => openEntriesState());\n\n // One runtime root per document: overlays usually all mount into the app's document, but an\n // overlay anchored inside a same-origin pop-up window (config.document) needs a root over there.\n const rootElements = new Map<Document, HTMLElement>();\n\n // Synchronous teardown for each currently-mounted overlay, run when the runtime's injector is\n // destroyed (app teardown). Registered on mount, removed once the overlay is destroyed normally.\n const mountedTeardowns = new Set<() => void>();\n\n const getRootElement = (targetDocument: Document) => {\n const existingRoot = rootElements.get(targetDocument);\n if (existingRoot) {\n return existingRoot;\n }\n\n // A previous Angular app (e.g. the one that existed before a Storybook HMR update or story\n // switch) may have left its runtime root orphaned in <body> if it was torn down mid-animation.\n // Such a node keeps a backdrop/pane on screen and blocks pointer events, so clear any stragglers\n // before creating ours.\n targetDocument.querySelectorAll('.et-overlay-runtime-root').forEach((el) => el.remove());\n\n const rootElement = renderer.createElement('div');\n renderer.addClass(rootElement, 'et-overlay-runtime-root');\n renderer.setStyle(rootElement, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n pointerEvents: 'none',\n // Above the query devtools panel's own near-int32-max z-index (it must outrank an arbitrary\n // host app), so an overlay opened from inside the devtools - e.g. its override menu - isn't\n // rendered behind the panel that triggered it.\n zIndex: '2147483003',\n });\n renderer.appendChild(targetDocument.body, rootElement);\n rootElements.set(targetDocument, rootElement);\n\n return rootElement;\n };\n\n const maybeDestroyRootElement = (targetDocument: Document) => {\n const rootElement = rootElements.get(targetDocument);\n\n if (!rootElement || openEntriesState().some((entry) => entry.elements.rootElement === rootElement)) {\n return;\n }\n\n const parentNode = renderer.parentNode(rootElement);\n if (parentNode) {\n renderer.removeChild(parentNode, rootElement);\n }\n\n rootElements.delete(targetDocument);\n };\n\n const isTopMost = (overlayRef: OverlayRuntimeRef<object, unknown>) => {\n return openEntriesState().at(-1) === overlayRef;\n };\n\n const getAnimatedLifecycle = (componentRef: ReturnType<typeof createComponent>) => {\n const componentLifecycle = (componentRef.instance as OverlayRuntimeComponentBase).animatedLifecycle?.();\n\n if (componentLifecycle) {\n return componentLifecycle;\n }\n\n return componentRef.injector.get(ANIMATED_LIFECYCLE_TOKEN, null);\n };\n\n const mount = <TComponent extends object, TResult = unknown>(config: OverlayRuntimeMountConfig<TComponent>) => {\n const targetDocument = config.document ?? document;\n const root = getRootElement(targetDocument);\n const hostElement = renderer.createElement('div');\n const paneElement = renderer.createElement('div');\n const backdropElement = config.hasBackdrop === false ? null : renderer.createElement('div');\n const previousFocusedElement = isHTMLElement(targetDocument.activeElement) ? targetDocument.activeElement : null;\n const autoFocus = config.autoFocus ?? 'first-tabbable';\n\n renderer.addClass(hostElement, 'et-overlay-runtime-entry');\n setBaseElementStyles(config as OverlayRuntimeMountConfig<object>, hostElement, paneElement, renderer);\n renderer.setAttributes(hostElement, {\n 'data-overlay-id': config.id,\n role: config.role ?? null,\n tabindex: '-1',\n 'aria-modal': config.role ? `${config.modal !== false}` : null,\n 'aria-describedby': config.ariaDescribedBy ?? null,\n 'aria-labelledby': config.ariaLabelledBy ?? null,\n 'aria-label': config.ariaLabel ?? null,\n });\n\n renderer.addClass(hostElement, ...(config.hostClass ?? []));\n\n if (backdropElement) {\n renderer.addClass(backdropElement, 'et-overlay-runtime-backdrop');\n setBackdropStyles(backdropElement, renderer);\n renderer.setAttribute(backdropElement, 'data-overlay-id', config.id);\n (config.backdropClass ?? []).forEach((className) => renderer.addClass(backdropElement, className));\n renderer.appendChild(hostElement, backdropElement);\n }\n\n renderer.appendChild(hostElement, paneElement);\n renderer.appendChild(root, hostElement);\n\n const overlayRef = createOverlayRuntimeRef<TComponent, TResult>(\n config.id,\n { ...config },\n {\n rootElement: root,\n hostElement,\n backdropElement,\n paneElement,\n },\n (result, source) => beginClose({ result, source }),\n );\n\n animationDebugLog(`runtime ${config.id}`, 'mount');\n\n // matches the previous overlay behavior: escape/outside-pointer closes are\n // ignored until the enter transition has started plus one frame\n let interactiveCloseReady = false;\n\n const cleanupFns: Array<() => void> = [];\n const parentInjector = config.injector ?? config.viewContainerRef?.injector ?? environmentInjector;\n const elementInjector = Injector.create({\n parent: parentInjector,\n providers: config.providers ?? [],\n });\n\n const componentRef = createComponent(config.component, {\n environmentInjector,\n elementInjector,\n hostElement: paneElement,\n bindings: config.bindings ?? [],\n });\n\n // pane classes are applied after component creation - Angular replaces the host\n // element's class attribute with the component's static host class on creation\n renderer.addClass(paneElement, 'et-overlay-runtime-pane', ...(config.paneClass ?? []));\n\n appRef.attachView(componentRef.hostView);\n overlayRef.attachComponentRef(componentRef);\n overlayRef.beforeOpenedSubject.next();\n overlayRef.beforeOpenedSubject.complete();\n\n openEntriesState.update((entries) => [...entries, overlayRef as OverlayRuntimeRef<object, unknown>]);\n\n let positionCleanup = setupPositioning(\n config as OverlayRuntimeMountConfig<object>,\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n cleanupFns.push(() => positionCleanup());\n\n let currentPositionStrategy = config.positionStrategy;\n const getOriginElement = () =>\n currentPositionStrategy?.kind === 'anchored' && isHTMLElement(currentPositionStrategy.referenceElement)\n ? currentPositionStrategy.referenceElement\n : null;\n\n overlayRef.attachPositionUpdater((strategy) => {\n currentPositionStrategy = strategy;\n positionCleanup();\n resetPositioningStyles(config as OverlayRuntimeMountConfig<object>, hostElement, paneElement, renderer);\n positionCleanup = setupPositioning(\n { ...config, positionStrategy: strategy } as OverlayRuntimeMountConfig<object>,\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n });\n\n const destroyMountedOverlay = (closeEvent: OverlayRuntimeCloseEvent<TResult>) => {\n animationDebugLog(`runtime ${config.id}`, `destroy (source \"${closeEvent.source}\")`);\n cleanupFns.forEach((cleanup) => cleanup());\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n\n const parentNode = renderer.parentNode(hostElement);\n if (parentNode) {\n renderer.removeChild(parentNode, hostElement);\n }\n\n openEntriesState.update((entries) => entries.filter((entry) => entry !== overlayRef));\n maybeDestroyRootElement(targetDocument);\n\n if (config.restoreFocus !== false && previousFocusedElement?.isConnected) {\n previousFocusedElement.focus({ preventScroll: true });\n }\n\n overlayRef.finishClose(closeEvent);\n };\n\n // Allows the runtime to synchronously destroy this overlay on app teardown, bypassing the\n // async leave animation (whose completion callback would never fire once the app is gone).\n const forceTeardown = () => destroyMountedOverlay({ result: undefined, source: 'api' });\n mountedTeardowns.add(forceTeardown);\n cleanupFns.push(() => mountedTeardowns.delete(forceTeardown));\n\n const beginClose = (closeEvent: OverlayRuntimeCloseEvent<TResult>) => {\n if (!overlayRef.beginClose(closeEvent)) {\n return;\n }\n\n const lifecycle = getAnimatedLifecycle(componentRef);\n\n animationDebugLog(\n `runtime ${config.id}`,\n `close requested (source \"${closeEvent.source}\", lifecycle state \"${lifecycle?.state$.value ?? 'none'}\", delegate ${config.animationDelegate?.leave ? 'yes' : 'no'})`,\n );\n\n // The reference element is gone - there is nothing left to animate away from, so tear the\n // overlay down synchronously instead of playing a leave transition from a stale position.\n if (!lifecycle || closeEvent.source === 'reference-detached') {\n destroyMountedOverlay(closeEvent);\n\n return;\n }\n\n if (config.animationDelegate?.leave) {\n config.animationDelegate.leave({ lifecycle, elements: overlayRef.elements, closeEvent });\n } else {\n lifecycle.leave();\n }\n\n lifecycle.state$\n .pipe(\n filter((state) => state === 'left'),\n take(1),\n )\n .subscribe(() => {\n destroyMountedOverlay(closeEvent);\n });\n };\n\n const closeOnEscape = config.closeOnEscape ?? true;\n if (closeOnEscape) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !isTopMost(overlayRef as OverlayRuntimeRef<object, unknown>)) {\n return;\n }\n\n if (!interactiveCloseReady) {\n animationDebugLog(`runtime ${config.id}`, 'escape ignored (enter transition has not started yet)');\n\n return;\n }\n\n event.preventDefault();\n overlayRef.close(undefined, 'escape');\n };\n\n targetDocument.addEventListener('keydown', onKeyDown, true);\n cleanupFns.push(() => targetDocument.removeEventListener('keydown', onKeyDown, true));\n }\n\n const closeOnOutsidePointer = config.closeOnOutsidePointer ?? config.modal === false;\n if (closeOnOutsidePointer) {\n const onPointerDown = (event: PointerEvent) => {\n if (!isTopMost(overlayRef as OverlayRuntimeRef<object, unknown>)) {\n return;\n }\n\n const target = event.target;\n if (!isHTMLElement(target) || paneElement.contains(target)) {\n return;\n }\n\n if (!interactiveCloseReady) {\n animationDebugLog(`runtime ${config.id}`, 'outside pointer ignored (enter transition has not started yet)');\n\n return;\n }\n\n overlayRef.close(undefined, 'outside-pointer');\n\n const originElement = getOriginElement();\n if (originElement && originElement.contains(target)) {\n const swallowReopenClick = (clickEvent: MouseEvent) => {\n if (isHTMLElement(clickEvent.target) && originElement.contains(clickEvent.target)) {\n clickEvent.stopImmediatePropagation();\n clickEvent.preventDefault();\n }\n };\n\n targetDocument.addEventListener('click', swallowReopenClick, { capture: true, once: true });\n }\n };\n\n targetDocument.addEventListener('pointerdown', onPointerDown, true);\n cleanupFns.push(() => targetDocument.removeEventListener('pointerdown', onPointerDown, true));\n }\n\n cleanupFns.push(\n setupFocusTrap(\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n config.modal !== false,\n isTopMost,\n targetDocument,\n ),\n );\n\n nextFrame(() => {\n if (overlayRef.state() !== 'mounting') {\n animationDebugLog(`runtime ${config.id}`, `enter skipped (state \"${overlayRef.state()}\" before enter frame)`);\n\n return;\n }\n\n const lifecycle = getAnimatedLifecycle(componentRef);\n if (!lifecycle) {\n interactiveCloseReady = true;\n applyInitialFocus(paneElement, autoFocus, targetDocument);\n overlayRef.markOpened();\n\n return;\n }\n\n animationDebugLog(\n `runtime ${config.id}`,\n `enter (delegate ${config.animationDelegate?.enter ? 'yes' : 'no'}, lifecycle state \"${lifecycle.state$.value}\")`,\n );\n\n const readySubscription = lifecycle.state$\n .pipe(\n filter((state) => state === 'entering' || state === 'entered'),\n take(1),\n )\n .subscribe(() => {\n nextFrame(() => {\n interactiveCloseReady = true;\n });\n });\n cleanupFns.push(() => readySubscription.unsubscribe());\n\n if (config.animationDelegate?.enter) {\n config.animationDelegate.enter({ lifecycle, elements: overlayRef.elements });\n } else {\n lifecycle.enter();\n }\n\n lifecycle.state$\n .pipe(\n filter((state) => state === 'entered'),\n take(1),\n )\n .subscribe(() => {\n applyInitialFocus(paneElement, autoFocus, targetDocument);\n overlayRef.markOpened();\n });\n });\n\n return overlayRef;\n };\n\n destroyRef.onDestroy(() => {\n [...mountedTeardowns].forEach((teardown) => teardown());\n [...rootElements.keys()].forEach((targetDocument) => maybeDestroyRootElement(targetDocument));\n });\n\n return {\n mount,\n openEntries,\n };\n },\n { name: 'OverlayRuntime' },\n);\n\nexport const provideOverlayRuntime = /* @__PURE__ */ toProvideFn(OVERLAY_RUNTIME_DEF);\nexport const injectOverlayRuntime = /* @__PURE__ */ toInjectFn(OVERLAY_RUNTIME_DEF);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Translatable } from '../../utils';\n\n@Pipe({ name: 'etNormalizeGameResultType' })\nexport class NormalizeGameResultTypePipe implements PipeTransform {\n transform = normalizeGameResultType;\n}\n\nexport type NormalizedGameResultType = Translatable & {\n shortCode: string;\n};\n\n// TODO(TRB): Add correct type once provided by API\nexport const normalizeGameResultType = (type: string | null): NormalizedGameResultType | null => {\n if (!type) {\n return null;\n }\n\n switch (type) {\n case 'extra_time':\n return {\n i18n: 'game-result-type.extra-time',\n shortCode: 'AET',\n text: 'After Extra Time',\n };\n\n case 'penalty':\n return {\n i18n: 'game-result-type.penalty',\n shortCode: 'PSO',\n text: 'Penalty shootout',\n };\n\n case 'golden_goal':\n return {\n i18n: 'game-result-type.golden-goal',\n shortCode: 'GG',\n text: 'Golden Goal',\n };\n\n case 'default':\n default:\n return {\n i18n: 'game-result-type.full-time',\n shortCode: 'FT',\n text: 'Full Time',\n };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView } from '@ethlete/types';\nimport { MatchStateType } from './normalize-match-score.pipe';\n\n@Pipe({ name: 'etNormalizeMatchState' })\nexport class NormalizeMatchStatePipe implements PipeTransform {\n transform = normalizeMatchState;\n}\n\nexport const normalizeMatchState = (match: MatchListView | null | undefined) => {\n if (match?.isCompletedByReferee) {\n return MatchStateType.AUTO_WIN;\n } else if (match?.status === 'preparing') {\n return MatchStateType.PRE_MATCH;\n } else if (match?.status === 'started') {\n return MatchStateType.LIVE;\n } else if (match?.status === 'published' || match?.status === 'finished') {\n return MatchStateType.POST_MATCH;\n } else if (match?.round.state !== 'preparing') {\n return MatchStateType.PREPARING_ROUND;\n }\n\n return null;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView, ParticipantViewUnion } from '@ethlete/types';\nimport { Translatable } from '../../utils';\nimport { MatchStateType } from './normalize-match-score.pipe';\nimport { normalizeMatchState } from './normalize-match-state.pipe';\n\n@Pipe({ name: 'etNormalizeMatchParticipants' })\nexport class NormalizeMatchParticipantsPipe implements PipeTransform {\n transform = normalizeMatchParticipants;\n}\n\nexport type NormalizedMatchParticipants = {\n home: NormalizedMatchParticipant | null;\n away: NormalizedMatchParticipant | null;\n};\n\ntype NormalizedParticipantType = 'team' | 'player' | 'unknown';\n\nexport type NormalizedMatchParticipant =\n | ({\n type: 'tbd';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion | null;\n } & Translatable)\n | {\n type: 'participant';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion;\n }\n | ({\n type: 'none';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion | null;\n } & Translatable);\n\nexport const normalizeMatchParticipants = (match: MatchListView | null): NormalizedMatchParticipants | null => {\n const matchState = normalizeMatchState(match);\n\n if (!match || !matchState) {\n return null;\n }\n\n return {\n home: normalizeMatchParticipant(match, 'home'),\n away: normalizeMatchParticipant(match, 'away'),\n };\n};\n\nexport const normalizeMatchParticipant = (\n match: MatchListView | null,\n side: 'home' | 'away',\n): NormalizedMatchParticipant | null => {\n const matchState = normalizeMatchState(match);\n\n if (!match || !matchState) {\n return null;\n }\n\n const participant = match[side];\n const participantType = match.home?.type ?? match.away?.type ?? 'unknown';\n\n if (!participant) {\n if (matchState === MatchStateType.POST_MATCH || matchState === MatchStateType.AUTO_WIN) {\n return {\n participantType,\n type: 'none',\n i18n: 'match-participant.none',\n text: 'No opponent',\n data: participant,\n };\n } else {\n return {\n participantType,\n type: 'tbd',\n i18n: 'match-participant.tbd',\n text: 'TBD',\n data: participant,\n };\n }\n } else {\n return {\n participantType,\n type: 'participant',\n data: participant,\n };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView, MatchRankingView } from '@ethlete/types';\nimport { normalizeMatchState } from './normalize-match-state.pipe';\n\n@Pipe({ name: 'etNormalizeMatchScore' })\nexport class NormalizeMatchScorePipe implements PipeTransform {\n transform = normalizeMatchScore;\n}\n\nexport const enum MatchStateType {\n PREPARING_ROUND = 'preparingRound',\n PRE_MATCH = 'preMatch',\n LIVE = 'live',\n POST_MATCH = 'postMatch',\n AUTO_WIN = 'autoWin',\n}\n\nexport type NormalizedMatchScore = {\n home: {\n score: string | number | null;\n isWinner: boolean;\n };\n away: {\n score: string | number | null;\n isWinner: boolean;\n };\n subLine: string | null;\n isNumeric: boolean;\n};\n\nconst EMPTY_SCORE: NormalizedMatchScore = {\n home: { score: 'match-score.placeholder', isWinner: false },\n away: { score: 'match-score.placeholder', isWinner: false },\n isNumeric: false,\n subLine: null,\n};\n\nexport const normalizeMatchScore = (match: MatchListView | null | undefined): NormalizedMatchScore | null => {\n if (!match) {\n return null;\n }\n\n const matchState = normalizeMatchState(match);\n const subLine = getMatchScoreSubLine(match);\n\n if (!match.homeScore && !match.awayScore) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n\n if (isKnockoutMatch(match)) {\n if (matchState === MatchStateType.PRE_MATCH || matchState === MatchStateType.LIVE) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n\n return {\n home: {\n score: getKnockoutMatchScore(match.homeScore),\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: getKnockoutMatchScore(match.awayScore),\n isWinner: match.awayScore?.status === 'won',\n },\n subLine,\n isNumeric: false,\n };\n } else if (isGroupMatch(match)) {\n if (match.games.length === 1) {\n // Return the score if only one game has been played\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n } else {\n return {\n ...getGroupMatchPoints(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n }\n } else {\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n }\n};\n\nexport const isKnockoutMatch = (match: MatchListView | null | undefined) => {\n if (!match) {\n return false;\n }\n\n return (\n match.matchType === 'single_elimination' ||\n match.matchType === 'double_elimination' ||\n match.matchType === 'fifa_swiss'\n );\n};\n\nexport const isGroupMatch = (match: MatchListView | null | undefined) => {\n if (!match) {\n return false;\n }\n\n return match.matchType === 'groups' || match.matchType === 'league';\n};\n\nexport const getKnockoutMatchScore = (score: MatchRankingView | null | undefined) => {\n if (score?.status === 'won') {\n return 'match-score.knockout.won';\n } else if (score?.status === 'lost') {\n return 'match-score.knockout.lost';\n } else if (score?.status === 'tie') {\n return 'match-score.knockout.tie';\n }\n\n return null;\n};\n\nexport const getMatchScoreSubLine = (match: MatchListView | null | undefined) => {\n if (isKnockoutMatch(match)) {\n return null;\n } else if (isGroupMatch(match)) {\n return 'match-score.groups.sub-line';\n } else {\n return null;\n }\n};\n\nexport const getGroupMatchScore = (match: MatchListView | null | undefined) => {\n if (!match) {\n return null;\n }\n\n return {\n home: {\n score: match.homeScore?.ownPoints || 0,\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: match.awayScore?.ownPoints || 0,\n isWinner: match.awayScore?.status === 'won',\n },\n };\n};\n\nexport const getGroupMatchPoints = (match: MatchListView | null | undefined) => {\n if (!match) {\n return null;\n }\n\n return {\n home: {\n score: match.homeScore?.score || 0,\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: match.awayScore?.score || 0,\n isWinner: match.awayScore?.status === 'won',\n },\n };\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StageType } from '@ethlete/types';\nimport { Translatable } from '../../utils';\n\n@Pipe({ name: 'etNormalizeMatchType' })\nexport class NormalizeMatchTypePipe implements PipeTransform {\n transform = normalizeMatchType;\n}\n\nexport const normalizeMatchType = (matchType: StageType | null | undefined): Translatable | null => {\n if (!matchType) {\n return null;\n }\n\n switch (matchType) {\n case 'double_elimination':\n return {\n i18n: 'match-type.double-elimination',\n text: 'Double Elimination',\n };\n case 'single_elimination':\n return {\n i18n: 'match-type.single-elimination',\n text: 'Single Elimination',\n };\n case 'fifa_swiss':\n return {\n i18n: 'match-type.fifa-swiss',\n text: 'FIFA Swiss',\n };\n case 'groups':\n return {\n i18n: 'match-type.groups',\n text: 'Groups',\n };\n case 'league':\n return {\n i18n: 'match-type.league',\n text: 'League',\n };\n case 'pools':\n return {\n i18n: 'match-type.pools',\n text: 'Pools',\n };\n default:\n return null;\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { htmlToMarkdown } from '../utils/markdown';\n\n@Pipe({ name: 'htmlToMarkdown' })\nexport class HtmlToMarkdownPipe implements PipeTransform {\n transform = htmlToMarkdown;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'inferMimeType',\n})\nexport class InferMimeTypePipe implements PipeTransform {\n transform = inferMimeType;\n}\n\n/**\n * Infers the mime type of a given url or srcset.\n * If a srcset is provided, it will infer the mime type of the first url in the srcset.\n * If the srcset contains a query parameter `?fm=`, it will use the value of that parameter, since it is often used to specify the file format in image api's like contentful.\n */\nexport const inferMimeType = (srcset: string) => {\n if (!srcset) return null;\n\n if (srcset.startsWith('data:')) {\n const match = /^data:([^;,]+)/.exec(srcset);\n\n return match?.[1] ?? null;\n }\n\n const urls = srcset.split(',');\n const firstUrl = urls[0];\n\n if (!firstUrl) return null;\n\n // make sure the url does not end with something like x1, x2 or 400w, 800w... We need to remove these parts to get the correct file extension\n const urlParts = firstUrl.split(' ');\n const lastPart = urlParts[urlParts.length - 1];\n\n if (urlParts.length > 1 && !lastPart?.includes('/')) {\n urlParts.pop();\n }\n\n const cleanedUrl = urlParts.join(' ');\n\n const queryPart = cleanedUrl.split('?')[1] ?? '';\n const containsFm = queryPart.startsWith('fm=') || queryPart.includes('&fm=');\n let fileExtension: string | null = null;\n\n if (containsFm) {\n const fmIndex = queryPart.indexOf('fm=');\n const fmValue = queryPart\n .substring(fmIndex + 3)\n .split('&')[0]\n ?.toLowerCase();\n\n if (fmValue) {\n fileExtension = fmValue;\n }\n }\n\n if (!fileExtension) {\n const noQueryUrl = cleanedUrl.split('?')[0] || cleanedUrl;\n\n const lastDotIndex = noQueryUrl.lastIndexOf('.');\n\n if (lastDotIndex === -1) return null;\n\n fileExtension = noQueryUrl.substring(lastDotIndex + 1).toLowerCase();\n }\n\n if (fileExtension) {\n switch (fileExtension) {\n case 'avif':\n return 'image/avif';\n case 'bmp':\n return 'image/bmp';\n case 'gif':\n return 'image/gif';\n case 'ico':\n return 'image/vdn.microsoft.icon';\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'svg':\n return 'image/svg+xml';\n case 'tif':\n case 'tiff':\n return 'image/tiff';\n case 'webp':\n return 'image/webp';\n case 'aac':\n return 'audio/aac';\n case 'abw':\n return 'application/x-abiword';\n case 'arc':\n return 'application/x-freearc';\n case 'avi':\n return 'video/x-msvideo';\n case 'azw':\n return 'application/vnd.amazon.ebook';\n case 'bin':\n return 'application/octet-stream';\n case 'bz':\n return 'application/x-bzip';\n case 'bz2':\n return 'application/x-bzip2';\n case 'cda':\n return 'application/x-cdf';\n case 'csh':\n return 'application/x-csh';\n case 'css':\n return 'text/css';\n case 'csv':\n return 'text/csv';\n case 'doc':\n return 'application/msword';\n case 'docx':\n return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n case 'eot':\n return 'application/vnd.ms-fontobject';\n case 'epub':\n return 'application/epub+zip';\n case 'gz':\n return 'application/gzip';\n case 'htm':\n case 'html':\n return 'text/html';\n case 'ics':\n return 'text/calendar';\n case 'jar':\n return 'application/java-archive';\n case 'js':\n return 'text/javascript';\n case 'json':\n return 'application/json';\n case 'jsonld':\n return 'application/ld+json';\n case 'mid':\n case 'midi':\n return 'audio/midi';\n case 'mjs':\n return 'text/javascript';\n case 'mp3':\n return 'audio/mpeg';\n case 'mp4':\n return 'video/mp4';\n case 'mpeg':\n return 'video/mpeg';\n case 'mpkg':\n return 'tapplication/vnd.apple.installer+xml';\n case 'odp':\n return 'application/vnd.oasis.opendocument.presentation';\n case 'ods':\n return 'application/vnd.oasis.opendocument.spreadsheet';\n case 'odt':\n return 'application/vnd.oasis.opendocument.text';\n case 'oga':\n return 'audio/ogg';\n case 'ogv':\n return 'video/ogg';\n case 'ogx':\n return 'application/ogg';\n case 'opus':\n return 'audio/opus';\n case 'otf':\n return 'font/otf';\n case 'pdf':\n return 'application/pdf';\n case 'php':\n return 'application/x-httpd-php';\n case 'ppt':\n return 'application/vnd.ms-powerpoint';\n case 'pptx':\n return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n case 'rar':\n return 'application/vnd.rar';\n case 'rtf':\n return 'application/rtf';\n case 'sh':\n return 'application/x-sh';\n case 'tar':\n return 'application/x-tar';\n case 'ts':\n return 'video/mp2t';\n case 'ttf':\n return 'font/ttf';\n case 'txt':\n return 'text/plain';\n case 'vsd':\n return 'application/vnd.visio';\n case 'wav':\n return 'audio/wav';\n case 'weba':\n return 'audio/webm';\n case 'webm':\n return 'video/webm';\n case 'woff':\n return 'font/woff';\n case 'woff2':\n return 'font/woff2';\n case 'xhtml':\n return 'application/xhtml+xml';\n case 'xls':\n return 'application/vnd.ms-excel';\n case 'xlsx':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case 'xml':\n return 'application/xml';\n case 'xul':\n return 'application/vnd.mozilla.xul+xml';\n case 'zip':\n return 'application/zip';\n case '3gp':\n return 'video/3gpp';\n case '3g2':\n return 'video/3gpp2';\n case '7z':\n return 'application/x-7z-compressed';\n\n default:\n return null;\n }\n }\n\n return null;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'initials' })\nexport class InitialsPipe implements PipeTransform {\n transform = initials;\n}\n\n/**\n * Extracts the initials from a name (or any whitespace separated string).\n *\n * Words are split on whitespace, and the first character of each word is taken.\n * At most `maxLength` initials are returned (defaults to 2), always uppercased.\n *\n * @example\n * initials('John Doe') // 'JD'\n * initials('john doe smith') // 'JD'\n * initials('john doe smith', 3) // 'JDS'\n * initials('Madonna') // 'M'\n * initials(' ') // ''\n * initials(null) // ''\n */\nexport const initials = (value: string | null | undefined, maxLength = 2) => {\n if (!value) return '';\n\n const words = value.trim().split(/\\s+/).filter(Boolean);\n\n if (!words.length) return '';\n\n return words\n .slice(0, maxLength)\n .map((word) => word[0]?.toUpperCase() ?? '')\n .join('');\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { markdownToHtml } from '../utils/markdown';\n\n@Pipe({ name: 'markdownToHtml' })\nexport class MarkdownToHtmlPipe implements PipeTransform {\n transform = markdownToHtml;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'slugify' })\nexport class SlugifyPipe implements PipeTransform {\n transform = slugify;\n}\n\n/**\n * Converts a string into a URL-friendly slug.\n *\n * Diacritics are stripped, the string is lowercased, and any run of\n * non-alphanumeric characters becomes a single hyphen. Leading/trailing\n * hyphens are trimmed.\n *\n * @example\n * slugify('Hello World') // 'hello-world'\n * slugify(' Crème brûlée! ') // 'creme-brulee'\n * slugify('FC Bayern München') // 'fc-bayern-munchen'\n * slugify('foo_bar / baz') // 'foo-bar-baz'\n * slugify(null) // ''\n */\nexport const slugify = (value: string | null | undefined) => {\n if (!value) return '';\n\n return value\n .normalize('NFKD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n};\n","import { Pipe, PipeTransform, TrackByFunction } from '@angular/core';\n\n@Pipe({ name: 'toArray' })\nexport class ToArrayPipe implements PipeTransform {\n transform = toArray;\n}\n\nexport const toArray = (value: number) => {\n return Array.from({ length: value }, (_, i) => i);\n};\n\nexport const toArrayTrackByFn: TrackByFunction<number> = (_, item) => item;\n","import { ElementRef, inject } from '@angular/core';\nimport { signalHostAttributes, signalHostClasses, signalHostStyles } from '../signals';\nimport { createComponentId } from '../utils';\n\nexport const createPropHandlers = () => {\n const id = createComponentId('et-props');\n\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n const classes = signalHostClasses({});\n const attributes = signalHostAttributes({});\n const styles = signalHostStyles({});\n\n return {\n classes,\n attributes,\n styles,\n id,\n elementRef,\n };\n};\n\nexport type PropHandlers = ReturnType<typeof createPropHandlers>;\n","import { computed, signal } from '@angular/core';\n\nexport const createElementDictionary = () => {\n const dictionary = {\n ids: signal<string[]>([]),\n elements: signal<Record<string, HTMLElement>>({}),\n };\n\n const firstElement = computed(() => {\n const id = dictionary.ids()[0];\n return id ? (dictionary.elements()[id] ?? null) : null;\n });\n\n const firstId = computed(() => {\n const id = dictionary.ids()[0];\n return id ?? null;\n });\n\n const ids = computed(() => dictionary.ids());\n const elements = computed(() => {\n const byId = dictionary.elements();\n\n return ids()\n .map((id) => byId[id])\n .filter((element): element is HTMLElement => !!element);\n });\n\n const isEmpty = computed(() => dictionary.ids().length === 0);\n\n const has = (id: string) => {\n return dictionary.ids().includes(id);\n };\n\n const push = (id: string, element: HTMLElement) => {\n dictionary.ids.set([...dictionary.ids(), id]);\n dictionary.elements.set({ ...dictionary.elements(), [id]: element });\n };\n\n const remove = (id: string) => {\n dictionary.ids.set(dictionary.ids().filter((i) => i !== id));\n dictionary.elements.set(Object.fromEntries(Object.entries(dictionary.elements()).filter(([k]) => k !== id)));\n };\n\n const get = (id: string) => {\n return dictionary.elements()[id] ?? null;\n };\n\n return {\n ids,\n elements,\n has,\n get,\n push,\n remove,\n isEmpty,\n firstElement,\n firstId,\n };\n};\n","import { PropHandlers } from './create-prop-handlers';\nimport { Props, PropsInternal } from './create-props';\n\nexport type BindPropsOptions = {\n props: Props | PropsInternal;\n handlers: PropHandlers;\n};\n\nexport const bindProps = (config: BindPropsOptions) => {\n const props = config.props as PropsInternal;\n const {\n attachEventListeners,\n classBindings,\n attributeBindings,\n styleBindings,\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n attached,\n single,\n name,\n bindId,\n attachedElements,\n } = props;\n\n const { attributes, classes, elementRef, id, styles } = config.handlers;\n const el = elementRef.nativeElement;\n\n if (attached()) {\n if (attachedElements.has(id)) {\n return;\n } else if (single) {\n const firstAttachedRefElement = attachedElements.first();\n\n console.error(\n `[${name}] These props can only be attached to a single element at a time.\\n\\n Already attached to \\n`,\n firstAttachedRefElement,\n '\\n Trying to attach to \\n',\n el,\n );\n\n return;\n }\n }\n\n attachedElements.push(id, el);\n\n if (bindId) {\n el.id = id;\n }\n\n if (classBindings) {\n classes.pushMany(classBindings);\n }\n\n if (attributeBindings) {\n attributes.pushMany(attributeBindings);\n }\n\n if (styleBindings) {\n styles.pushMany(styleBindings);\n }\n\n if (staticAttributeBindings) {\n for (const key in staticAttributeBindings) {\n el.setAttribute(key, `${staticAttributeBindings[key]}`);\n }\n }\n\n if (staticClassBindings) {\n el.classList.add(...staticClassBindings);\n }\n\n if (staticStyleBindings) {\n for (const key in staticStyleBindings) {\n el.style.setProperty(key, `${staticStyleBindings[key]}`);\n }\n }\n\n if (attachEventListeners) {\n attachEventListeners({\n on: el.addEventListener.bind(el),\n element: el,\n });\n }\n};\n\nexport type UnbindPropsOptions = {\n props: Props | PropsInternal;\n handlers: PropHandlers;\n};\n\nexport const unbindProps = (config: UnbindPropsOptions) => {\n const props = config.props as PropsInternal;\n\n props.attachedElements.remove(config.handlers.id);\n};\n","import { DestroyRef, Signal, afterNextRender, computed, inject } from '@angular/core';\nimport { PropHandlers, createPropHandlers } from './create-prop-handlers';\nimport { createElementDictionary } from './element-dictionary';\nimport { bindProps, unbindProps } from './props-binding';\n\nexport type Props = Readonly<{\n attached: Signal<boolean>;\n attachedElements: PropsAttachedElements;\n}>;\n\nexport type PropsAttachedElements = {\n first: Signal<HTMLElement | null>;\n firstId: Signal<string | null>;\n get(id: string): HTMLElement | null;\n};\n\nexport type PropsAttachedElementsInternal = PropsAttachedElements & {\n has: (id: string) => boolean;\n push: (id: string, element: HTMLElement) => void;\n remove: (id: string) => void;\n};\n\nexport type PropsInternal = {\n single: boolean;\n name: string;\n bindId: boolean;\n\n attached: Signal<boolean>;\n attachedElements: PropsAttachedElementsInternal;\n\n classBindings: Record<string, Signal<unknown>> | null;\n attributeBindings: Record<string, Signal<unknown>> | null;\n styleBindings: Record<string, Signal<unknown>> | null;\n\n staticClassBindings: string[] | null;\n staticAttributeBindings: Record<string, unknown> | null;\n staticStyleBindings: Record<string, unknown> | null;\n\n attachEventListeners: ((context: { on: HTMLElement['addEventListener']; element: HTMLElement }) => void) | null;\n};\n\nexport type CreatePropsOptions = {\n name: string;\n bindId?: boolean;\n single?: boolean;\n classes?: Record<string, Signal<unknown>>;\n attributes?: Record<string, Signal<unknown>>;\n styles?: Record<string, Signal<unknown>>;\n staticClasses?: string[];\n staticAttributes?: Record<string, unknown>;\n staticStyles?: Record<string, unknown>;\n listeners?: (context: { on: HTMLElement['addEventListener']; element: HTMLElement }) => void;\n};\n\nexport const createProps = (props: CreatePropsOptions): Props => {\n const {\n bindId = false,\n single = true,\n classes: classBindings,\n attributes: attributeBindings,\n styles: styleBindings,\n staticAttributes: staticAttributeBindings = null,\n staticClasses: staticClassBindings = null,\n staticStyles: staticStyleBindings = null,\n listeners,\n name,\n } = props;\n\n const dictionary = createElementDictionary();\n const attached = computed(() => !dictionary.isEmpty());\n\n const attachedElements: PropsAttachedElementsInternal = {\n first: dictionary.firstElement,\n firstId: dictionary.firstId,\n\n has: dictionary.has,\n push: dictionary.push,\n remove: dictionary.remove,\n get: dictionary.get,\n };\n\n const data: PropsInternal = {\n name,\n single,\n bindId,\n\n attached,\n attachedElements,\n\n classBindings: classBindings ?? null,\n attributeBindings: attributeBindings ?? null,\n styleBindings: styleBindings ?? null,\n\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n\n attachEventListeners: listeners ?? null,\n };\n\n return data as Props;\n};\n\nexport type HostProps = {\n props: Props;\n handlers: PropHandlers;\n};\n\nexport const createHostProps = (props: CreatePropsOptions): HostProps => {\n const data = createProps(props);\n const handlers = createPropHandlers();\n\n afterNextRender({\n write: () => {\n bindProps({\n handlers,\n props: data,\n });\n },\n });\n\n const destroyRef = inject(DestroyRef);\n\n destroyRef.onDestroy(() => {\n unbindProps({\n handlers,\n props: data,\n });\n });\n\n return { props: data, handlers };\n};\n","import { afterNextRender } from '@angular/core';\n\nexport const createSetup = <T extends Record<string, unknown>>(config: {\n setupFn: (params: T) => void;\n this: ThisType<unknown>;\n}) => {\n let didCallSetup = false;\n\n afterNextRender(() => {\n if (!didCallSetup) {\n console.error('The setup() function was not called. Please call it inside your constructor.', config.this);\n\n return;\n }\n });\n\n return (params: T) => {\n if (didCallSetup) {\n console.error(\n 'The setup() function was already called. Please call it only once. \\n\\n',\n 'Instance containing the setup() call \\n',\n config.this,\n '\\n\\n Setup was called with\\n',\n params,\n );\n\n return;\n }\n\n didCallSetup = true;\n config.setupFn(params);\n };\n};\n","import { Injector, Signal, WritableSignal, effect, inject, runInInjectionContext } from '@angular/core';\n\nexport const createDependencyStash = <T extends Record<string, WritableSignal<unknown>>>(stash: T) => {\n const injector = inject(Injector);\n\n const provideSignal = <K extends keyof T>(data: { signal: Signal<ReturnType<T[K]>>; for: K }) => {\n runInInjectionContext(injector, () => {\n effect(() => {\n stash[data.for]?.set(data.signal());\n });\n });\n };\n\n const provideValue = <K extends keyof T>(data: { value: ReturnType<T[K]>; for: K }) => {\n stash[data.for]?.set(data.value);\n };\n\n return {\n ...stash,\n provideSignal,\n provideValue,\n };\n};\n","import { DestroyRef, Directive, afterNextRender, inject, input } from '@angular/core';\nimport { createPropHandlers } from './create-prop-handlers';\nimport { Props, PropsInternal } from './create-props';\nimport { bindProps, unbindProps } from './props-binding';\n\n@Directive({\n selector: '[etProps]',\n})\nexport class PropsDirective {\n private destroyRef = inject(DestroyRef);\n\n props = input.required<PropsInternal, Props>({ alias: 'etProps', transform: (d) => d as PropsInternal });\n\n propHandlers = createPropHandlers();\n\n constructor() {\n afterNextRender({\n write: () => {\n bindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n },\n });\n\n this.destroyRef.onDestroy(() => {\n unbindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n });\n }\n}\n","import { Injector, Signal, TemplateRef, computed } from '@angular/core';\n\nexport type ComponentType<T> = new (...args: any[]) => T;\n\nexport type AnyTemplateType =\n string | TemplateRef<unknown> | ComponentType<unknown> | TemplateRefWithContext | ComponentTypeWithInputs;\n\nexport type TemplateRefWithContext<T = Record<string, unknown> | undefined, J = unknown> = {\n template: TemplateRef<J>;\n context?: T;\n injector?: Injector;\n};\n\nexport type ComponentTypeWithInputs<T = Record<string, unknown> | undefined, J = unknown> = {\n component: ComponentType<J>;\n inputs?: T;\n injector?: Injector;\n};\n\nexport type StringTemplate = {\n type: 'string';\n value: string;\n};\n\nexport type NgTemplateTemplate = {\n type: 'template';\n value: TemplateRef<unknown>;\n context?: Record<string, unknown>;\n injector: Injector | null;\n};\n\nexport type ComponentTemplate = {\n type: 'component';\n value: ComponentType<unknown>;\n inputs?: Record<string, unknown>;\n injector: Injector | null;\n};\n\nexport const templateComputed = (templateSignal: Signal<AnyTemplateType | null>) =>\n computed((): StringTemplate | NgTemplateTemplate | ComponentTemplate | null => {\n const content = templateSignal();\n\n if (!content) return null;\n\n if (typeof content === 'string') {\n return {\n type: 'string',\n value: content,\n };\n }\n\n if (content instanceof TemplateRef) {\n return {\n type: 'template',\n value: content,\n injector: null,\n };\n }\n\n if ('component' in content) {\n return {\n type: 'component',\n value: content.component,\n inputs: content.inputs,\n injector: content.injector ?? null,\n };\n }\n\n if ('template' in content) {\n return {\n type: 'template',\n value: content.template,\n context: content.context,\n injector: content.injector ?? null,\n };\n }\n\n return {\n type: 'component',\n value: content,\n injector: null,\n };\n });\n","import { Component, ElementRef, ViewEncapsulation, booleanAttribute, inject, input } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n Observable,\n Subject,\n concat,\n defer,\n distinctUntilChanged,\n exhaustMap,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n of,\n share,\n take,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { suppressTextSelection } from '../utils/text-selection';\n\nexport type ResizeEdge = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';\n\nexport type ResizeMoveEvent = {\n edge: ResizeEdge;\n /** Cumulative delta from the pointerdown position. */\n dx: number;\n dy: number;\n clientX: number;\n clientY: number;\n};\n\nconst EDGE_CURSORS: Record<ResizeEdge, string> = {\n n: 'ns-resize',\n s: 'ns-resize',\n e: 'ew-resize',\n w: 'ew-resize',\n ne: 'nesw-resize',\n sw: 'nesw-resize',\n nw: 'nwse-resize',\n se: 'nwse-resize',\n};\n\ntype GestureEvent =\n | { readonly type: 'start'; readonly edge: ResizeEdge }\n | { readonly type: 'move'; readonly data: ResizeMoveEvent }\n | { readonly type: 'end' }\n | { readonly type: 'cancelled' };\n\nconst setupResizeObservable = (startEvent: PointerEvent, edge: ResizeEdge, doc: Document): Observable<GestureEvent> => {\n const pointerId = startEvent.pointerId;\n const startX = startEvent.clientX;\n const startY = startEvent.clientY;\n\n let cancelled = false;\n\n const end$ = merge(\n fromEvent<PointerEvent>(document, 'pointerup'),\n fromEvent<PointerEvent>(document, 'pointercancel'),\n ).pipe(\n filter((e) => e.pointerId === pointerId),\n take(1),\n // Read below by the terminating `defer`, which only runs once this has completed the moves.\n tap((e) => (cancelled = e.type === 'pointercancel')),\n );\n\n return defer(() => {\n const releaseSelection = suppressTextSelection(doc);\n\n return concat(\n of<GestureEvent>({ type: 'start', edge }),\n fromEvent<PointerEvent>(document, 'pointermove').pipe(\n filter((e) => e.pointerId === pointerId),\n map((e): GestureEvent => ({\n type: 'move',\n data: { edge, dx: e.clientX - startX, dy: e.clientY - startY, clientX: e.clientX, clientY: e.clientY },\n })),\n takeUntil(end$),\n ),\n defer((): Observable<GestureEvent> => of({ type: cancelled ? 'cancelled' : 'end' })),\n ).pipe(finalize(releaseSelection));\n });\n};\n\n@Component({\n selector: 'et-resize-handles',\n template: `\n @for (edge of edges(); track edge) {\n <div\n [style.cursor]=\"edgeCursors[edge]\"\n (pointerdown)=\"startResizeGesture($event, edge)\"\n class=\"et-resize-handle et-resize-handle--{{ edge }}\"\n ></div>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'et-resize-handles',\n '[attr.inert]': 'disabled() ? \"\" : null',\n '[attr.data-active-edge]': 'activeEdge()',\n },\n styles: `\n @property --et-resize-handles-z-index {\n syntax: '<integer>';\n inherits: true;\n initial-value: 10;\n }\n\n @property --et-resize-handles-edge-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 6px;\n }\n\n @property --et-resize-handles-corner-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 12px;\n }\n\n @property --et-resize-handles-edge-inset {\n syntax: '<length>';\n inherits: true;\n initial-value: 8px;\n }\n\n @property --et-resize-handles-outset {\n syntax: '<length>';\n inherits: true;\n initial-value: 0px;\n }\n\n @property --et-resize-handles-side-top {\n syntax: '<length>';\n inherits: true;\n initial-value: 0px;\n }\n\n @property --et-resize-handles-side-bottom {\n syntax: '<length>';\n inherits: true;\n initial-value: 8px;\n }\n\n @property --et-resize-handles-touch-edge-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 20px;\n }\n\n @property --et-resize-handles-touch-corner-size {\n syntax: '<length>';\n inherits: true;\n initial-value: 28px;\n }\n\n et-resize-handles {\n position: absolute;\n inset: calc(-1 * var(--et-resize-handles-outset));\n pointer-events: none;\n }\n\n .et-resize-handle {\n --et-resize-handle-thickness: calc(var(--et-resize-handles-edge-size) + var(--et-resize-handles-outset));\n --et-resize-handle-corner: calc(var(--et-resize-handles-corner-size) + var(--et-resize-handles-outset));\n\n position: absolute;\n z-index: var(--et-resize-handles-z-index);\n touch-action: none;\n pointer-events: auto;\n }\n\n .et-resize-handle--n {\n left: var(--et-resize-handles-edge-inset);\n right: var(--et-resize-handles-edge-inset);\n height: var(--et-resize-handle-thickness);\n top: 0;\n }\n\n .et-resize-handle--s {\n left: var(--et-resize-handles-edge-inset);\n right: var(--et-resize-handles-edge-inset);\n height: var(--et-resize-handle-thickness);\n bottom: 0;\n }\n\n .et-resize-handle--e,\n .et-resize-handle--w {\n top: var(--et-resize-handles-side-top);\n bottom: var(--et-resize-handles-side-bottom);\n width: var(--et-resize-handle-thickness);\n }\n\n .et-resize-handle--e {\n right: 0;\n }\n\n .et-resize-handle--w {\n left: 0;\n }\n\n .et-resize-handle--ne,\n .et-resize-handle--nw {\n top: 0;\n width: var(--et-resize-handle-corner);\n height: var(--et-resize-handle-corner);\n }\n\n .et-resize-handle--ne {\n right: 0;\n }\n\n .et-resize-handle--nw {\n left: 0;\n }\n\n .et-resize-handle--se,\n .et-resize-handle--sw {\n bottom: 0;\n width: var(--et-resize-handle-corner);\n height: var(--et-resize-handle-corner);\n }\n\n .et-resize-handle--se {\n right: 0;\n }\n\n .et-resize-handle--sw {\n left: 0;\n }\n\n /* any-pointer, not hover:none - a touchscreen laptop has a mouse as its primary input, so\n hover:none never matches there even though a finger can still grab a handle. */\n @media (any-pointer: coarse) {\n .et-resize-handle {\n --et-resize-handle-thickness: calc(var(--et-resize-handles-touch-edge-size) + var(--et-resize-handles-outset));\n --et-resize-handle-corner: calc(var(--et-resize-handles-touch-corner-size) + var(--et-resize-handles-outset));\n }\n }\n `,\n})\nexport class ResizeHandlesComponent {\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n edges = input<ResizeEdge[]>(['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw']);\n disabled = input(false, { transform: booleanAttribute });\n\n private gestureStart$ = new Subject<{ readonly event: PointerEvent; readonly edge: ResizeEdge }>();\n\n private gesture$ = this.gestureStart$.pipe(\n exhaustMap(({ event, edge }) => setupResizeObservable(event, edge, this.el.nativeElement.ownerDocument)),\n takeUntilDestroyed(),\n share(),\n );\n\n resizeStarted = outputFromObservable<ResizeEdge>(\n this.gesture$.pipe(\n filter((e): e is Extract<GestureEvent, { type: 'start' }> => e.type === 'start'),\n map((e) => e.edge),\n ),\n );\n\n resizeMoved = outputFromObservable<ResizeMoveEvent>(\n this.gesture$.pipe(\n filter((e): e is Extract<GestureEvent, { type: 'move' }> => e.type === 'move'),\n map((e) => e.data),\n ),\n );\n\n resizeEnded = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'end'),\n map(() => undefined),\n ),\n );\n\n /**\n * The browser took the gesture away mid-resize (a system gesture, an incoming call, the tab going\n * to the background). Revert to the size the resize started from - the user never let go, so there\n * is no size they chose.\n */\n resizeCancelled = outputFromObservable<void>(\n this.gesture$.pipe(\n filter((e) => e.type === 'cancelled'),\n map(() => undefined),\n ),\n );\n\n isResizing = toSignal(\n this.gesture$.pipe(\n map((e) => e.type === 'start' || e.type === 'move'),\n distinctUntilChanged(),\n ),\n { initialValue: false },\n );\n\n activeEdge = toSignal<ResizeEdge | null>(\n this.gesture$.pipe(\n map((e) => {\n if (e.type === 'start') return e.edge;\n if (e.type === 'move') return e.data.edge;\n\n return null;\n }),\n distinctUntilChanged(),\n ),\n { initialValue: null },\n );\n\n readonly edgeCursors = EDGE_CURSORS;\n\n startResizeGesture(event: PointerEvent, edge: ResizeEdge) {\n if (event.button !== 0 || this.disabled()) return;\n event.stopPropagation();\n this.gestureStart$.next({ event, edge });\n }\n}\n","import { computed, DestroyRef, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport { MaybeSignal } from '../signals';\n\nexport type HeadBinding<T> = {\n id: symbol;\n value: T;\n priority?: number;\n};\n\nexport const applyHeadBinding = <T>(\n binding: MaybeSignal<T | null | undefined>,\n applyFn: (value: T) => void,\n removeFn: () => void,\n isValid?: (value: T | null | undefined) => value is T,\n) => {\n const destroyRef = inject(DestroyRef);\n const signalBinding = isSignal(binding) ? binding : signal(binding);\n\n const defaultIsValid = (value: T | null | undefined): value is T => value !== null && value !== undefined;\n\n const validator = isValid ?? defaultIsValid;\n\n const initialValue = untracked(() => signalBinding());\n if (validator(initialValue)) {\n applyFn(initialValue);\n }\n\n effect(() => {\n const value = signalBinding();\n if (validator(value)) {\n applyFn(value);\n } else {\n removeFn();\n }\n });\n\n destroyRef.onDestroy(() => {\n removeFn();\n });\n};\n\nexport const createPropertyBinding = <TConfig>(\n configBuilder: (value: string) => TConfig,\n applyConfigFn: (config: MaybeSignal<TConfig | null | undefined>) => void,\n) => {\n return (binding: MaybeSignal<string | null | undefined>) => {\n applyConfigFn(\n computed(() => {\n const value = untracked(() => (isSignal(binding) ? binding() : binding));\n return value ? configBuilder(value) : null;\n }),\n );\n };\n};\n\nexport const createArrayPropertyBinding = <TConfig>(\n configBuilder: (value: string, index: number) => TConfig,\n applyConfigFn: (config: MaybeSignal<TConfig | null | undefined>) => void,\n) => {\n return (binding: MaybeSignal<string[] | null | undefined>) => {\n const valuesSignal = isSignal(binding) ? binding : signal(binding);\n const valuesList = computed(() => untracked(() => valuesSignal()) ?? []);\n\n valuesList().forEach((value, index) => {\n applyConfigFn(computed(() => configBuilder(value, index)));\n });\n };\n};\n\nexport const toStringBinding = (\n binding: MaybeSignal<string | number | null | undefined>,\n): MaybeSignal<string | null | undefined> => {\n return computed(() => {\n const value = untracked(() => (isSignal(binding) ? binding() : binding));\n return value !== null && value !== undefined ? String(value) : null;\n });\n};\n\nexport const createBulkPropertyBinding = <TConfig extends Record<string, unknown>>(\n _propertyPrefix: string,\n applyConfigFn: (property: string, binding: MaybeSignal<string | null | undefined>) => void,\n) => {\n return (config: TConfig) => {\n Object.entries(config).forEach(([key, value]) => {\n if (value !== undefined) {\n applyConfigFn(key, value as MaybeSignal<string | null | undefined>);\n }\n });\n };\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { computed, DOCUMENT, effect, inject, PLATFORM_ID, signal } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding } from './head-binding';\n\n/**\n * Something drawn on top of the site's favicon.\n *\n * - `dot` - a filled badge punched into the bottom-right corner, the \"something happened here\" marker.\n * - `progress` - a ring around the icon, `value` in percent (`0`–`100`). The browser exposes no\n * taskbar/tab progress API, so a favicon ring (or a percentage in the title) is as close as the web\n * gets to one.\n */\nexport type FaviconOverlay =\n { kind: 'dot'; color?: string } | { kind: 'progress'; value: number; color?: string; trackColor?: string };\n\n/** The rendered favicon is this many device-independent pixels square. */\nconst FAVICON_SIZE = 64;\n\n/** Fallback when the color theming tokens aren't resolvable (no theme applied to the root element). */\nconst FALLBACK_OVERLAY_COLOR = '#e11d48';\n\nconst readThemeColor = (document: Document) => {\n const value = getComputedStyle(document.documentElement).getPropertyValue('--et-theme-color-primary-solid').trim();\n\n return value || FALLBACK_OVERLAY_COLOR;\n};\n\nconst drawDot = (ctx: CanvasRenderingContext2D, color: string) => {\n const radius = FAVICON_SIZE * 0.19;\n const center = FAVICON_SIZE - radius - 3;\n\n // Punch a hole first so the badge reads on top of a busy icon, then fill it.\n ctx.save();\n ctx.globalCompositeOperation = 'destination-out';\n ctx.beginPath();\n ctx.arc(center, center, radius * 1.35, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n\n ctx.beginPath();\n ctx.arc(center, center, radius, 0, Math.PI * 2);\n ctx.fillStyle = color;\n ctx.fill();\n};\n\nconst drawProgress = (ctx: CanvasRenderingContext2D, value: number, color: string, trackColor: string) => {\n const lineWidth = FAVICON_SIZE * 0.14;\n const radius = (FAVICON_SIZE - lineWidth) / 2;\n const center = FAVICON_SIZE / 2;\n const clamped = Math.min(100, Math.max(0, value));\n const start = -Math.PI / 2;\n\n ctx.lineWidth = lineWidth;\n ctx.lineCap = 'butt';\n\n // Clear the ring's lane so the base icon doesn't show through a semi-transparent track.\n ctx.save();\n ctx.globalCompositeOperation = 'destination-out';\n ctx.strokeStyle = '#000';\n ctx.beginPath();\n ctx.arc(center, center, radius, 0, Math.PI * 2);\n ctx.stroke();\n ctx.restore();\n\n ctx.strokeStyle = trackColor;\n ctx.beginPath();\n ctx.arc(center, center, radius, 0, Math.PI * 2);\n ctx.stroke();\n\n if (clamped > 0) {\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.arc(center, center, radius, start, start + (Math.PI * 2 * clamped) / 100);\n ctx.stroke();\n }\n};\n\nconst FAVICON_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const overlays = signal<Map<symbol, FaviconOverlay>>(new Map());\n\n const activeOverlay = computed<FaviconOverlay | null>(() => {\n const all = Array.from(overlays().values());\n\n return all.find((overlay) => overlay.kind === 'progress') ?? all[all.length - 1] ?? null;\n });\n\n let iconLink: HTMLLinkElement | null = null;\n let createdIconLink = false;\n let originalHref: string | null = null;\n let baseImage: HTMLImageElement | null = null;\n let baseImageFailed = false;\n\n const resolveIconLink = () => {\n if (iconLink) {\n return iconLink;\n }\n\n iconLink = document.querySelector<HTMLLinkElement>('link[rel~=\"icon\"]');\n\n if (!iconLink) {\n iconLink = document.createElement('link');\n iconLink.rel = 'icon';\n document.head.appendChild(iconLink);\n createdIconLink = true;\n }\n\n originalHref = createdIconLink ? null : iconLink.getAttribute('href');\n\n return iconLink;\n };\n\n const restore = () => {\n if (!iconLink) return;\n\n if (createdIconLink) {\n iconLink.remove();\n iconLink = null;\n createdIconLink = false;\n\n return;\n }\n\n if (originalHref === null) {\n iconLink.removeAttribute('href');\n } else {\n iconLink.setAttribute('href', originalHref);\n }\n };\n\n // The base icon is loaded once and reused; a favicon that can't be read (cross-origin without\n // CORS headers, an SVG without intrinsic size) draws on an empty canvas instead of failing.\n const loadBaseImage = (): Promise<HTMLImageElement | null> => {\n if (baseImage || baseImageFailed || !originalHref) {\n return Promise.resolve(baseImage);\n }\n\n return new Promise((resolve) => {\n const image = new Image();\n\n image.onload = () => {\n baseImage = image;\n resolve(image);\n };\n\n image.onerror = () => {\n baseImageFailed = true;\n resolve(null);\n };\n\n image.src = originalHref as string;\n });\n };\n\n const render = async (overlay: FaviconOverlay) => {\n const canvas = document.createElement('canvas');\n canvas.width = FAVICON_SIZE;\n canvas.height = FAVICON_SIZE;\n\n // No 2d context (a non-browser DOM implementation) - leave the favicon untouched entirely.\n const ctx = canvas.getContext('2d');\n\n if (!ctx) return;\n\n const link = resolveIconLink();\n const image = await loadBaseImage();\n\n // A later state may have won the race while the base image loaded.\n if (activeOverlay() !== overlay) return;\n\n if (image) {\n ctx.drawImage(image, 0, 0, FAVICON_SIZE, FAVICON_SIZE);\n }\n\n const color = overlay.color ?? readThemeColor(document);\n\n if (overlay.kind === 'dot') {\n drawDot(ctx, color);\n } else {\n drawProgress(ctx, overlay.value, color, overlay.trackColor ?? 'rgba(127, 127, 127, 0.35)');\n }\n\n try {\n link.setAttribute('href', canvas.toDataURL('image/png'));\n } catch {\n // A tainted canvas (cross-origin base icon) can't be exported - leave the favicon as it was.\n restore();\n }\n };\n\n if (isBrowser) {\n effect(() => {\n const overlay = activeOverlay();\n\n if (!overlay) {\n restore();\n\n return;\n }\n\n void render(overlay);\n });\n }\n\n const addOverlay = (id: symbol, overlay: FaviconOverlay) => {\n overlays.update((current) => new Map(current).set(id, overlay));\n };\n\n const removeOverlay = (id: symbol) => {\n overlays.update((current) => {\n const next = new Map(current);\n next.delete(id);\n return next;\n });\n };\n\n return { activeOverlay, addOverlay, removeOverlay };\n },\n { name: 'Favicon Store' },\n);\n\n/**\n * Owns the `<link rel=\"icon\">` href so overlays can be drawn onto the site's favicon and taken back\n * off again. The original href is captured on first use and restored once the last overlay is gone.\n *\n * Registrations are keyed, and a `progress` overlay wins over a `dot` - a ring that also carries a\n * badge reads as neither.\n */\nexport const provideFaviconStore = /* @__PURE__ */ toProvideFn(FAVICON_STORE_DEF);\nexport const injectFaviconStore = /* @__PURE__ */ toInjectFn(FAVICON_STORE_DEF);\n\n/**\n * Draw an overlay on the site's favicon while the binding has a value - an unsaved-changes dot, an\n * upload's progress ring. The favicon is restored when the binding goes empty or the injector is\n * destroyed. No-op during SSR.\n *\n * ```ts\n * applyFaviconOverlay(computed(() => (this.saving() ? { kind: 'progress', value: this.percent() } : null)));\n * ```\n */\nexport const applyFaviconOverlay = (binding: MaybeSignal<FaviconOverlay | null | undefined>) => {\n const faviconStore = injectFaviconStore();\n const overlayId = Symbol('favicon-overlay');\n\n applyHeadBinding(\n binding,\n (value) => faviconStore.addOverlay(overlayId, value),\n () => faviconStore.removeOverlay(overlayId),\n );\n};\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, isSignal, signal, untracked } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding, createArrayPropertyBinding, createPropertyBinding } from './head-binding';\n\nexport type LinkConfig = {\n rel: string;\n href: string;\n hreflang?: string;\n type?: string;\n sizes?: string;\n media?: string;\n as?: string;\n crossorigin?: string;\n integrity?: string;\n referrerpolicy?: string;\n\n /** Unique identifier for the link */\n key?: string;\n\n /** Whether multiple instances of this link are allowed */\n allowMultiple?: boolean;\n};\n\ntype LinkBinding = {\n config: LinkConfig;\n element: HTMLLinkElement;\n priority: number;\n};\n\nexport type LinkStoreConfig = {\n /**\n * Link rels that are allowed to have multiple instances\n * If you want to override the default set, extend your set from {@link DEFAULT_MULTI_INSTANCE_RELS}.\n * Otherwise, common multiple instance links may be removed unintentionally.\n * @example\n * ```ts\n * import { DEFAULT_MULTI_INSTANCE_RELS, provideLinkStoreConfig } from '@ethlete/core';\n *\n * provideLinkStoreConfig({\n * multiInstanceRels: new Set([\n * ...DEFAULT_MULTI_INSTANCE_RELS,\n * 'custom-rel',\n * ]),\n * });\n * ```\n */\n multiInstanceRels: Set<string>;\n};\n\nexport const DEFAULT_MULTI_INSTANCE_RELS = /* @__PURE__ */ new Set([\n 'alternate',\n 'icon',\n 'apple-touch-icon',\n 'apple-touch-icon-precomposed',\n 'preconnect',\n 'dns-prefetch',\n 'preload',\n 'prefetch',\n 'prerender',\n 'stylesheet',\n 'modulepreload',\n]);\n\nconst LINK_STORE_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<LinkStoreConfig>(\n {\n multiInstanceRels: DEFAULT_MULTI_INSTANCE_RELS,\n },\n { name: 'Link Store Config' },\n);\n\nexport const provideLinkStoreConfig = /* @__PURE__ */ toProvideFn(LINK_STORE_CONFIG_DEF);\nexport const injectLinkStoreConfig = /* @__PURE__ */ toInjectFn(LINK_STORE_CONFIG_DEF);\n\nconst LINK_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const config = injectLinkStoreConfig();\n const linksByKey = signal<Map<string, Map<symbol, LinkBinding>>>(new Map());\n let priorityCounter = 0;\n\n const getLinkKey = (linkConfig: LinkConfig) => {\n const isMultiInstance = config.multiInstanceRels.has(linkConfig.rel) || linkConfig.allowMultiple;\n\n if (isMultiInstance) {\n const keyParts = [linkConfig.rel];\n\n if (linkConfig.hreflang) keyParts.push(`hreflang:${linkConfig.hreflang}`);\n if (linkConfig.media) keyParts.push(`media:${linkConfig.media}`);\n if (linkConfig.sizes) keyParts.push(`sizes:${linkConfig.sizes}`);\n if (linkConfig.type) keyParts.push(`type:${linkConfig.type}`);\n if (linkConfig.as) keyParts.push(`as:${linkConfig.as}`);\n\n // For resource hints, include href to make them unique per origin/resource\n if (['preconnect', 'dns-prefetch', 'preload', 'prefetch', 'modulepreload'].includes(linkConfig.rel)) {\n keyParts.push(`href:${linkConfig.href}`);\n }\n\n return keyParts.join('|');\n }\n\n return linkConfig.rel;\n };\n\n const isMultiInstanceLink = (key: string) => {\n const rel = key.split('|')[0];\n\n if (!rel) return false;\n\n return config.multiInstanceRels.has(rel);\n };\n\n const createLinkElement = (linkConfig: LinkConfig): HTMLLinkElement => {\n const link = document.createElement('link');\n\n const { key, allowMultiple, ...attributes } = linkConfig;\n\n Object.entries(attributes).forEach(([attrKey, value]) => {\n if (value !== undefined && value !== null) {\n link.setAttribute(attrKey, String(value));\n }\n });\n\n return link;\n };\n\n const applyActiveLinks = (key: string) => {\n const bindings = untracked(() => linksByKey().get(key));\n\n document.head.querySelectorAll(`link[data-link-key=\"${key}\"]`).forEach((el) => el.remove());\n\n if (!bindings || bindings.size === 0) {\n return;\n }\n\n const allowMultiple =\n isMultiInstanceLink(key) || Array.from(bindings.values()).some((b) => b.config.allowMultiple);\n\n if (allowMultiple) {\n const sortedBindings = Array.from(bindings.values()).sort((a, b) => a.priority - b.priority);\n\n sortedBindings.forEach((binding) => {\n binding.element.setAttribute('data-link-key', key);\n document.head.appendChild(binding.element);\n });\n } else {\n const activeBinding = Array.from(bindings.values()).reduce((highest, current) =>\n current.priority > highest.priority ? current : highest,\n );\n\n activeBinding.element.setAttribute('data-link-key', key);\n document.head.appendChild(activeBinding.element);\n }\n };\n\n const addLink = (id: symbol, linkConfig: LinkConfig) => {\n const key = getLinkKey(linkConfig);\n const priority = priorityCounter++;\n const element = createLinkElement(linkConfig);\n\n linksByKey.update((linkMap) => {\n const newLinkMap = new Map(linkMap);\n const keyBindings = newLinkMap.get(key) || new Map();\n\n keyBindings.set(id, { config: linkConfig, element, priority });\n newLinkMap.set(key, new Map(keyBindings));\n\n return newLinkMap;\n });\n\n applyActiveLinks(key);\n };\n\n const removeLink = (id: symbol, key?: string) => {\n if (key) {\n linksByKey.update((linkMap) => {\n const newLinkMap = new Map(linkMap);\n const keyBindings = newLinkMap.get(key);\n\n if (keyBindings) {\n keyBindings.delete(id);\n\n if (keyBindings.size === 0) {\n newLinkMap.delete(key);\n } else {\n newLinkMap.set(key, new Map(keyBindings));\n }\n }\n\n return newLinkMap;\n });\n\n applyActiveLinks(key);\n\n return;\n }\n\n linksByKey.update((linkMap) => {\n const newLinkMap = new Map(linkMap);\n let affectedKey: string | undefined;\n\n for (const [k, bindings] of newLinkMap) {\n if (bindings.has(id)) {\n bindings.delete(id);\n affectedKey = k;\n\n if (bindings.size === 0) {\n newLinkMap.delete(k);\n } else {\n newLinkMap.set(k, new Map(bindings));\n }\n break;\n }\n }\n\n if (affectedKey) {\n queueMicrotask(() => applyActiveLinks(affectedKey));\n }\n\n return newLinkMap;\n });\n };\n\n return { addLink, removeLink, getLinkKey };\n },\n { name: 'Link Store' },\n);\n\nexport const provideLinkStore = /* @__PURE__ */ toProvideFn(LINK_STORE_DEF);\nexport const injectLinkStore = /* @__PURE__ */ toInjectFn(LINK_STORE_DEF);\n\nexport const applyLinkBinding = (binding: MaybeSignal<LinkConfig | null | undefined>) => {\n const linkStore = injectLinkStore();\n const linkId = Symbol('link-tag');\n let currentKey: string | undefined;\n\n applyHeadBinding(\n binding,\n (config) => {\n currentKey = linkStore.getLinkKey(config);\n linkStore.addLink(linkId, config);\n },\n () => linkStore.removeLink(linkId, currentKey),\n );\n};\n\nexport const applyCanonicalBinding = /* @__PURE__ */ createPropertyBinding(\n (href) => ({ rel: 'canonical', href }),\n applyLinkBinding,\n);\n\nexport const applyAlternateBinding = (hreflang: string, binding: MaybeSignal<string | null | undefined>) => {\n applyLinkBinding(\n computed(() => {\n const url = untracked(() => (isSignal(binding) ? binding() : binding));\n return url ? { rel: 'alternate', hreflang, href: url } : null;\n }),\n );\n};\n\nexport type AlternateLanguagesConfig = {\n [hreflang: string]: MaybeSignal<string | null | undefined>;\n};\n\nexport const applyAlternateLanguagesBindings = (config: AlternateLanguagesConfig) => {\n Object.entries(config).forEach(([hreflang, binding]) => {\n applyAlternateBinding(hreflang, binding);\n });\n};\n\nexport const applyPrevBinding = /* @__PURE__ */ createPropertyBinding(\n (href) => ({ rel: 'prev', href }),\n applyLinkBinding,\n);\n\nexport const applyNextBinding = /* @__PURE__ */ createPropertyBinding(\n (href) => ({ rel: 'next', href }),\n applyLinkBinding,\n);\n\nexport type ResourceHintsConfig = {\n preconnect?: MaybeSignal<string[] | null | undefined>;\n dnsPrefetch?: MaybeSignal<string[] | null | undefined>;\n prefetch?: MaybeSignal<string[] | null | undefined>;\n prerender?: MaybeSignal<string[] | null | undefined>;\n};\n\nexport const applyResourceHintsBindings = (config: ResourceHintsConfig) => {\n if (config.preconnect) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'preconnect', href, key: `preconnect:${index}` }),\n applyLinkBinding,\n )(config.preconnect);\n }\n\n if (config.dnsPrefetch) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'dns-prefetch', href, key: `dns-prefetch:${index}` }),\n applyLinkBinding,\n )(config.dnsPrefetch);\n }\n\n if (config.prefetch) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'prefetch', href, key: `prefetch:${index}` }),\n applyLinkBinding,\n )(config.prefetch);\n }\n\n if (config.prerender) {\n createArrayPropertyBinding(\n (href, index) => ({ rel: 'prerender', href, key: `prerender:${index}` }),\n applyLinkBinding,\n )(config.prerender);\n }\n};\n","import { computed, effect, inject, signal } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { injectLocale } from '../providers';\nimport { injectIsRouterInitialized, MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding } from './head-binding';\n\nexport type TitlePart = {\n /** The text to be displayed as the title */\n text: string;\n\n /** Whether this part should be used as the starting point for the title construction */\n useAsStart?: boolean;\n};\n\nexport type TitleConfig = {\n /**\n * The divider string used between title parts\n * @default '|'\n */\n divider: string;\n\n /** The default title to use when no parts are available */\n defaultTitle: string;\n\n /**\n * A function to transform the title text based on locale.\n * Use `provideLocale()` to update the locale dynamically.\n */\n transformer: (title: string, locale: string) => string;\n\n /**\n * A title part to be prefixed to all titles\n */\n suffixPart?: TitlePart;\n\n /**\n * A title part to be suffixed to all titles\n */\n prefixPart?: TitlePart;\n};\n\nconst TITLE_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<TitleConfig>(\n {\n divider: '|',\n defaultTitle: '',\n transformer: (title: string) => title,\n },\n { name: 'Title Config' },\n);\n\nexport const provideTitleConfig = /* @__PURE__ */ toProvideFn(TITLE_CONFIG_DEF);\nexport const injectTitleConfig = /* @__PURE__ */ toInjectFn(TITLE_CONFIG_DEF);\n\nconst TITLE_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const config = injectTitleConfig();\n const titleParts = signal<Map<symbol, TitlePart>>(new Map());\n const titleMarkers = signal<Map<symbol, string>>(new Map());\n const { currentLocale } = injectLocale();\n const titleService = inject(Title);\n const isRouterInitialized = injectIsRouterInitialized();\n\n // Falls back on an empty configured default too, so a store created lazily (e.g. by a title\n // marker) doesn't wipe a title that came from `index.html`.\n const defaultTitle = config.defaultTitle || titleService.getTitle();\n\n const composedTitle = computed(() => {\n const partsMap = titleParts();\n\n if (!partsMap.size || !isRouterInitialized()) {\n return config.transformer(defaultTitle, currentLocale());\n }\n\n const parts = Array.from(partsMap.values());\n const finalTextParts: string[] = [];\n\n for (let index = parts.length - 1; index > -1; index--) {\n const part = parts[index];\n if (!part) continue;\n\n const text = config.transformer(part.text, currentLocale());\n finalTextParts.unshift(text);\n\n if (part.useAsStart) break;\n }\n\n if (config.prefixPart?.text) {\n finalTextParts.unshift(config.transformer(config.prefixPart.text, currentLocale()));\n }\n\n if (config.suffixPart?.text) {\n finalTextParts.push(config.transformer(config.suffixPart.text, currentLocale()));\n }\n\n return finalTextParts.join(` ${config.divider} `);\n });\n\n /**\n * The composed title with any markers prefixed - what actually lands in `document.title`.\n * Markers sit outside the divider logic, so `● Page | App` rather than `● | Page | App`.\n */\n const title = computed(() => {\n // Deduplicated: two forms with unsaved changes should read as one marker, not two.\n const markers = Array.from(new Set(titleMarkers().values()));\n const composed = composedTitle();\n\n if (!markers.length) {\n return composed;\n }\n\n return `${markers.join(' ')} ${composed}`.trim();\n });\n\n const addPart = (id: symbol, part: TitlePart) => {\n titleParts.update((parts) => new Map(parts).set(id, part));\n };\n\n const removePart = (id: symbol) => {\n titleParts.update((parts) => {\n const newParts = new Map(parts);\n newParts.delete(id);\n return newParts;\n });\n };\n\n const addMarker = (id: symbol, marker: string) => {\n titleMarkers.update((markers) => new Map(markers).set(id, marker));\n };\n\n const removeMarker = (id: symbol) => {\n titleMarkers.update((markers) => {\n const newMarkers = new Map(markers);\n newMarkers.delete(id);\n return newMarkers;\n });\n };\n\n effect(() => {\n const titleText = title();\n titleService.setTitle(titleText);\n });\n\n return { title, addPart, removePart, addMarker, removeMarker };\n },\n { name: 'Title Store' },\n);\n\nexport const provideTitleStore = /* @__PURE__ */ toProvideFn(TITLE_STORE_DEF);\nexport const injectTitleStore = /* @__PURE__ */ toInjectFn(TITLE_STORE_DEF);\n\nexport const applyHeadTitleBinding = (\n binding: MaybeSignal<string | number | null | undefined>,\n options?: Omit<TitlePart, 'text'>,\n) => {\n const titleStore = injectTitleStore();\n const partId = Symbol('title-part');\n\n applyHeadBinding(\n binding,\n (value) => titleStore.addPart(partId, { text: `${value}`, ...options }),\n () => titleStore.removePart(partId),\n (value): value is string | number => value !== null && value !== undefined && value !== '',\n );\n};\n\n/**\n * Prefix the tab title with a short marker (`● Page | App`) while the binding has a value - the\n * unsaved-changes dot, a pending-count badge, and the like. The marker is removed when the binding\n * goes empty and on destroy. Unlike a title part, it is not joined by the divider.\n */\nexport const applyHeadTitleMarker = (binding: MaybeSignal<string | null | undefined>) => {\n const titleStore = injectTitleStore();\n const markerId = Symbol('title-marker');\n\n applyHeadBinding(\n binding,\n (value) => titleStore.addMarker(markerId, value),\n () => titleStore.removeMarker(markerId),\n (value): value is string => value !== null && value !== undefined && value !== '',\n );\n};\n","import { computed, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport { Meta } from '@angular/platform-browser';\nimport { injectLocale } from '../providers';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding, createArrayPropertyBinding, createPropertyBinding, toStringBinding } from './head-binding';\nimport { applyHeadTitleBinding } from './title-binding';\n\nexport type MetaTagConfig = {\n /** Unique identifier for the tag */\n key?: string;\n\n /** Whether multiple instances of this tag are allowed */\n allowMultiple?: boolean;\n\n charset?: string;\n content?: string;\n httpEquiv?: string;\n id?: string;\n itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n};\n\ntype MetaTagBinding = {\n config: MetaTagConfig;\n priority: number;\n};\n\nexport type MetaConfig = {\n /**\n * A function to transform meta tag content based on locale.\n * Use `provideLocale()` to update the locale dynamically.\n */\n transformer: (content: string, locale: string) => string;\n\n /**\n * Tags that are allowed to have multiple instances\n * If you want to override the default set, extend your set from {@link DEFAULT_MULTI_INSTANCE_TAGS}.\n * Otherwise, common multiple instance tags may be removed unintentionally.\n * @example\n * ```ts\n * import { DEFAULT_MULTI_INSTANCE_TAGS, provideMetaConfig } from '@ethlete/core';\n *\n * provideMetaConfig({\n * multiInstanceTags: new Set([\n * ...DEFAULT_MULTI_INSTANCE_TAGS,\n * 'name=\"custom-multiple-tag\"',\n * ]),\n * });\n * ```\n */\n multiInstanceTags: Set<string>;\n};\n\nexport const DEFAULT_MULTI_INSTANCE_TAGS = /* @__PURE__ */ new Set([\n // Open Graph - Media\n 'property=\"og:image\"',\n 'property=\"og:image:url\"',\n 'property=\"og:image:secure_url\"',\n 'property=\"og:video\"',\n 'property=\"og:video:url\"',\n 'property=\"og:video:secure_url\"',\n 'property=\"og:audio\"',\n 'property=\"og:audio:url\"',\n 'property=\"og:audio:secure_url\"',\n\n // Open Graph - Locale alternatives\n 'property=\"og:locale:alternate\"',\n\n // Twitter Card\n 'name=\"twitter:image\"',\n 'name=\"twitter:player\"',\n\n // Article tags (arrays)\n 'property=\"article:author\"',\n 'property=\"article:tag\"',\n\n // Music tags (arrays)\n 'property=\"music:song\"',\n 'property=\"music:musician\"',\n 'property=\"music:album\"',\n\n // Video tags (arrays)\n 'property=\"video:actor\"',\n 'property=\"video:director\"',\n 'property=\"video:writer\"',\n 'property=\"video:tag\"',\n\n // Book tags (arrays)\n 'property=\"book:author\"',\n 'property=\"book:tag\"',\n\n // Profile (arrays)\n 'property=\"profile:username\"',\n\n // Product tags (arrays)\n 'property=\"product:category\"',\n 'property=\"product:retailer_item_id\"',\n\n // App Links (multiple platforms)\n 'property=\"al:ios:url\"',\n 'property=\"al:ios:app_store_id\"',\n 'property=\"al:ios:app_name\"',\n 'property=\"al:android:url\"',\n 'property=\"al:android:app_name\"',\n 'property=\"al:android:package\"',\n 'property=\"al:web:url\"',\n 'property=\"al:windows_phone:url\"',\n 'property=\"al:windows_phone:app_id\"',\n 'property=\"al:windows_phone:app_name\"',\n 'property=\"al:windows:url\"',\n 'property=\"al:windows:app_id\"',\n 'property=\"al:windows:app_name\"',\n 'property=\"al:windows_universal:url\"',\n 'property=\"al:windows_universal:app_id\"',\n 'property=\"al:windows_universal:app_name\"',\n\n // Dublin Core (can have multiple)\n 'name=\"DC.creator\"',\n 'name=\"DC.contributor\"',\n 'name=\"DC.subject\"',\n\n // Schema.org (via meta tags - though JSON-LD is preferred)\n 'itemprop=\"image\"',\n 'itemprop=\"author\"',\n\n // Apple iOS\n 'name=\"apple-itunes-app\"', // Can have multiple app arguments\n\n // Verification tags (multiple services)\n 'name=\"google-site-verification\"',\n 'name=\"msvalidate.01\"',\n 'name=\"yandex-verification\"',\n 'name=\"p:domain_verify\"', // Pinterest\n 'name=\"facebook-domain-verification\"',\n]);\n\nconst META_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<MetaConfig>(\n {\n transformer: (content: string) => content,\n multiInstanceTags: DEFAULT_MULTI_INSTANCE_TAGS,\n },\n { name: 'Meta Config' },\n);\n\nexport const provideMetaConfig = /* @__PURE__ */ toProvideFn(META_CONFIG_DEF);\nexport const injectMetaConfig = /* @__PURE__ */ toInjectFn(META_CONFIG_DEF);\n\nconst META_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const metaService = inject(Meta);\n const config = injectMetaConfig();\n const { currentLocale } = injectLocale();\n\n const metaTagsBySelector = signal<Map<string, Map<symbol, MetaTagBinding>>>(new Map());\n let priorityCounter = 0;\n\n const getSelector = (config: MetaTagConfig) => {\n if (config.name) return `name=\"${config.name}\"`;\n if (config.property) return `property=\"${config.property}\"`;\n if (config.httpEquiv) return `http-equiv=\"${config.httpEquiv}\"`;\n if (config.itemprop) return `itemprop=\"${config.itemprop}\"`;\n return config.key ?? '';\n };\n\n const isMultiInstanceTag = (selector: string) => {\n return config.multiInstanceTags.has(selector);\n };\n\n const applyTag = (rawConfig: MetaTagConfig, locale: string): HTMLMetaElement => {\n const transformedConfig = { ...rawConfig };\n\n if (transformedConfig.content) {\n transformedConfig.content = config.transformer(transformedConfig.content, locale);\n }\n\n const { key, allowMultiple, ...metaConfig } = transformedConfig;\n\n return metaService.addTag(metaConfig) as HTMLMetaElement;\n };\n\n const applyActiveTag = (selector: string) => {\n const locale = currentLocale();\n const bindings = untracked(() => metaTagsBySelector().get(selector));\n\n if (!bindings || bindings.size === 0) {\n metaService.removeTag(selector);\n\n return;\n }\n\n const allowMultiple =\n isMultiInstanceTag(selector) || Array.from(bindings.values()).some((b) => b.config.allowMultiple);\n\n const existingTags = metaService.getTags(selector);\n existingTags.forEach((tag) => metaService.removeTagElement(tag));\n\n if (allowMultiple) {\n const sortedBindings = Array.from(bindings.values()).sort((a, b) => a.priority - b.priority);\n\n sortedBindings.forEach((binding) => {\n applyTag(binding.config, locale);\n });\n } else {\n const activeBinding = Array.from(bindings.values()).reduce((highest, current) =>\n current.priority > highest.priority ? current : highest,\n );\n\n applyTag(activeBinding.config, locale);\n }\n };\n\n const addTag = (id: symbol, rawConfig: MetaTagConfig) => {\n const selector = getSelector(rawConfig);\n const priority = priorityCounter++;\n\n metaTagsBySelector.update((tagsBySelector) => {\n const newTagsBySelector = new Map(tagsBySelector);\n const selectorBindings = newTagsBySelector.get(selector) || new Map();\n\n selectorBindings.set(id, { config: rawConfig, priority });\n newTagsBySelector.set(selector, new Map(selectorBindings));\n\n return newTagsBySelector;\n });\n\n applyActiveTag(selector);\n };\n\n const removeTag = (id: symbol, selector?: string) => {\n if (selector) {\n metaTagsBySelector.update((tagsBySelector) => {\n const newTagsBySelector = new Map(tagsBySelector);\n const selectorBindings = newTagsBySelector.get(selector);\n\n if (selectorBindings) {\n selectorBindings.delete(id);\n\n if (selectorBindings.size === 0) {\n newTagsBySelector.delete(selector);\n } else {\n newTagsBySelector.set(selector, new Map(selectorBindings));\n }\n }\n\n return newTagsBySelector;\n });\n\n applyActiveTag(selector);\n\n return;\n }\n\n metaTagsBySelector.update((tagsBySelector) => {\n const newTagsBySelector = new Map(tagsBySelector);\n let affectedSelector: string | undefined;\n\n for (const [sel, bindings] of newTagsBySelector) {\n if (bindings.has(id)) {\n bindings.delete(id);\n affectedSelector = sel;\n\n if (bindings.size === 0) {\n newTagsBySelector.delete(sel);\n } else {\n newTagsBySelector.set(sel, new Map(bindings));\n }\n break;\n }\n }\n\n if (affectedSelector) {\n queueMicrotask(() => applyActiveTag(affectedSelector));\n }\n\n return newTagsBySelector;\n });\n };\n\n effect(() => {\n currentLocale();\n const tagsBySelector = untracked(() => metaTagsBySelector());\n\n tagsBySelector.forEach((_, selector) => {\n applyActiveTag(selector);\n });\n });\n\n return { addTag, removeTag, getSelector };\n },\n { name: 'Meta Store' },\n);\n\nexport const provideMetaStore = /* @__PURE__ */ toProvideFn(META_STORE_DEF);\nexport const injectMetaStore = /* @__PURE__ */ toInjectFn(META_STORE_DEF);\n\nexport const applyMetaBinding = (binding: MaybeSignal<MetaTagConfig | null | undefined>) => {\n const metaStore = injectMetaStore();\n const tagId = Symbol('meta-tag');\n let currentSelector: string | undefined;\n\n applyHeadBinding(\n binding,\n (config) => {\n currentSelector = metaStore.getSelector(config);\n metaStore.addTag(tagId, config);\n },\n () => metaStore.removeTag(tagId, currentSelector),\n );\n};\n\nexport const applyDescriptionBinding = /* @__PURE__ */ createPropertyBinding(\n (content) => ({ name: 'description', content }),\n applyMetaBinding,\n);\n\nexport const applyKeywordsBinding = (binding: MaybeSignal<string[] | null | undefined>) => {\n applyMetaBinding(\n computed(() => {\n const keywords = untracked(() => (isSignal(binding) ? binding() : binding));\n return keywords && keywords.length > 0 ? { name: 'keywords', content: keywords.join(', ') } : null;\n }),\n );\n};\n\nexport const applyAuthorBinding = /* @__PURE__ */ createPropertyBinding(\n (content) => ({ name: 'author', content }),\n applyMetaBinding,\n);\n\nexport type RobotsConfig = {\n index?: boolean;\n follow?: boolean;\n noarchive?: boolean;\n nosnippet?: boolean;\n noimageindex?: boolean;\n maxSnippet?: number;\n maxImagePreview?: 'none' | 'standard' | 'large';\n maxVideoPreview?: number;\n};\n\nexport const applyRobotsBinding = (binding: MaybeSignal<RobotsConfig | null | undefined>) => {\n applyMetaBinding(\n computed(() => {\n const config = untracked(() => (isSignal(binding) ? binding() : binding));\n if (!config) return null;\n\n const directives: string[] = [];\n\n if (config.index === false) directives.push('noindex');\n if (config.follow === false) directives.push('nofollow');\n if (config.noarchive) directives.push('noarchive');\n if (config.nosnippet) directives.push('nosnippet');\n if (config.noimageindex) directives.push('noimageindex');\n if (config.maxSnippet !== undefined) directives.push(`max-snippet:${config.maxSnippet}`);\n if (config.maxImagePreview) directives.push(`max-image-preview:${config.maxImagePreview}`);\n if (config.maxVideoPreview !== undefined) directives.push(`max-video-preview:${config.maxVideoPreview}`);\n\n return directives.length > 0 ? { name: 'robots', content: directives.join(', ') } : null;\n }),\n );\n};\n\nexport const applyOgBinding = (property: string, binding: MaybeSignal<string | null | undefined>) => {\n createPropertyBinding((content) => ({ property: `og:${property}`, content }), applyMetaBinding)(binding);\n};\n\nconst createOgArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n property: `og:${property}`,\n content: value,\n allowMultiple: true,\n key: `og:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport type OpenGraphConfig = {\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n url?: MaybeSignal<string | null | undefined>;\n type?: MaybeSignal<string | null | undefined>;\n siteName?: MaybeSignal<string | null | undefined>;\n locale?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n images?: MaybeSignal<string[] | null | undefined>;\n imageUrl?: MaybeSignal<string | null | undefined>;\n imageSecureUrl?: MaybeSignal<string | null | undefined>;\n imageType?: MaybeSignal<string | null | undefined>;\n imageWidth?: MaybeSignal<string | number | null | undefined>;\n imageHeight?: MaybeSignal<string | number | null | undefined>;\n imageAlt?: MaybeSignal<string | null | undefined>;\n video?: MaybeSignal<string | null | undefined>;\n videos?: MaybeSignal<string[] | null | undefined>;\n videoUrl?: MaybeSignal<string | null | undefined>;\n videoSecureUrl?: MaybeSignal<string | null | undefined>;\n videoType?: MaybeSignal<string | null | undefined>;\n videoWidth?: MaybeSignal<string | number | null | undefined>;\n videoHeight?: MaybeSignal<string | number | null | undefined>;\n audio?: MaybeSignal<string | null | undefined>;\n audios?: MaybeSignal<string[] | null | undefined>;\n};\n\nexport const applyOpenGraphBindings = (config: OpenGraphConfig) => {\n const applyOg = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (binding) applyOgBinding(property, binding);\n };\n\n applyOg('title', config.title);\n applyOg('description', config.description);\n applyOg('url', config.url);\n applyOg('type', config.type);\n applyOg('site_name', config.siteName);\n applyOg('locale', config.locale);\n applyOg('image', config.image);\n applyOg('image:url', config.imageUrl);\n applyOg('image:secure_url', config.imageSecureUrl);\n applyOg('image:type', config.imageType);\n applyOg('image:alt', config.imageAlt);\n applyOg('video', config.video);\n applyOg('video:url', config.videoUrl);\n applyOg('video:secure_url', config.videoSecureUrl);\n applyOg('video:type', config.videoType);\n applyOg('audio', config.audio);\n\n if (config.imageWidth) applyOg('image:width', toStringBinding(config.imageWidth));\n if (config.imageHeight) applyOg('image:height', toStringBinding(config.imageHeight));\n if (config.videoWidth) applyOg('video:width', toStringBinding(config.videoWidth));\n if (config.videoHeight) applyOg('video:height', toStringBinding(config.videoHeight));\n\n if (config.images) createOgArrayBinding('image')(config.images);\n if (config.videos) createOgArrayBinding('video')(config.videos);\n if (config.audios) createOgArrayBinding('audio')(config.audios);\n};\n\nexport type TwitterCardConfig = {\n card?: MaybeSignal<'summary' | 'summary_large_image' | 'app' | 'player' | null | undefined>;\n site?: MaybeSignal<string | null | undefined>;\n siteId?: MaybeSignal<string | null | undefined>;\n creator?: MaybeSignal<string | null | undefined>;\n creatorId?: MaybeSignal<string | null | undefined>;\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n images?: MaybeSignal<string[] | null | undefined>;\n imageAlt?: MaybeSignal<string | null | undefined>;\n player?: MaybeSignal<string | null | undefined>;\n playerWidth?: MaybeSignal<string | number | null | undefined>;\n playerHeight?: MaybeSignal<string | number | null | undefined>;\n playerStream?: MaybeSignal<string | null | undefined>;\n};\n\nconst createTwitterArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n name: `twitter:${property}`,\n content: value,\n allowMultiple: true,\n key: `twitter:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport const applyTwitterCardBindings = (config: TwitterCardConfig) => {\n const applyTwitter = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (!binding) return;\n createPropertyBinding((content) => ({ name: `twitter:${property}`, content }), applyMetaBinding)(binding);\n };\n\n applyTwitter('card', config.card);\n applyTwitter('site', config.site);\n applyTwitter('site:id', config.siteId);\n applyTwitter('creator', config.creator);\n applyTwitter('creator:id', config.creatorId);\n applyTwitter('title', config.title);\n applyTwitter('description', config.description);\n applyTwitter('image', config.image);\n applyTwitter('image:alt', config.imageAlt);\n applyTwitter('player', config.player);\n applyTwitter('player:stream', config.playerStream);\n\n if (config.playerWidth) applyTwitter('player:width', toStringBinding(config.playerWidth));\n if (config.playerHeight) applyTwitter('player:height', toStringBinding(config.playerHeight));\n\n if (config.images) createTwitterArrayBinding('image')(config.images);\n};\n\nexport type ArticleConfig = {\n publishedTime?: MaybeSignal<string | null | undefined>;\n modifiedTime?: MaybeSignal<string | null | undefined>;\n expirationTime?: MaybeSignal<string | null | undefined>;\n author?: MaybeSignal<string | null | undefined>;\n authors?: MaybeSignal<string[] | null | undefined>;\n section?: MaybeSignal<string | null | undefined>;\n tag?: MaybeSignal<string | null | undefined>;\n tags?: MaybeSignal<string[] | null | undefined>;\n};\n\nconst createArticleArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n property: `article:${property}`,\n content: value,\n allowMultiple: true,\n key: `article:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport const applyArticleBindings = (config: ArticleConfig) => {\n const applyArticle = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (!binding) return;\n createPropertyBinding((content) => ({ property: `article:${property}`, content }), applyMetaBinding)(binding);\n };\n\n applyArticle('published_time', config.publishedTime);\n applyArticle('modified_time', config.modifiedTime);\n applyArticle('expiration_time', config.expirationTime);\n applyArticle('author', config.author);\n applyArticle('section', config.section);\n applyArticle('tag', config.tag);\n\n if (config.authors) createArticleArrayBinding('author')(config.authors);\n if (config.tags) createArticleArrayBinding('tag')(config.tags);\n};\n\nexport type SocialMediaConfig = {\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n url?: MaybeSignal<string | null | undefined>;\n openGraph?: Partial<OpenGraphConfig>;\n twitter?: Partial<TwitterCardConfig>;\n article?: Partial<ArticleConfig>;\n};\n\nexport const applySocialMediaBindings = (config: SocialMediaConfig) => {\n if (config.title) applyHeadTitleBinding(config.title);\n if (config.description) applyDescriptionBinding(config.description);\n\n if (config.openGraph || config.title || config.description || config.image || config.url) {\n applyOpenGraphBindings({\n title: config.openGraph?.title ?? config.title,\n description: config.openGraph?.description ?? config.description,\n image: config.openGraph?.image ?? config.image,\n url: config.openGraph?.url ?? config.url,\n ...config.openGraph,\n });\n }\n\n if (config.twitter || config.title || config.description || config.image) {\n applyTwitterCardBindings({\n title: config.twitter?.title ?? config.title,\n description: config.twitter?.description ?? config.description,\n image: config.twitter?.image ?? config.image,\n ...config.twitter,\n });\n }\n\n if (config.article) applyArticleBindings(config.article);\n};\n","import { DOCUMENT } from '@angular/common';\nimport { inject, signal } from '@angular/core';\nimport { injectRenderer } from '../providers';\nimport { MaybeSignal } from '../signals';\nimport { defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyHeadBinding } from './head-binding';\nimport * as JsonLD from './json-ld';\n\nexport type StructuredDataConfig = {\n /**\n * Where to place the JSON-LD script tag.\n * - 'head': Traditional placement, loaded before body content\n * - 'body': Google recommended, better for performance\n *\n * Note: You can also use the `StructuredDataComponent` to place structured data\n * directly within your component templates.\n *\n * @default 'body'\n */\n placement: 'head' | 'body';\n};\n\nconst STRUCTURED_DATA_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<StructuredDataConfig>(\n {\n placement: 'body',\n },\n { name: 'Structured Data Config' },\n);\n\nexport const provideStructuredDataConfig = /* @__PURE__ */ toProvideFn(STRUCTURED_DATA_CONFIG_DEF);\nexport const injectStructuredDataConfig = /* @__PURE__ */ toInjectFn(STRUCTURED_DATA_CONFIG_DEF);\n\nconst STRUCTURED_DATA_STORE_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const config = injectStructuredDataConfig();\n const scripts = signal<Map<symbol, HTMLScriptElement>>(new Map());\n\n const getTargetElement = (): HTMLElement => {\n return config.placement === 'head' ? document.head : document.body;\n };\n\n const addStructuredData = (id: symbol, data: JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph) => {\n scripts.update((scriptMap) => {\n const newScripts = new Map(scriptMap);\n\n const oldScript = newScripts.get(id);\n if (oldScript && oldScript.parentNode) {\n renderer.removeChild(oldScript.parentNode, oldScript);\n }\n\n const script = renderer.createElement('script');\n\n renderer.setAttributes(script, { type: 'application/ld+json' });\n // The JSON is the script's *content*, not an attribute. Written as text rather than markup so a\n // `</script>` inside a string can't close the tag early - the escaping problem\n // `StructuredDataComponent` has to solve by hand because it goes through `innerHTML`.\n renderer.setTextContent(script, JSON.stringify(data));\n\n const target = getTargetElement();\n renderer.appendChild(target, script);\n\n newScripts.set(id, script);\n return newScripts;\n });\n };\n\n const removeStructuredData = (id: symbol) => {\n scripts.update((scriptMap) => {\n const newScripts = new Map(scriptMap);\n const script = newScripts.get(id);\n\n if (script && script.parentNode) {\n renderer.removeChild(script.parentNode, script);\n\n newScripts.delete(id);\n }\n\n return newScripts;\n });\n };\n\n return { addStructuredData, removeStructuredData };\n },\n { name: 'Structured Data Store' },\n);\n\nexport const provideStructuredDataStore = /* @__PURE__ */ toProvideFn(STRUCTURED_DATA_STORE_DEF);\nexport const injectStructuredDataStore = /* @__PURE__ */ toInjectFn(STRUCTURED_DATA_STORE_DEF);\n\nexport const applyStructuredDataBinding = (\n binding: MaybeSignal<JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined>,\n) => {\n const store = injectStructuredDataStore();\n const scriptId = Symbol('structured-data');\n\n applyHeadBinding(\n binding,\n (data) => store.addStructuredData(scriptId, data),\n () => store.removeStructuredData(scriptId),\n );\n};\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport * as JsonLD from './json-ld';\n\n@Component({\n selector: 'et-structured-data',\n template: '',\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: none',\n '[innerHTML]': 'jsonLD()',\n },\n})\nexport class StructuredDataComponent {\n private sanitizer = inject(DomSanitizer);\n\n data = input<JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined>(null);\n\n jsonLD = computed(() => {\n const data = this.data();\n\n if (!data) {\n return null;\n }\n\n const json = data ? JSON.stringify(data, null, 2).replace(/<\\/script>/g, '<\\\\/script>') : '';\n const html = `<script type=\"application/ld+json\">${json}</script>`;\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'et-color-interactive-styles',\n template: '',\n styleUrl: './color-interactive-styles.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ColorInteractiveStylesComponent {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { ColorInteractiveStylesComponent } from './color-interactive-styles.component';\n\n/**\n * Cascades hover/active-driven color DOWN to descendants explicitly marked with\n * `ColorInteractiveDirective` - this element does not color itself. Use it when a wrapper should\n * expand a nested control's hit/visual area (e.g. clicking a checkbox's label should light up the\n * checkbox itself), never to give a wrapper its own interactive coloring - that's\n * `ColorInteractiveDirective`.\n *\n * Does nothing unless at least one descendant carries `ColorInteractiveDirective` - check for\n * that before adding this. It was mistakenly added to a component with no such descendant once\n * already, where it did nothing but was confusing to read.\n */\n@Directive({\n selector: '[etColorInteractiveContainer]',\n host: {\n class: 'et-color-interactive-container',\n },\n})\nexport class ColorInteractiveContainerDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(ColorInteractiveStylesComponent);\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks a descendant as NOT counting toward an ancestor's `ColorInteractiveDirective`\n * `:hover`/`:active` reaction (via the `:has()` guard in color-interactive-styles.component.css).\n * Use it for content that's incidentally inside an interactive ancestor but isn't part of what\n * makes that ancestor interactive - e.g. a hint/error block sitting inside a form field's frame.\n *\n * This only suppresses the ancestor's OWN reaction to hovering/pressing the excluded element - it\n * has no effect on custom-property inheritance into descendants past the excluded element. If\n * what you actually need is \"stop my own cosmetic styling from reacting to a parent's unrelated\n * interaction,\" this is the wrong tool; that's the class of bug `ColorInteractiveHasFocusDirective`\n * used to have (see its own comment).\n */\n@Directive({\n selector: '[etColorInteractiveExclude]',\n host: {\n class: 'et-color-interactive-exclude',\n },\n})\nexport class ColorInteractiveExcludeDirective {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { ColorInteractiveStylesComponent } from './color-interactive-styles.component';\n\n/**\n * Tints `--et-theme-color-primary-*` etc. only when a descendant genuinely has `:focus-visible`\n * (`:has(:focus-visible)`) - never on mouse `:hover`/`:active`. Use this for a wrapper (like a\n * form field's frame) that should show the theme color while its control is focused, but must\n * NOT react to incidental mouse interaction with unrelated nested widgets (a toolbar button, a\n * rendered link) that happen to live inside the same wrapper.\n *\n * The color it resolves to is the theme's BASE accent, not the `-focus` variant: the `-focus`\n * shade is the treatment for an element that is itself focused, whereas a container only mirroring\n * a child's focus should read as the plain accent color.\n *\n * Deliberately does NOT also carry `ColorInteractiveDirective`'s `et-color-interactive` class:\n * that class's plain `:hover`/`:active` rules locally override the same (inheriting)\n * `--et-theme-color-primary-rgb`, so anything bubbling up from ANYWHERE in the subtree would\n * leak the transient hover/press color into every descendant reading it for unrelated cosmetics -\n * exactly the bug this directive's only consumer (form-field) shipped once, before the two\n * behaviors were split apart. If you need the plain hover/active reaction too, add\n * `ColorInteractiveDirective` explicitly and make sure you actually want both.\n */\n@Directive({\n selector: '[etColorInteractiveHasFocus]',\n host: {\n class: 'et-color-interactive--has-focus',\n },\n})\nexport class ColorInteractiveHasFocusDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(ColorInteractiveStylesComponent);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { ColorInteractiveStylesComponent } from './color-interactive-styles.component';\n\n/**\n * Makes an element react to ITS OWN `:hover`/`:active`/`:focus-visible`/`[disabled]` by tinting\n * `--et-theme-color-primary-*`/`-on-primary-*`/`-ink-*` with the current color theme. Use this on\n * a single, self-contained interactive element - a button, a checkbox, a segmented button.\n *\n * Do NOT apply this to a wrapper that also contains OTHER, independently-interactive elements\n * (e.g. a toolbar with its own buttons, or a form-field's control slot). These are ordinary\n * inheriting CSS custom properties, so a descendant reading them for its own cosmetics (a caret\n * color, a link color) gets swept along whenever ANYTHING inside the wrapper is hovered or\n * clicked - not just when the wrapper itself is the thing being interacted with. That exact bug\n * shipped once already; see ColorInteractiveContainerDirective/ColorInteractiveHasFocusDirective\n * for the shapes that avoid it.\n */\n@Directive({\n selector: '[etColorInteractive]',\n host: {\n class: 'et-color-interactive',\n },\n})\nexport class ColorInteractiveDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(ColorInteractiveStylesComponent);\n }\n}\n","import { defineStaticProvider, toInjectFn, toProvideFn } from '../utils';\n\nexport const SURFACE_TYPE = {\n LIGHT: 'light',\n DARK: 'dark',\n} as const;\n\nexport type SurfaceType = (typeof SURFACE_TYPE)[keyof typeof SURFACE_TYPE];\n\nexport type SurfaceThemeColor = `${number} ${number} ${number}`;\n\nexport type SurfaceInteractionColorMap = {\n default: SurfaceThemeColor;\n hover: SurfaceThemeColor;\n focus: SurfaceThemeColor;\n active: SurfaceThemeColor;\n disabled: SurfaceThemeColor;\n};\n\nexport type SurfaceOnInteractionColorMap = {\n default: SurfaceThemeColor;\n hover?: SurfaceThemeColor;\n focus?: SurfaceThemeColor;\n active?: SurfaceThemeColor;\n disabled?: SurfaceThemeColor;\n};\n\n/**\n * The surface's neutral color, shaped like a color theme's swatch. It serves both roles: `color`\n * is the tint source `[etSurfaceInteractive]` mixes for hover/active feedback, and the whole\n * swatch is the palette a component picks up from `[etProvideColor]=\"'surface'\"`.\n *\n * `onColor` (text on a filled neutral) defaults to the surface background, `inkColor` (text and\n * borders on a tinted or transparent neutral) to the surface color.\n */\nexport type SurfaceInteractionColor = {\n color: SurfaceInteractionColorMap;\n onColor?: SurfaceOnInteractionColorMap;\n inkColor?: SurfaceOnInteractionColorMap;\n};\n\nexport type SurfaceTheme = {\n name: string;\n type: SurfaceType;\n elevation: number;\n isDefault?: boolean;\n interactionColor?: SurfaceInteractionColor;\n background: SurfaceThemeColor;\n color: SurfaceThemeColor;\n colorMuted: SurfaceThemeColor;\n colorSubtle: SurfaceThemeColor;\n border: SurfaceThemeColor;\n};\n\n/**\n * Augmentable registry for the literal set of surface theme names an app defines. Left\n * empty by default, which keeps surface-theme-name-accepting APIs (like `etProvideSurface`)\n * typed as plain `string`.\n *\n * Apps that want those APIs checked and autocompleted against their own surface theme\n * names should augment this interface once, near where their surface themes are defined:\n *\n * ```ts\n * declare module '@ethlete/core' {\n * interface EthleteSurfaceThemeNameRegistry {\n * name: 'card' | 'sheet' | 'popover';\n * }\n * }\n * ```\n */\n// This must stay an `interface`: consumers register their theme names by augmenting it from a\n// `declare module` block, which only works for interfaces.\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface, @typescript-eslint/consistent-type-definitions\nexport interface EthleteSurfaceThemeNameRegistry {\n // Intentionally empty - see doc comment above.\n}\n\nexport type RegisteredSurfaceThemeName = EthleteSurfaceThemeNameRegistry extends { name: infer N extends string }\n ? N\n : string;\n\nexport const createCssSurfaceName = (name: string) => name.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n\nexport const resolveSurfaceByElevation = (themes: SurfaceTheme[], type: SurfaceType, elevation: number) =>\n themes.find((t) => t.type === type && t.elevation === elevation) ?? null;\n\nconst SURFACE_THEMES_DEF = /* @__PURE__ */ defineStaticProvider<SurfaceTheme[]>(undefined, {\n name: 'Surface Themes',\n});\n\nexport const ɵProvideSurfaceThemes = /* @__PURE__ */ toProvideFn(SURFACE_THEMES_DEF);\nexport const injectSurfaceThemes = /* @__PURE__ */ toInjectFn(SURFACE_THEMES_DEF);\n\nconst SURFACE_THEMES_PREFIX_DEF = /* @__PURE__ */ defineStaticProvider('et', {\n name: 'Surface Themes Prefix',\n});\n\nexport const ɵProvideSurfaceThemesPrefix = /* @__PURE__ */ toProvideFn(SURFACE_THEMES_PREFIX_DEF);\nexport const injectSurfaceThemesPrefix = /* @__PURE__ */ toInjectFn(SURFACE_THEMES_PREFIX_DEF);\n\nexport const provideSurfaceThemesWithTailwind4 = (themes: SurfaceTheme[], prefix = 'et') => [\n ɵProvideSurfaceThemes(themes),\n ɵProvideSurfaceThemesPrefix(prefix),\n];\n","import {\n computed,\n Directive,\n effect,\n EffectRef,\n inject,\n InjectionToken,\n Injector,\n input,\n InputSignal,\n isDevMode,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n createCssSurfaceName,\n injectSurfaceThemes,\n injectSurfaceThemesPrefix,\n RegisteredSurfaceThemeName,\n SurfaceTheme,\n} from './surface-theme.util';\n\nexport const SURFACE_PROVIDER = new InjectionToken<ProvideSurfaceDirective>('SurfaceProvider');\n\nconst FORCED_SURFACE_UNSET = /* @__PURE__ */ Symbol('FORCED_SURFACE_UNSET');\n\ntype ForcedSurfaceState = RegisteredSurfaceThemeName | null | typeof FORCED_SURFACE_UNSET;\n\n@Directive({\n selector: '[etProvideSurface]',\n providers: [{ provide: SURFACE_PROVIDER, useExisting: ProvideSurfaceDirective }],\n host: {\n '[class]': 'surfaceClass()',\n },\n})\nexport class ProvideSurfaceDirective {\n private themes = injectSurfaceThemes({ optional: true });\n private prefix = injectSurfaceThemesPrefix({ optional: true });\n private injector = inject(Injector);\n\n private currentProviderSync: EffectRef | null = null;\n private forcedSurface = signal<ForcedSurfaceState>(FORCED_SURFACE_UNSET);\n\n surface: InputSignal<RegisteredSurfaceThemeName | null | undefined> = input<RegisteredSurfaceThemeName | null>(\n undefined,\n { alias: 'etProvideSurface' },\n );\n\n effectiveSurface = computed(() => {\n const forcedSurface = this.forcedSurface();\n\n if (forcedSurface !== FORCED_SURFACE_UNSET) {\n return forcedSurface;\n }\n\n return this.surface();\n });\n\n resolvedTheme = computed<SurfaceTheme | null>(() => {\n const value = this.effectiveSurface();\n\n if (!this.themes || !value) return null;\n\n const theme = this.themes.find((t) => t.name === value) ?? null;\n\n if (isDevMode() && !theme && value !== null) {\n console.error(\n `Surface theme ${value} does not exist. Please make sure to add it to provideSurfaceThemesWithTailwind4()`,\n );\n }\n\n return theme;\n });\n\n elevation = computed(() => this.resolvedTheme()?.elevation ?? 0);\n\n surfaceType = computed(() => this.resolvedTheme()?.type ?? null);\n\n surfaceName = computed(() => {\n const value = this.effectiveSurface();\n\n if (!this.themes || !value) return;\n\n return createCssSurfaceName(value);\n });\n\n protected surfaceClass = computed(() => {\n const prefix = this.prefix || 'et';\n\n if (this.surfaceName()) {\n return `${prefix}-surface--${this.surfaceName()}`;\n }\n\n return `${prefix}-surface--inherited`;\n });\n\n syncWithProvider(provider: ProvideSurfaceDirective) {\n this.currentProviderSync?.destroy();\n\n runInInjectionContext(this.injector, () => {\n this.currentProviderSync = effect(() => {\n const provideSurface = provider.effectiveSurface();\n\n untracked(() => {\n if (provideSurface === undefined) {\n this.clearForcedSurface();\n\n return;\n }\n\n this.forceSurface(provideSurface);\n });\n });\n });\n }\n\n stopSyncWithProvider() {\n const hadProviderSync = !!this.currentProviderSync;\n\n this.currentProviderSync?.destroy();\n this.currentProviderSync = null;\n\n if (hadProviderSync) {\n this.clearForcedSurface();\n }\n }\n\n /** @internal */\n forceSurface(surface: RegisteredSurfaceThemeName | null) {\n this.forcedSurface.set(surface);\n }\n\n /** @internal */\n clearForcedSurface() {\n if (this.forcedSurface() === FORCED_SURFACE_UNSET) {\n return;\n }\n\n this.forcedSurface.set(FORCED_SURFACE_UNSET);\n }\n}\n","import { computed, Signal, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { SurfaceType } from './surface-theme.util';\n\nexport type SurfaceContextEntry = {\n id: string;\n type: SurfaceType;\n elevation: number;\n element: HTMLElement;\n};\n\nexport type SurfaceContextSurface = {\n type: SurfaceType;\n elevation: number;\n};\n\nexport type SurfaceContextTracker = {\n topType: Signal<SurfaceType | null>;\n topElevation: Signal<number>;\n register: (type: SurfaceType, elevation: number, element: HTMLElement) => () => void;\n /**\n * The surface of the innermost registered overlay whose pane actually contains `host` in the DOM,\n * or `null` when `host` sits outside every open overlay. Reactive: reads the entries signal, so\n * calling it inside a computed re-runs when overlays open/close.\n */\n surfaceForElement: (host: HTMLElement) => SurfaceContextSurface | null;\n};\n\nlet uniqueId = 0;\n\nconst SURFACE_CONTEXT_TRACKER_DEF = /* @__PURE__ */ defineRootProvider(\n (): SurfaceContextTracker => {\n const entries = signal<SurfaceContextEntry[]>([]);\n\n const topEntry = computed(() => {\n const stack = entries();\n return stack.length > 0 ? (stack[stack.length - 1] ?? null) : null;\n });\n\n const topType = computed(() => topEntry()?.type ?? null);\n const topElevation = computed(() => topEntry()?.elevation ?? 0);\n\n const register = (type: SurfaceType, elevation: number, element: HTMLElement) => {\n const id = `surface-ctx-${uniqueId++}`;\n const entry: SurfaceContextEntry = { id, type, elevation, element };\n entries.update((e) => [...e, entry]);\n\n return () => {\n entries.update((e) => e.filter((item) => item.id !== id));\n };\n };\n\n const surfaceForElement = (host: HTMLElement): SurfaceContextSurface | null => {\n const stack = entries();\n\n // Walk newest-first so the innermost overlay containing `host` wins.\n for (let i = stack.length - 1; i >= 0; i--) {\n const entry = stack[i];\n\n if (entry && entry.element.contains(host)) {\n return { type: entry.type, elevation: entry.elevation };\n }\n }\n\n return null;\n };\n\n return { topType, topElevation, register, surfaceForElement };\n },\n { name: 'SurfaceContextTracker' },\n);\n\nexport const provideSurfaceContextTracker = /* @__PURE__ */ toProvideFn(SURFACE_CONTEXT_TRACKER_DEF);\nexport const injectSurfaceContextTracker = /* @__PURE__ */ toInjectFn(SURFACE_CONTEXT_TRACKER_DEF);\n","import {\n afterEveryRender,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { setInputSignal } from '../utils';\nimport { ProvideSurfaceDirective, SURFACE_PROVIDER } from './provide-surface.directive';\nimport { injectSurfaceContextTracker } from './surface-context-tracker';\nimport { injectSurfaceThemes, resolveSurfaceByElevation, SurfaceType } from './surface-theme.util';\n\n@Directive({\n selector: '[etAutoSurface]',\n hostDirectives: [ProvideSurfaceDirective],\n})\nexport class AutoSurfaceDirective {\n private ownSurfaceProvider = inject(ProvideSurfaceDirective);\n private contextSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n private surfaceThemes = injectSurfaceThemes({ optional: true });\n private surfaceContextTracker = injectSurfaceContextTracker();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Explicit surface provider to resolve the surface relative to. Falls back to the\n * surface provider from the surrounding (trigger) context when not set.\n */\n surfaceProvider = input<ProvideSurfaceDirective | null>(null);\n\n // An overlay *panel* that IS its overlay's own painted surface opts in (see\n // matchOverlaySurface) so it adopts the overlay's registered elevation exactly,\n // rather than layering one level above a parent surface.\n private isOverlaySurface = signal(false);\n\n // Bumped by the afterEveryRender watcher in the constructor whenever this element's overlay\n // containment changes. surfaceForElement() below does a non-reactive element.contains() read,\n // so the computed must be re-triggered when this element is (re)grafted into an overlay pane -\n // otherwise a value cached from before the graft (one elevation too low) sticks forever.\n private domSettleTick = signal(0);\n\n resolvedSurface = computed(() => {\n const themes = this.surfaceThemes;\n\n if (!themes) {\n return null;\n }\n\n // Establish a dependency on the DOM-settle tick so the non-reactive containment read below\n // is re-evaluated after the element is grafted into its final overlay pane.\n this.domSettleTick();\n\n const contextProvider = this.surfaceProvider() ?? this.contextSurfaceProvider ?? null;\n const contextElevation = contextProvider?.elevation() ?? null;\n const contextType = contextProvider?.surfaceType() ?? null;\n\n // An overlay's projected/portaled content keeps the injector of where it was\n // *declared* (the trigger location), not the pane it renders into - so the\n // injector-derived parent surface is one elevation too low. The surface-context\n // tracker records each open overlay's surface *and* its pane element, so we consult\n // only the overlay whose pane actually contains this element in the DOM (portaling\n // moves the DOM into the pane even though the injector stays at the trigger). An\n // auto-surface on the base page therefore stays put when an overlay opens elsewhere.\n const overlaySurface = this.surfaceContextTracker.surfaceForElement(this.elementRef.nativeElement);\n const overlayElevation = overlaySurface?.elevation ?? null;\n const overlayType = overlaySurface?.type ?? null;\n\n // A panel that IS its overlay's own surface (see matchOverlaySurface) must paint exactly the\n // overlay's elevation: the overlay container already resolved it (one above the trigger) and\n // registered it in the tracker. It must NOT re-derive from its declaration injector - that\n // points back at the trigger location and disagrees with the pane whenever the trigger itself\n // sits on a surface, which would double-elevate the panel relative to its own pane.\n if (this.isOverlaySurface()) {\n if (overlayElevation !== null) {\n return resolveSurfaceByElevation(themes, overlayType ?? contextType ?? 'dark', overlayElevation)?.name ?? null;\n }\n\n // Rendered outside any tracked overlay: fall back to the injector context unchanged.\n if (contextElevation !== null) {\n return resolveSurfaceByElevation(themes, contextType ?? 'dark', contextElevation)?.name ?? null;\n }\n\n return null;\n }\n\n // A regular auto-surface sits one elevation *above* the deeper of its injector context and the\n // overlay pane it renders into (content painted onto the surface it lives on).\n let parentElevation: number;\n let parentType: SurfaceType;\n\n if (overlayElevation !== null && (contextElevation === null || overlayElevation > contextElevation)) {\n parentElevation = overlayElevation;\n parentType = overlayType ?? contextType ?? 'dark';\n } else if (contextElevation !== null) {\n parentElevation = contextElevation;\n parentType = contextType ?? overlayType ?? 'dark';\n } else {\n return null;\n }\n\n return resolveSurfaceByElevation(themes, parentType, parentElevation + 1)?.name ?? null;\n });\n\n /**\n * Mark this auto-surface as its overlay's *own painted surface*. An overlay *panel*\n * (menu, select/date/cascader panel, tooltip, toggletip, rich-text-editor popups) is\n * the overlay's surface, so it must paint the overlay's registered elevation exactly -\n * not stack a level above a parent surface. The elevation is read from the surface-context\n * tracker (the pane it renders into), which is authoritative across the portal boundary;\n * the panel's own declaration injector points back at the trigger location and cannot be\n * trusted.\n */\n matchOverlaySurface() {\n this.isOverlaySurface.set(true);\n }\n\n constructor() {\n // Projected/portaled auto-surface content (e.g. a select option's avatar) can have its\n // resolvedSurface computed run *before* it is grafted into the overlay pane it visually lives\n // in - or while it is briefly mounted in an off-pane measuring container, as windowed lists do.\n // surfaceForElement()'s element.contains() check then returns the wrong (or no) overlay, so it\n // resolves off the declaration injector (the trigger location) one elevation too low. That check\n // is a plain DOM read, not a signal, so nothing re-runs the computed once the element reaches its\n // final pane. Watch the tracker result across renders and re-trigger the computed whenever the\n // element's overlay containment changes, settling (and unsubscribing) once it stops moving.\n let lastElevation: number | null =\n this.surfaceContextTracker.surfaceForElement(this.elementRef.nativeElement)?.elevation ?? null;\n let stableRenders = 0;\n const settleWatcher = afterEveryRender(() => {\n const el = this.elementRef.nativeElement;\n const elevation = this.surfaceContextTracker.surfaceForElement(el)?.elevation ?? null;\n\n if (elevation !== lastElevation) {\n lastElevation = elevation;\n stableRenders = 0;\n this.domSettleTick.update((v) => v + 1);\n } else if (el.isConnected && ++stableRenders >= 2) {\n // containment has held for a couple of renders and the element is in the DOM - done moving\n settleWatcher.destroy();\n }\n });\n\n effect(() => {\n const surface = this.resolvedSurface();\n\n untracked(() => {\n setInputSignal(this.ownSurfaceProvider.surface as any, surface);\n });\n });\n }\n}\n","import { defineStaticProvider, toInjectFn, toProvideFn, toToken } from '../utils';\nimport { RegisteredColorThemeName } from './color-theme.util';\n\n/** One choice in a {@link provideColorPalette} palette. */\nexport type ColorPaletteEntry = {\n /** The color theme this choice selects - a name the app registered with `provideColorThemesWithTailwind4`. */\n token: RegisteredColorThemeName;\n /** What a user reads next to the swatch. Provide it already translated. */\n label: string;\n};\n\nconst COLOR_PALETTE_DEF = /* @__PURE__ */ defineStaticProvider<ColorPaletteEntry[]>(undefined, {\n name: 'Color Palette',\n});\n\n/**\n * The color themes a subtree may offer a user as pickable choices, in the order they should appear.\n * A curated slice of what `provideColorThemesWithTailwind4` registered: an app registers every theme\n * it renders with, including ones nobody should pick by hand (`error`, `warning`), and adds the\n * user-facing label a swatch needs.\n *\n * Components that let a user choose a color read it optionally and fall back to accepting a raw\n * theme name when it is absent - the scheduler's `colorToken` field is the reference consumer.\n *\n * @example\n * provideColorPalette([\n * { token: 'brand', label: 'Team green' },\n * { token: 'ocean', label: 'Training blue' },\n * ]);\n */\nexport const provideColorPalette = /* @__PURE__ */ toProvideFn(COLOR_PALETTE_DEF);\n\n/** The palette from {@link provideColorPalette}. Pass `{ optional: true }` - most apps provide none. */\nexport const injectColorPalette = /* @__PURE__ */ toInjectFn(COLOR_PALETTE_DEF);\n\nexport const COLOR_PALETTE = /* @__PURE__ */ toToken(COLOR_PALETTE_DEF);\n","import { isDevMode } from '@angular/core';\nimport { defineStaticProvider, toInjectFn, toProvideFn } from '../utils';\n\nexport type ThemeRGBColor = `${number} ${number} ${number}`;\nexport type ThemeHSLColor = `${number} ${number}% ${number}%`;\n\nexport type ThemeColor = ThemeRGBColor | ThemeHSLColor;\n\nexport type ThemeColorMap = {\n default: ThemeColor;\n hover: ThemeColor;\n focus?: ThemeColor;\n active: ThemeColor;\n disabled: ThemeColor;\n};\n\nexport type OnThemeColorMap = {\n default: ThemeColor;\n hover?: ThemeColor;\n focus?: ThemeColor;\n active?: ThemeColor;\n disabled?: ThemeColor;\n};\n\nexport type ThemeInkColorMap = {\n default: ThemeColor;\n hover?: ThemeColor;\n focus?: ThemeColor;\n active?: ThemeColor;\n disabled?: ThemeColor;\n};\n\nexport type ThemeSwatch = {\n color: ThemeColorMap;\n onColor: OnThemeColorMap;\n inkColor?: ThemeInkColorMap;\n};\n\nexport type ColorThemeType = 'success' | 'warning' | 'error';\n\nexport type ColorTheme = {\n name: string;\n type?: ColorThemeType;\n isDefault?: boolean;\n primary: ThemeSwatch;\n secondary?: ThemeSwatch;\n tertiary?: ThemeSwatch;\n};\n\n/**\n * Augmentable registry for the literal set of color theme names an app defines. Left\n * empty by default, which keeps theme-name-accepting APIs (like `etProvideColor`) typed\n * as plain `string`.\n *\n * Apps that want those APIs checked and autocompleted against their own theme names\n * should augment this interface once, near where their themes are defined:\n *\n * ```ts\n * declare module '@ethlete/core' {\n * interface EthleteColorThemeNameRegistry {\n * name: 'pitch-green' | 'red' | 'light-grey';\n * }\n * }\n * ```\n */\n// This must stay an `interface`: consumers register their theme names by augmenting it from a\n// `declare module` block, which only works for interfaces.\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface, @typescript-eslint/consistent-type-definitions\nexport interface EthleteColorThemeNameRegistry {\n // Intentionally empty - see doc comment above.\n}\n\nexport type RegisteredColorThemeName = EthleteColorThemeNameRegistry extends { name: infer N extends string }\n ? N\n : string;\n\n/**\n * Reserved color name. Resolves the color tokens from the ambient surface's neutral swatch\n * (`SurfaceTheme['interactionColor']`) instead of a registered accent, so a secondary action can\n * read as chrome without the app registering a neutral color theme. Apps must not register a color\n * theme under this name.\n */\nexport const SURFACE_COLOR = 'surface';\n\nexport type SurfaceColor = typeof SURFACE_COLOR;\n\n/** Everything `[etProvideColor]` accepts: a registered theme name, a theme object, `surface`, or nothing. */\nexport type ColorThemeInput = RegisteredColorThemeName | SurfaceColor | ColorTheme | null;\n\nexport const createCssColorThemeName = (name: string) => name.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n\nconst COLOR_THEMES_DEF = /* @__PURE__ */ defineStaticProvider<ColorTheme[]>(undefined, {\n name: 'Color Themes',\n});\n\nexport const ɵProvideColorThemes = /* @__PURE__ */ toProvideFn(COLOR_THEMES_DEF);\nexport const injectColorThemes = /* @__PURE__ */ toInjectFn(COLOR_THEMES_DEF);\nconst COLOR_THEMES_PREFIX_DEF = /* @__PURE__ */ defineStaticProvider('et', {\n name: 'Themes Prefix',\n});\n\nexport const ɵProvideColorThemesPrefix = /* @__PURE__ */ toProvideFn(COLOR_THEMES_PREFIX_DEF);\nexport const injectColorThemesPrefix = /* @__PURE__ */ toInjectFn(COLOR_THEMES_PREFIX_DEF);\n\nexport const provideColorThemesWithTailwind4 = (themes: ColorTheme[], prefix = 'et') => {\n if (isDevMode() && themes.some((theme) => theme.name === SURFACE_COLOR)) {\n console.error(\n `[provideColorThemesWithTailwind4] \"${SURFACE_COLOR}\" is a reserved color name that resolves to the ambient surface's neutral swatch. Rename your theme.`,\n );\n }\n\n return [ɵProvideColorThemes(themes), ɵProvideColorThemesPrefix(prefix)];\n};\n\nconst injectColorThemeByType = (type: ColorThemeType) => {\n const themes = injectColorThemes();\n\n if (!themes) {\n throw new Error(\n `[injectColorThemeByType] No color themes provided. Call provideColorThemesWithTailwind4() in your app config.`,\n );\n }\n\n const theme = themes.find((t) => t.type === type);\n\n if (!theme) {\n throw new Error(\n `[injectColorThemeByType] No color theme with type \"${type}\" found. Add a theme with type: \"${type}\" to provideColorThemesWithTailwind4().`,\n );\n }\n\n if (isDevMode()) {\n const duplicates = themes.filter((t) => t.type === type);\n\n if (duplicates.length > 1) {\n console.error(\n `[injectColorThemeByType] Multiple themes with type \"${type}\" found: ${duplicates.map((t) => t.name).join(', ')}. Only the first one will be used.`,\n );\n }\n }\n\n return theme;\n};\n\nexport const injectErrorTheme = () => injectColorThemeByType('error');\nexport const injectWarningTheme = () => injectColorThemeByType('warning');\nexport const injectSuccessTheme = () => injectColorThemeByType('success');\n\nexport const injectDefaultColorTheme = () => {\n const themes = injectColorThemes();\n\n if (!themes) {\n throw new Error(\n `[injectDefaultColorTheme] No color themes provided. Call provideColorThemesWithTailwind4() in your app config.`,\n );\n }\n\n const theme = themes.find((t) => t.isDefault);\n\n if (!theme) {\n throw new Error(\n `[injectDefaultColorTheme] No color theme with isDefault: true found. Mark one theme as the default in provideColorThemesWithTailwind4().`,\n );\n }\n\n if (isDevMode()) {\n const duplicates = themes.filter((t) => t.isDefault);\n\n if (duplicates.length > 1) {\n console.error(\n `[injectDefaultColorTheme] Multiple themes with isDefault: true found: ${duplicates.map((t) => t.name).join(', ')}. Only the first one will be used.`,\n );\n }\n }\n\n return theme;\n};\n","import { isDevMode } from '@angular/core';\nimport {\n ColorTheme,\n createCssColorThemeName,\n ThemeSwatch,\n ɵProvideColorThemes,\n ɵProvideColorThemesPrefix,\n} from './color-theme.util';\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createSwatchCss = (swatch: string, isAlt: boolean, data: ThemeSwatch) => {\n const varSuffix = isAlt ? 'alt-' + swatch : swatch;\n const varOnSuffix = isAlt ? 'alt-' : '';\n const inkDefault = data.inkColor?.default || data.color.default;\n const inkHover = data.inkColor?.hover || inkDefault;\n const inkFocus = data.inkColor?.focus || data.inkColor?.hover || inkDefault;\n const inkActive = data.inkColor?.active || inkDefault;\n const inkDisabled = data.inkColor?.disabled || inkDefault;\n\n return `\n --et-color-${varSuffix}: ${data.color.default};\n --et-color-${varSuffix}-hover: ${data.color.hover};\n --et-color-${varSuffix}-focus: ${data.color.focus || data.color.hover};\n --et-color-${varSuffix}-active: ${data.color.active};\n --et-color-${varSuffix}-disabled: ${data.color.disabled};\n \n --et-color-${varOnSuffix}on-${swatch}: ${data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-hover: ${data.onColor.hover || data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-focus: ${data.onColor.focus || data.onColor.hover || data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-active: ${data.onColor.active || data.onColor.default};\n --et-color-${varOnSuffix}on-${swatch}-disabled: ${data.onColor.disabled || data.onColor.default};\n\n --et-color-${varSuffix}-ink: ${inkDefault};\n --et-color-${varSuffix}-ink-hover: ${inkHover};\n --et-color-${varSuffix}-ink-focus: ${inkFocus};\n --et-color-${varSuffix}-ink-active: ${inkActive};\n --et-color-${varSuffix}-ink-disabled: ${inkDisabled};\n `;\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createRootThemeCss = (themes: ColorTheme[]) => {\n const createVars = (name: string, swatch: ThemeSwatch) => {\n const inkDefault = swatch.inkColor?.default || swatch.color.default;\n const inkHover = swatch.inkColor?.hover || inkDefault;\n const inkFocus = swatch.inkColor?.focus || swatch.inkColor?.hover || inkDefault;\n const inkActive = swatch.inkColor?.active || inkDefault;\n const inkDisabled = swatch.inkColor?.disabled || inkDefault;\n\n return `\n --et-color-${name}: ${swatch.color.default};\n --et-color-${name}-hover: ${swatch.color.hover};\n --et-color-${name}-focus: ${swatch.color.focus || swatch.color.hover};\n --et-color-${name}-active: ${swatch.color.active};\n --et-color-${name}-disabled: ${swatch.color.disabled};\n \n --et-color-on-${name}: ${swatch.onColor.default};\n --et-color-on-${name}-hover: ${swatch.onColor.hover || swatch.onColor.default};\n --et-color-on-${name}-focus: ${swatch.onColor.focus || swatch.onColor.hover || swatch.onColor.default};\n --et-color-on-${name}-active: ${swatch.onColor.active || swatch.onColor.default};\n --et-color-on-${name}-disabled: ${swatch.onColor.disabled || swatch.onColor.default};\n\n --et-color-${name}-ink: ${inkDefault};\n --et-color-${name}-ink-hover: ${inkHover};\n --et-color-${name}-ink-focus: ${inkFocus};\n --et-color-${name}-ink-active: ${inkActive};\n --et-color-${name}-ink-disabled: ${inkDisabled};\n `;\n };\n\n const vars: string[] = [];\n\n for (const theme of themes) {\n const name = createCssColorThemeName(theme.name);\n\n if (theme.secondary || theme.tertiary) {\n vars.push(createVars(`${name}-primary`, theme.primary));\n\n if (theme.secondary) {\n vars.push(createVars(`${name}-secondary`, theme.secondary));\n }\n\n if (theme.tertiary) {\n vars.push(createVars(`${name}-tertiary`, theme.tertiary));\n }\n } else {\n vars.push(createVars(name, theme.primary));\n }\n }\n\n const css = `\n :root {\n ${vars.join('\\n')}\n }\n `;\n\n const style = document.createElement('style');\n style.id = `et-root-themes`;\n style.appendChild(document.createTextNode(css));\n document.head.appendChild(style);\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createThemeStyle = (theme: ColorTheme, isAlt: boolean) => {\n const cssThemeName = createCssColorThemeName(theme.name);\n const classPrefix = isAlt ? 'et-color-alt' : 'et-color';\n\n const selectors = [\n ...((theme.isDefault && !isAlt) || ((theme as ColorTheme & { isDefaultAlt?: boolean }).isDefaultAlt && isAlt)\n ? [':root', `.${classPrefix}--default`]\n : []),\n `.${classPrefix}--${cssThemeName}`,\n ];\n\n const css = `\n ${selectors.join(', ')} {\n ${createSwatchCss('primary', isAlt, theme.primary)}\n ${theme.secondary ? createSwatchCss('secondary', isAlt, theme.secondary) : ''}\n ${theme.tertiary ? createSwatchCss('tertiary', isAlt, theme.tertiary) : ''}\n }\n `;\n\n const style = document.createElement('style');\n style.id = `${classPrefix}--${cssThemeName}`;\n style.appendChild(document.createTextNode(css));\n document.head.appendChild(style);\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createTailwindCssVar = (name: string | undefined) => (name ? `rgb(var(--${name}) / <alpha-value>)` : null);\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport function createTailwindRgbVar(val: string): string;\nexport function createTailwindRgbVar(val: string | undefined): string | null;\nexport function createTailwindRgbVar(val: string | undefined) {\n return val ? `rgb(${val} / <alpha-value>)` : null;\n}\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createTailwindColorThemes = (themes: ColorTheme[], prefix = 'et') => {\n const twThemes: Record<\n string,\n {\n DEFAULT: string;\n hover: string;\n focus: string;\n active: string;\n disabled: string;\n }\n > = {};\n\n for (const theme of themes) {\n const key = `${prefix}-${theme.name}`;\n\n twThemes[key] = {\n DEFAULT: createTailwindRgbVar(theme.primary.color.default),\n hover: createTailwindRgbVar(theme.primary.color.hover),\n focus: createTailwindRgbVar(theme.primary.color.focus) || createTailwindRgbVar(theme.primary.color.hover),\n active: createTailwindRgbVar(theme.primary.color.active),\n disabled: createTailwindRgbVar(theme.primary.color.disabled),\n };\n\n const keyOn = `${prefix}-on-${theme.name}`;\n\n twThemes[keyOn] = {\n DEFAULT: createTailwindRgbVar(theme.primary.onColor.default),\n hover: createTailwindRgbVar(theme.primary.onColor.hover) || createTailwindRgbVar(theme.primary.onColor.default),\n focus:\n createTailwindRgbVar(theme.primary.onColor.focus) ||\n createTailwindRgbVar(theme.primary.onColor.hover) ||\n createTailwindRgbVar(theme.primary.onColor.default),\n active: createTailwindRgbVar(theme.primary.onColor.active) || createTailwindRgbVar(theme.primary.onColor.default),\n disabled:\n createTailwindRgbVar(theme.primary.onColor.disabled) || createTailwindRgbVar(theme.primary.onColor.default),\n };\n\n const keyInk = `${prefix}-${theme.name}-ink`;\n\n twThemes[keyInk] = {\n DEFAULT:\n createTailwindRgbVar(theme.primary.inkColor?.default) || createTailwindRgbVar(theme.primary.color.default),\n hover:\n createTailwindRgbVar(theme.primary.inkColor?.hover) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n focus:\n createTailwindRgbVar(theme.primary.inkColor?.focus) ||\n createTailwindRgbVar(theme.primary.inkColor?.hover) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n active:\n createTailwindRgbVar(theme.primary.inkColor?.active) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n disabled:\n createTailwindRgbVar(theme.primary.inkColor?.disabled) ||\n createTailwindRgbVar(theme.primary.inkColor?.default) ||\n createTailwindRgbVar(theme.primary.color.default),\n };\n }\n\n return twThemes;\n};\n\n/**\n * @deprecated Use provideColorThemesWithTailwind4 instead after migrating to Tailwind CSS v4. Intent to remove in v6.\n */\nexport const provideColorThemes = (themes: ColorTheme[]) => {\n if (isDevMode()) {\n const defaultCount = themes.filter((theme) => theme.isDefault).length;\n const defaultAltCount = themes.filter(\n (theme) => (theme as ColorTheme & { isDefaultAlt?: boolean }).isDefaultAlt,\n ).length;\n\n if (defaultCount === 0) {\n console.warn(\n 'No default theme provided. Please provide a default theme by setting the isDefault property to true on a theme.',\n );\n } else if (defaultCount > 1) {\n console.warn(\n 'More than one default theme provided. Please provide only one default theme by setting the isDefault property to true on a theme.',\n );\n }\n\n if (defaultAltCount > 1) {\n console.warn(\n 'More than one default alt theme provided. Please provide only one default alt theme by setting the isDefaultAlt property to true on a theme.',\n );\n }\n }\n\n for (const theme of themes) {\n createThemeStyle(theme, false);\n createThemeStyle(theme, true);\n }\n\n createRootThemeCss(themes);\n\n return [ɵProvideColorThemes(themes), ɵProvideColorThemesPrefix('et')];\n};\n","import {\n ApplicationRef,\n computed,\n Directive,\n effect,\n EffectRef,\n inject,\n InjectionToken,\n Injector,\n input,\n InputSignal,\n isDevMode,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n ColorThemeInput,\n createCssColorThemeName,\n injectColorThemes,\n injectColorThemesPrefix,\n SURFACE_COLOR,\n} from './color-theme.util';\n\nexport const COLOR_PROVIDER = new InjectionToken<ProvideColorDirective>('ColorProvider');\n\n/**\n * The color provider attached to a bootstrapped root component (e.g. `ProvideColorDirective` in\n * the app component's `hostDirectives`), if any. Detached DOM such as overlay panes can't reach\n * it through element DI, so overlay containers fall back to this when resolving the provider to\n * `syncWithProvider()` - resolve at sync time, not at injection time, since root components only\n * register with `ApplicationRef` once bootstrap completes.\n *\n * @internal\n */\nexport const resolveAppRootColorProvider = (appRef: ApplicationRef): ProvideColorDirective | null => {\n for (const componentRef of appRef.components) {\n const provider = componentRef.injector.get(COLOR_PROVIDER, null);\n\n if (provider) {\n return provider;\n }\n }\n\n return null;\n};\n\nconst FORCED_COLOR_UNSET = /* @__PURE__ */ Symbol('FORCED_COLOR_UNSET');\n\ntype ForcedColorState = ColorThemeInput | typeof FORCED_COLOR_UNSET;\n\n@Directive({\n selector: '[etProvideColor]',\n providers: [{ provide: COLOR_PROVIDER, useExisting: ProvideColorDirective }],\n host: {\n '[class]': 'themeClass()',\n },\n})\nexport class ProvideColorDirective {\n private themes = injectColorThemes({ optional: true });\n private prefix = injectColorThemesPrefix({ optional: true });\n private injector = inject(Injector);\n private parentProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n private currentProviderSync: EffectRef | null = null;\n private forcedColor = signal<ForcedColorState>(FORCED_COLOR_UNSET);\n\n color: InputSignal<ColorThemeInput | undefined> = input<ColorThemeInput>(undefined, { alias: 'etProvideColor' });\n\n effectiveColor = computed(() => {\n const forcedColor = this.forcedColor();\n\n if (forcedColor !== FORCED_COLOR_UNSET) {\n return forcedColor;\n }\n\n return this.color();\n });\n\n /**\n * The color that actually applies at this provider's location: its own effective color, or -\n * when this provider is passive (no input, nothing forced) - the nearest ancestor provider's.\n * Mirrors the CSS cascade, which falls through a provider's `-color--inherited` scope class;\n * consumers that re-apply context across detached DOM (overlay panes) must use this instead\n * of `effectiveColor` or a passive in-between provider (e.g. a form field's) erases the theme.\n */\n resolvedColor = computed((): ColorThemeInput | undefined => {\n const own = this.effectiveColor();\n const ownName = typeof own === 'object' && own !== null ? own.name : own;\n\n if (ownName) {\n return own;\n }\n\n return this.parentProvider?.resolvedColor();\n });\n\n colorName = computed(() => {\n const raw = this.effectiveColor();\n const value = typeof raw === 'object' && raw !== null ? raw.name : raw;\n\n if (value === SURFACE_COLOR) return SURFACE_COLOR;\n\n if (!this.themes || !value) return;\n\n if (isDevMode() && !this.themes.some((theme) => theme.name === value) && value !== null) {\n console.error(`Theme ${value} does not exist. Please make sure to add it to provideColorThemesWithTailwind4()`);\n }\n\n return createCssColorThemeName(value);\n });\n\n protected themeClass = computed(() => {\n const prefix = this.prefix || 'et';\n\n if (this.colorName()) {\n return `${prefix}-color--${this.colorName()}`;\n }\n\n return `${prefix}-color--inherited`;\n });\n\n syncWithProvider(provider: ProvideColorDirective) {\n this.currentProviderSync?.destroy();\n\n runInInjectionContext(this.injector, () => {\n this.currentProviderSync = effect(() => {\n const provideColor = provider.resolvedColor();\n\n untracked(() => {\n if (provideColor === undefined) {\n this.clearForcedColor();\n\n return;\n }\n\n this.forceColor(provideColor);\n });\n });\n });\n }\n\n stopSyncWithProvider() {\n const hadProviderSync = !!this.currentProviderSync;\n\n this.currentProviderSync?.destroy();\n this.currentProviderSync = null;\n\n if (hadProviderSync) {\n this.clearForcedColor();\n }\n }\n\n /** @internal */\n forceColor(color: ColorThemeInput) {\n this.forcedColor.set(color);\n }\n\n /** @internal */\n clearForcedColor() {\n if (this.forcedColor() === FORCED_COLOR_UNSET) {\n return;\n }\n\n this.forcedColor.set(FORCED_COLOR_UNSET);\n }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'et-surface-interactive-styles',\n template: '',\n styleUrl: './surface-interactive-styles.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SurfaceInteractiveStylesComponent {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '../providers';\nimport { SurfaceInteractiveStylesComponent } from './surface-interactive-styles.component';\n\n/**\n * Same shape as `ColorInteractiveDirective` - reacts to its own `:hover`/`:focus-visible`/\n * `:active`/`[disabled]` - but drives `--et-surface-interaction-*`, a neutral/muted tint, instead\n * of the ambient color theme. Use it for chrome-level interaction feedback that shouldn't borrow\n * the page's brand color (a tab trigger's hover state, a row's hover fill). For a whole component\n * that should render neutral rather than accented, provide the `surface` color instead.\n *\n * Has no container/exclude/has-focus variants: it has no descendant-cascading CSS at all, so\n * applying it to a wrapper with independently-interactive children is safe by construction -\n * unlike `ColorInteractiveDirective`, there's no bubbling-leak failure mode to worry about here.\n */\n@Directive({\n selector: '[etSurfaceInteractive]',\n host: {\n class: 'et-surface-interactive',\n },\n})\nexport class SurfaceInteractiveDirective {\n private styleManager = injectStyleManager();\n\n constructor() {\n this.styleManager.mount(SurfaceInteractiveStylesComponent);\n }\n}\n","import { signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\n\n/**\n * Why a guard was abandoned. `'logout'` is issued by `@ethlete/query`'s auth provider; anything else\n * is app-defined.\n */\nexport type UnsavedChangesAbandonReason = 'logout' | (string & {});\n\n/** The second argument every {@link UnsavedChangesConfirmFn} receives. */\nexport type UnsavedChangesConfirmContext = {\n /**\n * Aborts when the session this confirm belongs to ends underneath it - a logout, or an explicit\n * `abandonAll()`. **Close your confirm dialog when it fires**, otherwise it is left on screen over\n * a page the user has already been redirected away from. The guard itself stops waiting either way.\n *\n * ```ts\n * confirm: (value, { signal }) => {\n * const ref = this.overlays.open(ConfirmDiscardComponent);\n * signal.addEventListener('abort', () => ref.close(false));\n * return ref.afterClosed();\n * };\n * ```\n */\n signal: AbortSignal;\n};\n\n/** @internal A live tracker, as seen by the coordinator. */\nexport type UnsavedChangesRegistration = {\n abandon: (reason: UnsavedChangesAbandonReason) => void;\n};\n\nconst UNSAVED_CHANGES_COORDINATOR_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const registrations = new Set<UnsavedChangesRegistration>();\n const _isCheckPending = signal(false);\n\n let pending: {\n promise: Promise<boolean>;\n controller: AbortController;\n settle: (result: boolean) => void;\n } | null = null;\n\n /** @internal Runs a tracker's confirm under the single-flight + abandon regime. */\n const runCheck = (runner: (context: UnsavedChangesConfirmContext) => Promise<boolean>): Promise<boolean> => {\n // A confirm is already on screen - adopt its answer rather than opening a second dialog.\n if (pending) {\n return pending.promise;\n }\n\n const controller = new AbortController();\n\n let settle!: (result: boolean) => void;\n const abandoned = new Promise<boolean>((resolve) => (settle = resolve));\n\n // Run the confirm synchronously - a dialog that opens a microtask later can miss a `signal` that\n // already aborted, and callers reasonably expect the dialog to be up when `runCheck()` returns.\n let confirmed: Promise<boolean>;\n\n try {\n confirmed = runner({ signal: controller.signal }).catch(() => false);\n } catch {\n confirmed = Promise.resolve(false);\n }\n\n // Whichever settles first wins: a late answer from an abandoned confirm is ignored.\n const promise = Promise.race([confirmed, abandoned]).then((result) => {\n pending = null;\n _isCheckPending.set(false);\n\n return result;\n });\n\n pending = { promise, controller, settle };\n _isCheckPending.set(true);\n\n return promise;\n };\n\n /** @internal */\n const register = (registration: UnsavedChangesRegistration) => {\n registrations.add(registration);\n\n return () => registrations.delete(registration);\n };\n\n const abandonAll = (reason: UnsavedChangesAbandonReason = 'session-end') => {\n if (pending) {\n pending.controller.abort(reason);\n // The changes are unrecoverable at this point, so the discard is allowed: whatever waited on\n // this check (an overlay close, a `canDeactivate`) proceeds instead of hanging.\n pending.settle(true);\n }\n\n for (const registration of Array.from(registrations)) {\n registration.abandon(reason);\n }\n };\n\n return {\n /** Whether a confirm is currently on screen. */\n isCheckPending: _isCheckPending.asReadonly(),\n abandonAll,\n runCheck,\n register,\n };\n },\n { name: 'Unsaved Changes Coordinator' },\n);\n\n/**\n * App-wide coordination for the unsaved-changes family. Two jobs:\n *\n * - **One confirm at a time.** A page form, an overlay form and a route guard can all want a decision\n * at once; stacking three \"discard your changes?\" dialogs is never the right answer. A check that\n * starts while another is pending adopts the pending decision instead of asking again.\n * - **Abandoning guards when the session ends.** `abandonAll()` resolves the pending confirm, tells\n * its dialog to close (via {@link UnsavedChangesConfirmContext.signal}), and switches every live\n * guard off: further checks pass, and the tab locks release. Called automatically by\n * `@ethlete/query`'s auth provider on logout - the edits cannot be saved anymore, so guarding them\n * only strands dialogs over the login page and blocks the tab.\n *\n * Root-provided; every tracker registers itself. Inject it to abandon guards from app code (a session\n * timeout of your own, a hard reset) or to read whether a confirm is currently on screen.\n */\nexport const provideUnsavedChangesCoordinator = /* @__PURE__ */ toProvideFn(UNSAVED_CHANGES_COORDINATOR_DEF);\nexport const injectUnsavedChangesCoordinator = /* @__PURE__ */ toInjectFn(UNSAVED_CHANGES_COORDINATOR_DEF);\n","import { computed, isSignal, Signal, untracked, WritableSignal } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { FieldTree } from '@angular/forms/signals';\nimport { controlValueSignal } from '../signals';\n\n/**\n * The value source an unsaved-changes tracker watches. In order of preference:\n *\n * - **`FieldTree<T>`** (signal forms - primary): read `field().value()`, restore `field().value.set(v)`.\n * - **`Signal<FieldTree<T> | null>`**: a late/async-created signal form - resolves once the field exists.\n * - **`AbstractControl`** (reactive forms - migration path): bridged via `controlValueSignal` + `setValue`.\n * - **`WritableSignal<T>`** (escape hatch for non-form state): read/write directly.\n */\nexport type UnsavedChangesSource<T> = FieldTree<T> | Signal<FieldTree<T> | null> | AbstractControl | WritableSignal<T>;\n\n/** A value source reduced to a read signal plus a writer, regardless of its original kind. */\nexport type NormalizedUnsavedChangesSource<T> = {\n /** The current value. `null` while a late/async source has not produced a value yet. */\n value: Signal<T | null>;\n /** Writes a value back to the source (used by `restoreDefaultValue`). No-op if the source isn't ready. */\n setValue: (value: T) => void;\n};\n\nconst isAbstractControl = (value: unknown): value is AbstractControl =>\n !!value &&\n typeof value === 'object' &&\n typeof (value as AbstractControl).getRawValue === 'function' &&\n typeof (value as AbstractControl).setValue === 'function';\n\n// A signal-forms field node is a callable that is NOT an Angular signal (signals are callable too).\nconst isFieldTree = <T>(value: unknown): value is FieldTree<T> => typeof value === 'function' && !isSignal(value);\n\n/** Reduces any {@link UnsavedChangesSource} to a uniform read-signal + writer pair. */\nexport const normalizeUnsavedChangesSource = <T>(\n source: UnsavedChangesSource<T>,\n): NormalizedUnsavedChangesSource<T> => {\n if (isAbstractControl(source)) {\n const value = controlValueSignal(source) as Signal<T | null>;\n\n return { value, setValue: (next) => source.setValue(next) };\n }\n\n if (isFieldTree<T>(source)) {\n return {\n value: computed(() => source().value()),\n // FieldTree's value type is a generic conditional that TS can't narrow here - cast the writer.\n setValue: (next) => (source().value as WritableSignal<T>).set(next),\n };\n }\n\n if (isSignal(source)) {\n const peek = untracked(source as Signal<unknown>);\n\n // A signal that currently holds a FieldTree - or nothing yet (the late/async form case).\n if (peek === null || peek === undefined || isFieldTree(peek)) {\n const fieldSignal = source as Signal<FieldTree<T> | null>;\n\n return {\n value: computed(() => {\n const field = fieldSignal();\n\n return isFieldTree<T>(field) ? field().value() : null;\n }),\n setValue: (next) => {\n const field = untracked(fieldSignal);\n\n if (isFieldTree<T>(field)) {\n (field().value as WritableSignal<T>).set(next);\n }\n },\n };\n }\n\n // A plain writable value signal (escape hatch). Initialize it with a non-null value so it isn't\n // mistaken for a late FieldTree source above.\n const writable = source as WritableSignal<T>;\n\n return { value: writable, setValue: (next) => writable.set(next) };\n }\n\n throw new Error(\n '[unsaved-changes] Unsupported source. Pass a signal-forms FieldTree, a Signal<FieldTree | null>, ' +\n 'an AbstractControl, or a WritableSignal.',\n );\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n assertInInjectionContext,\n computed,\n DestroyRef,\n effect,\n inject,\n PLATFORM_ID,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { injectFaviconStore, injectTitleStore } from '../seo';\nimport { injectIsDocumentVisible } from '../signals';\n\n/** The default tab title marker - a filled dot, prefixed while there are unsaved changes. */\nexport const UNSAVED_CHANGES_TITLE_MARKER = '●';\n\n/**\n * How an unsaved-changes tracker surfaces itself on the browser tab.\n *\n * Only the `beforeunload` lock is on by default - the title marker and the app badge write to\n * app-global surfaces, so they are opt-in.\n */\nexport type UnsavedChangesTabConfig = {\n /**\n * Make the browser ask for confirmation before the tab is closed, reloaded, or navigated away from\n * while there are unsaved changes (`beforeunload`).\n *\n * The prompt is the browser's own - its wording cannot be customized, and browsers only show it\n * after the user has interacted with the page at least once (sticky activation). The listener is\n * attached **only while changes exist**, so a clean page stays eligible for the back/forward cache.\n * @default true\n */\n lock?: boolean;\n\n /**\n * Prefix the tab title with a marker while there are unsaved changes. `true` uses\n * {@link UNSAVED_CHANGES_TITLE_MARKER}, a string is used as-is.\n *\n * Goes through the core title store (`injectTitleStore`), so the app's title must be owned by it\n * (`applyHeadTitleBinding` / the `etSeo` directive) - an app that writes `document.title` by some\n * other means would fight the store over it.\n * @default false\n */\n titleMarker?: boolean | string;\n\n /**\n * Blink the tab while there are unsaved changes: the title marker (and the favicon dot, if enabled)\n * is toggled on and off - the closest thing the web has to an \"attention needed\" tab flash, since no\n * browser exposes one. Implies `titleMarker` when that isn't set.\n *\n * By default it only blinks while the tab is **in the background** (`whenHidden`), which is the case\n * worth flagging - a title blinking in the tab the user is already reading is just noise. `interval`\n * is in ms and defaults to 1000; going faster is pointless because browsers clamp timers in hidden\n * tabs to roughly one second.\n * @default false\n */\n flash?: boolean | { interval?: number; whenHidden?: boolean };\n\n /**\n * Draw a dot on the site's favicon while there are unsaved changes, via the\n * [favicon store](/core/seo#favicon). Pass a color to override the theme accent.\n * @default false\n */\n favicon?: boolean | { color?: string };\n\n /**\n * Show an app badge while there are unsaved changes (Badging API). `true` shows a plain dot, a\n * number shows that count.\n *\n * The badge is a per-app surface, not a per-tab one: it is only visible when the app is installed\n * (PWA / desktop shortcut) and pinned, and it is a silent no-op everywhere else. Counts from\n * several trackers add up; the badge is cleared once the last one is clean.\n * @default false\n */\n badge?: boolean | number;\n};\n\nexport type CreateUnsavedChangesTabLockConfig = UnsavedChangesTabConfig & {\n /** Whether there are unsaved changes right now - typically a tracker's `hasChanges`. */\n hasChanges: Signal<boolean>;\n};\n\nexport type UnsavedChangesTabLockRef = {\n /**\n * Release the lock and remove the title marker / app badge. Also runs automatically when the\n * injector that created the lock is destroyed.\n */\n destroy: () => void;\n};\n\ntype BadgingNavigator = Navigator & {\n setAppBadge?: (contents?: number) => Promise<void>;\n clearAppBadge?: () => Promise<void>;\n};\n\n// The badge is a single app-wide surface, so every lock that wants one registers here and the badge\n// is derived from all of them - otherwise the first tracker to go clean would clear a badge that\n// another one still needs.\nconst BADGE_HOLDERS = /* @__PURE__ */ new Map<symbol, number | true>();\n\nconst syncAppBadge = () => {\n const nav = typeof navigator === 'undefined' ? null : (navigator as BadgingNavigator);\n\n if (!nav?.setAppBadge || !nav.clearAppBadge) {\n return;\n }\n\n // Unsupported, or not installed - the promise rejects instead of throwing synchronously.\n const ignore = () => undefined;\n\n if (!BADGE_HOLDERS.size) {\n nav.clearAppBadge().catch(ignore);\n\n return;\n }\n\n const count = Array.from(BADGE_HOLDERS.values()).reduce<number>(\n (total, contents) => (typeof contents === 'number' ? total + contents : total),\n 0,\n );\n\n // `setAppBadge()` without a count renders a plain dot.\n nav.setAppBadge(count || undefined).catch(ignore);\n};\n\n/**\n * The browser-tab flavor of the unsaved-changes family: while `hasChanges` reads `true`, the tab\n * cannot be closed or reloaded without the browser's confirm prompt, and - opt in - the tab title\n * carries a marker (optionally blinking), the favicon carries a dot, and the installed app carries a\n * badge.\n *\n * Every {@link createUnsavedChangesTracker} sets this up automatically (lock only); reach for it\n * directly when you track \"unsaved\" state that isn't a form, or want to lock the tab from a signal\n * you already have. Call from an injection context.\n *\n * ```ts\n * createUnsavedChangesTabLock({\n * hasChanges: computed(() => this.uploads().some((u) => u.pending)),\n * titleMarker: true,\n * flash: true,\n * });\n * ```\n */\nexport const createUnsavedChangesTabLock = (config: CreateUnsavedChangesTabLockConfig): UnsavedChangesTabLockRef => {\n assertInInjectionContext(createUnsavedChangesTabLock);\n\n const { hasChanges } = config;\n const lock = config.lock ?? true;\n const flash = config.flash === true ? {} : config.flash || null;\n const favicon = config.favicon === true ? {} : config.favicon || null;\n const badge = config.badge ?? false;\n\n // Blinking needs something to blink, so it implies the default marker.\n const titleMarker =\n config.titleMarker === true\n ? UNSAVED_CHANGES_TITLE_MARKER\n : (config.titleMarker ?? (flash && !favicon ? UNSAVED_CHANGES_TITLE_MARKER : null));\n\n const destroyRef = inject(DestroyRef);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n const releaseFns: (() => void)[] = [];\n\n // The blink phase. Always `true` unless flashing is on, so the marker/favicon effects below can read\n // one signal either way.\n const flashPhase = signal(true);\n\n if (isBrowser && flash) {\n const interval = flash.interval ?? 1000;\n const whenHidden = flash.whenHidden ?? true;\n const isDocumentVisible = injectIsDocumentVisible();\n const shouldFlash = computed(() => hasChanges() && (!whenHidden || !isDocumentVisible()));\n\n const flashEffect = effect((onCleanup) => {\n if (!shouldFlash()) {\n return;\n }\n\n const handle = setInterval(() => flashPhase.update((on) => !on), interval);\n\n onCleanup(() => {\n clearInterval(handle);\n flashPhase.set(true);\n });\n });\n\n releaseFns.push(() => {\n flashEffect.destroy();\n flashPhase.set(true);\n });\n }\n\n /** Dirty, and in the \"shown\" half of a blink. */\n const isMarked = computed(() => hasChanges() && flashPhase());\n\n if (titleMarker) {\n const titleStore = injectTitleStore();\n const markerId = Symbol('unsaved-changes-title-marker');\n\n const markerEffect = effect(() => {\n const marked = isMarked();\n\n untracked(() => (marked ? titleStore.addMarker(markerId, titleMarker) : titleStore.removeMarker(markerId)));\n });\n\n releaseFns.push(() => {\n markerEffect.destroy();\n titleStore.removeMarker(markerId);\n });\n }\n\n if (isBrowser && favicon) {\n const faviconStore = injectFaviconStore();\n const overlayId = Symbol('unsaved-changes-favicon');\n\n const faviconEffect = effect(() => {\n const marked = isMarked();\n\n untracked(() =>\n marked\n ? faviconStore.addOverlay(overlayId, { kind: 'dot', color: favicon.color })\n : faviconStore.removeOverlay(overlayId),\n );\n });\n\n releaseFns.push(() => {\n faviconEffect.destroy();\n faviconStore.removeOverlay(overlayId);\n });\n }\n\n if (isBrowser && lock) {\n const onBeforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n\n // Legacy Chrome / Safari gate the prompt on a truthy `returnValue` rather than on\n // `preventDefault()`. Deprecated, but still the only way to reach those engines.\n event.returnValue = true;\n };\n\n let attached = false;\n\n const attach = () => {\n if (attached) return;\n\n attached = true;\n window.addEventListener('beforeunload', onBeforeUnload);\n };\n\n const detach = () => {\n if (!attached) return;\n\n attached = false;\n window.removeEventListener('beforeunload', onBeforeUnload);\n };\n\n // Attached only while there are changes: a permanently registered `beforeunload` listener makes\n // the page ineligible for the back/forward cache, which would slow every back navigation.\n const lockEffect = effect(() => {\n const dirty = hasChanges();\n\n untracked(() => (dirty ? attach() : detach()));\n });\n\n releaseFns.push(() => {\n lockEffect.destroy();\n detach();\n });\n }\n\n if (isBrowser && badge !== false) {\n const badgeId = Symbol('unsaved-changes-badge');\n const contents = badge === true ? true : badge;\n\n const badgeEffect = effect(() => {\n const dirty = hasChanges();\n\n untracked(() => {\n if (dirty) {\n BADGE_HOLDERS.set(badgeId, contents);\n } else {\n BADGE_HOLDERS.delete(badgeId);\n }\n\n syncAppBadge();\n });\n });\n\n releaseFns.push(() => {\n badgeEffect.destroy();\n BADGE_HOLDERS.delete(badgeId);\n syncAppBadge();\n });\n }\n\n const destroy = () => {\n while (releaseFns.length) {\n releaseFns.pop()?.();\n }\n };\n\n destroyRef.onDestroy(destroy);\n\n return { destroy };\n};\n","import {\n assertInInjectionContext,\n computed,\n DestroyRef,\n effect,\n inject,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { catchError, defaultIfEmpty, firstValueFrom, isObservable, map, Observable, of, take } from 'rxjs';\nimport { equal } from '../utils';\nimport { injectUnsavedChangesCoordinator, UnsavedChangesConfirmContext } from './unsaved-changes-coordinator';\nimport { normalizeUnsavedChangesSource, UnsavedChangesSource } from './unsaved-changes-source';\nimport { createUnsavedChangesTabLock, UnsavedChangesTabConfig, UnsavedChangesTabLockRef } from './unsaved-changes-tab';\n\n/**\n * Decides whether a value with unsaved changes may be discarded. Called with the current value when\n * (and only when) changes exist. Return a truthy value / resolved Promise / emitted Observable value\n * to allow the discard, falsy to keep the changes. Typically opens a confirm dialog.\n *\n * The second argument carries an {@link UnsavedChangesConfirmContext.signal} that aborts when the\n * session ends underneath the confirm (a logout) - close your dialog when it fires.\n */\nexport type UnsavedChangesConfirmFn<T> = (\n value: T,\n context: UnsavedChangesConfirmContext,\n) => boolean | Promise<boolean> | Observable<boolean> | unknown;\n\nexport type CreateUnsavedChangesTrackerConfig<T> = {\n /** The form / value to watch. See {@link UnsavedChangesSource}. */\n source: UnsavedChangesSource<T>;\n\n /**\n * The baseline the current value is compared against.\n * If omitted, the first non-null value the source produces is captured automatically (so\n * async-filled forms work without wiring). A function is evaluated once, eagerly.\n */\n defaultValue?: T | (() => T);\n\n /**\n * Required, per call site. Runs only when there are changes to discard.\n * @see UnsavedChangesConfirmFn\n */\n confirm: UnsavedChangesConfirmFn<T>;\n\n /**\n * Custom equality between the current value and the default. Deep-equal by default.\n *\n * Note: this is snapshot-vs-default comparison, deliberately **not** signal-forms' `dirty()`\n * (which means \"was edited\", so typing then deleting stays dirty - here it's clean again).\n */\n compareFn?: (current: T, defaultValue: T) => boolean;\n\n /**\n * How the tracker guards the browser tab itself. The `beforeunload` lock - the browser's confirm\n * prompt before the tab is closed or reloaded - is **on by default**, since a guard that only\n * covers in-app navigation still loses the edits to <kbd>Ctrl</kbd>+<kbd>W</kbd>.\n *\n * Pass an object to also opt into a tab title marker or an app badge, or `false` to leave the tab\n * alone entirely. See {@link UnsavedChangesTabConfig}.\n * @default { lock: true }\n */\n tab?: UnsavedChangesTabConfig | false;\n};\n\nexport type UnsavedChangesTrackerRef<T> = {\n /** Whether the current value differs from the default. */\n hasChanges: Signal<boolean>;\n\n /**\n * Whether this guard was switched off because the session ended underneath it (a logout, or an\n * explicit `injectUnsavedChangesCoordinator().abandonAll()`). An abandoned tracker still reports\n * `hasChanges`, but `runCheck()` passes without confirming and the tab lock is released - the edits\n * cannot be saved anymore, so blocking on them only strands the user.\n */\n isAbandoned: Signal<boolean>;\n\n /** The current baseline. `null` until a value (or explicit default) exists. */\n defaultValue: Signal<T | null>;\n\n /**\n * Resolves `true` if there are no changes or the user confirmed the discard, `false` otherwise.\n * Normalizes the `confirm` return (value / Promise / Observable) to a `Promise<boolean>`.\n *\n * Only one confirm runs app-wide: a check that starts while another tracker's confirm is on screen\n * adopts that decision instead of opening a second dialog.\n */\n runCheck: () => Promise<boolean>;\n\n /** Re-baseline to the current value - e.g. after a save that keeps the form open. */\n refreshDefaultValue: () => void;\n\n /** Write the default back onto the source (revert edits). No-op if there is no default yet. */\n restoreDefaultValue: () => void;\n\n /**\n * The tab guard (`beforeunload` lock, title marker, app badge) driven by `hasChanges` - `null` when\n * the tracker was created with `tab: false`. Call `tab.destroy()` to release it before the\n * injector is destroyed, e.g. right before a deliberate `location.reload()`.\n */\n tab: UnsavedChangesTabLockRef | null;\n};\n\nconst toBooleanPromise = (result: boolean | Promise<boolean> | Observable<boolean> | unknown): Promise<boolean> => {\n if (result instanceof Promise) {\n return result.then(Boolean);\n }\n\n if (isObservable(result)) {\n return firstValueFrom(\n result.pipe(\n take(1),\n map(Boolean),\n defaultIfEmpty(false),\n catchError(() => of(false)),\n ),\n );\n }\n\n return Promise.resolve(Boolean(result));\n};\n\n/**\n * The framework-agnostic core of the unsaved-changes family: snapshots a default value, tracks\n * whether the watched form/value differs from it, and runs an async confirm before a discard.\n * Call from an injection context (a field initializer or constructor).\n *\n * While there are changes the browser tab is locked too (`beforeunload`), so closing or reloading the\n * tab needs a confirmation - see the `tab` config for the title-marker / app-badge extras and for\n * opting out.\n *\n * Every tracker registers with the app-wide {@link injectUnsavedChangesCoordinator}, which keeps a\n * single confirm on screen at a time and switches all guards off when the session ends (logout).\n *\n * Overlay and router flavors (`createOverlayUnsavedChangesGuard`, `createUnsavedChangesGuard`) build\n * on this - use them when you want the guard wired to a close/navigation event automatically.\n */\nexport const createUnsavedChangesTracker = <T>(\n config: CreateUnsavedChangesTrackerConfig<T>,\n): UnsavedChangesTrackerRef<T> => {\n assertInInjectionContext(createUnsavedChangesTracker);\n\n const { compareFn, confirm } = config;\n const normalized = normalizeUnsavedChangesSource(config.source);\n\n const hasExplicitDefault = config.defaultValue !== undefined;\n const initialDefault = hasExplicitDefault\n ? typeof config.defaultValue === 'function'\n ? (config.defaultValue as () => T)()\n : (config.defaultValue as T)\n : untracked(normalized.value);\n\n const _defaultValue = signal<T | null>(initialDefault);\n\n // No explicit default → capture the first non-null value the source produces as the baseline.\n // This makes async-filled forms \"just work\" while keeping snapshot (not dirty()) semantics.\n if (!hasExplicitDefault) {\n let captured = initialDefault !== null && initialDefault !== undefined;\n\n effect(() => {\n const current = normalized.value();\n\n if (!captured && current !== null && current !== undefined) {\n captured = true;\n untracked(() => _defaultValue.set(current));\n }\n });\n }\n\n const hasChanges = computed(() => {\n const current = normalized.value();\n\n if (current === null || current === undefined) {\n return false;\n }\n\n const defaultValue = _defaultValue() as T;\n\n return !(compareFn ? compareFn(current, defaultValue) : equal(current, defaultValue));\n });\n\n const tab = config.tab === false ? null : createUnsavedChangesTabLock({ ...config.tab, hasChanges });\n\n const coordinator = injectUnsavedChangesCoordinator();\n const _isAbandoned = signal(false);\n\n const unregister = coordinator.register({\n abandon: () => {\n _isAbandoned.set(true);\n // The session is gone: stop holding the tab hostage over edits that can no longer be saved.\n tab?.destroy();\n },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n\n const runCheck = (): Promise<boolean> => {\n if (untracked(_isAbandoned) || !untracked(hasChanges)) {\n return Promise.resolve(true);\n }\n\n return coordinator.runCheck((context) => toBooleanPromise(confirm(untracked(normalized.value) as T, context)));\n };\n\n const refreshDefaultValue = () => _defaultValue.set(untracked(normalized.value));\n\n const restoreDefaultValue = () => {\n const defaultValue = untracked(_defaultValue);\n\n if (defaultValue !== null && defaultValue !== undefined) {\n normalized.setValue(defaultValue);\n }\n };\n\n return {\n hasChanges,\n isAbandoned: _isAbandoned.asReadonly(),\n defaultValue: _defaultValue.asReadonly(),\n runCheck,\n refreshDefaultValue,\n restoreDefaultValue,\n tab,\n };\n};\n","import { assertInInjectionContext } from '@angular/core';\nimport {\n createUnsavedChangesTracker,\n CreateUnsavedChangesTrackerConfig,\n UnsavedChangesTrackerRef,\n} from './unsaved-changes-tracker';\n\nexport type CreateUnsavedChangesGuardConfig<T> = CreateUnsavedChangesTrackerConfig<T>;\n\nexport type UnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {\n /**\n * A `CanDeactivateFn`-compatible check: resolves `true` when the route may be left (no changes, or\n * the user confirmed the discard), `false` to stay. Wire it into a route's `canDeactivate`.\n *\n * ```ts\n * export const editGuard: CanDeactivateFn<EditComponent> = (component) => component.guard.canDeactivate();\n * ```\n */\n canDeactivate: () => Promise<boolean>;\n};\n\n/**\n * The router / manual flavor of the unsaved-changes family: a {@link createUnsavedChangesTracker}\n * plus a `canDeactivate` bridge for Angular route guards. It touches no overlay APIs, so it also\n * serves as a standalone \"does this form have unsaved changes, and may I discard them?\" helper.\n * Call from an injection context.\n */\nexport const createUnsavedChangesGuard = <T>(config: CreateUnsavedChangesGuardConfig<T>): UnsavedChangesGuardRef<T> => {\n assertInInjectionContext(createUnsavedChangesGuard);\n\n const tracker = createUnsavedChangesTracker(config);\n\n return {\n ...tracker,\n canDeactivate: () => tracker.runCheck(),\n };\n};\n","// Generated from package.json by tools/scripts/generate-version.js - do not edit.\n\n/** The version of `@ethlete/core` this build was cut from. */\nexport const CORE_VERSION = '5.0.0-next.47';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DOCUMENT","i1.AnimatableDirective","i1.ProvideSurfaceDirective"],"mappings":"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"}