@ethlete/core 5.0.0-next.60 → 5.0.0-next.61

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/utils/angular/component-id.ts","../../../../libs/core/src/lib/utils/angular/destroy.ts","../../../../libs/core/src/lib/utils/object.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/signal-data-utils.ts","../../../../libs/core/src/lib/signals/element-dimensions.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/countdown.ts","../../../../libs/core/src/lib/signals/deferred-loading.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-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/easing-tokens-styles.component.ts","../../../../libs/core/src/lib/animations/animatable.directive.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/unsaved-changes/unsaved-changes-coordinator.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-source.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/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/app-update/build-fingerprint.ts","../../../../libs/core/src/lib/app-update/stale-build-error.ts","../../../../libs/core/src/lib/app-update/app-updates.ts","../../../../libs/core/src/lib/overlay/overlay-layer.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-viewport-inset.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-score.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-participants.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/resize-handles/resize-handles.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/root-font-size-check.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/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","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","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","import { ElementRef, inject, InjectionToken, InjectOptions, StaticProvider, TemplateRef } from '@angular/core';\nimport { isObject } from '../object';\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: () => StaticProvider[];\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>) => StaticProvider[];\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): StaticProvider[] => [\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): StaticProvider[] => [\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 (isObject(valueOverride) && isObject(defaultValue)) {\n return { ...defaultValue, ...valueOverride };\n }\n\n return valueOverride ?? defaultValue;\n};\n","import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\n\nexport const cloneFormGroup = <T extends FormGroup<any>>(formGroup: T) => {\n const cloneControl = (control: AbstractControl): AbstractControl => {\n let clonedControl: AbstractControl;\n\n if (control instanceof FormGroup) {\n const controls = Object.fromEntries(\n Object.entries(control.controls).map(([key, child]) => [key, cloneControl(child)]),\n );\n clonedControl = new FormGroup(controls, control.validator, control.asyncValidator);\n } else if (control instanceof FormArray) {\n clonedControl = new FormArray(\n control.controls.map((child) => cloneControl(child)),\n control.validator,\n control.asyncValidator,\n );\n } else {\n clonedControl = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n }\n\n if (control.disabled && clonedControl.enabled) {\n clonedControl.disable({ emitEvent: false });\n }\n\n return clonedControl;\n };\n\n const clonedForm = cloneControl(formGroup) as T;\n clonedForm.updateValueAndValidity();\n\n return clonedForm as T;\n};\n\nexport const getFormGroupValue = <T extends FormGroup>(formGroup: T) => {\n const getControlValue = (control: AbstractControl): unknown => {\n if (control instanceof FormGroup) {\n return getFormGroupValue(control);\n }\n\n if (control instanceof FormArray) {\n return control.controls.map(getControlValue);\n }\n\n return control.value ?? null;\n };\n\n const value: Record<string, unknown> = {};\n\n Object.entries(formGroup.controls).forEach(([key, control]) => {\n value[key] = getControlValue(control);\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?: AddEventListenerOptions,\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?: AddEventListenerOptions,\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?: AddEventListenerOptions,\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 (!Array.isArray(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 if (typeof value !== 'string') {\n return null;\n }\n\n const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;\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 (control?.value !== matchingControl?.value) {\n return { [MUST_MATCH]: true };\n }\n\n return null;\n };\n};\n\nexport const EthleteValidators = {\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, seen: WeakMap<object, unknown>) => {\n if (typeof val.value === 'object' && val.value !== null) val.value = cloneValue(val.value, seen);\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\nconst cloneValue = <T>(original: T, seen: WeakMap<object, unknown>): T => {\n if (typeof original !== 'object') return original;\n if (original === null) return original;\n const existing = seen.get(original);\n if (existing) return existing as T;\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(Object.getPrototypeOf(_og));\n } else if (str === '[object Array]') {\n tmp = Array(_og.length);\n } else if (str === '[object Set]') {\n tmp = new Set();\n seen.set(_og, tmp);\n _og.forEach(function (val: any) {\n tmp.add(cloneValue(val, seen));\n });\n } else if (str === '[object Map]') {\n tmp = new Map();\n seen.set(_og, tmp);\n _og.forEach(function (val: any, key: any) {\n tmp.set(cloneValue(key, seen), cloneValue(val, seen));\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(cloneValue(_og.buffer, seen));\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 seen.set(_og, tmp);\n\n for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]!), seen);\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), seen);\n }\n }\n\n return tmp || _og;\n};\n\nexport const clone = <T>(original: T): T => cloneValue(original, new WeakMap());\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\n/** A constructor check misses a Date from another realm, or one created under a faked global `Date`. */\nconst isDate = (value: any): value is Date => Object.prototype.toString.call(value) === '[object Date]';\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 (isDate(foo) || isDate(bar)) return isDate(foo) && isDate(bar) && foo.getTime() === bar.getTime();\n\n if (\n foo &&\n bar &&\n ((ctor = foo.constructor) === bar.constructor ||\n (!ctor && bar.constructor === Object) ||\n (ctor === Object && !bar.constructor))\n ) {\n ctor ??= bar.constructor;\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 const cookie = document.cookie.split(';').find((entry) => entry.trim().startsWith(`${name}=`));\n\n return cookie?.trim().slice(name.length + 1) ?? null;\n};\n\nexport const setCookie = (\n name: string,\n data: string,\n expiresInDays?: number | null,\n domain: string | null = 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 if (domain) {\n cookieString += `; domain=${domain}`;\n }\n\n cookieString += `; SameSite=${sameSiteUpper}`;\n\n if (sameSite === 'none' || (typeof window !== 'undefined' && window.location.protocol === 'https:')) {\n cookieString += '; Secure';\n }\n\n cookieString += ';';\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, path = '/', domain: string | null = 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 window === '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 { Subject, takeUntil, timer } from 'rxjs';\n\nexport class KeyPressManager {\n private isKeyPressed = false;\n private keyPressCount = 0;\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 = this.keyPressCount >= 1;\n this.keyPressCount++;\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;\n }\n\n clear() {\n this.isKeyPressed = false;\n this.keyPressCount = 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: Element, 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: Element, ...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 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 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 | ReadonlyArray<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 try {\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElements' in val && 'previousElements' in val;\n } catch {\n return false;\n }\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\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 = (\n input: Signal<SignalElementBindingComplexType | ElementSignalValue>,\n): ElementSignal => {\n return linkedSignal({\n source: input,\n computation: (source, previous) => {\n if (\n typeof source === 'object' &&\n source !== null &&\n 'currentElements' in source &&\n 'previousElements' in source\n ) {\n return source as ElementSignalValue;\n }\n\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 {\n ApplicationRef,\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 = 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 // The application's root injector, not the nearest one: an overlay runs its content in an\n // environment injector of its own, and keying on that would build a second observer - plus, for\n // the scrollbar ruler, a second element in `<body>` - for every open overlay.\n const envInjector = inject(ApplicationRef).injector;\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 {\n DOCUMENT,\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';\nimport { memoizeSignal } from './signal-data-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 // A viewChild.required throws NG0951 until the view exists, so the element is first read in the effect.\n const elementDimensionsSignal = signal<NullableElementDimensions>(createElementDimensions(null));\n\n let observer: ResizeObserver | null = null;\n\n effect(() => {\n const els = firstEl();\n const rendered = isRendered();\n\n untracked(() => {\n elementDimensionsSignal.set(initialValue());\n\n if (!rendered || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n observer ??= new ResizeObserver((entries) => {\n const entry = entries[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 observer.disconnect();\n\n if (els.currentElement) {\n const computedDisplay = els.currentElement.ownerDocument.defaultView?.getComputedStyle(\n els.currentElement,\n ).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 = /* @__PURE__ */ memoizeSignal((): 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 { computed, DestroyRef, DOCUMENT, inject, signal } 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 destroyRef = inject(DestroyRef);\n const renderer = injectRenderer();\n const view = document.defaultView;\n\n if (!view) return signal<{ width: number; height: number } | null>(null).asReadonly();\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 = view.getComputedStyle(document.documentElement).scrollbarWidth;\n renderer.appendChild(document.body, scrollbarRuler);\n destroyRef.onDestroy(() => {\n const parent = renderer.parentNode(scrollbarRuler);\n if (parent) renderer.removeChild(parent, scrollbarRuler);\n });\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';\nimport { signalIsRendered } from './render-utils';\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 const isRendered = signalIsRendered();\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) {\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) {\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 let observer: ResizeObserver | null = null;\n\n effect(() => {\n const elements = observedElements.map((element) => element().currentElement);\n const rendered = isRendered();\n\n untracked(() => {\n if (!rendered || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n observer ??= new ResizeObserver(() => {\n if (ready) run();\n });\n observer.disconnect();\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n });\n });\n\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 { DestroyRef, 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 destroyRef = inject(DestroyRef);\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 let destroyed = false;\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 if (delta === 0) {\n options.onAnimationEnd?.();\n\n return readonlySignal;\n }\n\n options.onAnimationStart?.();\n\n if (typeof requestAnimationFrame === 'undefined') {\n currentAnimatedValue = targetValue;\n animatedValue.set(round(targetValue));\n options.onAnimationEnd?.();\n\n return readonlySignal;\n }\n\n ngZone.runOutsideAngular(() => {\n const animate = (timestamp: number) => {\n if (destroyed) return;\n\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 destroyRef.onDestroy(() => {\n destroyed = true;\n cancelAnimation();\n });\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, DestroyRef, 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 destroyRef = inject(DestroyRef);\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 const queryListenerCleanups = new Map<string, () => void>();\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 if (queryList) {\n const onChange = (event: MediaQueryListEvent) => matches.set(event.matches);\n queryList.addEventListener('change', onChange);\n queryListenerCleanups.set(mediaQuery, () => queryList.removeEventListener('change', onChange));\n }\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 === undefined && options.max === undefined) {\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 !== undefined) {\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.max !== undefined) {\n const max = typeof options.max === 'number' ? options.max : getBreakpointSize(options.max, 'max');\n if (max !== Infinity) mediaQueryParts.push(`(max-width: ${max}px)`);\n }\n\n return mediaQueryParts.length > 0 ? mediaQueryParts.join(' and ') : '(min-width: 0px)';\n };\n\n destroyRef.onDestroy(() => {\n queryListenerCleanups.forEach((cleanup) => cleanup());\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 defaultValue: T,\n): ((value: WriteT) => T) => {\n const currentBp = injectCurrentBreakpoint();\n const injector = inject(Injector);\n const raw = signal<BreakpointInput<T> | undefined>(undefined);\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 raw.set(coerced);\n return isBreakpointMap(coerced) ? resolveFromMap(coerced as BreakpointMap<T>, currentBp(), defaultValue) : coerced;\n };\n\n effect(() => {\n const bp = currentBp();\n const r = raw();\n\n if (!cachedSig) {\n const instance = injector.get(BREAKPOINT_INSTANCE_TOKEN, null) as any;\n if (!instance) return;\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, defaultValue);\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(false) });\n * // Template: `snap` | `[snap]=\"true\"` | `[snap]=\"{ xs: false, md: true }\"`\n */\nexport const boolBreakpointTransform = (\n defaultValue = false,\n): ((value: BreakpointInput<boolean> | string) => boolean) =>\n breakpointTransformBase<boolean, BreakpointInput<boolean> | string>(booleanAttribute, defaultValue);\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(0) });\n * // Template: `[scrollMargin]=\"16\"` | `[scrollMargin]=\"{ xs: 0, md: 16 }\"`\n */\nexport const numberBreakpointTransform = (defaultValue = 0): ((value: BreakpointInput<number> | string) => number) =>\n breakpointTransformBase<number, BreakpointInput<number> | string>((v) => numberAttribute(v), defaultValue);\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>('auto') });\n * tags = input([], { transform: typedBreakpointTransform<string[]>([]) });\n * // Template: `[itemSize]=\"'third'\"` | `[itemSize]=\"{ xs: 'full', md: 'third' }\"`\n */\nexport const typedBreakpointTransform = <T>(defaultValue: T): ((value: BreakpointInput<T>) => T) =>\n breakpointTransformBase((v) => v as T, defaultValue);\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 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, 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 changes = ctrl.valueChanges.pipe(map(() => ctrl.getRawValue()));\n const debouncedChanges = options?.debounceTime ? changes.pipe(debounceTime(options.debounceTime)) : changes;\n\n if (!options?.debounceFirst) {\n return merge(of(ctrl.getRawValue()), debouncedChanges);\n }\n\n const values = merge(of(ctrl.getRawValue()), changes);\n return options.debounceTime ? values.pipe(debounceTime(options.debounceTime)) : values;\n }),\n );\n\n const obs: Observable<TValue | null> = controlObs;\n\n return toSignal(obs.pipe(distinctUntilChanged((a, b) => equal(a, b))), {\n initialValue: options?.debounceFirst ? null : 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 Signal<AbstractControl | null> | AbstractControl>(\n control: T,\n options?: ControlValueSignalOptions,\n) => {\n type TControl = NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>;\n type TValue = ReturnType<TControl['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 { isPlatformBrowser } from '@angular/common';\nimport { PLATFORM_ID, Signal, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { EMPTY, expand, of, skip, switchMap, timer } from 'rxjs';\n\nexport type CountdownDeadline = Date | string | number | null | undefined;\n\nexport type Countdown = {\n /** Whole seconds left, rounded up - `0` once the deadline has passed. */\n totalSeconds: number;\n days: number;\n /** `0` - `23` */\n hours: number;\n /** `0` - `59` */\n minutes: number;\n /** `0` - `59` */\n seconds: number;\n hasPassed: boolean;\n};\n\nconst SECOND_MS = 1000;\n\nconst toTimestamp = (deadline: CountdownDeadline) => {\n if (deadline === null || deadline === undefined || deadline === '') return null;\n\n const timestamp = new Date(deadline).getTime();\n\n return Number.isNaN(timestamp) ? null : timestamp;\n};\n\nconst toCountdown = (remainingMs: number): Countdown => {\n const totalSeconds = Math.max(0, Math.ceil(remainingMs / SECOND_MS));\n\n return {\n totalSeconds,\n days: Math.floor(totalSeconds / 86_400),\n hours: Math.floor((totalSeconds % 86_400) / 3600),\n minutes: Math.floor((totalSeconds % 3600) / 60),\n seconds: totalSeconds % 60,\n hasPassed: totalSeconds === 0,\n };\n};\n\n/**\n * The time left until `deadline`, recounted on every whole second and broken down into days, hours, minutes\n * and seconds. `null` while the deadline is missing or not a valid date. The timer stops once the deadline\n * has passed, and never runs on the server.\n *\n * Call in an injection context.\n *\n * ```ts\n * protected timeLeft = signalCountdown(computed(() => this.round()?.startsAt));\n * ```\n */\nexport const signalCountdown = (deadline: () => CountdownDeadline): Signal<Countdown | null> => {\n const end = computed(() => toTimestamp(deadline()));\n const tick = signal(0);\n\n if (isPlatformBrowser(inject(PLATFORM_ID))) {\n toObservable(end)\n .pipe(\n switchMap((endsAt) => {\n if (endsAt === null) return EMPTY;\n\n return of(null).pipe(\n expand(() => {\n const remainingMs = endsAt - Date.now();\n\n return remainingMs <= 0 ? EMPTY : timer(remainingMs % SECOND_MS || SECOND_MS);\n }),\n skip(1),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe(() => tick.update((count) => count + 1));\n }\n\n return computed(() => {\n tick();\n\n const endsAt = end();\n\n return endsAt === null ? null : toCountdown(endsAt - Date.now());\n });\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { PLATFORM_ID, Signal, computed, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { EMPTY, map, of, switchMap, timer } from 'rxjs';\n\nexport type SignalDeferredLoadingOptions = {\n /** How long the source must stay truthy before the indicator turns on, in ms. @default 200 */\n delay?: number;\n /** How long the indicator stays on once it turned on, in ms. @default 300 */\n minDuration?: number;\n};\n\n/**\n * Gates a loading indicator on a loading flag, so work that finishes quickly never flashes one: the\n * returned signal turns true only once `source` has been true for `delay` ms, and then stays true for\n * `minDuration` ms even if the work has already finished.\n *\n * Use it for what the reader *sees* - a spinner, a busy bar, a skeleton - and keep the raw flag for\n * everything else (`aria-busy`, whether a request is in flight, geometry that must not jump).\n *\n * Call in an injection context.\n *\n * ```ts\n * protected showSpinner = signalDeferredLoading(this.loading);\n * ```\n */\nexport const signalDeferredLoading = (\n source: () => boolean,\n options?: SignalDeferredLoadingOptions,\n): Signal<boolean> => {\n const delay = options?.delay ?? 200;\n const minDuration = options?.minDuration ?? 300;\n\n const visible = signal(false);\n\n // Nothing to defer on the server - there is no first paint to protect, and a pending timer would\n // hold up serialization for as long as it runs.\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return visible.asReadonly();\n }\n\n let shownAt = 0;\n\n toObservable(computed(() => source()))\n .pipe(\n switchMap((loading) => {\n if (loading === untracked(visible)) {\n return EMPTY;\n }\n\n if (loading) {\n return timer(delay).pipe(map(() => true));\n }\n\n const remaining = minDuration - (performance.now() - shownAt);\n\n return remaining <= 0 ? of(false) : timer(remaining).pipe(map(() => false));\n }),\n takeUntilDestroyed(),\n )\n .subscribe((isVisible) => {\n if (isVisible) {\n shownAt = performance.now();\n }\n\n visible.set(isVisible);\n });\n\n return visible.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[]>([]);\n\n let observer: MutationObserver | null = null;\n\n effect(() => {\n const els = firstEl();\n const rendered = isRendered();\n\n elementMutationsSignal.set([]);\n\n if (!rendered || typeof MutationObserver === 'undefined') {\n return;\n }\n\n observer ??= new MutationObserver((records) => {\n if (records.length) {\n zone.run(() => elementMutationsSignal.set(records));\n }\n });\n observer.disconnect();\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 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: inlineIntersectionPercentage > 0 && blockIntersectionPercentage > 0,\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 { root: rootBinding, enabled, ...observerOptions } = options ?? {};\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const root = firstElementSignal(rootBinding ? buildElementSignal(rootBinding) : createEmptyElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = 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 elementIntersectionSignal.set([]);\n\n return;\n }\n\n const newObserver = new IntersectionObserver((entries) => updateIntersections(entries), {\n ...observerOptions,\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) {\n elementIntersectionSignal.set([]);\n\n return;\n }\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 if (!initialElementVisibility) continue;\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\nconst 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, EnvironmentInjector, inject, PLATFORM_ID } from '@angular/core';\nimport { injectRenderer } from '../../providers';\nimport { injectScrollbarDimensions, injectViewportDimensions } from '../media-queries';\n\nconst scrollbarSizeWriters = /* @__PURE__ */ new WeakSet<EnvironmentInjector>();\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 const environmentInjector = inject(EnvironmentInjector);\n if (scrollbarSizeWriters.has(environmentInjector)) {\n return;\n }\n scrollbarSizeWriters.add(environmentInjector);\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\nconst viewportSizeWriters = /* @__PURE__ */ new WeakSet<EnvironmentInjector>();\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 const environmentInjector = inject(EnvironmentInjector);\n if (viewportSizeWriters.has(environmentInjector)) {\n return;\n }\n viewportSizeWriters.add(environmentInjector);\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 // A host destroyed mid-drag never re-runs the styling effect, so the grabbing cursor it wrote on\n // `<html>` would outlive the page it was dragged on.\n destroyRef.onDestroy(() => renderer.removeStyle(document.documentElement, 'cursor'));\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 takeUntil(dragEnd),\n tap((e) => updateDragging(e)),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n\n dragEnd\n .pipe(\n take(1),\n tap(() => updateDraggingEnd()),\n takeUntilDestroyed(destroyRef),\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, runInInjectionContext } 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 its first navigation has completed, including one that completed\n * before this signal was first injected.\n */\nexport const injectIsRouterInitialized = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n const navigatedBefore = inject(Router).navigated;\n\n return computed(() => {\n const e = event();\n\n return navigatedBefore || (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 browserUrl =\n typeof window === 'undefined'\n ? router.url\n : window.location.pathname + window.location.search + window.location.hash;\n const url = router.navigated ? router.url : browserUrl;\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 = config?.injector\n ? runInInjectionContext(config.injector, injectRouterState)\n : 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\n// Two navigations that matched the same route definition get the same object back, which is what\n// tells `/detail/1` -> `/detail/2` apart from `/list` -> `/detail/1`.\nconst getDeepestRouteConfig = (router: Router) => {\n let route = router.routerState.snapshot.root;\n\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n return route.routeConfig;\n};\n\nconst didPathParamsChange = (prevParams: Params, currParams: Params) =>\n [...new Set(Object.keys(prevParams).concat(Object.keys(currParams)))].some(\n (key) => prevParams[key] !== currParams[key],\n );\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 destroyRef = inject(DestroyRef);\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 const previousScrollRestoration = 'scrollRestoration' in history ? history.scrollRestoration : null;\n if (restoreEnabled && previousScrollRestoration !== null) {\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: number | null = null;\n let restoredNavigationId: number | null = null;\n let isPopstate = false;\n let wantsRestore = false;\n\n let prev = {\n state: createRouterState(router),\n route: createRoute(router),\n routeConfig: getDeepestRouteConfig(router),\n };\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() + 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 if (lastNavigationId !== null) {\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\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 ?? null;\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 = {\n state: createRouterState(router),\n route: createRoute(router),\n routeConfig: getDeepestRouteConfig(router),\n };\n\n const prevState = prev.state;\n const currState = curr.state;\n const sameRouteConfig = prev.routeConfig !== null && prev.routeConfig === curr.routeConfig;\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 = null;\n }\n\n if (restoreEnabled && isPopstate) {\n const target = restoredNavigationId === null ? undefined : 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 =\n currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE] &&\n sameRouteConfig &&\n didPathParamsChange(prevState.pathParams, currState.pathParams);\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 destroyRef.onDestroy(() => {\n cancelPendingRestore();\n if (restoreEnabled && previousScrollRestoration !== null) {\n history.scrollRestoration = previousScrollRestoration;\n }\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 return {\n log: (...args: unknown[]) => {\n if (!disableLogging()) console.log(`\\x1B[32;40;24m[${scope} ${feature}]\\x1B[m`, ...args);\n },\n warn: (...args: unknown[]) => {\n if (!disableLogging()) console.warn(`\\x1B[93;40;24m[${scope} ${feature}]\\x1B[m`, ...args);\n },\n error: (...args: unknown[]) => {\n if (!disableLogging()) console.error(`\\x1B[31;40;24m[${scope} ${feature}]\\x1B[m`, ...args);\n },\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\nconst decodeUrlCharacterReferences = (url: string) =>\n url\n .replace(/&#(\\d+);?/g, (_, value: string) => String.fromCodePoint(Number(value)))\n .replace(/&#x([0-9a-f]+);?/gi, (_, value: string) => String.fromCodePoint(Number.parseInt(value, 16)))\n .replace(/&(colon|tab|newline);/gi, (_, entity: string) =>\n entity.toLowerCase() === 'colon' ? ':' : entity.toLowerCase() === 'tab' ? '\\t' : '\\n',\n );\n\nconst isSafeUrl = (url: string) => {\n // eslint-disable-next-line no-control-regex -- URL parsers ignore these characters inside schemes.\n const normalized = decodeUrlCharacterReferences(url).replace(/[\\s\\u0000-\\u001f]/g, '');\n\n return (\n !/^(javascript|vbscript):/i.test(normalized) && !/^data:(?!image\\/(?:avif|gif|jpeg|png|webp);)/i.test(normalized)\n );\n};\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 alignClass = (align: string | null) => (align ? ` class=\"et-rte-align-${align}\"` : '');\n\nconst alignOf = (attrs: string) =>\n (\n /\\bclass\\s*=\\s*[\"'][^\"']*\\bet-rte-align-([a-z]+)/i.exec(attrs)?.[1] ??\n /\\bstyle\\s*=\\s*[\"'][^\"']*text-align:\\s*([a-z]+)/i.exec(attrs)?.[1]\n )?.toLowerCase() ?? null;\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/** 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([^>]*)>([\\s\\S]*)<\\/\\1>$/i.exec(trimmed);\n const align = aligned ? alignOf(aligned[2] ?? '') : null;\n\n if (aligned && align) {\n const tag = (aligned[1] ?? 'p').toLowerCase();\n\n return `<${tag}${alignClass(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${alignClass(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${alignClass(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 as HTML (their inner markup\n // stays HTML) and round-trip via a placeholder - extracted before the block passes below rewrite\n // them, restored after the final tag-strip.\n const alignedBlocks: string[] = [];\n md = md.replace(\n /<(p|h[1-6]|div)\\b([^>]*\\b(?:style=\"[^\"]*text-align|class=\"[^\"]*\\bet-rte-align-)[^>]*)>([\\s\\S]*?)<\\/\\1>/gi,\n (_, tag: string, attrs: string, inner: string) => {\n const name = tag.toLowerCase();\n\n return makePlaceholder(\n 'ALIGN',\n alignedBlocks.push(`<${name}${alignClass(alignOf(attrs))}>${inner}</${name}>`) - 1,\n );\n },\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 = alignOf(m[1] ?? '');\n\n return align === 'left' || align === 'center' || align === 'right' ? align : 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","/** 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) {\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 > 0 || positiveMovementX > 0) {\n if (positiveMovementY > positiveMovementX) {\n isScrolling = true;\n } else {\n isSwiping = true;\n }\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, DestroyRef, inject, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn } from '../utils';\n\nconst ANGULAR_ROOT_ELEMENT_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const appRef = inject(ApplicationRef);\n const destroyRef = inject(DestroyRef);\n\n const rootElement = signal<HTMLElement | null>(null);\n let pollId: ReturnType<typeof setTimeout> | 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 pollId = setTimeout(poll, 25);\n }\n };\n\n pollId = setTimeout(poll);\n destroyRef.onDestroy(() => {\n if (pollId !== null) clearTimeout(pollId);\n });\n\n return rootElement;\n },\n { name: 'Angular Root Element' },\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.metaKey || e.altKey || e.ctrlKey || ['Meta', 'Alt', 'Control'].includes(e.key)) return;\n\n hadKeyboardEvent = true;\n queueMicrotask(() => isFocusVisible.set(true));\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 `InjectionToken` 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 { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '../providers';\n\n/**\n * Declares the `--ease-*` custom properties that every animated stylesheet in the SDK\n * transitions with, as a styles-only component. Mount it from any component or directive whose\n * CSS reads one - without the declaration the whole `transition` shorthand is invalid at\n * computed-value time and the element snaps instead of animating.\n */\n@Component({\n selector: 'et-easing-tokens-styles',\n template: '',\n styleUrl: './easing-tokens-styles.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class EasingTokensStylesComponent {}\n\n/** Mounts {@link EasingTokensStylesComponent}. Call from an injection context. */\nexport const mountEasingTokens = () => injectStyleManager().mount(EasingTokensStylesComponent);\n","import { Directive, ElementRef, inject, InjectionToken, isDevMode } 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';\nimport { mountEasingTokens } from './easing-tokens-styles.component';\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 pendingTransitionId: string | undefined;\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 mountEasingTokens();\n\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.pendingTransitionId;\n this.pendingTransitionId = undefined;\n }\n\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `start (count ${this.activeAnimationCount}, batch \"${this.activeBatchTransitionId}\", pending \"${this.pendingTransitionId ?? 'none'}\")`,\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 if (isDevMode()) {\n console.warn(\n `${el.tagName} received animation end/cancel event but activeAnimationCount is already 0. Start was ${didEmitStart ? '' : 'not '}emitted.`,\n );\n }\n }\n break;\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n /**\n * Labels the next batch of animations that starts on this element. Only the most recent id is\n * kept: a call whose animations never start must not leave an id behind for a later batch.\n */\n setTransitionId(id: string) {\n this.pendingTransitionId = id;\n }\n\n /**\n * The animations running on this element right now, without the endless and pseudo-element ones.\n *\n * Reading this flushes pending style changes, so an animation a class change started in the same\n * task is already listed here. `isAnimating$` cannot answer that: it turns true only once the\n * browser dispatches `transitionrun`, a frame after the style change is committed.\n */\n getRunningAnimations(): Animation[] {\n const el = this.elementRef.nativeElement;\n\n if (typeof el.getAnimations !== 'function') return [];\n\n return el.getAnimations().filter((animation) => {\n if (animation.playState !== 'running') return false;\n\n const effect = animation.effect as KeyframeEffect | null;\n\n if (!effect || effect.pseudoElement) return false;\n\n // An endless animation never resolves `finished`, so awaiting one would strand the transition.\n return effect.getComputedTiming().iterations !== Infinity;\n });\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","import { Observable } from 'rxjs';\n\nexport const nextFrame = (cb: () => void) => {\n if (typeof requestAnimationFrame === 'undefined') {\n return;\n }\n\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, defer, filter, from, Observable, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { injectRenderer } from '../providers';\nimport { ANIMATABLE_TOKEN, AnimatableDirective } 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 forcedThisFrame = false;\n private forcedFrameResetId: number | null = null;\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 this.destroyRef.onDestroy(() => {\n if (this.forcedFrameResetId !== null) cancelAnimationFrame(this.forcedFrameResetId);\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.forcedThisFrame = false;\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.forcedThisFrame;\n this.forcedThisFrame = false;\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.forcedThisFrame = false;\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.forcedThisFrame;\n this.forcedThisFrame = false;\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.markForcedThisFrame();\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.markForcedThisFrame();\n }\n\n private markForcedThisFrame() {\n this.forcedThisFrame = true;\n\n if (typeof requestAnimationFrame === 'undefined') return;\n if (this.forcedFrameResetId !== null) cancelAnimationFrame(this.forcedFrameResetId);\n\n this.forcedFrameResetId = requestAnimationFrame(() => {\n this.forcedThisFrame = false;\n this.forcedFrameResetId = null;\n });\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.whenAnimationsSettled()),\n tap(() => this.debugLog(`${transitionId}: settled`)),\n filter(() => 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 this.whenAnimationsSettled()\n .pipe(\n tap(() => this.debugLog(`${transitionId}: interrupt settled`)),\n filter(() => this.state$.value === expectedState),\n tap(onComplete),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n /**\n * Emits once every animation the class change started on this element has finished, or right away\n * when the change starts none - a `transition-duration` of 0 (`prefers-reduced-motion`) or a\n * property whose value did not change.\n *\n * `isAnimating$` cannot replace the reading here: it turns true a frame after the browser commits\n * the style change, so a slow commit reads as \"nothing will animate\" and ends the transition\n * before its animation starts.\n */\n private whenAnimationsSettled(isFirstRead = true): Observable<void> {\n return defer(() => {\n const running = this.animatable.getRunningAnimations();\n\n if (!running.length) {\n // Settling on the first read means nothing was ever awaited, so emitting here would reenter\n // the enter()/leave() call still on the stack. Every later read already runs off a promise.\n return isFirstRead ? fromNextFrame() : of(undefined);\n }\n\n // A running animation may be replaced rather than finished - the browser retargets a transition\n // whose end value changes - so re-read instead of settling on the first batch.\n return from(Promise.allSettled(running.map((animation) => animation.finished))).pipe(\n switchMap(() => this.whenAnimationsSettled(false)),\n );\n });\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, take, 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 take(1),\n tap(() => {\n this.viewContainerRef.clear();\n this.hasView = false;\n }),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { 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$ = new Subject<void>();\n const onFinish$ = new Subject<void>();\n const onCancel$ = new Subject<void>();\n\n let startedCount = 0;\n let settledCount = 0;\n let cancelledCount = 0;\n\n const settle = (wasCancelled: boolean) => {\n settledCount++;\n\n if (wasCancelled) {\n cancelledCount++;\n }\n\n if (settledCount !== flips.length) {\n return;\n }\n\n if (cancelledCount) {\n onCancel$.next();\n } else {\n onFinish$.next();\n }\n };\n\n flips.forEach((animation) => {\n animation.onStart$.subscribe(() => {\n startedCount++;\n\n if (startedCount === flips.length) {\n onStart$.next();\n }\n });\n animation.onFinish$.subscribe(() => settle(false));\n animation.onCancel$.subscribe(() => settle(true));\n });\n\n const updateInit = () => {\n flips.forEach((animation) => animation.updateInit());\n };\n\n const play = () => {\n startedCount = 0;\n\n flips.forEach((animation) => animation.play());\n\n // Reset after the loop: replaying a flip that is still running makes it report a cancel, and that\n // cancel settles the play being replaced, not this one.\n settledCount = 0;\n cancelledCount = 0;\n\n if (!flips.length) {\n onStart$.next();\n onFinish$.next();\n }\n };\n\n const cancel = () => {\n flips.forEach((animation) => animation.cancel());\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\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 const currentAnimation = animation;\n if (!currentAnimation) {\n return;\n }\n\n currentAnimation.removeEventListener('finish', onAnimationFinish);\n currentAnimation.removeEventListener('cancel', onAnimationCancel);\n animation = null;\n currentAnimation.cancel();\n };\n\n const updateInit = () => {\n initialRect = originElement.getBoundingClientRect();\n };\n\n const play = () => {\n if (animation) {\n cleanup();\n onCancel$.next();\n }\n\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 if (!animation) return;\n cleanup();\n onCancel$.next();\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 { computed, signal, 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 /**\n * Changes the coordinator should still act on - so a tracker folds its own abandoned state in here\n * rather than reporting a raw comparison. An abandoned tracker's edits cannot be saved anymore, and\n * counting them would block a reload nobody can act on.\n */\n hasChanges: Signal<boolean>;\n};\n\nconst UNSAVED_CHANGES_COORDINATOR_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const _registrations = signal<readonly UnsavedChangesRegistration[]>([]);\n const _isCheckPending = signal(false);\n\n const hasUnsavedChanges = computed(() => _registrations().some((registration) => registration.hasChanges()));\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.update((current) => [...current, registration]);\n\n return () => _registrations.update((current) => current.filter((entry) => entry !== 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 _registrations()) {\n registration.abandon(reason);\n }\n };\n\n return {\n /** Whether a confirm is currently on screen. */\n isCheckPending: _isCheckPending.asReadonly(),\n\n /**\n * Whether any live tracker currently holds changes worth confirming - the app-wide \"is it safe to\n * throw this page away?\" question, for callers that need the answer without asking the user\n * (see `provideAppUpdates`). Abandoned trackers do not count.\n */\n hasUnsavedChanges,\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 {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n isSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { MaybeSignal } from '../signals';\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 = 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 injector = inject(Injector);\n const valuesSignal = isSignal(binding) ? binding : signal(binding);\n let bindingCount = 0;\n\n effect(() => {\n const values = valuesSignal() ?? [];\n\n untracked(() => {\n while (bindingCount < values.length) {\n const index = bindingCount++;\n runInInjectionContext(injector, () => {\n applyConfigFn(\n computed(() => {\n const value = valuesSignal()?.[index];\n return value === undefined ? null : configBuilder(value, index);\n }),\n );\n });\n }\n });\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 = isSignal(binding) ? binding() : binding;\n return value !== null && value !== undefined ? String(value) : null;\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 const key = linkStore.getLinkKey(config);\n\n if (currentKey !== undefined && currentKey !== key) linkStore.removeLink(linkId, currentKey);\n\n currentKey = key;\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 = 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 if (config.charset) return `charset=\"${config.charset}\"`;\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 const selector = metaStore.getSelector(config);\n\n if (currentSelector !== undefined && currentSelector !== selector) metaStore.removeTag(tagId, currentSelector);\n\n currentSelector = selector;\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 = 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 = 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 ...config.openGraph,\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 });\n }\n\n if (config.twitter || config.title || config.description || config.image) {\n applyTwitterCardBindings({\n ...config.twitter,\n title: config.twitter?.title ?? config.title,\n description: config.twitter?.description ?? config.description,\n image: config.twitter?.image ?? config.image,\n });\n }\n\n if (config.article) applyArticleBindings(config.article);\n};\n","import { DOCUMENT } from '@angular/common';\nimport { CSP_NONCE, 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 nonce = inject(CSP_NONCE, { optional: true });\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 if (nonce) renderer.setAttribute(script, 'nonce', nonce);\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 protected jsonLD = computed(() => {\n const data = this.data();\n\n if (!data) {\n return null;\n }\n\n const json = JSON.stringify(data, null, 2).replace(/</g, '\\\\u003C');\n const html = `<script type=\"application/ld+json\">${json}</script>`;\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n assertInInjectionContext,\n computed,\n DOCUMENT,\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 WeakMap<Navigator, Map<symbol, number | true>>();\n\nconst syncAppBadge = (nav: BadgingNavigator, badgeHolders: Map<symbol, number | true>) => {\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 (!badgeHolders.size) {\n nav.clearAppBadge().catch(ignore);\n\n return;\n }\n\n const count = Array.from(badgeHolders.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 ? UNSAVED_CHANGES_TITLE_MARKER : null));\n\n const destroyRef = inject(DestroyRef);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const navigator = inject(DOCUMENT).defaultView?.navigator as BadgingNavigator | undefined;\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 && navigator && badge !== false) {\n const badgeId = Symbol('unsaved-changes-badge');\n const contents = badge === true ? true : badge;\n let badgeHolders = BADGE_HOLDERS.get(navigator);\n if (!badgeHolders) {\n badgeHolders = new Map();\n BADGE_HOLDERS.set(navigator, badgeHolders);\n }\n\n const badgeEffect = effect(() => {\n const dirty = hasChanges();\n\n untracked(() => {\n if (dirty) {\n badgeHolders.set(badgeId, contents);\n } else {\n badgeHolders.delete(badgeId);\n }\n\n syncAppBadge(navigator, badgeHolders);\n });\n });\n\n releaseFns.push(() => {\n badgeEffect.destroy();\n badgeHolders.delete(badgeId);\n syncAppBadge(navigator, badgeHolders);\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();\n if (defaultValue === null || defaultValue === undefined) {\n return false;\n }\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 hasChanges: computed(() => !_isAbandoned() && hasChanges()),\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","const isCrossOrigin = (source: string) => /^(https?:)?\\/\\//.test(source);\n\n/**\n * Identifies the build a document boots from, by its entry script filenames. Those carry a content\n * hash in any production build, so two documents share a fingerprint exactly when reloading one would\n * run the same code - which is the only thing an update check needs to know, and it needs no version\n * file to be generated at build time.\n *\n * Cross-origin scripts are left out: an analytics tag with a cache-busting query would otherwise read\n * as a new deploy on every check.\n */\nexport const readBuildFingerprint = (document: Document) =>\n Array.from(document.querySelectorAll('script[src]'))\n .map((script) => script.getAttribute('src') ?? '')\n .filter((source) => !!source && !isCrossOrigin(source))\n .sort()\n .join('|');\n\n/**\n * Reads the currently deployed build's fingerprint from the app's entry document.\n *\n * `null` for anything that is not a usable answer - a network failure, a non-2xx response, or a body\n * with no entry scripts in it. Callers must treat that as \"no information\" rather than as a change:\n * an error page parses perfectly well as HTML, and acting on its empty fingerprint would reload the\n * app in a loop.\n */\nexport const fetchDeployedBuildFingerprint = async (url: string): Promise<string | null> => {\n try {\n const response = await fetch(url, { cache: 'no-store', headers: { accept: 'text/html' } });\n\n if (!response.ok) {\n return null;\n }\n\n const parsed = new DOMParser().parseFromString(await response.text(), 'text/html');\n\n return readBuildFingerprint(parsed) || null;\n } catch {\n return null;\n }\n};\n","/**\n * How each engine words a lazy chunk that could not be loaded. There is no error code and no shared\n * type for this - the message is all a browser gives, so matching it is the only detection available.\n *\n * The MIME-type entries matter as much as the 404 ones: an SPA that rewrites unknown paths to\n * `index.html` answers a request for a deleted chunk with HTML and a 200, so the import fails on the\n * content type rather than on the status.\n */\nconst STALE_BUILD_ERROR_PATTERNS = [\n 'failed to fetch dynamically imported module',\n 'error loading dynamically imported module',\n 'importing a module script failed',\n 'failed to load module script',\n 'was blocked because of a disallowed mime type',\n 'expected a javascript-or-wasm module script',\n 'unable to preload css',\n 'loading chunk',\n 'loading css chunk',\n];\n\nconst readErrorMessage = (error: unknown) => {\n if (typeof error === 'string') {\n return error;\n }\n\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n\n if (error && typeof error === 'object' && 'message' in error) {\n return String((error as { message: unknown }).message);\n }\n\n return '';\n};\n\n/**\n * Whether an error means the running build is stale - a module it was going to import lazily is no\n * longer on the server, so this tab cannot reach that part of the app until it reloads.\n *\n * Accepts anything an error path hands over: an `Error`, a rejection reason, a message string.\n */\nexport const isStaleBuildError = (error: unknown) => {\n if (error && typeof error === 'object' && 'name' in error && error.name === 'ChunkLoadError') {\n return true;\n }\n\n const message = readErrorMessage(error).toLowerCase();\n\n return !!message && STALE_BUILD_ERROR_PATTERNS.some((pattern) => message.includes(pattern));\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n DOCUMENT,\n inject,\n PLATFORM_ID,\n provideEnvironmentInitializer,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { NavigationError, Router } from '@angular/router';\nimport { EMPTY, filter, from, switchMap, timer } from 'rxjs';\nimport { injectIsDocumentVisible } from '../signals';\nimport { injectUnsavedChangesCoordinator } from '../unsaved-changes';\nimport { createSessionMemory, defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { fetchDeployedBuildFingerprint, readBuildFingerprint } from './build-fingerprint';\nimport { isStaleBuildError } from './stale-build-error';\n\nconst RELOADED_AT_KEY = 'et-app-update-reloaded-at';\n\n// A subset check, not equality: the running document also holds every script the app appended to it,\n// which the served entry document never contains.\nconst isNewBuild = (running: string, deployed: string) => {\n const runningScripts = new Set(running.split('|'));\n\n return deployed.split('|').some((source) => !runningScripts.has(source));\n};\n\nexport type AppUpdatesConfig = {\n /**\n * The document the deployed build is read from - the app's own entry point, whose hashed script\n * filenames are the fingerprint. Point it at a path that always serves the current `index.html`.\n * @default '/'\n */\n entryUrl: string;\n\n /**\n * How often to look for a new deploy while the tab is in the foreground, in milliseconds. Checking\n * pauses while the tab is hidden and resumes the moment it is looked at again, so a tab left open\n * overnight asks once on return rather than thousands of times in the dark.\n *\n * `0` polls not at all, leaving {@link AppUpdates.check} to the app.\n * @default 300_000\n */\n pollInterval: number;\n\n /**\n * Floor between two checks, in milliseconds. Without it, alt-tabbing repeatedly would fire a\n * request per switch.\n * @default 30_000\n */\n minCheckInterval: number;\n\n /**\n * What to do when a lazy chunk fails and this build is therefore broken.\n *\n * `'when-safe'` reloads on its own, but only when no tracked form holds unsaved changes - so the\n * user gets the route they clicked instead of an error, and never loses typing to it. When\n * something is dirty the reload is left to the app to offer (read {@link AppUpdates.isRequired}).\n *\n * `'never'` only reports, and every reload is the app's call.\n * @default 'when-safe'\n */\n autoReload: 'when-safe' | 'never';\n\n /**\n * How long after an automatic reload another one may happen, in milliseconds. A deploy that is\n * broken for reasons of its own would otherwise reload the tab forever; past this guard the app\n * reports {@link AppUpdates.isRequired} and leaves the decision to the user.\n * @default 60_000\n */\n reloadCooldown: number;\n};\n\nexport type AppUpdates = {\n /**\n * A different build is deployed. This tab still works - everything it has already loaded keeps\n * running - but it is running yesterday's code.\n */\n isAvailable: Signal<boolean>;\n\n /**\n * This build is broken: a lazy chunk could not be loaded, so part of the app is unreachable until\n * the tab reloads. Set whether or not a poll has noticed the deploy.\n */\n isRequired: Signal<boolean>;\n\n /** Whether reloading right now would throw away unsaved changes - the reason an update can't just reload. */\n wouldDiscardChanges: Signal<boolean>;\n\n /** Checks for a new deploy now, regardless of the poll schedule. */\n check: () => Promise<void>;\n\n /**\n * Reloads the page, releasing the unsaved-changes tab locks first so the browser does not ask its\n * own \"Leave site?\" question on top of whatever the app already asked.\n */\n reload: () => void;\n};\n\nconst APP_UPDATES_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<AppUpdatesConfig>(\n {\n entryUrl: '/',\n pollInterval: 300_000,\n minCheckInterval: 30_000,\n autoReload: 'when-safe',\n reloadCooldown: 60_000,\n },\n { name: 'App Updates Config' },\n);\n\nconst APP_UPDATES_DEF = /* @__PURE__ */ defineRootProvider(\n (): AppUpdates => {\n const config = injectAppUpdatesConfig();\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n const coordinator = injectUnsavedChangesCoordinator();\n const router = inject(Router, { optional: true });\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n const runningBuild = isBrowser ? readBuildFingerprint(document) : '';\n\n const reloadedAt = createSessionMemory<number>({\n key: RELOADED_AT_KEY,\n parse: (storedValue) => Number(storedValue) || null,\n serialize: String,\n });\n\n const _deployedBuild = signal<string | null>(null);\n const _isRequired = signal(false);\n\n const isAvailable = computed(() => {\n const deployed = _deployedBuild();\n\n return !!runningBuild && !!deployed && isNewBuild(runningBuild, deployed);\n });\n\n let lastCheckAt = 0;\n\n const check = async () => {\n lastCheckAt = Date.now();\n\n const deployed = await fetchDeployedBuildFingerprint(config.entryUrl);\n\n if (deployed) {\n _deployedBuild.set(deployed);\n }\n };\n\n const checkIfDue = async () => {\n if (Date.now() - lastCheckAt < config.minCheckInterval) {\n return;\n }\n\n await check();\n };\n\n const reload = () => {\n // The reload is deliberate and the user has already answered for it, so release every\n // beforeunload lock rather than have the browser ask the same question again.\n coordinator.abandonAll('app-update');\n reloadedAt.write(Date.now());\n document.defaultView?.location.reload();\n };\n\n const isWithinReloadCooldown = () => {\n const previous = reloadedAt.read();\n\n return previous !== null && Date.now() - previous < config.reloadCooldown;\n };\n\n const reportStaleBuild = () => {\n _isRequired.set(true);\n\n if (config.autoReload !== 'when-safe') {\n return;\n }\n\n if (untracked(coordinator.hasUnsavedChanges) || isWithinReloadCooldown()) {\n return;\n }\n\n reload();\n };\n\n if (isBrowser) {\n const window = document.defaultView;\n\n const handleRejection = (event: PromiseRejectionEvent) => {\n if (isStaleBuildError(event.reason)) {\n reportStaleBuild();\n }\n };\n\n const handleError = (event: ErrorEvent) => {\n if (isStaleBuildError(event.error ?? event.message)) {\n reportStaleBuild();\n }\n };\n\n window?.addEventListener('unhandledrejection', handleRejection);\n window?.addEventListener('error', handleError);\n\n destroyRef.onDestroy(() => {\n window?.removeEventListener('unhandledrejection', handleRejection);\n window?.removeEventListener('error', handleError);\n });\n\n // A lazy route's import is awaited by the router, which turns the rejection into a\n // NavigationError - so it never reaches the unhandledrejection listener above.\n router?.events\n .pipe(\n filter((event): event is NavigationError => event instanceof NavigationError),\n filter((event) => isStaleBuildError(event.error)),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe(reportStaleBuild);\n\n if (config.pollInterval > 0) {\n const isDocumentVisible = injectIsDocumentVisible();\n\n toObservable(isDocumentVisible)\n .pipe(\n switchMap((isVisible) => (isVisible ? timer(0, config.pollInterval) : EMPTY)),\n switchMap(() => from(checkIfDue())),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n }\n }\n\n return {\n isAvailable,\n isRequired: _isRequired.asReadonly(),\n wouldDiscardChanges: coordinator.hasUnsavedChanges,\n check,\n reload,\n };\n },\n { name: 'App Updates' },\n);\n\nexport const provideAppUpdatesConfig = /* @__PURE__ */ toProvideFn(APP_UPDATES_CONFIG_DEF);\nexport const injectAppUpdatesConfig = /* @__PURE__ */ toInjectFn(APP_UPDATES_CONFIG_DEF);\n\nexport const provideAppUpdatesInstance = /* @__PURE__ */ toProvideFn(APP_UPDATES_DEF);\nexport const injectAppUpdates = /* @__PURE__ */ toInjectFn(APP_UPDATES_DEF);\n\n/**\n * Keeps a long-lived tab from breaking on a deploy.\n *\n * A tab loaded before a deploy still holds the old build's `index.html`, and the chunks it has not\n * imported yet are gone from the server - so the next click on a lazy route dies with a chunk that\n * 404s, or one the SPA fallback answered with HTML. This watches for both halves of that: it polls\n * the entry document for a new deploy while the tab is in the foreground, and it listens for the\n * import failure itself, reloading when nothing would be lost.\n *\n * Nothing has to be generated at build time - the deployed build is identified by the hashed script\n * filenames in its own `index.html`.\n *\n * ```ts\n * provideAppUpdates({ entryUrl: '/index.html' });\n * ```\n *\n * Read {@link AppUpdates.isAvailable} to offer a reload, and {@link AppUpdates.isRequired} for the\n * case where this build is already broken and a reload is the only way on.\n */\nexport const provideAppUpdates = (config?: Partial<AppUpdatesConfig>) => [\n ...provideAppUpdatesConfig(config),\n ...provideAppUpdatesInstance(),\n provideEnvironmentInitializer(() => void injectAppUpdates()),\n];\n","/**\n * Attribute an element uses to declare the stacking level it paints at. Its value is the z-index of\n * the runtime root an overlay opened from inside it mounts into, and the level every outside-pointer\n * close compares a press against.\n */\nexport const OVERLAY_LAYER_ATTRIBUTE = 'data-et-overlay-layer';\n\n/**\n * The stacking level overlays mount at when nothing above their origin declares another one. Near\n * int32 max, so an overlay outranks an arbitrary host application's own stacking.\n */\nexport const DEFAULT_OVERLAY_LAYER = 2147483003;\n\n/**\n * The stacking level for an overlay opened from `element`: the one declared by the nearest ancestor\n * carrying `data-et-overlay-layer`, or {@link DEFAULT_OVERLAY_LAYER}.\n *\n * Put the attribute on anything that paints above the default overlay layer - a devtools panel, an\n * always-on-top widget - so a menu, tooltip or dialog opened inside it is not rendered behind the\n * thing that opened it, and so working in it does not close an overlay below it. Overlays sharing a\n * level share a runtime root and stack in open order.\n */\nexport const resolveOverlayLayer = (element: Element | null | undefined) => {\n const declaring = element?.closest?.(`[${OVERLAY_LAYER_ATTRIBUTE}]`);\n\n if (!declaring) {\n return DEFAULT_OVERLAY_LAYER;\n }\n\n const declared = declaring.getAttribute(OVERLAY_LAYER_ATTRIBUTE)?.trim();\n const layer = Number(declared);\n\n if (!declared || !Number.isFinite(layer)) {\n return DEFAULT_OVERLAY_LAYER;\n }\n\n return layer;\n};\n\n/**\n * Whether `target` sits on a stacking level above `layer` - a press inside the query devtools panel\n * while an application overlay is open, for example.\n *\n * Every outside-pointer close asks this first: a press on a surface that paints over an overlay is\n * aimed at that surface, not at the content the overlay covers, so it must not close the overlay.\n * The level of a press inside another overlay resolves through that overlay's runtime root, so a\n * menu opened from the devtools panel counts as part of the panel's level too.\n */\nexport const isOnHigherOverlayLayer = (target: EventTarget | null | undefined, layer: number) => {\n const element = target as Element | null | undefined;\n\n // Duck-typed rather than `instanceof Element`, which is realm-bound and would report every press\n // inside a same-origin pop-up as being on no layer at all.\n if (typeof element?.closest !== 'function') {\n return false;\n }\n\n return resolveOverlayLayer(element) > layer;\n};\n","import { Directive, DOCUMENT, ElementRef, inject, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, tap } from 'rxjs';\nimport { isOnHigherOverlayLayer, resolveOverlayLayer } from '../overlay/overlay-layer';\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 hostElement = this.elementRef.nativeElement;\n const activeElement = event.target as HTMLElement;\n const isInside = hostElement.contains(activeElement);\n\n if (isInside) return;\n\n if (isOnHigherOverlayLayer(activeElement, resolveOverlayLayer(hostElement))) return;\n\n this.didClickOutside.emit(event);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { Directive, effect, inject, input, numberAttribute, TemplateRef, ViewContainerRef } 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 constructor() {\n effect(() => {\n const count = Math.max(0, this.repeatCount());\n\n while (this.viewContainerRef.length < count) {\n this.viewContainerRef.createEmbeddedView(this.mainTemplateRef);\n }\n\n while (this.viewContainerRef.length > count) {\n this.viewContainerRef.remove(this.viewContainerRef.length - 1);\n }\n });\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 /** @internal */\n registerStart(el: ElementRef<HTMLElement>) {\n this._startEl.set(el);\n\n return () => this._startEl.update((current) => (current === el ? null : current));\n }\n\n /** @internal */\n registerEnd(el: ElementRef<HTMLElement>) {\n this._endEl.set(el);\n\n return () => this._endEl.update((current) => (current === el ? null : current));\n }\n}\n","import { DestroyRef, 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 inject(DestroyRef).onDestroy(this.host.registerEnd(this.elementRef));\n }\n}\n","import { DestroyRef, 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 inject(DestroyRef).onDestroy(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 const document = el.ownerDocument;\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 share(),\n takeUntilDestroyed(),\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 public 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 // `instanceof` is realm-bound: an element adopted by a same-origin pop-up (the `document` mount\n // option) belongs to that window's `HTMLElement`, not to this one's.\n const view = (value as Node | null | undefined)?.ownerDocument?.defaultView;\n\n return view ? value instanceof view.HTMLElement : value instanceof HTMLElement;\n};\n\nexport const isElement = (value: unknown): value is Element => {\n const view = (value as Node | null | undefined)?.ownerDocument?.defaultView;\n\n return view ? value instanceof view.Element : value instanceof Element;\n};\n\nexport const isHTMLOrSVGElement = (value: unknown): value is HTMLElement | SVGElement => {\n const view = (value as Node | null | undefined)?.ownerDocument?.defaultView;\n\n return view\n ? value instanceof view.HTMLElement || value instanceof view.SVGElement\n : value instanceof HTMLElement || value instanceof SVGElement;\n};\n\n/**\n * Whether the overlay rooted at `hostElement` is still the owner of DOM focus - focus is inside it, or\n * nothing is focused. False once the user has moved focus somewhere else.\n */\nexport const ownsActiveElement = (hostElement: HTMLElement, document: Document) => {\n const activeElement = document.activeElement;\n\n return !activeElement || activeElement === document.body || hostElement.contains(activeElement);\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 try {\n focusElement(paneElement.querySelector<HTMLElement>(autoFocus) ?? paneElement);\n } catch {\n focusElement(paneElement);\n }\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 (!activeElement || !paneElement.contains(activeElement)) {\n event.preventDefault();\n focusElement(event.shiftKey ? (lastElement ?? null) : (firstElement ?? null));\n\n return;\n }\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 document.addEventListener('keydown', onKeyDown, true);\n\n return () => {\n document.removeEventListener('keydown', onKeyDown, true);\n };\n};\n","import { DEFAULT_OVERLAY_LAYER, resolveOverlayLayer } from './overlay-layer';\n\n/** The space each viewport edge has reserved, in px. */\nexport type OverlayViewportInset = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\nexport type OverlayViewportReservation = Partial<OverlayViewportInset> & {\n /**\n * The stacking level the reserving surface paints at. Only overlays below it keep out of the\n * reserved space - a menu opened inside the surface itself is above the surface and may use it.\n * Defaults to one level above {@link DEFAULT_OVERLAY_LAYER}.\n */\n layer?: number;\n};\n\nconst NO_INSET: OverlayViewportInset = { top: 0, right: 0, bottom: 0, left: 0 };\n\nconst reservations = /* @__PURE__ */ new Set<Required<OverlayViewportReservation>>();\nconst listeners = /* @__PURE__ */ new Set<() => void>();\n\n/**\n * The custom property each edge is published as on the document root, so page chrome that overlays\n * cannot move for you - a sticky action bar, a floating button - can keep out of the same space:\n * `inset-block-end: calc(1.6rem + var(--et-viewport-inset-bottom, 0px))`.\n */\nconst INSET_PROPERTIES = {\n top: '--et-viewport-inset-top',\n right: '--et-viewport-inset-right',\n bottom: '--et-viewport-inset-bottom',\n left: '--et-viewport-inset-left',\n} as const satisfies Record<keyof OverlayViewportInset, string>;\n\n/**\n * Page content paints below every reserving surface, so - unlike an overlay - it keeps out of every\n * reservation, whichever level it was made on.\n */\nconst publishInsetProperties = () => {\n const root = globalThis.document?.documentElement;\n\n if (!root) return;\n\n const insets = overlayViewportInsets(Number.NEGATIVE_INFINITY);\n\n Object.entries(INSET_PROPERTIES).forEach(([edge, property]) => {\n if (!reservations.size) {\n root.style.removeProperty(property);\n\n return;\n }\n\n root.style.setProperty(property, `${insets[edge as keyof OverlayViewportInset]}px`);\n });\n};\n\nconst notify = () => {\n publishInsetProperties();\n listeners.forEach((listener) => listener());\n};\n\n/**\n * Reserves an edge of the viewport, so overlays keep out of it. Returns the release callback.\n *\n * Meant for a surface an application paints over its own content and above the overlay layer - a\n * docked devtools panel, an always-on-top widget. A centered or globally positioned overlay is laid\n * out inside what is left of the viewport, and an anchored one avoids the reserved edge the same way\n * it avoids the viewport edge. Page chrome that nothing can move for you - a sticky action bar, a\n * floating button - reads the published `--et-viewport-inset-*` custom properties instead.\n */\nexport const reserveOverlayViewportSpace = (reservation: OverlayViewportReservation) => {\n const entry: Required<OverlayViewportReservation> = {\n top: reservation.top ?? 0,\n right: reservation.right ?? 0,\n bottom: reservation.bottom ?? 0,\n left: reservation.left ?? 0,\n layer: reservation.layer ?? DEFAULT_OVERLAY_LAYER + 1,\n };\n\n reservations.add(entry);\n notify();\n\n return () => {\n if (!reservations.delete(entry)) return;\n\n notify();\n };\n};\n\n/**\n * What an overlay on this stacking level must keep out of: the largest reservation per edge made by a\n * surface that paints above it. Reservations on or below the level are ignored - they cannot cover it.\n */\nexport const overlayViewportInsets = (layer = DEFAULT_OVERLAY_LAYER): OverlayViewportInset => {\n let insets = NO_INSET;\n\n reservations.forEach((reservation) => {\n if (reservation.layer <= layer) return;\n\n insets = {\n top: Math.max(insets.top, reservation.top),\n right: Math.max(insets.right, reservation.right),\n bottom: Math.max(insets.bottom, reservation.bottom),\n left: Math.max(insets.left, reservation.left),\n };\n });\n\n return insets;\n};\n\n/** {@link overlayViewportInsets} for the stacking level `element` is rendered on. */\nexport const overlayViewportInsetsFor = (element: Element) => overlayViewportInsets(resolveOverlayLayer(element));\n\n/**\n * Runs `listener` whenever a reservation is made or released, so an already positioned overlay can be\n * laid out again. Returns the unsubscribe callback.\n *\n * @internal\n */\nexport const onOverlayViewportInsetsChange = (listener: () => void) => {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\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';\nimport { onOverlayViewportInsetsChange, overlayViewportInsetsFor } from './overlay-viewport-inset';\n\n/**\n * Shrinks the host box to the part of the viewport nothing above this overlay has reserved, so a\n * centered or globally placed pane is laid out inside it instead of under a docked panel.\n */\nconst applyViewportInsets = (hostElement: HTMLElement, renderer: AngularRenderer) => {\n const insets = overlayViewportInsetsFor(hostElement);\n\n renderer.setStyle(hostElement, {\n top: `${insets.top}px`,\n right: `${insets.right}px`,\n bottom: `${insets.bottom}px`,\n left: `${insets.left}px`,\n });\n};\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 applyViewportInsets(hostElement, renderer);\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 applyViewportInsets(hostElement, renderer);\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 const arrowElement = paneElement.querySelector<HTMLElement>('[et-floating-arrow]');\n if (arrowElement) renderer.setCssProperty(arrowElement, '--et-floating-arrow-translate', null);\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 onOverlayViewportInsetsChange(() => applyViewportInsets(hostElement, renderer));\n }\n\n applyCenteredPosition(hostElement, paneElement, renderer, strategy);\n\n return onOverlayViewportInsetsChange(() => applyViewportInsets(hostElement, renderer));\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 SideObject,\n} from '@floating-ui/dom';\nimport { AngularRenderer } from '../providers';\nimport { isElement, isHTMLElement } from './overlay-focus';\nimport { registerAnchoredPositionSetup } from './overlay-position';\nimport { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport { OverlayRuntimeAnchoredPosition } from './overlay-runtime.types';\nimport {\n onOverlayViewportInsetsChange,\n OverlayViewportInset,\n overlayViewportInsetsFor,\n} from './overlay-viewport-inset';\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\nconst toSideObject = (padding: Padding): SideObject =>\n typeof padding === 'number'\n ? { top: padding, right: padding, bottom: padding, left: padding }\n : {\n top: padding.top ?? 0,\n right: padding.right ?? 0,\n bottom: padding.bottom ?? 0,\n left: padding.left ?? 0,\n };\n\n/**\n * The strategy's own viewport padding plus the space reserved on each edge. Every middleware that\n * measures overflow gets it, so an edge a docked panel covers is as unavailable as the viewport edge.\n */\nconst paddingWithInsets = (padding: Padding, insets: OverlayViewportInset): SideObject => {\n const own = toSideObject(padding);\n\n return {\n top: own.top + insets.top,\n right: own.right + insets.right,\n bottom: own.bottom + insets.bottom,\n left: own.left + insets.left,\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 let updateId = 0;\n let destroyed = false;\n\n const update = () => {\n const currentUpdateId = ++updateId;\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 (isElement(strategy.referenceElement) && !strategy.referenceElement.isConnected) {\n handleUnusableReference();\n\n return;\n }\n\n const arrowElement = paneElement.querySelector<HTMLElement>('[et-floating-arrow]');\n const insets = overlayViewportInsetsFor(paneElement);\n const viewportPadding = paddingWithInsets(strategy.viewportPadding ?? 8, insets);\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 // shift owns cross-axis overflow; a full check here flips a pane near a side edge off its side\n crossAxis: strategy.shift !== false ? 'alignment' : true,\n padding: viewportPadding,\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: viewportPadding,\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: viewportPadding,\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: viewportPadding,\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 (destroyed || currentUpdateId !== updateId) return;\n\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 const cleanup = autoUpdate(strategy.referenceElement, paneElement, update);\n // A panel docked over the page changes how much room the pane has without moving, resizing or\n // scrolling anything `autoUpdate` watches.\n const stopInsetUpdates = onOverlayViewportInsetsChange(update);\n\n return () => {\n destroyed = true;\n updateId++;\n cleanup();\n stopInsetUpdates();\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 let backdropUpdater: ((hasBackdrop: boolean) => 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 */\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 /** @internal */\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 /** @internal */\n attachBackdropUpdater(updater: (hasBackdrop: boolean) => void) {\n backdropUpdater = updater;\n },\n\n /**\n * Adds or removes the backdrop of an open overlay. `elements.backdropElement` follows.\n * A closing overlay keeps the backdrop it has, so its leave transition stays intact.\n */\n updateBackdrop(hasBackdrop: boolean) {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n backdropUpdater?.(hasBackdrop);\n },\n\n /** @internal */\n markOpened() {\n if (_state() !== 'mounting') {\n return;\n }\n\n _state.set('mounted');\n afterOpenedSubject.next();\n afterOpenedSubject.complete();\n },\n\n /** @internal */\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 /** @internal */\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 Signal,\n createEnvironmentInjector,\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, isElement, isHTMLOrSVGElement, ownsActiveElement, setupFocusTrap } from './overlay-focus';\nimport { DEFAULT_OVERLAY_LAYER, OVERLAY_LAYER_ATTRIBUTE, isOnHigherOverlayLayer } from './overlay-layer';\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: Signal<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 = openEntriesState.asReadonly();\n\n // One runtime root per document and stacking level: overlays usually all mount into the app's\n // document at the default level, but an overlay anchored inside a same-origin pop-up window\n // (config.document) needs a root over there, and one opened from inside something that paints\n // above the default level (config.zIndex) needs a root of its own to stack above it.\n const rootElements = new Map<Document, Map<number, 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, zIndex: number) => {\n let documentRoots = rootElements.get(targetDocument);\n\n if (!documentRoots) {\n documentRoots = new Map<number, HTMLElement>();\n rootElements.set(targetDocument, documentRoots);\n }\n\n const existingRoot = documentRoots.get(zIndex);\n if (existingRoot) {\n return existingRoot;\n }\n\n const rootElement = renderer.createElement('div');\n renderer.addClass(rootElement, 'et-overlay-runtime-root');\n // So an overlay opened from inside this root's own content resolves back to the same level\n // instead of dropping to the default one.\n renderer.setAttribute(rootElement, OVERLAY_LAYER_ATTRIBUTE, `${zIndex}`);\n renderer.setStyle(rootElement, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n pointerEvents: 'none',\n zIndex: `${zIndex}`,\n });\n renderer.appendChild(targetDocument.body, rootElement);\n documentRoots.set(zIndex, rootElement);\n\n return rootElement;\n };\n\n const maybeDestroyRootElements = (targetDocument: Document) => {\n const documentRoots = rootElements.get(targetDocument);\n\n if (!documentRoots) {\n return;\n }\n\n documentRoots.forEach((rootElement, zIndex) => {\n if (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 documentRoots.delete(zIndex);\n });\n\n if (!documentRoots.size) {\n rootElements.delete(targetDocument);\n }\n };\n\n const isTopMost = (overlayRef: OverlayRuntimeRef<object, unknown>) => {\n const entries = openEntriesState();\n\n for (let index = entries.length - 1; index >= 0; index--) {\n const entry = entries[index];\n\n if (!entry || entry.config.passive || entry.state() === 'closing' || entry.state() === 'closed') continue;\n\n return entry === overlayRef;\n }\n\n return false;\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 layer = config.zIndex ?? DEFAULT_OVERLAY_LAYER;\n const root = getRootElement(targetDocument, layer);\n const hostElement = renderer.createElement('div');\n const paneElement = renderer.createElement('div');\n const backdropElement = signal<HTMLElement | null>(null);\n const previousFocusedElement = isHTMLOrSVGElement(targetDocument.activeElement)\n ? targetDocument.activeElement\n : null;\n const autoFocus = config.autoFocus ?? 'first-tabbable';\n let currentHasBackdrop = config.hasBackdrop !== false;\n let currentPositionStrategy = config.positionStrategy;\n\n const activeConfig = () =>\n ({\n ...config,\n positionStrategy: currentPositionStrategy,\n hasBackdrop: currentHasBackdrop,\n }) as OverlayRuntimeMountConfig<object>;\n\n const createBackdropElement = () => {\n const element = renderer.createElement('div');\n\n renderer.addClass(element, 'et-overlay-runtime-backdrop');\n setBackdropStyles(element, renderer);\n renderer.setAttribute(element, 'data-overlay-id', config.id);\n (config.backdropClass ?? []).forEach((className) => renderer.addClass(element, className));\n\n return element;\n };\n\n renderer.addClass(hostElement, 'et-overlay-runtime-entry');\n setBaseElementStyles(activeConfig(), 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 (currentHasBackdrop) {\n const element = createBackdropElement();\n\n renderer.appendChild(hostElement, element);\n backdropElement.set(element);\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: backdropElement.asReadonly(),\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 parentEnvironmentInjector = parentInjector.get(EnvironmentInjector, environmentInjector);\n const overlayEnvironmentInjector = createEnvironmentInjector(config.providers ?? [], parentEnvironmentInjector);\n const elementInjector = Injector.create({\n parent: parentInjector,\n // Element DI chains to the opener, so without this the opener's environment injector answers\n // `EnvironmentInjector` from inside the overlay - and a component created through a\n // ViewContainerRef down there (the container's own content component) never sees\n // `config.providers`.\n providers: [{ provide: EnvironmentInjector, useValue: overlayEnvironmentInjector }],\n }) as EnvironmentInjector;\n\n const componentRef = createComponent(config.component, {\n environmentInjector: overlayEnvironmentInjector,\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 activeConfig(),\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n cleanupFns.push(() => positionCleanup());\n\n const getOriginElement = () =>\n currentPositionStrategy?.kind === 'anchored' && isElement(currentPositionStrategy.referenceElement)\n ? currentPositionStrategy.referenceElement\n : null;\n\n overlayRef.attachPositionUpdater((strategy) => {\n currentPositionStrategy = strategy;\n positionCleanup();\n resetPositioningStyles(activeConfig(), hostElement, paneElement, renderer);\n positionCleanup = setupPositioning(\n activeConfig(),\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n });\n\n overlayRef.attachBackdropUpdater((hasBackdrop) => {\n if (hasBackdrop === currentHasBackdrop) {\n return;\n }\n\n currentHasBackdrop = hasBackdrop;\n\n if (hasBackdrop) {\n const element = createBackdropElement();\n\n renderer.insertBefore(hostElement, element, paneElement);\n backdropElement.set(element);\n } else {\n const element = backdropElement();\n\n if (element) {\n renderer.removeChild(hostElement, element);\n backdropElement.set(null);\n }\n }\n\n renderer.setStyle(hostElement, { pointerEvents: hasBackdrop ? 'auto' : 'none' });\n });\n\n const destroyMountedOverlay = (closeEvent: OverlayRuntimeCloseEvent<TResult>) => {\n animationDebugLog(`runtime ${config.id}`, `destroy (source \"${closeEvent.source}\")`);\n\n // Read before teardown: removing the host element moves focus to the body, which would make\n // every close look like the overlay still owned it.\n const overlayStillOwnsFocus = ownsActiveElement(hostElement, targetDocument);\n\n cleanupFns.forEach((cleanup) => cleanup());\n\n // On app teardown the ApplicationRef is destroyed before this runs; detaching then warns NG0406.\n if (!appRef.destroyed) {\n appRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n\n // Angular does not own this injector, so nothing else tears down what the overlay's own\n // providers registered on it - their `DestroyRef` hooks and effects would outlive the overlay.\n if (!elementInjector.destroyed) {\n elementInjector.destroy();\n }\n overlayEnvironmentInjector.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 maybeDestroyRootElements(targetDocument);\n\n if (config.restoreFocus !== false && overlayStillOwnsFocus && 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 = () => {\n const closeEvent = { result: undefined, source: 'api' } as const;\n overlayRef.beginClose(closeEvent);\n destroyMountedOverlay(closeEvent);\n };\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 (\n event.key !== 'Escape' ||\n event.defaultPrevented ||\n !isTopMost(overlayRef as OverlayRuntimeRef<object, unknown>)\n ) {\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 // bubble phase so content inside the overlay can preventDefault or stopPropagation an Escape first\n targetDocument.addEventListener('keydown', onKeyDown);\n cleanupFns.push(() => targetDocument.removeEventListener('keydown', onKeyDown));\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 (!isElement(target) || paneElement.contains(target)) {\n return;\n }\n\n if (isOnHigherOverlayLayer(target, layer)) {\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 (isElement(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) => maybeDestroyRootElements(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\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) {\n return null;\n }\n\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, 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 MatchStateType = {\n PREPARING_ROUND: 'preparingRound',\n PRE_MATCH: 'preMatch',\n LIVE: 'live',\n POST_MATCH: 'postMatch',\n AUTO_WIN: 'autoWin',\n} as const;\n\nexport type MatchStateType = (typeof MatchStateType)[keyof typeof MatchStateType];\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 {\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 { 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 { 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 let fileExtension: string | null = null;\n\n if (queryPart) {\n const fmValue = new URLSearchParams(queryPart).get('fm')?.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/vnd.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 'application/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 { 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(fromEvent<PointerEvent>(doc, 'pointerup'), fromEvent<PointerEvent>(doc, 'pointercancel')).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>(doc, '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 styleUrl: './resize-handles.component.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'et-resize-handles',\n '[attr.inert]': 'disabled() ? \"\" : null',\n '[attr.data-active-edge]': 'activeEdge()',\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 share(),\n takeUntilDestroyed(),\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 protected readonly edgeCursors = EDGE_CURSORS;\n\n protected 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 { 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 { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n DestroyRef,\n EnvironmentInjector,\n inject,\n isDevMode,\n PLATFORM_ID,\n provideEnvironmentInitializer,\n} from '@angular/core';\n\nconst TOLERANCE_PX = 0.5;\n\nconst readFontSizePx = (view: Window, element: Element) => {\n const match = /^(\\d+(?:\\.\\d+)?)px$/.exec(view.getComputedStyle(element).fontSize ?? '');\n\n return match ? Number(match[1]) : null;\n};\n\nconst measureProbe = (document: Document, view: Window, fontSize: string) => {\n const probe = document.createElement('div');\n\n probe.style.setProperty('display', 'none', 'important');\n probe.style.setProperty('font-size', fontSize, 'important');\n document.documentElement.appendChild(probe);\n\n try {\n return readFontSizePx(view, probe);\n } finally {\n probe.remove();\n }\n};\n\nconst measureUnsetRootFontSize = (document: Document) => {\n const view = document.defaultView;\n\n if (!view) return null;\n\n const root = readFontSizePx(view, document.documentElement);\n const browserDefault = measureProbe(document, view, 'medium');\n const smallest = measureProbe(document, view, '1px');\n\n if (root === null || browserDefault === null || smallest === null) return null;\n\n // A browser minimum font size at or above the default clamps any root to the default.\n if (smallest >= browserDefault - TOLERANCE_PX) return null;\n\n return Math.abs(root - browserDefault) <= TOLERANCE_PX ? root : null;\n};\n\nconst warnIfRootFontSizeUnset = (document: Document) => {\n const root = measureUnsetRootFontSize(document);\n\n if (root === null) return;\n\n console.warn(\n `[provideSurfaceThemesWithTailwind4] The root font size is ${root}px, the browser default, so every SDK control renders 1.6x too large. The SDK sizes everything in rem against a 10px root (${root * 0.625}px here). Add \\`html { font-size: 62.5%; }\\` to your global styles. See https://ethlete-sdk-docs-next.web.app/components/setup`,\n );\n};\n\nexport const provideRootFontSizeCheck = () =>\n provideEnvironmentInitializer(() => {\n if (!isDevMode() || !isPlatformBrowser(inject(PLATFORM_ID))) return;\n\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n const injector = inject(EnvironmentInjector);\n\n afterNextRender(\n () => {\n const view = document.defaultView;\n\n if (!view) return;\n\n if (document.readyState === 'complete') {\n warnIfRootFontSizeUnset(document);\n\n return;\n }\n\n const removeListener = () => view.removeEventListener('load', onLoad);\n const unregisterOnDestroy = destroyRef.onDestroy(removeListener);\n const onLoad = () => {\n removeListener();\n unregisterOnDestroy();\n warnIfRootFontSizeUnset(document);\n };\n\n view.addEventListener('load', onLoad);\n },\n { injector },\n );\n });\n","import { defineStaticProvider, toInjectFn, toProvideFn } from '../utils';\nimport { provideRootFontSizeCheck } from './root-font-size-check';\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: RegisteredSurfaceThemeName;\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, ethlete/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\n/**\n * Registers the app's surface themes. In dev mode it also warns once the page has loaded if the root\n * font size is still the browser default, i.e. the app is missing `html { font-size: 62.5%; }`.\n */\nexport const provideSurfaceThemesWithTailwind4 = (themes: SurfaceTheme[], prefix = 'et') => [\n ɵProvideSurfaceThemes(themes),\n ɵProvideSurfaceThemesPrefix(prefix),\n ngDevMode ? provideRootFontSizeCheck() : [],\n];\n\n/**\n * Inject the registered `isDefault` surface theme of a `type` - the surface an app renders on\n * where nothing scopes one. Without a `type`, resolves the default of the only surface type the\n * app registers; an app registering both must name the one it means, since which of the two\n * `:root` paints is a `prefers-color-scheme` decision. `null` when neither applies.\n */\nexport const injectDefaultSurfaceTheme = (type?: SurfaceType) => {\n const defaults = injectSurfaceThemes({ optional: true })?.filter((theme) => theme.isDefault) ?? [];\n\n if (type) return defaults.find((theme) => theme.type === type) ?? null;\n\n return defaults.length === 1 ? (defaults[0] ?? null) : null;\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 Signal,\n untracked,\n} from '@angular/core';\nimport {\n createCssSurfaceName,\n injectDefaultSurfaceTheme,\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 private parentProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n private defaultTheme = injectDefaultSurfaceTheme();\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) return null;\n\n // Only the outermost provider adopts the app default. A nested one left unset must keep\n // resolving to `null` so it reports the surface it inherits instead of resetting elevation.\n if (!value) return this.parentProvider ? null : this.defaultTheme;\n\n const theme = this.themes.find((t) => t.name === value) ?? null;\n\n if (isDevMode() && !theme) {\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 /**\n * The surface theme in effect on this element - the theme this provider resolves itself, or,\n * where it is left unset, the one it inherits from the closest ancestor provider. The outermost\n * provider resolves the app default, so the chain ends there.\n */\n activeTheme: Signal<SurfaceTheme | null> = computed(\n () => this.resolvedTheme() ?? this.parentProvider?.activeTheme() ?? null,\n );\n\n elevation = computed(() => this.activeTheme()?.elevation ?? 0);\n\n surfaceType = computed(() => this.activeTheme()?.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.activeTheme()?.name;\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\n/**\n * Inject a signal containing the surface type the current subtree renders on - the type of the\n * surrounding surface provider, or of the app's default surface where nothing provides one.\n */\nexport const injectSurfaceType = () => {\n const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n const defaultType = injectDefaultSurfaceTheme()?.type ?? null;\n\n return computed(() => provider?.surfaceType() ?? defaultType);\n};\n\n/**\n * Inject a signal containing the surface theme the current subtree renders on - the theme in\n * effect on the surrounding surface provider, or the app's default surface where nothing provides\n * one. Use it to derive an elevation relative to the surrounding surface.\n *\n * `null` where the app registers no surface themes, or registers a default per surface type -\n * which of those two `:root` paints is a `prefers-color-scheme` decision, so it cannot be\n * resolved at runtime.\n */\nexport const injectParentSurface = () => {\n const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n const defaultTheme = injectDefaultSurfaceTheme();\n\n return computed(() => provider?.activeTheme() ?? defaultTheme);\n};\n","import { 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 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 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 { 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 { injectParentSurface, ProvideSurfaceDirective } 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 surfaceThemes = injectSurfaceThemes({ optional: true });\n private surfaceContextTracker = injectSurfaceContextTracker();\n private parentSurface = injectParentSurface();\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 explicitProvider = this.surfaceProvider();\n const contextTheme = explicitProvider ? explicitProvider.activeTheme() : this.parentSurface();\n const contextElevation = contextTheme?.elevation ?? null;\n const contextType = contextTheme?.type ?? 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, ethlete/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({ optional: true });\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({ optional: true });\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/** Reads the nonce where Angular's default `CSP_NONCE` does, since these run outside any injector. */\nconst createNoncedStyle = () => {\n const style = document.createElement('style');\n const nonce = document.body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce');\n\n if (nonce) style.setAttribute('nonce', nonce);\n\n return style;\n};\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 if (typeof document === 'undefined') return;\n\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 document.getElementById('et-root-themes')?.remove();\n const style = createNoncedStyle();\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 if (typeof document === 'undefined') return;\n\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 document.getElementById(`${classPrefix}--${cssThemeName}`)?.remove();\n const style = createNoncedStyle();\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","// 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.60';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AnimatableDirective","DOCUMENT","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/utils/angular/component-id.ts","../../../../libs/core/src/lib/utils/angular/destroy.ts","../../../../libs/core/src/lib/utils/object.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/signal-data-utils.ts","../../../../libs/core/src/lib/signals/element-dimensions.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/countdown.ts","../../../../libs/core/src/lib/signals/deferred-loading.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-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/easing-tokens-styles.component.ts","../../../../libs/core/src/lib/animations/animatable.directive.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/unsaved-changes/unsaved-changes-coordinator.ts","../../../../libs/core/src/lib/unsaved-changes/unsaved-changes-source.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/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/app-update/build-fingerprint.ts","../../../../libs/core/src/lib/app-update/stale-build-error.ts","../../../../libs/core/src/lib/app-update/app-updates.ts","../../../../libs/core/src/lib/overlay/overlay-layer.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-viewport-inset.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-score.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-participants.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/resize-handles/resize-handles.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/root-font-size-check.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/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","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","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","import { ElementRef, inject, InjectionToken, InjectOptions, StaticProvider, TemplateRef } from '@angular/core';\nimport { isObject } from '../object';\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: () => StaticProvider[];\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>) => StaticProvider[];\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): StaticProvider[] => [\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): StaticProvider[] => [\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 (isObject(valueOverride) && isObject(defaultValue)) {\n return { ...defaultValue, ...valueOverride };\n }\n\n return valueOverride ?? defaultValue;\n};\n","import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\n\nexport const cloneFormGroup = <T extends FormGroup<any>>(formGroup: T) => {\n const cloneControl = (control: AbstractControl): AbstractControl => {\n let clonedControl: AbstractControl;\n\n if (control instanceof FormGroup) {\n const controls = Object.fromEntries(\n Object.entries(control.controls).map(([key, child]) => [key, cloneControl(child)]),\n );\n clonedControl = new FormGroup(controls, control.validator, control.asyncValidator);\n } else if (control instanceof FormArray) {\n clonedControl = new FormArray(\n control.controls.map((child) => cloneControl(child)),\n control.validator,\n control.asyncValidator,\n );\n } else {\n clonedControl = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n }\n\n if (control.disabled && clonedControl.enabled) {\n clonedControl.disable({ emitEvent: false });\n }\n\n return clonedControl;\n };\n\n const clonedForm = cloneControl(formGroup) as T;\n clonedForm.updateValueAndValidity();\n\n return clonedForm as T;\n};\n\nexport const getFormGroupValue = <T extends FormGroup>(formGroup: T) => {\n const getControlValue = (control: AbstractControl): unknown => {\n if (control instanceof FormGroup) {\n return getFormGroupValue(control);\n }\n\n if (control instanceof FormArray) {\n return control.controls.map(getControlValue);\n }\n\n return control.value ?? null;\n };\n\n const value: Record<string, unknown> = {};\n\n Object.entries(formGroup.controls).forEach(([key, control]) => {\n value[key] = getControlValue(control);\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?: AddEventListenerOptions,\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?: AddEventListenerOptions,\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?: AddEventListenerOptions,\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 (!Array.isArray(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 if (typeof value !== 'string') {\n return null;\n }\n\n const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;\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 (control?.value !== matchingControl?.value) {\n return { [MUST_MATCH]: true };\n }\n\n return null;\n };\n};\n\nexport const EthleteValidators = {\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, seen: WeakMap<object, unknown>) => {\n if (typeof val.value === 'object' && val.value !== null) val.value = cloneValue(val.value, seen);\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\nconst cloneValue = <T>(original: T, seen: WeakMap<object, unknown>): T => {\n if (typeof original !== 'object') return original;\n if (original === null) return original;\n const existing = seen.get(original);\n if (existing) return existing as T;\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(Object.getPrototypeOf(_og));\n } else if (str === '[object Array]') {\n tmp = Array(_og.length);\n } else if (str === '[object Set]') {\n tmp = new Set();\n seen.set(_og, tmp);\n _og.forEach(function (val: any) {\n tmp.add(cloneValue(val, seen));\n });\n } else if (str === '[object Map]') {\n tmp = new Map();\n seen.set(_og, tmp);\n _og.forEach(function (val: any, key: any) {\n tmp.set(cloneValue(key, seen), cloneValue(val, seen));\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(cloneValue(_og.buffer, seen));\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 seen.set(_og, tmp);\n\n for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]!), seen);\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), seen);\n }\n }\n\n return tmp || _og;\n};\n\nexport const clone = <T>(original: T): T => cloneValue(original, new WeakMap());\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\n/** A constructor check misses a Date from another realm, or one created under a faked global `Date`. */\nconst isDate = (value: any): value is Date => Object.prototype.toString.call(value) === '[object Date]';\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 (isDate(foo) || isDate(bar)) return isDate(foo) && isDate(bar) && foo.getTime() === bar.getTime();\n\n if (\n foo &&\n bar &&\n ((ctor = foo.constructor) === bar.constructor ||\n (!ctor && bar.constructor === Object) ||\n (ctor === Object && !bar.constructor))\n ) {\n ctor ??= bar.constructor;\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 const cookie = document.cookie.split(';').find((entry) => entry.trim().startsWith(`${name}=`));\n\n return cookie?.trim().slice(name.length + 1) ?? null;\n};\n\nexport const setCookie = (\n name: string,\n data: string,\n expiresInDays?: number | null,\n domain: string | null = 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 if (domain) {\n cookieString += `; domain=${domain}`;\n }\n\n cookieString += `; SameSite=${sameSiteUpper}`;\n\n if (sameSite === 'none' || (typeof window !== 'undefined' && window.location.protocol === 'https:')) {\n cookieString += '; Secure';\n }\n\n cookieString += ';';\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, path = '/', domain: string | null = 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 window === '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 { Subject, takeUntil, tap, timer } from 'rxjs';\n\nexport class KeyPressManager {\n private isKeyPressed = false;\n private keyPressCount = 0;\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 = this.keyPressCount >= 1;\n this.keyPressCount++;\n\n this._stopTimeout$.next();\n\n timer(100)\n .pipe(\n takeUntil(this._stopTimeout$),\n tap(() => this.clear()),\n )\n .subscribe();\n } else {\n this.clear();\n }\n\n return this.isKeyPressed;\n }\n\n clear() {\n this.isKeyPressed = false;\n this.keyPressCount = 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: Element, 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: Element, ...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 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 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 | ReadonlyArray<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 try {\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElements' in val && 'previousElements' in val;\n } catch {\n return false;\n }\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\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 = (\n input: Signal<SignalElementBindingComplexType | ElementSignalValue>,\n): ElementSignal => {\n return linkedSignal({\n source: input,\n computation: (source, previous) => {\n if (\n typeof source === 'object' &&\n source !== null &&\n 'currentElements' in source &&\n 'previousElements' in source\n ) {\n return source as ElementSignalValue;\n }\n\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 {\n ApplicationRef,\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 = 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 // The application's root injector, not the nearest one: an overlay runs its content in an\n // environment injector of its own, and keying on that would build a second observer - plus, for\n // the scrollbar ruler, a second element in `<body>` - for every open overlay.\n const envInjector = inject(ApplicationRef).injector;\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 {\n DOCUMENT,\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';\nimport { memoizeSignal } from './signal-data-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 // A viewChild.required throws NG0951 until the view exists, so the element is first read in the effect.\n const elementDimensionsSignal = signal<NullableElementDimensions>(createElementDimensions(null));\n\n let observer: ResizeObserver | null = null;\n\n effect(() => {\n const els = firstEl();\n const rendered = isRendered();\n\n untracked(() => {\n elementDimensionsSignal.set(initialValue());\n\n if (!rendered || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n observer ??= new ResizeObserver((entries) => {\n const entry = entries[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 observer.disconnect();\n\n if (els.currentElement) {\n const computedDisplay = els.currentElement.ownerDocument.defaultView?.getComputedStyle(\n els.currentElement,\n ).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 = /* @__PURE__ */ memoizeSignal((): 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 { computed, DestroyRef, DOCUMENT, inject, signal } 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 destroyRef = inject(DestroyRef);\n const renderer = injectRenderer();\n const view = document.defaultView;\n\n if (!view) return signal<{ width: number; height: number } | null>(null).asReadonly();\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 = view.getComputedStyle(document.documentElement).scrollbarWidth;\n renderer.appendChild(document.body, scrollbarRuler);\n destroyRef.onDestroy(() => {\n const parent = renderer.parentNode(scrollbarRuler);\n if (parent) renderer.removeChild(parent, scrollbarRuler);\n });\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';\nimport { signalIsRendered } from './render-utils';\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 const isRendered = signalIsRendered();\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) {\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) {\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 let observer: ResizeObserver | null = null;\n\n effect(() => {\n const elements = observedElements.map((element) => element().currentElement);\n const rendered = isRendered();\n\n untracked(() => {\n if (!rendered || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n observer ??= new ResizeObserver(() => {\n if (ready) run();\n });\n observer.disconnect();\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n });\n });\n\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 { DestroyRef, 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 destroyRef = inject(DestroyRef);\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 let destroyed = false;\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 if (delta === 0) {\n options.onAnimationEnd?.();\n\n return readonlySignal;\n }\n\n options.onAnimationStart?.();\n\n if (typeof requestAnimationFrame === 'undefined') {\n currentAnimatedValue = targetValue;\n animatedValue.set(round(targetValue));\n options.onAnimationEnd?.();\n\n return readonlySignal;\n }\n\n ngZone.runOutsideAngular(() => {\n const animate = (timestamp: number) => {\n if (destroyed) return;\n\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 destroyRef.onDestroy(() => {\n destroyed = true;\n cancelAnimation();\n });\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, DestroyRef, 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 destroyRef = inject(DestroyRef);\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 const queryListenerCleanups = new Map<string, () => void>();\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 if (queryList) {\n const onChange = (event: MediaQueryListEvent) => matches.set(event.matches);\n queryList.addEventListener('change', onChange);\n queryListenerCleanups.set(mediaQuery, () => queryList.removeEventListener('change', onChange));\n }\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 === undefined && options.max === undefined) {\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 !== undefined) {\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.max !== undefined) {\n const max = typeof options.max === 'number' ? options.max : getBreakpointSize(options.max, 'max');\n if (max !== Infinity) mediaQueryParts.push(`(max-width: ${max}px)`);\n }\n\n return mediaQueryParts.length > 0 ? mediaQueryParts.join(' and ') : '(min-width: 0px)';\n };\n\n destroyRef.onDestroy(() => {\n queryListenerCleanups.forEach((cleanup) => cleanup());\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\n/** Builds an input transform that coerces a value or a per-breakpoint map to `T` for the current breakpoint. */\nexport const breakpointTransformBase = <T, WriteT = BreakpointInput<T>>(\n coerce: (value: WriteT) => T,\n defaultValue: T,\n): ((value: WriteT) => T) => {\n const currentBp = injectCurrentBreakpoint();\n const injector = inject(Injector);\n const raw = signal<BreakpointInput<T> | undefined>(undefined);\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 raw.set(coerced);\n return isBreakpointMap(coerced) ? resolveFromMap(coerced as BreakpointMap<T>, currentBp(), defaultValue) : coerced;\n };\n\n effect(() => {\n const bp = currentBp();\n const r = raw();\n\n if (!cachedSig) {\n const instance = injector.get(BREAKPOINT_INSTANCE_TOKEN, null) as any;\n if (!instance) return;\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, defaultValue);\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(false) });\n * // Template: `snap` | `[snap]=\"true\"` | `[snap]=\"{ xs: false, md: true }\"`\n */\nexport const boolBreakpointTransform = (\n defaultValue = false,\n): ((value: BreakpointInput<boolean> | string) => boolean) =>\n breakpointTransformBase<boolean, BreakpointInput<boolean> | string>(booleanAttribute, defaultValue);\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(0) });\n * // Template: `[scrollMargin]=\"16\"` | `[scrollMargin]=\"{ xs: 0, md: 16 }\"`\n */\nexport const numberBreakpointTransform = (defaultValue = 0): ((value: BreakpointInput<number> | string) => number) =>\n breakpointTransformBase<number, BreakpointInput<number> | string>((v) => numberAttribute(v), defaultValue);\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>('auto') });\n * tags = input([], { transform: typedBreakpointTransform<string[]>([]) });\n * // Template: `[itemSize]=\"'third'\"` | `[itemSize]=\"{ xs: 'full', md: 'third' }\"`\n */\nexport const typedBreakpointTransform = <T>(defaultValue: T): ((value: BreakpointInput<T>) => T) =>\n breakpointTransformBase((v) => v as T, defaultValue);\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 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, 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 changes = ctrl.valueChanges.pipe(map(() => ctrl.getRawValue()));\n const debouncedChanges = options?.debounceTime ? changes.pipe(debounceTime(options.debounceTime)) : changes;\n\n if (!options?.debounceFirst) {\n return merge(of(ctrl.getRawValue()), debouncedChanges);\n }\n\n const values = merge(of(ctrl.getRawValue()), changes);\n return options.debounceTime ? values.pipe(debounceTime(options.debounceTime)) : values;\n }),\n );\n\n const obs: Observable<TValue | null> = controlObs;\n\n return toSignal(obs.pipe(distinctUntilChanged((a, b) => equal(a, b))), {\n initialValue: options?.debounceFirst ? null : 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 Signal<AbstractControl | null> | AbstractControl>(\n control: T,\n options?: ControlValueSignalOptions,\n) => {\n type TControl = NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>;\n type TValue = ReturnType<TControl['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 { isPlatformBrowser } from '@angular/common';\nimport { PLATFORM_ID, Signal, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { EMPTY, expand, of, skip, switchMap, tap, timer } from 'rxjs';\n\nexport type CountdownDeadline = Date | string | number | null | undefined;\n\nexport type Countdown = {\n /** Whole seconds left, rounded up - `0` once the deadline has passed. */\n totalSeconds: number;\n days: number;\n /** `0` - `23` */\n hours: number;\n /** `0` - `59` */\n minutes: number;\n /** `0` - `59` */\n seconds: number;\n hasPassed: boolean;\n};\n\nconst SECOND_MS = 1000;\n\nconst toTimestamp = (deadline: CountdownDeadline) => {\n if (deadline === null || deadline === undefined || deadline === '') return null;\n\n const timestamp = new Date(deadline).getTime();\n\n return Number.isNaN(timestamp) ? null : timestamp;\n};\n\nconst toCountdown = (remainingMs: number): Countdown => {\n const totalSeconds = Math.max(0, Math.ceil(remainingMs / SECOND_MS));\n\n return {\n totalSeconds,\n days: Math.floor(totalSeconds / 86_400),\n hours: Math.floor((totalSeconds % 86_400) / 3600),\n minutes: Math.floor((totalSeconds % 3600) / 60),\n seconds: totalSeconds % 60,\n hasPassed: totalSeconds === 0,\n };\n};\n\n/**\n * The time left until `deadline`, recounted on every whole second and broken down into days, hours, minutes\n * and seconds. `null` while the deadline is missing or not a valid date. The timer stops once the deadline\n * has passed, and never runs on the server.\n *\n * Call in an injection context.\n *\n * ```ts\n * protected timeLeft = signalCountdown(computed(() => this.round()?.startsAt));\n * ```\n */\nexport const signalCountdown = (deadline: () => CountdownDeadline): Signal<Countdown | null> => {\n const end = computed(() => toTimestamp(deadline()));\n const tick = signal(0);\n\n if (isPlatformBrowser(inject(PLATFORM_ID))) {\n toObservable(end)\n .pipe(\n switchMap((endsAt) => {\n if (endsAt === null) return EMPTY;\n\n return of(null).pipe(\n expand(() => {\n const remainingMs = endsAt - Date.now();\n\n return remainingMs <= 0 ? EMPTY : timer(remainingMs % SECOND_MS || SECOND_MS);\n }),\n skip(1),\n );\n }),\n tap(() => tick.update((count) => count + 1)),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n return computed(() => {\n tick();\n\n const endsAt = end();\n\n return endsAt === null ? null : toCountdown(endsAt - Date.now());\n });\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { PLATFORM_ID, Signal, computed, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { EMPTY, map, of, switchMap, tap, timer } from 'rxjs';\n\nexport type SignalDeferredLoadingOptions = {\n /** How long the source must stay truthy before the indicator turns on, in ms. @default 200 */\n delay?: number;\n /** How long the indicator stays on once it turned on, in ms. @default 300 */\n minDuration?: number;\n};\n\n/**\n * Gates a loading indicator on a loading flag, so work that finishes quickly never flashes one: the\n * returned signal turns true only once `source` has been true for `delay` ms, and then stays true for\n * `minDuration` ms even if the work has already finished.\n *\n * Use it for what the reader *sees* - a spinner, a busy bar, a skeleton - and keep the raw flag for\n * everything else (`aria-busy`, whether a request is in flight, geometry that must not jump).\n *\n * Call in an injection context.\n *\n * ```ts\n * protected showSpinner = signalDeferredLoading(this.loading);\n * ```\n */\nexport const signalDeferredLoading = (\n source: () => boolean,\n options?: SignalDeferredLoadingOptions,\n): Signal<boolean> => {\n const delay = options?.delay ?? 200;\n const minDuration = options?.minDuration ?? 300;\n\n const visible = signal(false);\n\n // Nothing to defer on the server - there is no first paint to protect, and a pending timer would\n // hold up serialization for as long as it runs.\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return visible.asReadonly();\n }\n\n let shownAt = 0;\n\n toObservable(computed(() => source()))\n .pipe(\n switchMap((loading) => {\n if (loading === untracked(visible)) {\n return EMPTY;\n }\n\n if (loading) {\n return timer(delay).pipe(map(() => true));\n }\n\n const remaining = minDuration - (performance.now() - shownAt);\n\n return remaining <= 0 ? of(false) : timer(remaining).pipe(map(() => false));\n }),\n tap((isVisible) => {\n if (isVisible) {\n shownAt = performance.now();\n }\n\n visible.set(isVisible);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n return visible.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[]>([]);\n\n let observer: MutationObserver | null = null;\n\n effect(() => {\n const els = firstEl();\n const rendered = isRendered();\n\n elementMutationsSignal.set([]);\n\n if (!rendered || typeof MutationObserver === 'undefined') {\n return;\n }\n\n observer ??= new MutationObserver((records) => {\n if (records.length) {\n zone.run(() => elementMutationsSignal.set(records));\n }\n });\n observer.disconnect();\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 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 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 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 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: inlineIntersectionPercentage > 0 && blockIntersectionPercentage > 0,\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;\nconst FULLY_VISIBLE_RATIO = 0.99;\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 (entry.intersectionRatio >= FULLY_VISIBLE_RATIO) {\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 { root: rootBinding, enabled, ...observerOptions } = options ?? {};\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const root = firstElementSignal(rootBinding ? buildElementSignal(rootBinding) : createEmptyElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = 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 elementIntersectionSignal.set([]);\n\n return;\n }\n\n const newObserver = new IntersectionObserver((entries) => updateIntersections(entries), {\n ...observerOptions,\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) {\n elementIntersectionSignal.set([]);\n\n return;\n }\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 if (!initialElementVisibility) continue;\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\nconst 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 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, EnvironmentInjector, inject, PLATFORM_ID } from '@angular/core';\nimport { injectRenderer } from '../../providers';\nimport { injectScrollbarDimensions, injectViewportDimensions } from '../media-queries';\n\nconst scrollbarSizeWriters = /* @__PURE__ */ new WeakSet<EnvironmentInjector>();\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 const environmentInjector = inject(EnvironmentInjector);\n if (scrollbarSizeWriters.has(environmentInjector)) {\n return;\n }\n scrollbarSizeWriters.add(environmentInjector);\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\nconst viewportSizeWriters = /* @__PURE__ */ new WeakSet<EnvironmentInjector>();\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 const environmentInjector = inject(EnvironmentInjector);\n if (viewportSizeWriters.has(environmentInjector)) {\n return;\n }\n viewportSizeWriters.add(environmentInjector);\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 // A host destroyed mid-drag never re-runs the styling effect, so the grabbing cursor it wrote on\n // `<html>` would outlive the page it was dragged on.\n destroyRef.onDestroy(() => renderer.removeStyle(document.documentElement, 'cursor'));\n\n effect(() => {\n const { previousElement } = element();\n\n if (previousElement) {\n renderer.removeStyle(previousElement, 'cursor');\n }\n });\n\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 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 takeUntil(dragEnd),\n tap((e) => updateDragging(e)),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n\n dragEnd\n .pipe(\n take(1),\n tap(() => updateDraggingEnd()),\n takeUntilDestroyed(destroyRef),\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, runInInjectionContext } 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 its first navigation has completed, including one that completed\n * before this signal was first injected.\n */\nexport const injectIsRouterInitialized = /* @__PURE__ */ memoizeSignal(() => {\n const event = injectRouterEvent();\n const navigatedBefore = inject(Router).navigated;\n\n return computed(() => {\n const e = event();\n\n return navigatedBefore || (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 browserUrl =\n typeof window === 'undefined'\n ? router.url\n : window.location.pathname + window.location.search + window.location.hash;\n const url = router.navigated ? router.url : browserUrl;\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 = config?.injector\n ? runInInjectionContext(config.injector, injectRouterState)\n : 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, tap } 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\n// Two navigations that matched the same route definition get the same object back, which is what\n// tells `/detail/1` -> `/detail/2` apart from `/list` -> `/detail/1`.\nconst getDeepestRouteConfig = (router: Router) => {\n let route = router.routerState.snapshot.root;\n\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n return route.routeConfig;\n};\n\nconst didPathParamsChange = (prevParams: Params, currParams: Params) =>\n [...new Set(Object.keys(prevParams).concat(Object.keys(currParams)))].some(\n (key) => prevParams[key] !== currParams[key],\n );\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 destroyRef = inject(DestroyRef);\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 const previousScrollRestoration = 'scrollRestoration' in history ? history.scrollRestoration : null;\n if (restoreEnabled && previousScrollRestoration !== null) {\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: number | null = null;\n let restoredNavigationId: number | null = null;\n let isPopstate = false;\n let wantsRestore = false;\n\n let prev = {\n state: createRouterState(router),\n route: createRoute(router),\n routeConfig: getDeepestRouteConfig(router),\n };\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() + 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 if (lastNavigationId !== null) {\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\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 ?? null;\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 = {\n state: createRouterState(router),\n route: createRoute(router),\n routeConfig: getDeepestRouteConfig(router),\n };\n\n const prevState = prev.state;\n const currState = curr.state;\n const sameRouteConfig = prev.routeConfig !== null && prev.routeConfig === curr.routeConfig;\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 = null;\n }\n\n if (restoreEnabled && isPopstate) {\n const target = restoredNavigationId === null ? undefined : 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 =\n currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE] &&\n sameRouteConfig &&\n didPathParamsChange(prevState.pathParams, currState.pathParams);\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 tap((event) => {\n if (event instanceof NavigationStart) {\n onNavigationStart(event);\n\n return;\n }\n\n onNavigationEnd(event);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n destroyRef.onDestroy(() => {\n cancelPendingRestore();\n if (restoreEnabled && previousScrollRestoration !== null) {\n history.scrollRestoration = previousScrollRestoration;\n }\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 return {\n log: (...args: unknown[]) => {\n if (!disableLogging()) console.log(`\\x1B[32;40;24m[${scope} ${feature}]\\x1B[m`, ...args);\n },\n warn: (...args: unknown[]) => {\n if (!disableLogging()) console.warn(`\\x1B[93;40;24m[${scope} ${feature}]\\x1B[m`, ...args);\n },\n error: (...args: unknown[]) => {\n if (!disableLogging()) console.error(`\\x1B[31;40;24m[${scope} ${feature}]\\x1B[m`, ...args);\n },\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/** Attribute that makes `htmlToMarkdown` write an element's text verbatim, without Markdown escaping:\n * `<span data-markdown-verbatim>{{user:_x}}</span>` becomes `{{user:_x}}`. The element must hold\n * text only. */\nexport const MARKDOWN_VERBATIM_ATTR = 'data-markdown-verbatim';\n\nconst VERBATIM_RE = /* @__PURE__ */ new RegExp(\n `<span\\\\b[^>]*\\\\b${MARKDOWN_VERBATIM_ATTR}\\\\b[^>]*>([^<]*)<\\\\/span>`,\n 'gi',\n);\n\nconst decodeUrlCharacterReferences = (url: string) =>\n url\n .replace(/&#(\\d+);?/g, (_, value: string) => String.fromCodePoint(Number(value)))\n .replace(/&#x([0-9a-f]+);?/gi, (_, value: string) => String.fromCodePoint(Number.parseInt(value, 16)))\n .replace(/&(colon|tab|newline);/gi, (_, entity: string) =>\n entity.toLowerCase() === 'colon' ? ':' : entity.toLowerCase() === 'tab' ? '\\t' : '\\n',\n );\n\n/** Whether `url` may be embedded as an image `src`: everything except `javascript:` and `vbscript:`\n * URLs and non-image `data:` URLs, however they are cased, spaced or entity-encoded. */\nexport const isSafeUrl = (url: string) => {\n // eslint-disable-next-line no-control-regex -- URL parsers ignore these characters inside schemes.\n const normalized = decodeUrlCharacterReferences(url).replace(/[\\s\\u0000-\\u001f]/g, '');\n\n return (\n !/^(javascript|vbscript):/i.test(normalized) && !/^data:(?!image\\/(?:avif|gif|jpeg|png|webp);)/i.test(normalized)\n );\n};\n\n/** Whether `url` may become a link: `http:`, `https:`, `mailto:` and `tel:` URLs, relative paths and\n * fragments pass; any other scheme (`javascript:`, `data:`, `vbscript:`, ...) is refused, however\n * it is cased, spaced or entity-encoded. */\nexport const isSafeLinkUrl = (url: string) => {\n // eslint-disable-next-line no-control-regex -- URL parsers ignore these characters inside schemes.\n const normalized = decodeUrlCharacterReferences(url).replace(/[\\s\\u0000-\\u001f]/g, '');\n\n return !/^[a-z][a-z0-9+.-]*:/i.test(normalized) || /^(?:https?|mailto|tel):/i.test(normalized);\n};\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 alignClass = (align: string | null) => (align ? ` class=\"et-rte-align-${align}\"` : '');\n\nconst alignOf = (attrs: string) =>\n (\n /\\bclass\\s*=\\s*[\"'][^\"']*\\bet-rte-align-([a-z]+)/i.exec(attrs)?.[1] ??\n /\\bstyle\\s*=\\s*[\"'][^\"']*text-align:\\s*([a-z]+)/i.exec(attrs)?.[1]\n )?.toLowerCase() ?? null;\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 && isSafeLinkUrl(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 const escapes: string[] = [];\n text = text.replace(/\\\\([!-/:-@[-`{-~])|`([^`]+)`/g, (_, escaped: string | undefined, code: string | undefined) =>\n escaped !== undefined\n ? makePlaceholder('ESC', escapes.push(escapeHtml(escaped)) - 1)\n : makePlaceholder('IC', inlineCodes.push(`<code>${escapeHtml(code ?? '')}</code>`) - 1),\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) return full;\n\n const anchor = isSafeLinkUrl(href)\n ? `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${processInline(inner)}</a>`\n : processInline(inner);\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 isSafeLinkUrl(href) ? `<a href=\"${href}\">${label}</a>` : label,\n );\n\n // New-tab links first: their inner markup still holds this call's code and escape placeholders.\n return text\n .replace(placeholderRe('NTLINK'), (_, i) => newTabLinks[+i] ?? '')\n .replace(placeholderRe('IC'), (match, i) => inlineCodes[+i] ?? match)\n .replace(placeholderRe('ESC'), (match, i) => escapes[+i] ?? match);\n};\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\nconst escapeMarkdownText = (text: string) =>\n text\n .replace(/[\\\\`[\\]]/g, '\\\\$&')\n .replace(/(?<!\\s)\\*|\\*(?!\\s)/g, '\\\\*')\n .replace(/_+/g, (run, offset: number, whole: string) =>\n run.length === 1 && /[a-z0-9]/i.test(whole[offset - 1] ?? '') && /[a-z0-9]/i.test(whole[offset + 1] ?? '')\n ? run\n : run.replace(/_/g, '\\\\_'),\n )\n .replace(/~{2,}/g, (run) => run.replace(/~/g, '\\\\~'))\n .replace(/&lt;(?=\\/?(?:u|a|p|h[1-6]|div)\\b)/gi, '\\\\&lt;')\n .replace(/(^|\\n)([ \\t]*)(?=[-+*#|:]|&gt;|\\d+\\.)/g, '$1$2\\u{E002}');\n\nconst escapeMarkdownAlt = (alt: string) => alt.replace(/[\\\\[\\]]/g, '\\\\$&');\n\nconst escapeTextNodes = (html: string) => {\n let codeDepth = 0;\n\n return html.replace(/(<[^>]*>)|([^<]+)/g, (_, tag: string | undefined, text: string | undefined) => {\n if (tag) {\n const code = /^<(\\/?)(?:pre|code)\\b/i.exec(tag);\n\n if (code) codeDepth = Math.max(0, codeDepth + (code[1] ? -1 : 1));\n\n return tag;\n }\n\n return codeDepth > 0 ? (text ?? '') : escapeMarkdownText(text ?? '');\n });\n};\n\nconst escapeLineStarts = (md: string) =>\n md\n .replace(\n /^([ \\t]*(?:>[ \\t]?)*)\\u{E002}(?:([-+*])(?=[ \\t]|$|--[ \\t]*$)|(#{1,6})(?=[ \\t]|$)|([>|])|(\\d+)\\.(?=[ \\t]|$)|(?=[-:| \\t]*\\|[-:| \\t]*$)(?=.*-))/gmu,\n (_, prefix: string, bullet?: string, hashes?: string, marker?: string, digits?: string) =>\n digits !== undefined ? `${prefix}${digits}\\\\.` : `${prefix}\\\\${bullet ?? hashes ?? marker ?? ''}`,\n )\n .replace(/\\u{E002}/gu, '');\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 * A backslash before a punctuation character keeps that character literal.\n * Text matching `options.verbatim` is emitted as plain text, untouched by any Markdown syntax:\n * `markdownToHtml('{{field:__x__}}', { verbatim: /\\{\\{[^}]+\\}\\}/ })` returns `<p>{{field:__x__}}</p>`.\n */\nexport const markdownToHtml = (markdown: string, options: { verbatim?: RegExp } = {}) => {\n if (!markdown) return '';\n\n let text = markdown.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n const verbatims: string[] = [];\n const { verbatim } = options;\n\n if (verbatim) {\n const pattern = new RegExp(verbatim.source, verbatim.flags.includes('g') ? verbatim.flags : `${verbatim.flags}g`);\n\n text = text.replace(pattern, (match) =>\n match ? makePlaceholder('VERB', verbatims.push(escapeHtmlPreservingEntities(match)) - 1) : match,\n );\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([^>]*)>([\\s\\S]*)<\\/\\1>$/i.exec(trimmed);\n const align = aligned ? alignOf(aligned[2] ?? '') : null;\n\n if (aligned && align) {\n const tag = (aligned[1] ?? 'p').toLowerCase();\n\n return `<${tag}${alignClass(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${alignClass(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${alignClass(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\n .replace(placeholderRe('CODE'), (_, i) => codeBlocks[+i] ?? '')\n .replace(placeholderRe('VERB'), (match, i) => verbatims[+i] ?? match);\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 * Text that would read as Markdown is backslash-escaped (code and {@link MARKDOWN_VERBATIM_ATTR}\n * elements are left as is), and a link whose URL\n * fails {@link isSafeLinkUrl} keeps only its text.\n */\nexport const htmlToMarkdown = (html: string) => {\n if (!html) return '';\n\n const verbatims: string[] = [];\n let md = html.replace(VERBATIM_RE, (_, text: string) =>\n makePlaceholder('VERB', verbatims.push(unescapeHtml(text)) - 1),\n );\n\n // Aligned blocks: text-align has no Markdown form, so preserve them as HTML (their inner markup\n // stays HTML) and round-trip via a placeholder - extracted before the block passes below rewrite\n // them, restored after the final tag-strip.\n const alignedBlocks: string[] = [];\n md = md.replace(\n /<(p|h[1-6]|div)\\b([^>]*\\b(?:style=\"[^\"]*text-align|class=\"[^\"]*\\bet-rte-align-)[^>]*)>([\\s\\S]*?)<\\/\\1>/gi,\n (_, tag: string, attrs: string, inner: string) => {\n const name = tag.toLowerCase();\n\n return makePlaceholder(\n 'ALIGN',\n alignedBlocks.push(`<${name}${alignClass(alignOf(attrs))}>${inner}</${name}>`) - 1,\n );\n },\n );\n\n md = escapeTextNodes(md);\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 (!isSafeLinkUrl(href)) return inner;\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(\n /<img[^>]+src=\"([^\"]*)\"[^>]*alt=\"([^\"]*)\"[^>]*\\/?>/gi,\n (_, src: string, alt: string) => `![${escapeMarkdownAlt(alt)}](${src})`,\n );\n md = md.replace(\n /<img[^>]+alt=\"([^\"]*)\"[^>]*src=\"([^\"]*)\"[^>]*\\/?>/gi,\n (_, alt: string, src: string) => `![${escapeMarkdownAlt(alt)}](${src})`,\n );\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 = alignOf(m[1] ?? '');\n\n return align === 'left' || align === 'center' || align === 'right' ? align : 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 escapeLineStarts(md.replace(/\\n{3,}/g, '\\n\\n').trim()).replace(\n placeholderRe('VERB'),\n (_, i) => verbatims[+i] ?? '',\n );\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","/** 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) {\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 > 0 || positiveMovementX > 0) {\n if (positiveMovementY > positiveMovementX) {\n isScrolling = true;\n } else {\n isSwiping = true;\n }\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; previousUserSelect: string; previousWebkitUserSelect: 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 const style = doc.documentElement.style;\n\n suppressions.set(doc, {\n count: 1,\n previousUserSelect: style.userSelect,\n previousWebkitUserSelect: style.webkitUserSelect,\n });\n style.userSelect = 'none';\n // Safari and WebKitGTK ignore the unprefixed `user-select`.\n style.webkitUserSelect = '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.previousUserSelect;\n doc.documentElement.style.webkitUserSelect = state.previousWebkitUserSelect;\n };\n};\n","import { ApplicationRef, DestroyRef, inject, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn } from '../utils';\n\nconst ANGULAR_ROOT_ELEMENT_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const appRef = inject(ApplicationRef);\n const destroyRef = inject(DestroyRef);\n\n const rootElement = signal<HTMLElement | null>(null);\n let pollId: ReturnType<typeof setTimeout> | 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 pollId = setTimeout(poll, 25);\n }\n };\n\n pollId = setTimeout(poll);\n destroyRef.onDestroy(() => {\n if (pollId !== null) clearTimeout(pollId);\n });\n\n return rootElement;\n },\n { name: 'Angular Root Element' },\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.metaKey || e.altKey || e.ctrlKey || ['Meta', 'Alt', 'Control'].includes(e.key)) return;\n\n hadKeyboardEvent = true;\n queueMicrotask(() => isFocusVisible.set(true));\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 `InjectionToken` 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 { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '../providers';\n\n/**\n * Declares the `--ease-*` custom properties that every animated stylesheet in the SDK\n * transitions with, as a styles-only component. Mount it from any component or directive whose\n * CSS reads one - without the declaration the whole `transition` shorthand is invalid at\n * computed-value time and the element snaps instead of animating.\n */\n@Component({\n selector: 'et-easing-tokens-styles',\n template: '',\n styleUrl: './easing-tokens-styles.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class EasingTokensStylesComponent {}\n\n/** Mounts {@link EasingTokensStylesComponent}. Call from an injection context. */\nexport const mountEasingTokens = () => injectStyleManager().mount(EasingTokensStylesComponent);\n","import { Directive, ElementRef, inject, InjectionToken, isDevMode } 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';\nimport { mountEasingTokens } from './easing-tokens-styles.component';\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 pendingTransitionId: string | undefined;\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 mountEasingTokens();\n\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.pendingTransitionId;\n this.pendingTransitionId = undefined;\n }\n\n animationDebugLog(\n `animatable ${el.tagName.toLowerCase()}`,\n `start (count ${this.activeAnimationCount}, batch \"${this.activeBatchTransitionId}\", pending \"${this.pendingTransitionId ?? 'none'}\")`,\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 if (isDevMode()) {\n console.warn(\n `${el.tagName} received animation end/cancel event but activeAnimationCount is already 0. Start was ${didEmitStart ? '' : 'not '}emitted.`,\n );\n }\n }\n break;\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n /**\n * Labels the next batch of animations that starts on this element. Only the most recent id is\n * kept: a call whose animations never start must not leave an id behind for a later batch.\n */\n setTransitionId(id: string) {\n this.pendingTransitionId = id;\n }\n\n /**\n * The animations running on this element right now, without the endless and pseudo-element ones.\n *\n * Reading this flushes pending style changes, so an animation a class change started in the same\n * task is already listed here. `isAnimating$` cannot answer that: it turns true only once the\n * browser dispatches `transitionrun`, a frame after the style change is committed.\n */\n getRunningAnimations(): Animation[] {\n const el = this.elementRef.nativeElement;\n\n if (typeof el.getAnimations !== 'function') return [];\n\n return el.getAnimations().filter((animation) => {\n if (animation.playState !== 'running') return false;\n\n const effect = animation.effect as KeyframeEffect | null;\n\n if (!effect || effect.pseudoElement) return false;\n\n // An endless animation never resolves `finished`, so awaiting one would strand the transition.\n return effect.getComputedTiming().iterations !== Infinity;\n });\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","import { Observable } from 'rxjs';\n\n/** Runs `cb` two frames from now. Returns a function that cancels it if it has not run yet. */\nexport const nextFrame = (cb: () => void) => {\n if (typeof requestAnimationFrame === 'undefined') {\n return () => undefined;\n }\n\n let id = requestAnimationFrame(() => {\n id = requestAnimationFrame(cb);\n });\n\n return () => cancelAnimationFrame(id);\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 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, defer, filter, from, Observable, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { injectRenderer } from '../providers';\nimport { ANIMATABLE_TOKEN, AnimatableDirective } 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 forcedThisFrame = false;\n private forcedFrameResetId: number | null = null;\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 this.destroyRef.onDestroy(() => {\n if (this.forcedFrameResetId !== null) cancelAnimationFrame(this.forcedFrameResetId);\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.forcedThisFrame = false;\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.forcedThisFrame;\n this.forcedThisFrame = false;\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.forcedThisFrame = false;\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.forcedThisFrame;\n this.forcedThisFrame = false;\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.markForcedThisFrame();\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.markForcedThisFrame();\n }\n\n private markForcedThisFrame() {\n this.forcedThisFrame = true;\n\n if (typeof requestAnimationFrame === 'undefined') return;\n if (this.forcedFrameResetId !== null) cancelAnimationFrame(this.forcedFrameResetId);\n\n this.forcedFrameResetId = requestAnimationFrame(() => {\n this.forcedThisFrame = false;\n this.forcedFrameResetId = null;\n });\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.whenAnimationsSettled()),\n tap(() => this.debugLog(`${transitionId}: settled`)),\n filter(() => 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 this.whenAnimationsSettled()\n .pipe(\n tap(() => this.debugLog(`${transitionId}: interrupt settled`)),\n filter(() => this.state$.value === expectedState),\n tap(onComplete),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n /**\n * Emits once every animation the class change started on this element has finished, or right away\n * when the change starts none - a `transition-duration` of 0 (`prefers-reduced-motion`) or a\n * property whose value did not change.\n *\n * `isAnimating$` cannot replace the reading here: it turns true a frame after the browser commits\n * the style change, so a slow commit reads as \"nothing will animate\" and ends the transition\n * before its animation starts.\n */\n private whenAnimationsSettled(isFirstRead = true): Observable<void> {\n return defer(() => {\n const running = this.animatable.getRunningAnimations();\n\n if (!running.length) {\n // Settling on the first read means nothing was ever awaited, so emitting here would reenter\n // the enter()/leave() call still on the stack. Every later read already runs off a promise.\n return isFirstRead ? fromNextFrame() : of(undefined);\n }\n\n // A running animation may be replaced rather than finished - the browser retargets a transition\n // whose end value changes - so re-read instead of settling on the first batch.\n return from(Promise.allSettled(running.map((animation) => animation.finished))).pipe(\n switchMap(() => this.whenAnimationsSettled(false)),\n );\n });\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, take, 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 take(1),\n tap(() => {\n this.viewContainerRef.clear();\n this.hasView = false;\n }),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { Subject, tap } 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$ = new Subject<void>();\n const onFinish$ = new Subject<void>();\n const onCancel$ = new Subject<void>();\n\n let startedCount = 0;\n let settledCount = 0;\n let cancelledCount = 0;\n\n const settle = (wasCancelled: boolean) => {\n settledCount++;\n\n if (wasCancelled) {\n cancelledCount++;\n }\n\n if (settledCount !== flips.length) {\n return;\n }\n\n if (cancelledCount) {\n onCancel$.next();\n } else {\n onFinish$.next();\n }\n };\n\n flips.forEach((animation) => {\n animation.onStart$\n .pipe(\n tap(() => {\n startedCount++;\n\n if (startedCount === flips.length) {\n onStart$.next();\n }\n }),\n )\n .subscribe();\n animation.onFinish$.pipe(tap(() => settle(false))).subscribe();\n animation.onCancel$.pipe(tap(() => settle(true))).subscribe();\n });\n\n const updateInit = () => {\n flips.forEach((animation) => animation.updateInit());\n };\n\n const play = () => {\n startedCount = 0;\n\n flips.forEach((animation) => animation.play());\n\n // Reset after the loop: replaying a flip that is still running makes it report a cancel, and that\n // cancel settles the play being replaced, not this one.\n settledCount = 0;\n cancelledCount = 0;\n\n if (!flips.length) {\n onStart$.next();\n onFinish$.next();\n }\n };\n\n const cancel = () => {\n flips.forEach((animation) => animation.cancel());\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\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 const currentAnimation = animation;\n if (!currentAnimation) {\n return;\n }\n\n currentAnimation.removeEventListener('finish', onAnimationFinish);\n currentAnimation.removeEventListener('cancel', onAnimationCancel);\n animation = null;\n currentAnimation.cancel();\n };\n\n const updateInit = () => {\n initialRect = originElement.getBoundingClientRect();\n };\n\n const play = () => {\n if (animation) {\n cleanup();\n onCancel$.next();\n }\n\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 if (!animation) return;\n cleanup();\n onCancel$.next();\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 { computed, signal, 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/** A live tracker, as seen by the coordinator. */\nexport type UnsavedChangesRegistration = {\n abandon: (reason: UnsavedChangesAbandonReason) => void;\n\n /**\n * Changes the coordinator should still act on - so a tracker folds its own abandoned state in here\n * rather than reporting a raw comparison. An abandoned tracker's edits cannot be saved anymore, and\n * counting them would block a reload nobody can act on.\n */\n hasChanges: Signal<boolean>;\n};\n\nconst UNSAVED_CHANGES_COORDINATOR_DEF = /* @__PURE__ */ defineRootProvider(\n () => {\n const _registrations = signal<readonly UnsavedChangesRegistration[]>([]);\n const _isCheckPending = signal(false);\n\n const hasUnsavedChanges = computed(() => _registrations().some((registration) => registration.hasChanges()));\n\n let pending: {\n promise: Promise<boolean>;\n controller: AbortController;\n settle: (result: boolean) => void;\n } | null = null;\n\n /** 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 const register = (registration: UnsavedChangesRegistration) => {\n _registrations.update((current) => [...current, registration]);\n\n return () => _registrations.update((current) => current.filter((entry) => entry !== 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 _registrations()) {\n registration.abandon(reason);\n }\n };\n\n return {\n /** Whether a confirm is currently on screen. */\n isCheckPending: _isCheckPending.asReadonly(),\n\n /**\n * Whether any live tracker currently holds changes worth confirming - the app-wide \"is it safe to\n * throw this page away?\" question, for callers that need the answer without asking the user\n * (see `provideAppUpdates`). Abandoned trackers do not count.\n */\n hasUnsavedChanges,\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 {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n isSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { MaybeSignal } from '../signals';\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 = 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 injector = inject(Injector);\n const valuesSignal = isSignal(binding) ? binding : signal(binding);\n let bindingCount = 0;\n\n effect(() => {\n const values = valuesSignal() ?? [];\n\n untracked(() => {\n while (bindingCount < values.length) {\n const index = bindingCount++;\n runInInjectionContext(injector, () => {\n applyConfigFn(\n computed(() => {\n const value = valuesSignal()?.[index];\n return value === undefined ? null : configBuilder(value, index);\n }),\n );\n });\n }\n });\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 = isSignal(binding) ? binding() : binding;\n return value !== null && value !== undefined ? String(value) : null;\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\n/**\n * Binds a link tag. Only removes the elements it created; pre-existing links are left in place, unlike meta bindings.\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 const key = linkStore.getLinkKey(config);\n\n if (currentKey !== undefined && currentKey !== key) linkStore.removeLink(linkId, currentKey);\n\n currentKey = key;\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 = 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 '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 'property=\"og:locale:alternate\"',\n 'name=\"twitter:image\"',\n 'name=\"twitter:player\"',\n 'property=\"article:author\"',\n 'property=\"article:tag\"',\n 'property=\"music:song\"',\n 'property=\"music:musician\"',\n 'property=\"music:album\"',\n 'property=\"video:actor\"',\n 'property=\"video:director\"',\n 'property=\"video:writer\"',\n 'property=\"video:tag\"',\n 'property=\"book:author\"',\n 'property=\"book:tag\"',\n 'property=\"profile:username\"',\n 'property=\"product:category\"',\n 'property=\"product:retailer_item_id\"',\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 'name=\"DC.creator\"',\n 'name=\"DC.contributor\"',\n 'name=\"DC.subject\"',\n 'itemprop=\"image\"',\n 'itemprop=\"author\"',\n 'name=\"apple-itunes-app\"', // Can have multiple app arguments\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 if (config.charset) return `charset=\"${config.charset}\"`;\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\n/**\n * Binds a meta tag. Removes any pre-existing tags matching the same selector, unlike link bindings, which leave pre-existing links alone.\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 const selector = metaStore.getSelector(config);\n\n if (currentSelector !== undefined && currentSelector !== selector) metaStore.removeTag(tagId, currentSelector);\n\n currentSelector = selector;\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 = 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 = 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 ...config.openGraph,\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 });\n }\n\n if (config.twitter || config.title || config.description || config.image) {\n applyTwitterCardBindings({\n ...config.twitter,\n title: config.twitter?.title ?? config.title,\n description: config.twitter?.description ?? config.description,\n image: config.twitter?.image ?? config.image,\n });\n }\n\n if (config.article) applyArticleBindings(config.article);\n};\n","import { DOCUMENT } from '@angular/common';\nimport { CSP_NONCE, 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 nonce = inject(CSP_NONCE, { optional: true });\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 if (nonce) renderer.setAttribute(script, 'nonce', nonce);\n renderer.setTextContent(script, JSON.stringify(data).replace(/</g, '\\\\u003C'));\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 protected jsonLD = computed(() => {\n const data = this.data();\n\n if (!data) {\n return null;\n }\n\n const json = JSON.stringify(data, null, 2).replace(/</g, '\\\\u003C');\n const html = `<script type=\"application/ld+json\">${json}</script>`;\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n assertInInjectionContext,\n computed,\n DOCUMENT,\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 WeakMap<Navigator, Map<symbol, number | true>>();\n\nconst syncAppBadge = (nav: BadgingNavigator, badgeHolders: Map<symbol, number | true>) => {\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 (!badgeHolders.size) {\n nav.clearAppBadge().catch(ignore);\n\n return;\n }\n\n const count = Array.from(badgeHolders.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 ? UNSAVED_CHANGES_TITLE_MARKER : null));\n\n const destroyRef = inject(DestroyRef);\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const navigator = inject(DOCUMENT).defaultView?.navigator as BadgingNavigator | undefined;\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 && navigator && badge !== false) {\n const badgeId = Symbol('unsaved-changes-badge');\n const contents = badge === true ? true : badge;\n let badgeHolders = BADGE_HOLDERS.get(navigator);\n if (!badgeHolders) {\n badgeHolders = new Map();\n BADGE_HOLDERS.set(navigator, badgeHolders);\n }\n\n const badgeEffect = effect(() => {\n const dirty = hasChanges();\n\n untracked(() => {\n if (dirty) {\n badgeHolders.set(badgeId, contents);\n } else {\n badgeHolders.delete(badgeId);\n }\n\n syncAppBadge(navigator, badgeHolders);\n });\n });\n\n releaseFns.push(() => {\n badgeEffect.destroy();\n badgeHolders.delete(badgeId);\n syncAppBadge(navigator, badgeHolders);\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();\n if (defaultValue === null || defaultValue === undefined) {\n return false;\n }\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 hasChanges: computed(() => !_isAbandoned() && hasChanges()),\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","import { catchError, defer, map, Observable, of, switchMap } from 'rxjs';\n\nconst isCrossOrigin = (source: string) => /^(https?:)?\\/\\//.test(source);\n\nconst HTML_COMMENT = /<!--[\\s\\S]*?-->/g;\nconst SCRIPT_SRC = /<script\\b[^>]*?\\ssrc\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+))/gi;\nconst CHARACTER_REFERENCE = /&(?:#(\\d+)|#[xX]([\\da-fA-F]+)|(amp|quot|apos|lt|gt));/g;\nconst NAMED_REFERENCES: Record<string, string> = { amp: '&', quot: '\"', apos: \"'\", lt: '<', gt: '>' };\n\nconst decodeCharacterReferences = (value: string) =>\n value.replace(CHARACTER_REFERENCE, (_match, decimal?: string, hex?: string, name?: string) =>\n decimal\n ? String.fromCodePoint(Number(decimal))\n : hex\n ? String.fromCodePoint(parseInt(hex, 16))\n : (NAMED_REFERENCES[name ?? ''] ?? ''),\n );\n\nconst toFingerprint = (sources: string[]) =>\n sources\n .filter((source) => !!source && !isCrossOrigin(source))\n .sort()\n .join('|');\n\n/**\n * Must decode what `getAttribute('src')` decodes, or every check reports an update.\n *\n * Not `DOMParser`: its document inherits the page's CSP, and under a nonce `style-src` each `<style>`\n * in the fetched document, with its fresh nonce, logs a violation.\n */\nconst readBuildFingerprintFromHtml = (html: string) =>\n toFingerprint(\n Array.from(html.replace(HTML_COMMENT, '').matchAll(SCRIPT_SRC), ([, doubleQuoted, singleQuoted, unquoted]) =>\n decodeCharacterReferences(doubleQuoted ?? singleQuoted ?? unquoted ?? ''),\n ),\n );\n\n/**\n * Identifies the build a document boots from, by its entry script filenames. Those carry a content\n * hash in any production build, so two documents share a fingerprint exactly when reloading one would\n * run the same code - which is the only thing an update check needs to know, and it needs no version\n * file to be generated at build time.\n *\n * Cross-origin scripts are left out: an analytics tag with a cache-busting query would otherwise read\n * as a new deploy on every check.\n */\nexport const readBuildFingerprint = (document: Document) =>\n toFingerprint(Array.from(document.querySelectorAll('script[src]'), (script) => script.getAttribute('src') ?? ''));\n\n/**\n * Reads the currently deployed build's fingerprint from the app's entry document. Cold: nothing is fetched\n * until it is subscribed.\n *\n * `null` for anything that is not a usable answer - a network failure, a non-2xx response, or a body\n * with no entry scripts in it. Callers must treat that as \"no information\" rather than as a change:\n * an error page parses perfectly well as HTML, and acting on its empty fingerprint would reload the\n * app in a loop.\n */\nexport const fetchDeployedBuildFingerprint$ = (url: string): Observable<string | null> =>\n defer(() => fetch(url, { cache: 'no-store', headers: { accept: 'text/html' } })).pipe(\n switchMap((response) => (response.ok ? response.text() : of(null))),\n map((html) => (html === null ? null : readBuildFingerprintFromHtml(html) || null)),\n catchError(() => of(null)),\n );\n","/**\n * How each engine words a lazy chunk that could not be loaded. There is no error code and no shared\n * type for this - the message is all a browser gives, so matching it is the only detection available.\n *\n * The MIME-type entries matter as much as the 404 ones: an SPA that rewrites unknown paths to\n * `index.html` answers a request for a deleted chunk with HTML and a 200, so the import fails on the\n * content type rather than on the status.\n */\nconst STALE_BUILD_ERROR_PATTERNS = [\n 'failed to fetch dynamically imported module',\n 'error loading dynamically imported module',\n 'importing a module script failed',\n 'failed to load module script',\n 'was blocked because of a disallowed mime type',\n 'expected a javascript-or-wasm module script',\n 'unable to preload css',\n 'loading chunk',\n 'loading css chunk',\n];\n\nconst readErrorMessage = (error: unknown) => {\n if (typeof error === 'string') {\n return error;\n }\n\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n\n if (error && typeof error === 'object' && 'message' in error) {\n return String((error as { message: unknown }).message);\n }\n\n return '';\n};\n\n/**\n * Whether an error means the running build is stale - a module it was going to import lazily is no\n * longer on the server, so this tab cannot reach that part of the app until it reloads.\n *\n * Accepts anything an error path hands over: an `Error`, a rejection reason, a message string.\n */\nexport const isStaleBuildError = (error: unknown) => {\n if (error && typeof error === 'object' && 'name' in error && error.name === 'ChunkLoadError') {\n return true;\n }\n\n const message = readErrorMessage(error).toLowerCase();\n\n return !!message && STALE_BUILD_ERROR_PATTERNS.some((pattern) => message.includes(pattern));\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n DOCUMENT,\n inject,\n PLATFORM_ID,\n provideEnvironmentInitializer,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { NavigationError, Router } from '@angular/router';\nimport { defer, EMPTY, filter, map, Observable, switchMap, tap, timer } from 'rxjs';\nimport { injectIsDocumentVisible } from '../signals';\nimport { injectUnsavedChangesCoordinator } from '../unsaved-changes';\nimport { createSessionMemory, defineRootProvider, defineStaticRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { fetchDeployedBuildFingerprint$, readBuildFingerprint } from './build-fingerprint';\nimport { isStaleBuildError } from './stale-build-error';\n\nconst RELOADED_AT_KEY = 'et-app-update-reloaded-at';\n\n// A subset check, not equality: the running document also holds every script the app appended to it,\n// which the served entry document never contains.\nconst isNewBuild = (running: string, deployed: string) => {\n const runningScripts = new Set(running.split('|'));\n\n return deployed.split('|').some((source) => !runningScripts.has(source));\n};\n\nexport type AppUpdatesConfig = {\n /**\n * The document the deployed build is read from - the app's own entry point, whose hashed script\n * filenames are the fingerprint. Point it at a path that always serves the current `index.html`.\n * @default '/'\n */\n entryUrl: string;\n\n /**\n * How often to look for a new deploy while the tab is in the foreground, in milliseconds. Checking\n * pauses while the tab is hidden and resumes the moment it is looked at again, so a tab left open\n * overnight asks once on return rather than thousands of times in the dark.\n *\n * `0` polls not at all, leaving {@link AppUpdates.check$} to the app.\n * @default 300_000\n */\n pollInterval: number;\n\n /**\n * Floor between two checks, in milliseconds. Without it, alt-tabbing repeatedly would fire a\n * request per switch.\n * @default 30_000\n */\n minCheckInterval: number;\n\n /**\n * What to do when a lazy chunk fails and this build is therefore broken.\n *\n * `'when-safe'` reloads on its own, but only when no tracked form holds unsaved changes - so the\n * user gets the route they clicked instead of an error, and never loses typing to it. When\n * something is dirty the reload is left to the app to offer (read {@link AppUpdates.isRequired}).\n *\n * `'never'` only reports, and every reload is the app's call.\n * @default 'when-safe'\n */\n autoReload: 'when-safe' | 'never';\n\n /**\n * How long after an automatic reload another one may happen, in milliseconds. A deploy that is\n * broken for reasons of its own would otherwise reload the tab forever; past this guard the app\n * reports {@link AppUpdates.isRequired} and leaves the decision to the user.\n * @default 60_000\n */\n reloadCooldown: number;\n};\n\nexport type AppUpdates = {\n /**\n * A different build is deployed. This tab still works - everything it has already loaded keeps\n * running - but it is running yesterday's code.\n */\n isAvailable: Signal<boolean>;\n\n /**\n * This build is broken: a lazy chunk could not be loaded, so part of the app is unreachable until\n * the tab reloads. Set whether or not a poll has noticed the deploy.\n */\n isRequired: Signal<boolean>;\n\n /** Whether reloading right now would throw away unsaved changes - the reason an update can't just reload. */\n wouldDiscardChanges: Signal<boolean>;\n\n /** Checks for a new deploy now, regardless of the poll schedule. Cold: nothing is fetched until it is subscribed. */\n check$: () => Observable<void>;\n\n /**\n * Reloads the page, releasing the unsaved-changes tab locks first so the browser does not ask its\n * own \"Leave site?\" question on top of whatever the app already asked.\n */\n reload: () => void;\n};\n\nconst APP_UPDATES_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<AppUpdatesConfig>(\n {\n entryUrl: '/',\n pollInterval: 300_000,\n minCheckInterval: 30_000,\n autoReload: 'when-safe',\n reloadCooldown: 60_000,\n },\n { name: 'App Updates Config' },\n);\n\nconst APP_UPDATES_DEF = /* @__PURE__ */ defineRootProvider(\n (): AppUpdates => {\n const config = injectAppUpdatesConfig();\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n const coordinator = injectUnsavedChangesCoordinator();\n const router = inject(Router, { optional: true });\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n const runningBuild = isBrowser ? readBuildFingerprint(document) : '';\n\n const reloadedAt = createSessionMemory<number>({\n key: RELOADED_AT_KEY,\n parse: (storedValue) => Number(storedValue) || null,\n serialize: String,\n });\n\n const _deployedBuild = signal<string | null>(null);\n const _isRequired = signal(false);\n\n const isAvailable = computed(() => {\n const deployed = _deployedBuild();\n\n return !!runningBuild && !!deployed && isNewBuild(runningBuild, deployed);\n });\n\n let lastCheckAt = 0;\n\n const check$ = () =>\n defer(() => {\n lastCheckAt = Date.now();\n\n return fetchDeployedBuildFingerprint$(config.entryUrl);\n }).pipe(\n tap((deployed) => {\n if (deployed) {\n _deployedBuild.set(deployed);\n }\n }),\n map(() => undefined),\n );\n\n const checkIfDue$ = () => defer(() => (Date.now() - lastCheckAt < config.minCheckInterval ? EMPTY : check$()));\n\n const reload = () => {\n // The reload is deliberate and the user has already answered for it, so release every\n // beforeunload lock rather than have the browser ask the same question again.\n coordinator.abandonAll('app-update');\n reloadedAt.write(Date.now());\n document.defaultView?.location.reload();\n };\n\n const isWithinReloadCooldown = () => {\n const previous = reloadedAt.read();\n\n return previous !== null && Date.now() - previous < config.reloadCooldown;\n };\n\n const reportStaleBuild = () => {\n _isRequired.set(true);\n\n if (config.autoReload !== 'when-safe') {\n return;\n }\n\n if (untracked(coordinator.hasUnsavedChanges) || isWithinReloadCooldown()) {\n return;\n }\n\n reload();\n };\n\n if (isBrowser) {\n const window = document.defaultView;\n\n const handleRejection = (event: PromiseRejectionEvent) => {\n if (isStaleBuildError(event.reason)) {\n reportStaleBuild();\n }\n };\n\n const handleError = (event: ErrorEvent) => {\n if (isStaleBuildError(event.error ?? event.message)) {\n reportStaleBuild();\n }\n };\n\n window?.addEventListener('unhandledrejection', handleRejection);\n window?.addEventListener('error', handleError);\n\n destroyRef.onDestroy(() => {\n window?.removeEventListener('unhandledrejection', handleRejection);\n window?.removeEventListener('error', handleError);\n });\n\n // A lazy route's import is awaited by the router, which turns the rejection into a\n // NavigationError - so it never reaches the unhandledrejection listener above.\n router?.events\n .pipe(\n filter((event): event is NavigationError => event instanceof NavigationError),\n filter((event) => isStaleBuildError(event.error)),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe(reportStaleBuild);\n\n if (config.pollInterval > 0) {\n const isDocumentVisible = injectIsDocumentVisible();\n\n toObservable(isDocumentVisible)\n .pipe(\n switchMap((isVisible) => (isVisible ? timer(0, config.pollInterval) : EMPTY)),\n switchMap(() => checkIfDue$()),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n }\n }\n\n return {\n isAvailable,\n isRequired: _isRequired.asReadonly(),\n wouldDiscardChanges: coordinator.hasUnsavedChanges,\n check$,\n reload,\n };\n },\n { name: 'App Updates' },\n);\n\nexport const provideAppUpdatesConfig = /* @__PURE__ */ toProvideFn(APP_UPDATES_CONFIG_DEF);\nexport const injectAppUpdatesConfig = /* @__PURE__ */ toInjectFn(APP_UPDATES_CONFIG_DEF);\n\nexport const provideAppUpdatesInstance = /* @__PURE__ */ toProvideFn(APP_UPDATES_DEF);\nexport const injectAppUpdates = /* @__PURE__ */ toInjectFn(APP_UPDATES_DEF);\n\n/**\n * Keeps a long-lived tab from breaking on a deploy.\n *\n * A tab loaded before a deploy still holds the old build's `index.html`, and the chunks it has not\n * imported yet are gone from the server - so the next click on a lazy route dies with a chunk that\n * 404s, or one the SPA fallback answered with HTML. This watches for both halves of that: it polls\n * the entry document for a new deploy while the tab is in the foreground, and it listens for the\n * import failure itself, reloading when nothing would be lost.\n *\n * Nothing has to be generated at build time - the deployed build is identified by the hashed script\n * filenames in its own `index.html`.\n *\n * ```ts\n * provideAppUpdates({ entryUrl: '/index.html' });\n * ```\n *\n * Read {@link AppUpdates.isAvailable} to offer a reload, and {@link AppUpdates.isRequired} for the\n * case where this build is already broken and a reload is the only way on.\n */\nexport const provideAppUpdates = (config?: Partial<AppUpdatesConfig>) => [\n ...provideAppUpdatesConfig(config),\n ...provideAppUpdatesInstance(),\n provideEnvironmentInitializer(() => void injectAppUpdates()),\n];\n","/**\n * Attribute an element uses to declare the stacking level it paints at. Its value is the z-index of\n * the runtime root an overlay opened from inside it mounts into, and the level every outside-pointer\n * close compares a press against.\n */\nexport const OVERLAY_LAYER_ATTRIBUTE = 'data-et-overlay-layer';\n\n/**\n * The stacking level overlays mount at when nothing above their origin declares another one. Near\n * int32 max, so an overlay outranks an arbitrary host application's own stacking.\n */\nexport const DEFAULT_OVERLAY_LAYER = 2147483003;\n\n/**\n * The stacking level for an overlay opened from `element`: the one declared by the nearest ancestor\n * carrying `data-et-overlay-layer`, or {@link DEFAULT_OVERLAY_LAYER}.\n *\n * Put the attribute on anything that paints above the default overlay layer - a devtools panel, an\n * always-on-top widget - so a menu, tooltip or dialog opened inside it is not rendered behind the\n * thing that opened it, and so working in it does not close an overlay below it. Overlays sharing a\n * level share a runtime root and stack in open order.\n */\nexport const resolveOverlayLayer = (element: Element | null | undefined) => {\n const declaring = element?.closest?.(`[${OVERLAY_LAYER_ATTRIBUTE}]`);\n\n if (!declaring) {\n return DEFAULT_OVERLAY_LAYER;\n }\n\n const declared = declaring.getAttribute(OVERLAY_LAYER_ATTRIBUTE)?.trim();\n const layer = Number(declared);\n\n if (!declared || !Number.isFinite(layer)) {\n return DEFAULT_OVERLAY_LAYER;\n }\n\n return layer;\n};\n\n/**\n * Whether `target` sits on a stacking level above `layer` - a press inside the query devtools panel\n * while an application overlay is open, for example.\n *\n * Every outside-pointer close asks this first: a press on a surface that paints over an overlay is\n * aimed at that surface, not at the content the overlay covers, so it must not close the overlay.\n * The level of a press inside another overlay resolves through that overlay's runtime root, so a\n * menu opened from the devtools panel counts as part of the panel's level too.\n */\nexport const isOnHigherOverlayLayer = (target: EventTarget | null | undefined, layer: number) => {\n const element = target as Element | null | undefined;\n\n // Duck-typed rather than `instanceof Element`, which is realm-bound and would report every press\n // inside a same-origin pop-up as being on no layer at all.\n if (typeof element?.closest !== 'function') {\n return false;\n }\n\n return resolveOverlayLayer(element) > layer;\n};\n","import { Directive, DOCUMENT, ElementRef, inject, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, tap } from 'rxjs';\nimport { isOnHigherOverlayLayer, resolveOverlayLayer } from '../overlay/overlay-layer';\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 hostElement = this.elementRef.nativeElement;\n const activeElement = event.target as HTMLElement;\n const isInside = hostElement.contains(activeElement);\n\n if (isInside) return;\n\n if (isOnHigherOverlayLayer(activeElement, resolveOverlayLayer(hostElement))) return;\n\n this.didClickOutside.emit(event);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { Directive, effect, inject, input, numberAttribute, TemplateRef, ViewContainerRef } 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 constructor() {\n effect(() => {\n const count = Math.max(0, this.repeatCount());\n\n while (this.viewContainerRef.length < count) {\n this.viewContainerRef.createEmbeddedView(this.mainTemplateRef);\n }\n\n while (this.viewContainerRef.length > count) {\n this.viewContainerRef.remove(this.viewContainerRef.length - 1);\n }\n });\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 return () => this._startEl.update((current) => (current === el ? null : current));\n }\n\n registerEnd(el: ElementRef<HTMLElement>) {\n this._endEl.set(el);\n\n return () => this._endEl.update((current) => (current === el ? null : current));\n }\n}\n","import { DestroyRef, 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 inject(DestroyRef).onDestroy(this.host.registerEnd(this.elementRef));\n }\n}\n","import { DestroyRef, 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 inject(DestroyRef).onDestroy(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 const document = el.ownerDocument;\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 share(),\n takeUntilDestroyed(),\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 public 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 confirmedTags = new Set<string>();\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 pruneDismissedHandlers = (registration: ServiceWorkerRegistration): Observable<void> =>\n from(registration.getNotifications()).pipe(\n catchError(() => of(null)),\n map((shown) => {\n if (!shown) {\n return;\n }\n\n const shownTags = new Set(shown.map((notification) => notification.tag));\n\n for (const tag of confirmedTags) {\n if (!shownTags.has(tag)) {\n confirmedTags.delete(tag);\n clickHandlers.delete(tag);\n }\n }\n }),\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 confirmedTags.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 return pruneDismissedHandlers(registration).pipe(\n switchMap((): Observable<NotificationDeliveryPath> => {\n if (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 if (isClosed) {\n // Closed while the worker was still putting it up - take back what just appeared.\n return closePersistentNotifications(tag).pipe(map((): NotificationDeliveryPath => 'unavailable'));\n }\n\n if (config.onClick) {\n confirmedTags.add(tag);\n }\n\n return of('service-worker');\n }),\n catchError(() => {\n clickHandlers.delete(tag);\n\n return of<NotificationDeliveryPath>('unavailable');\n }),\n );\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 // `instanceof` is realm-bound: an element adopted by a same-origin pop-up (the `document` mount\n // option) belongs to that window's `HTMLElement`, not to this one's.\n const view = (value as Node | null | undefined)?.ownerDocument?.defaultView;\n\n return view ? value instanceof view.HTMLElement : value instanceof HTMLElement;\n};\n\nexport const isElement = (value: unknown): value is Element => {\n const view = (value as Node | null | undefined)?.ownerDocument?.defaultView;\n\n return view ? value instanceof view.Element : value instanceof Element;\n};\n\nexport const isHTMLOrSVGElement = (value: unknown): value is HTMLElement | SVGElement => {\n const view = (value as Node | null | undefined)?.ownerDocument?.defaultView;\n\n return view\n ? value instanceof view.HTMLElement || value instanceof view.SVGElement\n : value instanceof HTMLElement || value instanceof SVGElement;\n};\n\n/**\n * Whether the overlay rooted at `hostElement` is still the owner of DOM focus - focus is inside it, or\n * nothing is focused. False once the user has moved focus somewhere else.\n */\nexport const ownsActiveElement = (hostElement: HTMLElement, document: Document) => {\n const activeElement = document.activeElement;\n\n return !activeElement || activeElement === document.body || hostElement.contains(activeElement);\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 try {\n focusElement(paneElement.querySelector<HTMLElement>(autoFocus) ?? paneElement);\n } catch {\n focusElement(paneElement);\n }\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 (!activeElement || !paneElement.contains(activeElement)) {\n event.preventDefault();\n focusElement(event.shiftKey ? (lastElement ?? null) : (firstElement ?? null));\n\n return;\n }\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 document.addEventListener('keydown', onKeyDown, true);\n\n return () => {\n document.removeEventListener('keydown', onKeyDown, true);\n };\n};\n","import { DEFAULT_OVERLAY_LAYER, resolveOverlayLayer } from './overlay-layer';\n\n/** The space each viewport edge has reserved, in px. */\nexport type OverlayViewportInset = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\nexport type OverlayViewportReservation = Partial<OverlayViewportInset> & {\n /**\n * The stacking level the reserving surface paints at. Only overlays below it keep out of the\n * reserved space - a menu opened inside the surface itself is above the surface and may use it.\n * Defaults to one level above {@link DEFAULT_OVERLAY_LAYER}.\n */\n layer?: number;\n};\n\nconst NO_INSET: OverlayViewportInset = { top: 0, right: 0, bottom: 0, left: 0 };\n\nconst reservations = /* @__PURE__ */ new Set<Required<OverlayViewportReservation>>();\nconst listeners = /* @__PURE__ */ new Set<() => void>();\n\n/**\n * The custom property each edge is published as on the document root, so page chrome that overlays\n * cannot move for you - a sticky action bar, a floating button - can keep out of the same space:\n * `inset-block-end: calc(1.6rem + var(--et-viewport-inset-bottom, 0px))`.\n */\nconst INSET_PROPERTIES = {\n top: '--et-viewport-inset-top',\n right: '--et-viewport-inset-right',\n bottom: '--et-viewport-inset-bottom',\n left: '--et-viewport-inset-left',\n} as const satisfies Record<keyof OverlayViewportInset, string>;\n\n/**\n * Page content paints below every reserving surface, so - unlike an overlay - it keeps out of every\n * reservation, whichever level it was made on.\n */\nconst publishInsetProperties = () => {\n const root = globalThis.document?.documentElement;\n\n if (!root) return;\n\n const insets = overlayViewportInsets(Number.NEGATIVE_INFINITY);\n\n Object.entries(INSET_PROPERTIES).forEach(([edge, property]) => {\n if (!reservations.size) {\n root.style.removeProperty(property);\n\n return;\n }\n\n root.style.setProperty(property, `${insets[edge as keyof OverlayViewportInset]}px`);\n });\n};\n\nconst notify = () => {\n publishInsetProperties();\n listeners.forEach((listener) => listener());\n};\n\n/**\n * Reserves an edge of the viewport, so overlays keep out of it. Returns the release callback.\n *\n * Meant for a surface an application paints over its own content and above the overlay layer - a\n * docked devtools panel, an always-on-top widget. A centered or globally positioned overlay is laid\n * out inside what is left of the viewport, and an anchored one avoids the reserved edge the same way\n * it avoids the viewport edge. Page chrome that nothing can move for you - a sticky action bar, a\n * floating button - reads the published `--et-viewport-inset-*` custom properties instead.\n */\nexport const reserveOverlayViewportSpace = (reservation: OverlayViewportReservation) => {\n const entry: Required<OverlayViewportReservation> = {\n top: reservation.top ?? 0,\n right: reservation.right ?? 0,\n bottom: reservation.bottom ?? 0,\n left: reservation.left ?? 0,\n layer: reservation.layer ?? DEFAULT_OVERLAY_LAYER + 1,\n };\n\n reservations.add(entry);\n notify();\n\n return () => {\n if (!reservations.delete(entry)) return;\n\n notify();\n };\n};\n\n/**\n * What an overlay on this stacking level must keep out of: the largest reservation per edge made by a\n * surface that paints above it. Reservations on or below the level are ignored - they cannot cover it.\n */\nexport const overlayViewportInsets = (layer = DEFAULT_OVERLAY_LAYER): OverlayViewportInset => {\n let insets = NO_INSET;\n\n reservations.forEach((reservation) => {\n if (reservation.layer <= layer) return;\n\n insets = {\n top: Math.max(insets.top, reservation.top),\n right: Math.max(insets.right, reservation.right),\n bottom: Math.max(insets.bottom, reservation.bottom),\n left: Math.max(insets.left, reservation.left),\n };\n });\n\n return insets;\n};\n\n/** {@link overlayViewportInsets} for the stacking level `element` is rendered on. */\nexport const overlayViewportInsetsFor = (element: Element) => overlayViewportInsets(resolveOverlayLayer(element));\n\n/**\n * Runs `listener` whenever a reservation is made or released, so an already positioned overlay can be\n * laid out again. Returns the unsubscribe callback.\n */\nexport const onOverlayViewportInsetsChange = (listener: () => void) => {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\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';\nimport { onOverlayViewportInsetsChange, overlayViewportInsetsFor } from './overlay-viewport-inset';\n\nconst applyViewportInsets = (hostElement: HTMLElement, renderer: AngularRenderer) => {\n const insets = overlayViewportInsetsFor(hostElement);\n\n renderer.setStyle(hostElement, {\n top: `${insets.top}px`,\n right: `${insets.right}px`,\n bottom: `${insets.bottom}px`,\n left: `${insets.left}px`,\n });\n};\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 applyViewportInsets(hostElement, renderer);\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 applyViewportInsets(hostElement, renderer);\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 const arrowElement = paneElement.querySelector<HTMLElement>('[et-floating-arrow]');\n if (arrowElement) renderer.setCssProperty(arrowElement, '--et-floating-arrow-translate', null);\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 */\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 onOverlayViewportInsetsChange(() => applyViewportInsets(hostElement, renderer));\n }\n\n applyCenteredPosition(hostElement, paneElement, renderer, strategy);\n\n return onOverlayViewportInsetsChange(() => applyViewportInsets(hostElement, renderer));\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 platform,\n Platform,\n shift,\n SideObject,\n} from '@floating-ui/dom';\nimport { AngularRenderer } from '../providers';\nimport { isElement, isHTMLElement } from './overlay-focus';\nimport { registerAnchoredPositionSetup } from './overlay-position';\nimport { OverlayRuntimeRef } from './overlay-runtime-ref';\nimport { OverlayRuntimeAnchoredPosition } from './overlay-runtime.types';\nimport {\n onOverlayViewportInsetsChange,\n OverlayViewportInset,\n overlayViewportInsetsFor,\n} from './overlay-viewport-inset';\n\n/**\n * The floating-ui middleware only a subset of anchored overlays needs. Installed by\n * `enableAnchoredOverlayPositionExtras()`.\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 */\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\nconst toSideObject = (padding: Padding): SideObject =>\n typeof padding === 'number'\n ? { top: padding, right: padding, bottom: padding, left: padding }\n : {\n top: padding.top ?? 0,\n right: padding.right ?? 0,\n bottom: padding.bottom ?? 0,\n left: padding.left ?? 0,\n };\n\nconst paddingWithInsets = (padding: Padding, insets: OverlayViewportInset): SideObject => {\n const own = toSideObject(padding);\n\n return {\n top: own.top + insets.top,\n right: own.right + insets.right,\n bottom: own.bottom + insets.bottom,\n left: own.left + insets.left,\n };\n};\n\n/**\n * A platform whose first measurement of the pane, in each `computePosition` run, ignores the cap\n * `size` set in the previous run. `flip` reads that first measurement: against a capped pane, the side\n * the pane was squeezed onto always fits, so a pane whose content grows after it opened never flips\n * to the roomier side. Later measurements in the same run see the cap, and `size` resets with them,\n * so the final position is computed from the pane as it renders.\n */\nconst platformMeasuringUncappedPaneFirst = (paneElement: HTMLElement, renderer: AngularRenderer): Platform => {\n let measuredUncapped = false;\n\n return {\n ...platform,\n getDimensions: (element) => {\n if (element !== paneElement || measuredUncapped) return platform.getDimensions(element);\n\n measuredUncapped = true;\n\n const maxWidth = paneElement.style.getPropertyValue('--et-overlay-max-width');\n const maxHeight = paneElement.style.getPropertyValue('--et-overlay-max-height');\n\n if (!maxWidth && !maxHeight) return platform.getDimensions(element);\n\n // The uncapped layout clamps the scroll offset of every scroller the cap made scrollable.\n const scrolled = [...paneElement.querySelectorAll<HTMLElement>('*')]\n .filter((el) => el.scrollTop || el.scrollLeft)\n .map((el) => ({ el, top: el.scrollTop, left: el.scrollLeft }));\n\n renderer.setCssProperties(paneElement, { '--et-overlay-max-width': null, '--et-overlay-max-height': null });\n\n const dimensions = platform.getDimensions(element);\n\n renderer.setCssProperties(paneElement, {\n '--et-overlay-max-width': maxWidth || null,\n '--et-overlay-max-height': maxHeight || null,\n });\n\n for (const { el, top, left } of scrolled) {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n\n return dimensions;\n },\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 let updateId = 0;\n let destroyed = false;\n\n const update = () => {\n const currentUpdateId = ++updateId;\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 (isElement(strategy.referenceElement) && !strategy.referenceElement.isConnected) {\n handleUnusableReference();\n\n return;\n }\n\n const arrowElement = paneElement.querySelector<HTMLElement>('[et-floating-arrow]');\n const insets = overlayViewportInsetsFor(paneElement);\n const viewportPadding = paddingWithInsets(strategy.viewportPadding ?? 8, insets);\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 // shift owns cross-axis overflow; a full check here flips a pane near a side edge off its side\n crossAxis: strategy.shift !== false ? 'alignment' : true,\n padding: viewportPadding,\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: viewportPadding,\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: viewportPadding,\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: viewportPadding,\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 platform:\n strategy.autoResize && strategy.minAvailableSpace === undefined\n ? platformMeasuringUncappedPaneFirst(paneElement, renderer)\n : platform,\n }).then(({ x, y, placement, middlewareData }) => {\n if (destroyed || currentUpdateId !== updateId) return;\n\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 const cleanup = autoUpdate(strategy.referenceElement, paneElement, update);\n // A panel docked over the page changes how much room the pane has without moving, resizing or\n // scrolling anything `autoUpdate` watches.\n const stopInsetUpdates = onOverlayViewportInsetsChange(update);\n\n return () => {\n destroyed = true;\n updateId++;\n cleanup();\n stopInsetUpdates();\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 let backdropUpdater: ((hasBackdrop: boolean) => 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 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 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 attachBackdropUpdater(updater: (hasBackdrop: boolean) => void) {\n backdropUpdater = updater;\n },\n\n /**\n * Adds or removes the backdrop of an open overlay. `elements.backdropElement` follows.\n * A closing overlay keeps the backdrop it has, so its leave transition stays intact.\n */\n updateBackdrop(hasBackdrop: boolean) {\n if (_state() === 'closing' || _state() === 'closed') {\n return;\n }\n\n backdropUpdater?.(hasBackdrop);\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 ComponentRef,\n DOCUMENT,\n DestroyRef,\n EnvironmentInjector,\n Injector,\n Signal,\n createEnvironmentInjector,\n createComponent,\n inject,\n signal,\n} from '@angular/core';\nimport { filter, take, tap } from 'rxjs';\nimport { ANIMATED_LIFECYCLE_TOKEN, animationDebugLog, nextFrame } from '../animations';\nimport { injectRenderer } from '../providers';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '../utils';\nimport { applyInitialFocus, isElement, isHTMLOrSVGElement, ownsActiveElement, setupFocusTrap } from './overlay-focus';\nimport { DEFAULT_OVERLAY_LAYER, OVERLAY_LAYER_ATTRIBUTE, isOnHigherOverlayLayer } from './overlay-layer';\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: Signal<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 = openEntriesState.asReadonly();\n\n // One runtime root per document and stacking level: overlays usually all mount into the app's\n // document at the default level, but an overlay anchored inside a same-origin pop-up window\n // (config.document) needs a root over there, and one opened from inside something that paints\n // above the default level (config.zIndex) needs a root of its own to stack above it.\n const rootElements = new Map<Document, Map<number, 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, zIndex: number) => {\n let documentRoots = rootElements.get(targetDocument);\n\n if (!documentRoots) {\n documentRoots = new Map<number, HTMLElement>();\n rootElements.set(targetDocument, documentRoots);\n }\n\n const existingRoot = documentRoots.get(zIndex);\n if (existingRoot) {\n return existingRoot;\n }\n\n const rootElement = renderer.createElement('div');\n renderer.addClass(rootElement, 'et-overlay-runtime-root');\n // So an overlay opened from inside this root's own content resolves back to the same level\n // instead of dropping to the default one.\n renderer.setAttribute(rootElement, OVERLAY_LAYER_ATTRIBUTE, `${zIndex}`);\n renderer.setStyle(rootElement, {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n pointerEvents: 'none',\n zIndex: `${zIndex}`,\n });\n renderer.appendChild(targetDocument.body, rootElement);\n documentRoots.set(zIndex, rootElement);\n\n return rootElement;\n };\n\n const maybeDestroyRootElements = (targetDocument: Document) => {\n const documentRoots = rootElements.get(targetDocument);\n\n if (!documentRoots) {\n return;\n }\n\n documentRoots.forEach((rootElement, zIndex) => {\n if (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 documentRoots.delete(zIndex);\n });\n\n if (!documentRoots.size) {\n rootElements.delete(targetDocument);\n }\n };\n\n const isTopMost = (overlayRef: OverlayRuntimeRef<object, unknown>) => {\n const entries = openEntriesState();\n\n for (let index = entries.length - 1; index >= 0; index--) {\n const entry = entries[index];\n\n if (!entry || entry.config.passive || entry.state() === 'closing' || entry.state() === 'closed') continue;\n\n return entry === overlayRef;\n }\n\n return false;\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 layer = config.zIndex ?? DEFAULT_OVERLAY_LAYER;\n const root = getRootElement(targetDocument, layer);\n const hostElement = renderer.createElement('div');\n const paneElement = renderer.createElement('div');\n const backdropElement = signal<HTMLElement | null>(null);\n const previousFocusedElement = isHTMLOrSVGElement(targetDocument.activeElement)\n ? targetDocument.activeElement\n : null;\n const autoFocus = config.autoFocus ?? 'first-tabbable';\n let currentHasBackdrop = config.hasBackdrop !== false;\n let currentPositionStrategy = config.positionStrategy;\n\n const activeConfig = () =>\n ({\n ...config,\n positionStrategy: currentPositionStrategy,\n hasBackdrop: currentHasBackdrop,\n }) as OverlayRuntimeMountConfig<object>;\n\n const createBackdropElement = () => {\n const element = renderer.createElement('div');\n\n renderer.addClass(element, 'et-overlay-runtime-backdrop');\n setBackdropStyles(element, renderer);\n renderer.setAttribute(element, 'data-overlay-id', config.id);\n (config.backdropClass ?? []).forEach((className) => renderer.addClass(element, className));\n\n return element;\n };\n\n renderer.addClass(hostElement, 'et-overlay-runtime-entry');\n setBaseElementStyles(activeConfig(), 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 (currentHasBackdrop) {\n const element = createBackdropElement();\n\n renderer.appendChild(hostElement, element);\n backdropElement.set(element);\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: backdropElement.asReadonly(),\n paneElement,\n },\n (result, source) => beginClose({ result, source }),\n );\n\n animationDebugLog(`runtime ${config.id}`, 'mount');\n\n let interactiveCloseReady = false;\n\n const cleanupFns: Array<() => void> = [];\n const parentInjector = config.injector ?? config.viewContainerRef?.injector ?? environmentInjector;\n const parentEnvironmentInjector = parentInjector.get(EnvironmentInjector, environmentInjector);\n const overlayEnvironmentInjector = createEnvironmentInjector(config.providers ?? [], parentEnvironmentInjector);\n const elementInjector = Injector.create({\n parent: parentInjector,\n // Element DI chains to the opener, so without this the opener's environment injector answers\n // `EnvironmentInjector` from inside the overlay - and a component created through a\n // ViewContainerRef down there (the container's own content component) never sees\n // `config.providers`.\n providers: [{ provide: EnvironmentInjector, useValue: overlayEnvironmentInjector }],\n }) as EnvironmentInjector;\n\n let componentRef: ComponentRef<TComponent>;\n\n try {\n componentRef = createComponent(config.component, {\n environmentInjector: overlayEnvironmentInjector,\n elementInjector,\n hostElement: paneElement,\n bindings: config.bindings ?? [],\n });\n } catch (error) {\n elementInjector.destroy();\n overlayEnvironmentInjector.destroy();\n renderer.removeChild(root, hostElement);\n maybeDestroyRootElements(targetDocument);\n\n throw error;\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 activeConfig(),\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n cleanupFns.push(() => positionCleanup());\n\n const getOriginElement = () =>\n currentPositionStrategy?.kind === 'anchored' && isElement(currentPositionStrategy.referenceElement)\n ? currentPositionStrategy.referenceElement\n : null;\n\n overlayRef.attachPositionUpdater((strategy) => {\n currentPositionStrategy = strategy;\n positionCleanup();\n resetPositioningStyles(activeConfig(), hostElement, paneElement, renderer);\n positionCleanup = setupPositioning(\n activeConfig(),\n hostElement,\n paneElement,\n overlayRef as OverlayRuntimeRef<object, unknown>,\n renderer,\n );\n });\n\n overlayRef.attachBackdropUpdater((hasBackdrop) => {\n if (hasBackdrop === currentHasBackdrop) {\n return;\n }\n\n currentHasBackdrop = hasBackdrop;\n\n if (hasBackdrop) {\n const element = createBackdropElement();\n\n renderer.insertBefore(hostElement, element, paneElement);\n backdropElement.set(element);\n } else {\n const element = backdropElement();\n\n if (element) {\n renderer.removeChild(hostElement, element);\n backdropElement.set(null);\n }\n }\n\n renderer.setStyle(hostElement, { pointerEvents: hasBackdrop ? 'auto' : 'none' });\n });\n\n const destroyMountedOverlay = (closeEvent: OverlayRuntimeCloseEvent<TResult>) => {\n animationDebugLog(`runtime ${config.id}`, `destroy (source \"${closeEvent.source}\")`);\n\n // Read before teardown: removing the host element moves focus to the body, which would make\n // every close look like the overlay still owned it.\n const overlayStillOwnsFocus = ownsActiveElement(hostElement, targetDocument);\n\n cleanupFns.forEach((cleanup) => cleanup());\n\n // On app teardown the ApplicationRef is destroyed before this runs; detaching then warns NG0406.\n if (!appRef.destroyed) {\n appRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n\n // Angular does not own this injector, so nothing else tears down what the overlay's own\n // providers registered on it - their `DestroyRef` hooks and effects would outlive the overlay.\n if (!elementInjector.destroyed) {\n elementInjector.destroy();\n }\n overlayEnvironmentInjector.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 maybeDestroyRootElements(targetDocument);\n\n if (config.restoreFocus !== false && overlayStillOwnsFocus && 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 = () => {\n const closeEvent = { result: undefined, source: 'api' } as const;\n overlayRef.beginClose(closeEvent);\n destroyMountedOverlay(closeEvent);\n };\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 tap(() => destroyMountedOverlay(closeEvent)),\n )\n .subscribe();\n };\n\n const closeOnEscape = config.closeOnEscape ?? true;\n if (closeOnEscape) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (\n event.key !== 'Escape' ||\n event.defaultPrevented ||\n !isTopMost(overlayRef as OverlayRuntimeRef<object, unknown>)\n ) {\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 // bubble phase so content inside the overlay can preventDefault or stopPropagation an Escape first\n targetDocument.addEventListener('keydown', onKeyDown);\n cleanupFns.push(() => targetDocument.removeEventListener('keydown', onKeyDown));\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 (!isElement(target) || paneElement.contains(target)) {\n return;\n }\n\n if (isOnHigherOverlayLayer(target, layer)) {\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 (isElement(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 tap(() => {\n nextFrame(() => {\n interactiveCloseReady = true;\n });\n }),\n )\n .subscribe();\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 tap(() => {\n applyInitialFocus(paneElement, autoFocus, targetDocument);\n overlayRef.markOpened();\n }),\n )\n .subscribe();\n });\n\n return overlayRef;\n };\n\n destroyRef.onDestroy(() => {\n [...mountedTeardowns].forEach((teardown) => teardown());\n [...rootElements.keys()].forEach((targetDocument) => maybeDestroyRootElements(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\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) {\n return null;\n }\n\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, 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 MatchStateType = {\n PREPARING_ROUND: 'preparingRound',\n PRE_MATCH: 'preMatch',\n LIVE: 'live',\n POST_MATCH: 'postMatch',\n AUTO_WIN: 'autoWin',\n} as const;\n\nexport type MatchStateType = (typeof MatchStateType)[keyof typeof MatchStateType];\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 {\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 { 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 { 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 let fileExtension: string | null = null;\n\n if (queryPart) {\n const fmValue = new URLSearchParams(queryPart).get('fm')?.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/vnd.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 'application/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 { 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(fromEvent<PointerEvent>(doc, 'pointerup'), fromEvent<PointerEvent>(doc, 'pointercancel')).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>(doc, '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 styleUrl: './resize-handles.component.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'et-resize-handles',\n '[attr.inert]': 'disabled() ? \"\" : null',\n '[attr.data-active-edge]': 'activeEdge()',\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 share(),\n takeUntilDestroyed(),\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 protected readonly edgeCursors = EDGE_CURSORS;\n\n protected 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 { 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 { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n DestroyRef,\n EnvironmentInjector,\n inject,\n isDevMode,\n PLATFORM_ID,\n provideEnvironmentInitializer,\n} from '@angular/core';\n\nconst TOLERANCE_PX = 0.5;\n\nconst readFontSizePx = (view: Window, element: Element) => {\n const match = /^(\\d+(?:\\.\\d+)?)px$/.exec(view.getComputedStyle(element).fontSize ?? '');\n\n return match ? Number(match[1]) : null;\n};\n\nconst measureProbe = (document: Document, view: Window, fontSize: string) => {\n const probe = document.createElement('div');\n\n probe.style.setProperty('display', 'none', 'important');\n probe.style.setProperty('font-size', fontSize, 'important');\n document.documentElement.appendChild(probe);\n\n try {\n return readFontSizePx(view, probe);\n } finally {\n probe.remove();\n }\n};\n\nconst measureUnsetRootFontSize = (document: Document) => {\n const view = document.defaultView;\n\n if (!view) return null;\n\n const root = readFontSizePx(view, document.documentElement);\n const browserDefault = measureProbe(document, view, 'medium');\n const smallest = measureProbe(document, view, '1px');\n\n if (root === null || browserDefault === null || smallest === null) return null;\n\n // A browser minimum font size at or above the default clamps any root to the default.\n if (smallest >= browserDefault - TOLERANCE_PX) return null;\n\n return Math.abs(root - browserDefault) <= TOLERANCE_PX ? root : null;\n};\n\nconst warnIfRootFontSizeUnset = (document: Document) => {\n const root = measureUnsetRootFontSize(document);\n\n if (root === null) return;\n\n console.warn(\n `[provideSurfaceThemesWithTailwind4] The root font size is ${root}px, the browser default, so every SDK control renders 1.6x too large. The SDK sizes everything in rem against a 10px root (${root * 0.625}px here). Add \\`html { font-size: 62.5%; }\\` to your global styles. See https://ethlete-sdk-docs-next.web.app/components/setup`,\n );\n};\n\nexport const provideRootFontSizeCheck = () =>\n provideEnvironmentInitializer(() => {\n if (!isDevMode() || !isPlatformBrowser(inject(PLATFORM_ID))) return;\n\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n const injector = inject(EnvironmentInjector);\n\n afterNextRender(\n () => {\n const view = document.defaultView;\n\n if (!view) return;\n\n if (document.readyState === 'complete') {\n warnIfRootFontSizeUnset(document);\n\n return;\n }\n\n const removeListener = () => view.removeEventListener('load', onLoad);\n const unregisterOnDestroy = destroyRef.onDestroy(removeListener);\n const onLoad = () => {\n removeListener();\n unregisterOnDestroy();\n warnIfRootFontSizeUnset(document);\n };\n\n view.addEventListener('load', onLoad);\n },\n { injector },\n );\n });\n","import { defineStaticProvider, toInjectFn, toProvideFn } from '../utils';\nimport { provideRootFontSizeCheck } from './root-font-size-check';\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: RegisteredSurfaceThemeName;\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, ethlete/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\n/**\n * Registers the app's surface themes. In dev mode it also warns once the page has loaded if the root\n * font size is still the browser default, i.e. the app is missing `html { font-size: 62.5%; }`.\n */\nexport const provideSurfaceThemesWithTailwind4 = (themes: SurfaceTheme[], prefix = 'et') => [\n ɵProvideSurfaceThemes(themes),\n ɵProvideSurfaceThemesPrefix(prefix),\n ngDevMode ? provideRootFontSizeCheck() : [],\n];\n\n/**\n * Inject the registered `isDefault` surface theme of a `type` - the surface an app renders on\n * where nothing scopes one. Without a `type`, resolves the default of the only surface type the\n * app registers; an app registering both must name the one it means, since which of the two\n * `:root` paints is a `prefers-color-scheme` decision. `null` when neither applies.\n */\nexport const injectDefaultSurfaceTheme = (type?: SurfaceType) => {\n const defaults = injectSurfaceThemes({ optional: true })?.filter((theme) => theme.isDefault) ?? [];\n\n if (type) return defaults.find((theme) => theme.type === type) ?? null;\n\n return defaults.length === 1 ? (defaults[0] ?? null) : null;\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 Signal,\n untracked,\n} from '@angular/core';\nimport {\n createCssSurfaceName,\n injectDefaultSurfaceTheme,\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 private parentProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n private defaultTheme = injectDefaultSurfaceTheme();\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) return null;\n\n // Only the outermost provider adopts the app default. A nested one left unset must keep\n // resolving to `null` so it reports the surface it inherits instead of resetting elevation.\n if (!value) return this.parentProvider ? null : this.defaultTheme;\n\n const theme = this.themes.find((t) => t.name === value) ?? null;\n\n if (isDevMode() && !theme) {\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 /**\n * The surface theme in effect on this element - the theme this provider resolves itself, or,\n * where it is left unset, the one it inherits from the closest ancestor provider. The outermost\n * provider resolves the app default, so the chain ends there.\n */\n activeTheme: Signal<SurfaceTheme | null> = computed(\n () => this.resolvedTheme() ?? this.parentProvider?.activeTheme() ?? null,\n );\n\n elevation = computed(() => this.activeTheme()?.elevation ?? 0);\n\n surfaceType = computed(() => this.activeTheme()?.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.activeTheme()?.name;\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 forceSurface(surface: RegisteredSurfaceThemeName | null) {\n this.forcedSurface.set(surface);\n }\n\n clearForcedSurface() {\n if (this.forcedSurface() === FORCED_SURFACE_UNSET) {\n return;\n }\n\n this.forcedSurface.set(FORCED_SURFACE_UNSET);\n }\n}\n\n/**\n * Inject a signal containing the surface type the current subtree renders on - the type of the\n * surrounding surface provider, or of the app's default surface where nothing provides one.\n */\nexport const injectSurfaceType = () => {\n const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n const defaultType = injectDefaultSurfaceTheme()?.type ?? null;\n\n return computed(() => provider?.surfaceType() ?? defaultType);\n};\n\n/**\n * Inject a signal containing the surface theme the current subtree renders on - the theme in\n * effect on the surrounding surface provider, or the app's default surface where nothing provides\n * one. Use it to derive an elevation relative to the surrounding surface.\n *\n * `null` where the app registers no surface themes, or registers a default per surface type -\n * which of those two `:root` paints is a `prefers-color-scheme` decision, so it cannot be\n * resolved at runtime.\n */\nexport const injectParentSurface = () => {\n const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n const defaultTheme = injectDefaultSurfaceTheme();\n\n return computed(() => provider?.activeTheme() ?? defaultTheme);\n};\n","import { 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 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 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 { 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 { injectParentSurface, ProvideSurfaceDirective } from './provide-surface.directive';\nimport { injectSurfaceContextTracker } from './surface-context-tracker';\nimport {\n injectSurfaceThemes,\n RegisteredSurfaceThemeName,\n resolveSurfaceByElevation,\n SurfaceType,\n} from './surface-theme.util';\n\n@Directive({\n selector: '[etAutoSurface]',\n hostDirectives: [ProvideSurfaceDirective],\n})\nexport class AutoSurfaceDirective {\n private ownSurfaceProvider = inject(ProvideSurfaceDirective);\n private surfaceThemes = injectSurfaceThemes({ optional: true });\n private surfaceContextTracker = injectSurfaceContextTracker();\n private parentSurface = injectParentSurface();\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 private isOverlaySurface = signal(false);\n\n // surfaceForElement() reads the DOM non-reactively; bumping this re-runs resolvedSurface after a re-graft.\n private domSettleTick = signal(0);\n\n resolvedSurface = computed(() => {\n const themes = this.surfaceThemes;\n\n if (!themes) {\n return null;\n }\n\n this.domSettleTick();\n\n const explicitProvider = this.surfaceProvider();\n const contextTheme = explicitProvider ? explicitProvider.activeTheme() : this.parentSurface();\n const contextElevation = contextTheme?.elevation ?? null;\n const contextType = contextTheme?.type ?? null;\n\n // Portaled content keeps the trigger's injector, so only the pane that contains this element in the DOM counts.\n const overlaySurface = this.surfaceContextTracker.surfaceForElement(this.elementRef.nativeElement);\n const overlayElevation = overlaySurface?.elevation ?? null;\n const overlayType = overlaySurface?.type ?? null;\n\n // Must not re-derive from the declaration injector: it points at the trigger and would double-elevate the panel.\n if (this.isOverlaySurface()) {\n if (overlayElevation !== null) {\n return resolveSurfaceByElevation(themes, overlayType ?? contextType ?? 'dark', overlayElevation)?.name ?? null;\n }\n\n if (contextElevation !== null) {\n return resolveSurfaceByElevation(themes, contextType ?? 'dark', contextElevation)?.name ?? null;\n }\n\n return null;\n }\n\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 // The containment check is a plain DOM read, so nothing re-runs resolvedSurface once the element\n // reaches its final pane (windowed lists mount it in an off-pane container first). Watch it across renders.\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 settleWatcher.destroy();\n }\n });\n\n effect(() => {\n const surface = this.resolvedSurface();\n\n untracked(() => {\n setInputSignal(this.ownSurfaceProvider.surface, surface as RegisteredSurfaceThemeName | null);\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, ethlete/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({ optional: true });\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({ optional: true });\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/** Reads the nonce where Angular's default `CSP_NONCE` does, since these run outside any injector. */\nconst createNoncedStyle = () => {\n const style = document.createElement('style');\n const nonce = document.body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce');\n\n if (nonce) style.setAttribute('nonce', nonce);\n\n return style;\n};\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 if (typeof document === 'undefined') return;\n\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 document.getElementById('et-root-themes')?.remove();\n const style = createNoncedStyle();\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 if (typeof document === 'undefined') return;\n\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 document.getElementById(`${classPrefix}--${cssThemeName}`)?.remove();\n const style = createNoncedStyle();\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 */\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)) {\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 forceColor(color: ColorThemeInput) {\n this.forcedColor.set(color);\n }\n\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","// 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.61';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AnimatableDirective","DOCUMENT","i1.ProvideSurfaceDirective"],"mappings":"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"}