{"version":3,"file":"fundamental-ngx-core-content-density.mjs","sources":["../../../../libs/core/content-density/content-density.types.ts","../../../../libs/core/content-density/types/content-density.mode.ts","../../../../libs/core/content-density/helpers/density-type-checkers.ts","../../../../libs/core/content-density/tokens/content-density-directive.ts","../../../../libs/core/content-density/directives/content-density.directive.ts","../../../../libs/core/content-density/classes/abstract-content-density-storage.ts","../../../../libs/core/content-density/tokens/content-density-storage-key.token.ts","../../../../libs/core/content-density/tokens/default-content-density.token.ts","../../../../libs/core/content-density/providers/local-content-density-storage.ts","../../../../libs/core/content-density/providers/memory-content-density-storage.ts","../../../../libs/core/content-density/providers/url-content-density-storage.ts","../../../../libs/core/content-density/services/global-content-density.service.ts","../../../../libs/core/content-density/provide-content-density.ts","../../../../libs/core/content-density/content-density.module.ts","../../../../libs/core/content-density/classes/content-density-observer.settings.ts","../../../../libs/core/content-density/helpers/get-changes-source.provider.ts","../../../../libs/core/content-density/variables/default-content-density-consumer-config.ts","../../../../libs/core/content-density/services/content-density-observer.service.ts","../../../../libs/core/content-density/providers/content-density-observer-providers.ts","../../../../libs/core/content-density/testing/mocked-local-content-density-directive.ts","../../../../libs/core/content-density/fundamental-ngx-core-content-density.ts"],"sourcesContent":["import { Provider } from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserverSettings } from './classes/content-density-observer.settings';\nimport { ContentDensityMode } from './types/content-density.mode';\n\nexport const ContentDensityGlobalKeyword = 'global';\nexport const ContentDensityDefaultKeyword = 'default';\n\nexport type LocalContentDensityMode =\n    | ContentDensityMode\n    | typeof ContentDensityGlobalKeyword\n    | typeof ContentDensityDefaultKeyword;\n\ninterface BaseContentDensityModuleConfig {\n    defaultGlobalContentDensity?: ContentDensityMode;\n}\n\ninterface LocalStorageConfig {\n    storage: 'localStorage';\n    storageKey?: string;\n}\n\ninterface UrlStorageConfig {\n    storage: 'url';\n    storageKey?: string;\n}\n\ninterface CustomStorageConfig {\n    storage: Provider;\n}\n\ninterface MemoryStorageConfig {\n    storage: 'memory';\n}\n\nexport type ContentDensityModuleConfig = (\n    | LocalStorageConfig\n    | MemoryStorageConfig\n    | UrlStorageConfig\n    | CustomStorageConfig\n) &\n    BaseContentDensityModuleConfig;\n\nexport interface ContentDensityObserverTarget extends HasElementRef {\n    contentDensitySettings?: ContentDensityObserverSettings;\n}\n\nexport type ContentDensityCallbackFn = (target: ContentDensityMode) => void;\n","export enum ContentDensityMode {\n    COZY = 'cozy',\n    CONDENSED = 'condensed',\n    COMPACT = 'compact'\n}\n","import { ContentDensityGlobalKeyword } from '../content-density.types';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const isCompact = (density: any): boolean => density === ContentDensityMode.COMPACT;\nexport const isCondensed = (density: any): boolean => density === ContentDensityMode.CONDENSED;\nexport const isCozy = (density: any): boolean => density === ContentDensityMode.COZY;\nexport const isContentDensityMode = (density: any): boolean =>\n    isCompact(density) || isCondensed(density) || isCozy(density) || density === ContentDensityGlobalKeyword;\n","import { InjectionToken, Signal } from '@angular/core';\nimport { LocalContentDensityMode } from '../content-density.types';\n\n/**\n * Interface for content density directive providers.\n * Uses signals for reactive content density tracking.\n */\nexport interface ContentDensityDirectiveRef {\n    /** Current density mode as a signal */\n    readonly densityMode: Signal<LocalContentDensityMode>;\n    /** Current density mode value (deprecated) */\n    readonly value: LocalContentDensityMode;\n}\n\nexport const CONTENT_DENSITY_DIRECTIVE = new InjectionToken<ContentDensityDirectiveRef>('ContentDensityDirective');\n","import {\n    booleanAttribute,\n    computed,\n    Directive,\n    effect,\n    ElementRef,\n    forwardRef,\n    inject,\n    input,\n    isDevMode,\n    Renderer2,\n    signal\n} from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { isContentDensityMode } from '../helpers/density-type-checkers';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/** UI5 attribute name for compact mode */\nconst UI5_COMPACT_ATTRIBUTE = 'data-ui5-compact-size';\n\n/**\n * Directive to control the content density of elements.\n * Used by density controllers and consumers.\n *\n * Provides signal-based state management for reactive content density tracking.\n * Also applies UI5 `data-ui5-compact-size` attribute for UI5 Web Components compatibility.\n *\n * @example\n * // Using fdContentDensity input\n * <fd-button [fdContentDensity]=\"'compact'\">Button</fd-button>\n *\n * // Using shorthand inputs\n * <fd-button fdCompact>Compact Button</fd-button>\n * <fd-button fdCozy>Cozy Button</fd-button>\n * <fd-button fdCondensed>Condensed Button</fd-button>\n */\n@Directive({\n    selector: `[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]),\n                [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]),\n                [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]),\n                [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])`,\n    exportAs: 'fdContentDensity',\n    providers: [\n        {\n            provide: CONTENT_DENSITY_DIRECTIVE,\n            useExisting: forwardRef(() => ContentDensityDirective)\n        }\n    ]\n})\nexport class ContentDensityDirective {\n    /**\n     * Sets the content density of the element dynamically.\n     * Accepts 'compact', 'cozy', 'condensed', or 'global'.\n     *\n     * @example\n     * <fd-button [fdContentDensity]=\"'compact'\">Button</fd-button>\n     */\n    readonly fdContentDensity = input<`${ContentDensityMode}` | LocalContentDensityMode | ''>('');\n\n    /**\n     * Shorthand for setting compact density.\n     * Equivalent to `[fdContentDensity]=\"'compact'\"`.\n     *\n     * @example\n     * <fd-button fdCompact>Button</fd-button>\n     * <fd-button [fdCompact]=\"isCompact\">Button</fd-button>\n     */\n    readonly fdCompact = input(false, { transform: booleanAttribute });\n\n    /**\n     * Shorthand for setting condensed density.\n     * Equivalent to `[fdContentDensity]=\"'condensed'\"`.\n     *\n     * @example\n     * <fd-button fdCondensed>Button</fd-button>\n     * <fd-button [fdCondensed]=\"isCondensed\">Button</fd-button>\n     */\n    readonly fdCondensed = input(false, { transform: booleanAttribute });\n\n    /**\n     * Shorthand for setting cozy density.\n     * Equivalent to `[fdContentDensity]=\"'cozy'\"`.\n     *\n     * @example\n     * <fd-button fdCozy>Button</fd-button>\n     * <fd-button [fdCozy]=\"isCozy\">Button</fd-button>\n     */\n    readonly fdCozy = input(false, { transform: booleanAttribute });\n\n    /**\n     * Current content density mode as a computed signal.\n     * Resolves the density based on shorthand inputs or fdContentDensity value.\n     *\n     * @returns The resolved content density mode\n     */\n    readonly densityMode: ReturnType<typeof computed<LocalContentDensityMode>> = computed(() => {\n        // Check programmatic override first\n        const programmaticDensity = this._programmaticDensity();\n        if (programmaticDensity !== null) {\n            return programmaticDensity;\n        }\n\n        // Check shorthand inputs\n        if (this.fdCompact()) {\n            return ContentDensityMode.COMPACT;\n        }\n        if (this.fdCondensed()) {\n            return ContentDensityMode.CONDENSED;\n        }\n        if (this.fdCozy()) {\n            return ContentDensityMode.COZY;\n        }\n\n        // Then check fdContentDensity input\n        const val = this.fdContentDensity();\n        if (val === '') {\n            return ContentDensityGlobalKeyword;\n        }\n        if (!isContentDensityMode(val)) {\n            if (isDevMode()) {\n                console.warn(\n                    `The value \"${val}\" is not a valid content density mode. Using \"${ContentDensityGlobalKeyword}\" instead.`\n                );\n            }\n            return ContentDensityGlobalKeyword;\n        }\n        return val as LocalContentDensityMode;\n    });\n\n    /**\n     * Current density mode value.\n     *\n     * @deprecated Use densityMode() signal instead\n     * @returns The current content density mode\n     */\n    get value(): LocalContentDensityMode {\n        return this.densityMode();\n    }\n\n    /** @hidden */\n    private readonly _elementRef = inject(ElementRef);\n    /** @hidden */\n    private readonly _renderer = inject(Renderer2);\n\n    /**\n     * Internal signal for programmatic density updates.\n     * Takes precedence over input bindings when set.\n     */\n    private readonly _programmaticDensity = signal<LocalContentDensityMode | null>(null);\n\n    /** @hidden */\n    constructor() {\n        // Effect to apply UI5 attribute based on density mode\n        effect(() => {\n            this._applyUi5Attribute(this.densityMode());\n        });\n    }\n\n    /**\n     * Sets the content density programmatically.\n     * Use this method when you need to update the density from code\n     * (e.g., in host directives or dynamic scenarios).\n     *\n     * @param density The content density mode to set\n     */\n    setDensity(density: LocalContentDensityMode): void {\n        this._programmaticDensity.set(density);\n    }\n\n    /**\n     * Clears the programmatic density override.\n     * After calling this, the density will be resolved from input bindings.\n     */\n    clearDensity(): void {\n        this._programmaticDensity.set(null);\n    }\n\n    /**\n     * Applies or removes the UI5 compact attribute based on density mode.\n     * COMPACT and CONDENSED map to UI5 compact mode.\n     * COZY and 'global' do not apply the attribute (UI5 defaults to cozy).\n     * @hidden\n     */\n    private _applyUi5Attribute(density: LocalContentDensityMode): void {\n        const nativeElement = this._elementRef?.nativeElement;\n        // Only apply to actual HTML elements, not comment/text nodes\n        if (!nativeElement || !this._renderer || !(nativeElement instanceof HTMLElement)) {\n            return;\n        }\n\n        const isUi5Compact = density === ContentDensityMode.COMPACT || density === ContentDensityMode.CONDENSED;\n\n        if (isUi5Compact) {\n            this._renderer.setAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE, '');\n        } else {\n            this._renderer.removeAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE);\n        }\n    }\n}\n","import { Signal } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Abstract class for content density storage implementations.\n * The default implementation is MemoryContentDensityStorage.\n *\n * Provides a signal-based API for reactive content density tracking.\n *\n * @example\n * // Provide a custom storage implementation\n * providers: [\n *   { provide: ContentDensityStorage, useClass: LocalContentDensityStorage }\n * ]\n */\nexport abstract class ContentDensityStorage {\n    /**\n     * Current content density as a readonly signal.\n     * Read this signal to get the current density or react to changes.\n     */\n    abstract readonly contentDensity: Signal<ContentDensityMode>;\n\n    /**\n     * Updates the content density.\n     * @param density The new content density mode\n     */\n    abstract setContentDensity(density: ContentDensityMode): void;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CONTENT_DENSITY_STORAGE_KEY = new InjectionToken<string>(\n    'Content density storage key for local storage or for url param',\n    {\n        factory: () => '__ContentDensity__'\n    }\n);\n","import { InjectionToken } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const DEFAULT_CONTENT_DENSITY = new InjectionToken<ContentDensityMode>('Default global content density', {\n    factory: () => ContentDensityMode.COZY\n});\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { LocalStorageService } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using browser localStorage.\n * Persists the content density setting across browser sessions.\n */\n@Injectable()\nexport class LocalContentDensityStorage implements ContentDensityStorage {\n    /** Current content density as a readonly signal. */\n    readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n    private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n    private readonly _defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);\n    private readonly _storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);\n    private readonly _storage = inject(LocalStorageService);\n\n    constructor() {\n        this._initialize();\n        const storedDensity = this._storage.get(this._storageKey) || this._defaultContentDensity;\n        this._contentDensity = signal<ContentDensityMode>(storedDensity);\n        this.contentDensity = this._contentDensity.asReadonly();\n    }\n\n    /**\n     * Updates the content density and persists it to localStorage.\n     * @param density The new content density mode\n     */\n    setContentDensity(density: ContentDensityMode): void {\n        this._storage.set(this._storageKey, density);\n        this._contentDensity.set(density);\n    }\n\n    /** @hidden */\n    private _initialize(): void {\n        if (!this._storage.get(this._storageKey)) {\n            this._storage.set(this._storageKey, this._defaultContentDensity);\n        }\n    }\n}\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using in-memory state.\n * The setting is lost when the application is refreshed.\n * This is the default storage implementation.\n */\n@Injectable()\nexport class MemoryContentDensityStorage implements ContentDensityStorage {\n    /** Current content density as a readonly signal. */\n    readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n    private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n\n    constructor() {\n        const defaultDensity = inject(DEFAULT_CONTENT_DENSITY);\n        this._contentDensity = signal<ContentDensityMode>(defaultDensity);\n        this.contentDensity = this._contentDensity.asReadonly();\n    }\n\n    /**\n     * Updates the content density in memory.\n     * @param density The new content density mode\n     */\n    setContentDensity(density: ContentDensityMode): void {\n        this._contentDensity.set(density);\n    }\n}\n","import { DestroyRef, inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using URL query parameters.\n * Persists the content density setting in the URL, allowing it to be\n * shared via links and bookmarked.\n */\n@Injectable()\nexport class UrlContentDensityStorage implements ContentDensityStorage {\n    /** Current content density as a readonly signal. */\n    readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n    private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n    private readonly _router = inject(Router);\n    private readonly _activatedRoute = inject(ActivatedRoute);\n    private readonly _defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);\n    private readonly _storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);\n    private readonly _destroyRef = inject(DestroyRef);\n\n    constructor() {\n        this._contentDensity = signal<ContentDensityMode>(this._defaultContentDensity);\n        this.contentDensity = this._contentDensity.asReadonly();\n        this._initialize();\n    }\n\n    /**\n     * Updates the content density and reflects it in the URL query parameters.\n     * @param density The new content density mode\n     */\n    setContentDensity(density: ContentDensityMode): void {\n        this._contentDensity.set(density);\n        this._setUrlQueryParam(density);\n    }\n\n    /** @hidden */\n    private _initialize(): void {\n        // Subscribe to query param changes and update signal.\n        // Automatically unsubscribes when the service is destroyed.\n        this._activatedRoute.queryParams.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((queryParams) => {\n            const density = queryParams[this._storageKey];\n            if (density && density !== this._contentDensity()) {\n                this._contentDensity.set(density);\n            }\n        });\n    }\n\n    /** @hidden */\n    private _setUrlQueryParam(density: ContentDensityMode): void {\n        const currentUrl = this._router.url;\n        const [pathname, search] = currentUrl.split('?');\n        const params = new URLSearchParams(search || '');\n        params.delete(this._storageKey);\n        params.set(this._storageKey, density);\n\n        this._router.navigateByUrl(`${pathname}?${params.toString()}`);\n    }\n}\n","import { inject, Injectable, Injector, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Service for managing global content density state.\n * Provides a signal-based API for reactive content density tracking.\n */\n@Injectable()\nexport class GlobalContentDensityService {\n    /** Current content density as a readonly signal. */\n    readonly currentDensitySignal: Signal<ContentDensityMode>;\n\n    private readonly _storage = inject(ContentDensityStorage);\n    private readonly _injector = inject(Injector);\n\n    /**\n     * Current content density value.\n     *\n     * @deprecated Use currentDensitySignal() instead\n     * @returns The current content density mode\n     */\n    get currentContentDensity(): ContentDensityMode {\n        return this.currentDensitySignal();\n    }\n\n    constructor() {\n        this.currentDensitySignal = this._storage.contentDensity;\n    }\n\n    /**\n     * Returns an observable that emits content density changes.\n     *\n     * @deprecated Use currentDensitySignal signal instead\n     * @returns Observable of content density changes\n     */\n    contentDensityListener(): Observable<ContentDensityMode> {\n        return toObservable(this._storage.contentDensity, { injector: this._injector });\n    }\n\n    /**\n     * Updates the global content density.\n     * @param density The new content density mode\n     */\n    updateContentDensity(density: ContentDensityMode): void {\n        this._storage.setContentDensity(density);\n    }\n}\n","import { DOCUMENT, Provider } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from './classes/abstract-content-density-storage';\nimport { ContentDensityModuleConfig } from './content-density.types';\nimport { LocalContentDensityStorage } from './providers/local-content-density-storage';\nimport { MemoryContentDensityStorage } from './providers/memory-content-density-storage';\nimport { UrlContentDensityStorage } from './providers/url-content-density-storage';\nimport { GlobalContentDensityService } from './services/global-content-density.service';\nimport { CONTENT_DENSITY_STORAGE_KEY } from './tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from './tokens/default-content-density.token';\nimport { ContentDensityMode } from './types/content-density.mode';\n\nfunction generateContentDensityStorage(config: ContentDensityModuleConfig): Provider {\n    if (config.storage === 'localStorage') {\n        return {\n            provide: ContentDensityStorage,\n            useClass: LocalContentDensityStorage\n        };\n    }\n    if (config.storage === 'memory') {\n        return {\n            provide: ContentDensityStorage,\n            useClass: MemoryContentDensityStorage\n        };\n    }\n    if (config.storage === 'url') {\n        return {\n            provide: ContentDensityStorage,\n            useClass: UrlContentDensityStorage,\n            deps: [Router, ActivatedRoute, DEFAULT_CONTENT_DENSITY, CONTENT_DENSITY_STORAGE_KEY, DOCUMENT]\n        };\n    }\n    return [];\n}\n\n/**\n * Provides content density services and configurations\n * @param config\n */\nexport function provideContentDensity(config?: ContentDensityModuleConfig): Provider[] {\n    let storage: Provider;\n    const conf: ContentDensityModuleConfig = config || { storage: 'memory' };\n\n    if (typeof conf.storage === 'string') {\n        storage = generateContentDensityStorage(conf);\n    } else if (typeof conf.storage === 'object') {\n        storage = conf.storage;\n    } else {\n        storage = {\n            provide: ContentDensityStorage,\n            useClass: MemoryContentDensityStorage\n        };\n    }\n    return [\n        {\n            provide: DEFAULT_CONTENT_DENSITY,\n            useValue: conf.defaultGlobalContentDensity || ContentDensityMode.COZY\n        },\n        {\n            provide: CONTENT_DENSITY_STORAGE_KEY,\n            useValue: (conf as any).storageKey || '__ContentDensity__'\n        },\n        GlobalContentDensityService,\n        storage\n    ];\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ContentDensityModuleConfig } from './content-density.types';\nimport { ContentDensityDirective } from './directives/content-density.directive';\nimport { provideContentDensity } from './provide-content-density';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [ContentDensityDirective],\n    exports: [ContentDensityDirective]\n})\nexport class ContentDensityModule {\n    /** Module with providers */\n    static forRoot(config?: ContentDensityModuleConfig): ModuleWithProviders<ContentDensityModule> {\n        return {\n            ngModule: ContentDensityModule,\n            providers: [provideContentDensity(config)]\n        };\n    }\n}\n","import { FactorySansProvider, ProviderToken } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Configuration for UI5 Web Components content density markers.\n * UI5 Web Components use `data-ui5-compact-size` attribute for compact mode.\n * Cozy is the default mode (no marker needed).\n */\nexport interface Ui5ContentDensityMarkers {\n    /**\n     * Whether to apply UI5 content density markers.\n     * When enabled, `data-ui5-compact-size` attribute will be applied\n     * for COMPACT and CONDENSED modes (UI5 only supports cozy/compact).\n     * @default true\n     */\n    enabled: boolean;\n}\n\nexport class ContentDensityObserverSettings {\n    /** Classes to be added to the element. */\n    modifiers?: Partial<Record<ContentDensityMode, string>>;\n    /** Supported content densities. */\n    supportedContentDensity?: ContentDensityMode[];\n    /** Default content density. */\n    defaultContentDensity?: ContentDensityMode | ProviderToken<ContentDensityMode> | FactorySansProvider;\n    /** Whether in debug mode. */\n    debug?: boolean;\n    /** Whether to always add class modifiers. Useful for components that are detached from its parent component. */\n    alwaysAddModifiers?: boolean;\n    /** Whether to force child components to restrict supported content density with current component's one. */\n    restrictChildContentDensity?: boolean;\n    /**\n     * Configuration for UI5 Web Components content density markers.\n     * When enabled, applies `data-ui5-compact-size` attribute for compact/condensed modes.\n     */\n    ui5Markers?: Ui5ContentDensityMarkers;\n}\n","import { computed, Signal } from '@angular/core';\nimport {\n    ContentDensityDefaultKeyword,\n    ContentDensityGlobalKeyword,\n    LocalContentDensityMode\n} from '../content-density.types';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Creates a computed signal that resolves the content density from multiple sources.\n *\n * Priority order:\n * 1. Parent content density observer (if restrictChildContentDensity is enabled)\n * 2. Content density directive\n * 3. Global content density service\n * 4. Default content density\n *\n * Special keywords are resolved:\n * - 'default' -> uses defaultContentDensity\n * - 'global' -> uses global service value\n */\nexport const getChangesSource = (params: {\n    defaultContentDensity: ContentDensityMode;\n    contentDensityDirective?: Signal<LocalContentDensityMode>;\n    contentDensityService?: GlobalContentDensityService;\n    parentContentDensityObserver?: Signal<ContentDensityMode>;\n}): Signal<ContentDensityMode> =>\n    computed(() => {\n        // Get the raw mode from the appropriate source (priority order)\n        const rawMode: LocalContentDensityMode = params.parentContentDensityObserver\n            ? params.parentContentDensityObserver()\n            : params.contentDensityDirective\n              ? params.contentDensityDirective()\n              : (params.contentDensityService?.currentDensitySignal() ?? params.defaultContentDensity);\n\n        // Resolve special keywords\n        if (rawMode === ContentDensityDefaultKeyword) {\n            return params.defaultContentDensity;\n        }\n        if (rawMode === ContentDensityGlobalKeyword) {\n            return params.contentDensityService?.currentDensitySignal() ?? params.defaultContentDensity;\n        }\n\n        return rawMode;\n    });\n","import { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const defaultContentDensityObserverConfigs: Required<ContentDensityObserverSettings> = {\n    modifiers: {\n        [ContentDensityMode.COMPACT]: 'is-compact',\n        [ContentDensityMode.COZY]: 'is-cozy',\n        [ContentDensityMode.CONDENSED]: 'is-condensed'\n    },\n    supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY],\n    defaultContentDensity: ContentDensityMode.COZY,\n    debug: false,\n    alwaysAddModifiers: false,\n    restrictChildContentDensity: false,\n    ui5Markers: {\n        enabled: true\n    }\n};\n","import {\n    afterNextRender,\n    computed,\n    DestroyRef,\n    effect,\n    ElementRef,\n    FactorySansProvider,\n    inject,\n    Injectable,\n    Injector,\n    linkedSignal,\n    Renderer2\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable, Observer, Subscription } from 'rxjs';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityObserverTarget } from '../content-density.types';\nimport { getChangesSource } from '../helpers/get-changes-source.provider';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { ContentDensityMode } from '../types/content-density.mode';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\n\nconst isFactoryProvider = (obj: any): obj is FactorySansProvider => !!(obj && (obj as FactorySansProvider).useFactory);\n\nconst getDeps = (injector: Injector, defaultContentDensity: FactorySansProvider): Array<any> =>\n    (defaultContentDensity.deps || []).map((dep): any => {\n        if (Array.isArray(dep)) {\n            let type;\n            let flags = {};\n            for (let index = 0; index < dep.length; index++) {\n                const flag = dep[index]['__NG_DI_FLAG__'];\n                if (typeof flag === 'number') {\n                    flags = { ...flags, flag };\n                } else {\n                    type = dep[index];\n                }\n            }\n            return injector.get(type, undefined, flags);\n        }\n        return injector.get(dep, undefined, {});\n    });\n\nconst getDefaultContentDensity = (\n    injector: Injector,\n    configuration: Required<ContentDensityObserverSettings>\n): ContentDensityMode => {\n    if (typeof configuration.defaultContentDensity === 'string') {\n        return configuration.defaultContentDensity as ContentDensityMode;\n    }\n    if (isFactoryProvider(configuration.defaultContentDensity)) {\n        const deps = getDeps(injector, configuration.defaultContentDensity);\n        return configuration.defaultContentDensity.useFactory(...deps);\n    }\n    return injector.get(configuration.defaultContentDensity, undefined, undefined);\n};\n\nconst initialContentDensity = (\n    injector: Injector,\n    configuration?: ContentDensityObserverSettings\n): ContentDensityMode => {\n    const serviceValue = injector.get(GlobalContentDensityService, null, { optional: true })?.currentContentDensity;\n    if (serviceValue) {\n        return serviceValue;\n    }\n    return getDefaultContentDensity(injector, {\n        ...defaultContentDensityObserverConfigs,\n        ...(configuration || {})\n    });\n};\n\n/**\n * Service for observing and managing content density in components.\n *\n * Provides signal-based API for reactive content density tracking.\n * Uses linkedSignal (Angular 21+) for derived state with validation.\n */\n@Injectable()\nexport class ContentDensityObserver {\n    /** Configuration for this observer */\n    readonly config: ContentDensityObserverSettings;\n\n    /**\n     * Current content density as a readonly signal.\n     * Uses linkedSignal internally for reactive updates with validation.\n     */\n    readonly contentDensity: ReturnType<\n        ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>['asReadonly']\n    >;\n\n    /** Whether content density is compact (signal) */\n    readonly isCompactSignal: ReturnType<typeof computed<boolean>>;\n\n    /** Whether content density is cozy (signal) */\n    readonly isCozySignal: ReturnType<typeof computed<boolean>>;\n\n    /** Whether content density is condensed (signal) */\n    readonly isCondensedSignal: ReturnType<typeof computed<boolean>>;\n\n    /**\n     * Current content density signal\n     * @deprecated Use contentDensity() instead\n     */\n    readonly contentDensity$: ReturnType<\n        ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>['asReadonly']\n    >;\n\n    /**\n     * Observable for compact state changes\n     * @deprecated Use isCompactSignal signal instead\n     */\n    readonly isCompact$: Observable<boolean>;\n\n    /**\n     * Observable for cozy state changes\n     * @deprecated Use isCozySignal signal instead\n     */\n    readonly isCozy$: Observable<boolean>;\n\n    /**\n     * Observable for condensed state changes\n     * @deprecated Use isCondensedSignal signal instead\n     */\n    readonly isCondensed$: Observable<boolean>;\n\n    /**\n     * Observable of content density changes\n     * @deprecated Use contentDensity signal instead\n     */\n    readonly contentDensity$$: Observable<ContentDensityMode>;\n\n    /**\n     * Internal linkedSignal for content density with validation.\n     * linkedSignal (Angular 21+) automatically tracks source changes\n     * and applies the computation (validation/fallback).\n     */\n    private readonly _contentDensity: ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>;\n\n    private readonly _changesSource: ReturnType<typeof computed<ContentDensityMode>>;\n\n    private readonly _destroyRef = inject(DestroyRef);\n\n    private readonly _alternativeTo = {\n        [ContentDensityMode.COMPACT]: (): ContentDensityMode =>\n            this._isSupported(ContentDensityMode.CONDENSED) ? ContentDensityMode.CONDENSED : ContentDensityMode.COZY,\n        [ContentDensityMode.CONDENSED]: (): ContentDensityMode =>\n            this._isSupported(ContentDensityMode.COMPACT) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY,\n        [ContentDensityMode.COZY]: (): ContentDensityMode => ContentDensityMode.COZY // No alternative here, everyone should support it\n    };\n\n    private _globalContentDensityService = inject(GlobalContentDensityService, {\n        optional: true\n    });\n\n    private _contentDensityDirective = inject(CONTENT_DENSITY_DIRECTIVE, {\n        optional: true\n    });\n\n    private _parentContentDensityObserver = inject(ContentDensityObserver, {\n        optional: true,\n        skipSelf: true\n    });\n\n    private _renderer: Renderer2 | null = inject(Renderer2);\n\n    private _elementRef: ElementRef<any> | null = inject(ElementRef);\n\n    private _elements = [this._elementRef];\n\n    /**\n     * Current content density value\n     * @deprecated Use contentDensity() signal instead\n     */\n    get value(): ContentDensityMode {\n        return this._contentDensity();\n    }\n\n    /**\n     * Whether content density is compact\n     * @deprecated Use isCompactSignal() signal instead\n     */\n    get isCompact(): boolean {\n        return this.isCompactSignal();\n    }\n\n    /**\n     * Whether content density is cozy\n     * @deprecated Use isCozySignal() signal instead\n     */\n    get isCozy(): boolean {\n        return this.isCozySignal();\n    }\n\n    /**\n     * Whether content density is condensed\n     * @deprecated Use isCondensedSignal() signal instead\n     */\n    get isCondensed(): boolean {\n        return this.isCondensedSignal();\n    }\n\n    constructor(_injector: Injector, _providedConfig?: ContentDensityObserverSettings) {\n        // Set up config first (needed for validation)\n        this.config = {\n            ...defaultContentDensityObserverConfigs,\n            ...(this._parentContentDensityObserver?.config ?? {}),\n            ...(_providedConfig || {})\n        };\n\n        // Resolve initial density\n        const resolvedInitialDensity = initialContentDensity(_injector, _providedConfig);\n\n        // Get the changes source as a computed signal\n        this._changesSource = getChangesSource({\n            defaultContentDensity: resolvedInitialDensity,\n            contentDensityDirective: this._contentDensityDirective?.densityMode,\n            contentDensityService: this._globalContentDensityService ?? undefined,\n            parentContentDensityObserver: this.config.restrictChildContentDensity\n                ? this._parentContentDensityObserver?.contentDensity\n                : undefined\n        });\n\n        // Use linkedSignal for derived state with validation (Angular 21+ pattern)\n        // linkedSignal automatically updates when source changes, applying the computation\n        this._contentDensity = linkedSignal({\n            source: this._changesSource,\n            computation: (source) => {\n                // Guard against undefined/null source values\n                if (!source || typeof source !== 'string') {\n                    return ContentDensityMode.COZY; // Safe fallback to default\n                }\n                return this._validateAndFallback(source as ContentDensityMode);\n            }\n        });\n\n        // Public readonly signal\n        this.contentDensity = this._contentDensity.asReadonly();\n\n        // Computed boolean signals\n        this.isCompactSignal = computed(() => this._contentDensity() === ContentDensityMode.COMPACT);\n        this.isCozySignal = computed(() => this._contentDensity() === ContentDensityMode.COZY);\n        this.isCondensedSignal = computed(() => this._contentDensity() === ContentDensityMode.CONDENSED);\n\n        // Backward compatible signal aliases\n        this.contentDensity$ = this.contentDensity;\n\n        // Backward compatible observables\n        this.isCompact$ = toObservable(this.isCompactSignal, { injector: _injector });\n        this.isCozy$ = toObservable(this.isCozySignal, { injector: _injector });\n        this.isCondensed$ = toObservable(this.isCondensedSignal, { injector: _injector });\n        this.contentDensity$$ = toObservable(this._contentDensity, { injector: _injector });\n\n        // Effect purely for DOM side effects (CSS classes and UI5 attribute)\n        // This follows Angular 21 best practices: effects should only do side effects, not update signals\n        effect(() => {\n            // Read the signal to track changes\n            const density = this._contentDensity();\n            // Apply DOM changes (side effect)\n            this._applyClass(density);\n        });\n\n        // Apply initial CSS class after first render (zoneless-compatible)\n        afterNextRender(() => {\n            this._applyClass(this._contentDensity());\n        });\n\n        // Register cleanup on destroy\n        this._destroyRef.onDestroy(() => {\n            this._cleanup();\n            if (this.config.debug) {\n                console.warn('ContentDensityObserver: destroyed');\n            }\n        });\n    }\n\n    /**\n     * Add consumers to observe content density changes\n     * @deprecated Use signal bindings instead\n     */\n    consume(...consumers: ContentDensityObserverTarget[]): void {\n        this._elements.concat(...consumers.map((c) => c.elementRef));\n    }\n\n    /**\n     * Completes the observer and cleans up resources\n     * @deprecated Cleanup is automatic via DestroyRef\n     */\n    complete(): void {\n        this._cleanup();\n    }\n\n    /**\n     * Returns an observable of content density changes\n     * @deprecated Use contentDensity signal instead\n     */\n    asObservable(): Observable<ContentDensityMode> {\n        return this.contentDensity$$;\n    }\n\n    /**\n     * Subscribe to content density changes.\n     * @deprecated Use contentDensity signal with effect() instead.\n     * This method exists for backward compatibility.\n     */\n    subscribe(observer?: Partial<Observer<ContentDensityMode>>): Subscription {\n        return this.contentDensity$$.subscribe(observer);\n    }\n\n    /**\n     * Remove a consumer from the observer\n     * @deprecated Use signal bindings instead\n     */\n    removeConsumer(consumer: ContentDensityObserverTarget): void {\n        this._elements.splice(this._elements.indexOf(consumer.elementRef), 1);\n    }\n\n    private _validateAndFallback(density: ContentDensityMode): ContentDensityMode {\n        if (this.config.debug) {\n            console.warn(`ContentDensityObserver: density changed to ${density}`);\n        }\n        if (!this._isSupported(density)) {\n            try {\n                if (this.config.debug) {\n                    console.warn(\n                        `ContentDensityObserver: ${density} is not supported. Failing back to alternative one.`\n                    );\n                }\n                return this._alternativeTo[density]();\n            } catch {\n                throw new Error(`ContentDensityObserver: density ${density} is not supported`);\n            }\n        }\n        return density;\n    }\n\n    private _cleanup(): void {\n        this._parentContentDensityObserver = null;\n        this._contentDensityDirective = null;\n        this._globalContentDensityService = null;\n        this._elementRef = null;\n        this._renderer = null;\n        this._elements = [];\n    }\n\n    private _applyClass(currentDensity?: ContentDensityMode): void {\n        if (!this.config?.modifiers) {\n            return;\n        }\n        const modifiers = this.config.modifiers;\n        const density = currentDensity ?? this._contentDensity();\n\n        const parentContentDensityEqual = this._parentContentDensityObserver?.value === density;\n\n        this._elements.forEach((element) => {\n            Object.values(modifiers).forEach((className) => {\n                this._renderer?.removeClass(element?.nativeElement, className);\n            });\n\n            // Apply/remove UI5 compact marker attribute\n            this._applyUi5Marker(element?.nativeElement, density, parentContentDensityEqual);\n\n            // Simply remove all modifiers from current element. Content density state is covered by parent element.\n            if (parentContentDensityEqual && !this.config.alwaysAddModifiers) {\n                return;\n            }\n            const modifierClass = modifiers[density];\n            if (modifierClass) {\n                this._renderer?.addClass(element?.nativeElement, modifierClass);\n            }\n        });\n    }\n\n    /**\n     * Apply or remove UI5 Web Components compact marker.\n     * UI5 Web Components only support cozy (default) and compact modes.\n     * Both COMPACT and CONDENSED fundamental-ngx modes map to UI5 compact.\n     */\n    private _applyUi5Marker(\n        nativeElement: HTMLElement | undefined,\n        currentDensity: ContentDensityMode,\n        parentContentDensityEqual: boolean\n    ): void {\n        // Only apply to actual HTML elements, not comment/text nodes\n        if (\n            !this.config.ui5Markers?.enabled ||\n            !nativeElement ||\n            !this._renderer ||\n            !(nativeElement instanceof HTMLElement)\n        ) {\n            return;\n        }\n\n        const ui5CompactAttribute = 'data-ui5-compact-size';\n\n        // Remove attribute if parent already has the same density (unless alwaysAddModifiers)\n        if (parentContentDensityEqual && !this.config.alwaysAddModifiers) {\n            this._renderer.removeAttribute(nativeElement, ui5CompactAttribute);\n            return;\n        }\n\n        // UI5 only has cozy (default) and compact modes\n        // Map: COMPACT -> compact, CONDENSED -> compact, COZY -> remove attribute\n        const isUi5Compact =\n            currentDensity === ContentDensityMode.COMPACT || currentDensity === ContentDensityMode.CONDENSED;\n\n        if (isUi5Compact) {\n            this._renderer.setAttribute(nativeElement, ui5CompactAttribute, '');\n        } else {\n            this._renderer.removeAttribute(nativeElement, ui5CompactAttribute);\n        }\n    }\n\n    private _isSupported(density: ContentDensityMode): boolean {\n        return this.config.supportedContentDensity?.includes(density) ?? false;\n    }\n}\n","import { Provider } from '@angular/core';\nimport { consumerProviderFactory } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityObserver } from '../services/content-density-observer.service';\n\n/**\n * Creates provider for ContentDensityObserver\n */\nexport function contentDensityObserverProviders(params?: ContentDensityObserverSettings): Provider[] {\n    return [consumerProviderFactory(ContentDensityObserver, params)];\n}\n","import { Provider, signal } from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { CONTENT_DENSITY_DIRECTIVE, ContentDensityDirectiveRef } from '../tokens/content-density-directive';\n\n/** @hidden */\nexport function mockedLocalContentDensityDirective(\n    defaultValue: LocalContentDensityMode = ContentDensityGlobalKeyword\n): { contentDensityDirectiveProvider: Provider; setContentDensity: (cd: LocalContentDensityMode) => void } {\n    const densitySignal = signal<LocalContentDensityMode>(defaultValue);\n\n    const mockDirective: ContentDensityDirectiveRef = {\n        densityMode: densitySignal.asReadonly(),\n        get value(): LocalContentDensityMode {\n            return densitySignal();\n        }\n    };\n\n    return {\n        contentDensityDirectiveProvider: {\n            provide: CONTENT_DENSITY_DIRECTIVE,\n            useValue: mockDirective\n        },\n        setContentDensity: (cd: LocalContentDensityMode) => densitySignal.set(cd)\n    };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ContentDensityObserverSettings"],"mappings":";;;;;;AAKO,MAAM,2BAA2B,GAAG;AACpC,MAAM,4BAA4B,GAAG;;ICNhC;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACvB,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;ACGvB,MAAM,SAAS,GAAG,CAAC,OAAY,KAAc,OAAO,KAAK,kBAAkB,CAAC;AAC5E,MAAM,WAAW,GAAG,CAAC,OAAY,KAAc,OAAO,KAAK,kBAAkB,CAAC;AAC9E,MAAM,MAAM,GAAG,CAAC,OAAY,KAAc,OAAO,KAAK,kBAAkB,CAAC;AACzE,MAAM,oBAAoB,GAAG,CAAC,OAAY,KAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK;;MCOpE,yBAAyB,GAAG,IAAI,cAAc,CAA6B,yBAAyB;;ACIjH;AACA,MAAM,qBAAqB,GAAG,uBAAuB;AAErD;;;;;;;;;;;;;;;AAeG;MAcU,uBAAuB,CAAA;AAgFhC;;;;;AAKG;AACH,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC7B;;AAcA,IAAA,WAAA,GAAA;AArGA;;;;;;AAMG;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAyD,EAAE,4DAAC;AAE7F;;;;;;;AAOG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAElE;;;;;;;AAOG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEpE;;;;;;;AAOG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/D;;;;;AAKG;AACM,QAAA,IAAA,CAAA,WAAW,GAAyD,QAAQ,CAAC,MAAK;;AAEvF,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACvD,YAAA,IAAI,mBAAmB,KAAK,IAAI,EAAE;AAC9B,gBAAA,OAAO,mBAAmB;YAC9B;;AAGA,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,OAAO,kBAAkB,CAAC,OAAO;YACrC;AACA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACpB,OAAO,kBAAkB,CAAC,SAAS;YACvC;AACA,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACf,OAAO,kBAAkB,CAAC,IAAI;YAClC;;AAGA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACZ,gBAAA,OAAO,2BAA2B;YACtC;AACA,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;gBAC5B,IAAI,SAAS,EAAE,EAAE;oBACb,OAAO,CAAC,IAAI,CACR,CAAA,WAAA,EAAc,GAAG,CAAA,8CAAA,EAAiD,2BAA2B,CAAA,UAAA,CAAY,CAC5G;gBACL;AACA,gBAAA,OAAO,2BAA2B;YACtC;AACA,YAAA,OAAO,GAA8B;AACzC,QAAA,CAAC,uDAAC;;AAae,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAEhC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C;;;AAGG;AACc,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAiC,IAAI,gEAAC;;QAKhF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,OAAgC,EAAA;AACvC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1C;AAEA;;;AAGG;IACH,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;IACvC;AAEA;;;;;AAKG;AACK,IAAA,kBAAkB,CAAC,OAAgC,EAAA;AACvD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;;AAErD,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,aAAa,YAAY,WAAW,CAAC,EAAE;YAC9E;QACJ;AAEA,QAAA,MAAM,YAAY,GAAG,OAAO,KAAK,kBAAkB,CAAC,OAAO,IAAI,OAAO,KAAK,kBAAkB,CAAC,SAAS;QAEvG,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,qBAAqB,EAAE,EAAE,CAAC;QACzE;aAAO;YACH,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,qBAAqB,CAAC;QACxE;IACJ;8GApJS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2UAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;AACxD;AACJ,SAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAA;;;AAGuE,oFAAA,CAAA;AACjF,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,yBAAyB;AAClC,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B;AACxD;AACJ;AACJ,iBAAA;;;AC9CD;;;;;;;;;;;AAWG;MACmB,qBAAqB,CAAA;AAY1C;;ACzBM,MAAM,2BAA2B,GAAG,IAAI,cAAc,CACzD,gEAAgE,EAChE;AACI,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA,CACJ;;ACJM,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAqB,gCAAgC,EAAE;AAC5G,IAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrC,CAAA,CAAC;;ACEF;;;AAGG;MAEU,0BAA0B,CAAA;AASnC,IAAA,WAAA,GAAA;AAJiB,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAGnD,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,sBAAsB;AACxF,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAqB,aAAa,2DAAC;QAChE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC3D;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAA2B,EAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACrC;;IAGQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC;QACpE;IACJ;8GA9BS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACND;;;;AAIG;MAEU,2BAA2B,CAAA;AAMpC,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAqB,cAAc,2DAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC3D;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAA2B,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACrC;8GAlBS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACFD;;;;AAIG;MAEU,wBAAwB,CAAA;AAWjC,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAG7C,IAAI,CAAC,eAAe,GAAG,MAAM,CAAqB,IAAI,CAAC,sBAAsB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;QAC9E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;QACvD,IAAI,CAAC,WAAW,EAAE;IACtB;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAA2B,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACnC;;IAGQ,WAAW,GAAA;;;QAGf,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,KAAI;YAClG,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;YAC7C,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE;AAC/C,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;YACrC;AACJ,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,iBAAiB,CAAC,OAA2B,EAAA;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;AACnC,QAAA,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,IAAI,EAAE,CAAC;AAChD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAErC,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;IAClE;8GA/CS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACPD;;;AAGG;MAEU,2BAA2B,CAAA;AAOpC;;;;;AAKG;AACH,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACtC;AAEA,IAAA,WAAA,GAAA;AAbiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAazC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc;IAC5D;AAEA;;;;;AAKG;IACH,sBAAsB,GAAA;AAClB,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACnF;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAC,OAA2B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC5C;8GArCS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACED,SAAS,6BAA6B,CAAC,MAAkC,EAAA;AACrE,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE;QACnC,OAAO;AACH,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;SACb;IACL;AACA,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC7B,OAAO;AACH,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;SACb;IACL;AACA,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE;QAC1B,OAAO;AACH,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,QAAQ;SAChG;IACL;AACA,IAAA,OAAO,EAAE;AACb;AAEA;;;AAGG;AACG,SAAU,qBAAqB,CAAC,MAAmC,EAAA;AACrE,IAAA,IAAI,OAAiB;IACrB,MAAM,IAAI,GAA+B,MAAM,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;AAExE,IAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AAClC,QAAA,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC;IACjD;AAAO,SAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACzC,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO;IAC1B;SAAO;AACH,QAAA,OAAO,GAAG;AACN,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;SACb;IACL;IACA,OAAO;AACH,QAAA;AACI,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,2BAA2B,IAAI,kBAAkB,CAAC;AACpE,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,QAAQ,EAAG,IAAY,CAAC,UAAU,IAAI;AACzC,SAAA;QACD,2BAA2B;QAC3B;KACH;AACL;;AC5DA;;;AAGG;MAKU,oBAAoB,CAAA;;IAE7B,OAAO,OAAO,CAAC,MAAmC,EAAA;QAC9C,OAAO;AACH,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;SAC5C;IACL;8GAPS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,OAAA,EAAA,CAHnB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CACvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;+GAExB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,OAAO,EAAE,CAAC,uBAAuB;AACpC,iBAAA;;;MCMY,8BAA8B,CAAA;AAkB1C;;AC3BD;;;;;;;;;;;;AAYG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAKhC,KACG,QAAQ,CAAC,MAAK;;AAEV,IAAA,MAAM,OAAO,GAA4B,MAAM,CAAC;AAC5C,UAAE,MAAM,CAAC,4BAA4B;UACnC,MAAM,CAAC;AACP,cAAE,MAAM,CAAC,uBAAuB;AAChC,eAAG,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,IAAI,MAAM,CAAC,qBAAqB,CAAC;;AAG9F,IAAA,IAAI,OAAO,KAAK,4BAA4B,EAAE;QAC1C,OAAO,MAAM,CAAC,qBAAqB;IACvC;AACA,IAAA,IAAI,OAAO,KAAK,2BAA2B,EAAE;QACzC,OAAO,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,IAAI,MAAM,CAAC,qBAAqB;IAC/F;AAEA,IAAA,OAAO,OAAO;AAClB,CAAC,CAAC;;AC1CC,MAAM,oCAAoC,GAA6C;AAC1F,IAAA,SAAS,EAAE;AACP,QAAA,CAAC,kBAAkB,CAAC,OAAO,GAAG,YAAY;AAC1C,QAAA,CAAC,kBAAkB,CAAC,IAAI,GAAG,SAAS;AACpC,QAAA,CAAC,kBAAkB,CAAC,SAAS,GAAG;AACnC,KAAA;IACD,uBAAuB,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC;IAC9E,qBAAqB,EAAE,kBAAkB,CAAC,IAAI;AAC9C,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,2BAA2B,EAAE,KAAK;AAClC,IAAA,UAAU,EAAE;AACR,QAAA,OAAO,EAAE;AACZ;;;ACOL,MAAM,iBAAiB,GAAG,CAAC,GAAQ,KAAiC,CAAC,EAAE,GAAG,IAAK,GAA2B,CAAC,UAAU,CAAC;AAEtH,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAE,qBAA0C,KAC3E,CAAC,qBAAqB,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KAAS;AAChD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACpB,QAAA,IAAI,IAAI;QACR,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC;AACzC,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,gBAAA,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE;YAC9B;iBAAO;AACH,gBAAA,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;YACrB;QACJ;QACA,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;IAC/C;IACA,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEN,MAAM,wBAAwB,GAAG,CAC7B,QAAkB,EAClB,aAAuD,KACnC;AACpB,IAAA,IAAI,OAAO,aAAa,CAAC,qBAAqB,KAAK,QAAQ,EAAE;QACzD,OAAO,aAAa,CAAC,qBAA2C;IACpE;AACA,IAAA,IAAI,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC;QACnE,OAAO,aAAa,CAAC,qBAAqB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAClE;AACA,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,EAAE,SAAS,EAAE,SAAS,CAAC;AAClF,CAAC;AAED,MAAM,qBAAqB,GAAG,CAC1B,QAAkB,EAClB,aAA8C,KAC1B;AACpB,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,qBAAqB;IAC/G,IAAI,YAAY,EAAE;AACd,QAAA,OAAO,YAAY;IACvB;IACA,OAAO,wBAAwB,CAAC,QAAQ,EAAE;AACtC,QAAA,GAAG,oCAAoC;AACvC,QAAA,IAAI,aAAa,IAAI,EAAE;AAC1B,KAAA,CAAC;AACN,CAAC;AAED;;;;;AAKG;MAEU,sBAAsB,CAAA;AA2F/B;;;AAGG;AACH,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IACjC;AAEA;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IACjC;AAEA;;;AAGG;AACH,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;AAEA;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACnC;IAEA,WAAA,CAAY,SAAmB,EAAE,eAAgD,EAAA;AA7DhE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhC,QAAA,IAAA,CAAA,cAAc,GAAG;YAC9B,CAAC,kBAAkB,CAAC,OAAO,GAAG,MAC1B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC,SAAS,GAAG,kBAAkB,CAAC,IAAI;YAC5G,CAAC,kBAAkB,CAAC,SAAS,GAAG,MAC5B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,GAAG,kBAAkB,CAAC,IAAI;AACxG,YAAA,CAAC,kBAAkB,CAAC,IAAI,GAAG,MAA0B,kBAAkB,CAAC,IAAI;SAC/E;AAEO,QAAA,IAAA,CAAA,4BAA4B,GAAG,MAAM,CAAC,2BAA2B,EAAE;AACvE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,yBAAyB,EAAE;AACjE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CAAC,sBAAsB,EAAE;AACnE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,SAAS,GAAqB,MAAM,CAAC,SAAS,CAAC;AAE/C,QAAA,IAAA,CAAA,WAAW,GAA2B,MAAM,CAAC,UAAU,CAAC;AAExD,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;;QAoClC,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,oCAAoC;YACvC,IAAI,IAAI,CAAC,6BAA6B,EAAE,MAAM,IAAI,EAAE,CAAC;AACrD,YAAA,IAAI,eAAe,IAAI,EAAE;SAC5B;;QAGD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,SAAS,EAAE,eAAe,CAAC;;AAGhF,QAAA,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;AACnC,YAAA,qBAAqB,EAAE,sBAAsB;AAC7C,YAAA,uBAAuB,EAAE,IAAI,CAAC,wBAAwB,EAAE,WAAW;AACnE,YAAA,qBAAqB,EAAE,IAAI,CAAC,4BAA4B,IAAI,SAAS;AACrE,YAAA,4BAA4B,EAAE,IAAI,CAAC,MAAM,CAAC;AACtC,kBAAE,IAAI,CAAC,6BAA6B,EAAE;AACtC,kBAAE;AACT,SAAA,CAAC;;;QAIF,IAAI,CAAC,eAAe,GAAG,YAAY,2DAC/B,MAAM,EAAE,IAAI,CAAC,cAAc;AAC3B,YAAA,WAAW,EAAE,CAAC,MAAM,KAAI;;gBAEpB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACvC,oBAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC;gBACnC;AACA,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAA4B,CAAC;AAClE,YAAA,CAAC,GACH;;QAGF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;;AAGvD,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,kBAAkB,CAAC,OAAO,2DAAC;AAC5F,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,kBAAkB,CAAC,IAAI,wDAAC;AACtF,QAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,kBAAkB,CAAC,SAAS,6DAAC;;AAGhG,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc;;AAG1C,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC7E,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACvE,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjF,QAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;;;QAInF,MAAM,CAAC,MAAK;;AAER,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;;AAEtC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC7B,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;YAC5B,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;YACrD;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;IACH,OAAO,CAAC,GAAG,SAAyC,EAAA;QAChD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IAChE;AAEA;;;AAGG;IACH,QAAQ,GAAA;QACJ,IAAI,CAAC,QAAQ,EAAE;IACnB;AAEA;;;AAGG;IACH,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,gBAAgB;IAChC;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,QAAgD,EAAA;QACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;IACpD;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,QAAsC,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACzE;AAEQ,IAAA,oBAAoB,CAAC,OAA2B,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,OAAO,CAAA,CAAE,CAAC;QACzE;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,IAAI;AACA,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,oBAAA,OAAO,CAAC,IAAI,CACR,2BAA2B,OAAO,CAAA,mDAAA,CAAqD,CAC1F;gBACL;AACA,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YACzC;AAAE,YAAA,MAAM;AACJ,gBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAA,iBAAA,CAAmB,CAAC;YAClF;QACJ;AACA,QAAA,OAAO,OAAO;IAClB;IAEQ,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI;AACzC,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEQ,IAAA,WAAW,CAAC,cAAmC,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;YACzB;QACJ;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QACvC,MAAM,OAAO,GAAG,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE;QAExD,MAAM,yBAAyB,GAAG,IAAI,CAAC,6BAA6B,EAAE,KAAK,KAAK,OAAO;QAEvF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC3C,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC;AAClE,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,CAAC;;YAGhF,IAAI,yBAAyB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBAC9D;YACJ;AACA,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;YACxC,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC;YACnE;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACK,IAAA,eAAe,CACnB,aAAsC,EACtC,cAAkC,EAClC,yBAAkC,EAAA;;AAGlC,QAAA,IACI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO;AAChC,YAAA,CAAC,aAAa;YACd,CAAC,IAAI,CAAC,SAAS;AACf,YAAA,EAAE,aAAa,YAAY,WAAW,CAAC,EACzC;YACE;QACJ;QAEA,MAAM,mBAAmB,GAAG,uBAAuB;;QAGnD,IAAI,yBAAyB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAC9D,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,mBAAmB,CAAC;YAClE;QACJ;;;AAIA,QAAA,MAAM,YAAY,GACd,cAAc,KAAK,kBAAkB,CAAC,OAAO,IAAI,cAAc,KAAK,kBAAkB,CAAC,SAAS;QAEpG,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,CAAC;QACvE;aAAO;YACH,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,mBAAmB,CAAC;QACtE;IACJ;AAEQ,IAAA,YAAY,CAAC,OAA2B,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK;IAC1E;8GAhVS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,8BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACxED;;AAEG;AACG,SAAU,+BAA+B,CAAC,MAAuC,EAAA;IACnF,OAAO,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AACpE;;ACNA;AACM,SAAU,kCAAkC,CAC9C,YAAA,GAAwC,2BAA2B,EAAA;AAEnE,IAAA,MAAM,aAAa,GAAG,MAAM,CAA0B,YAAY,yDAAC;AAEnE,IAAA,MAAM,aAAa,GAA+B;AAC9C,QAAA,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE;AACvC,QAAA,IAAI,KAAK,GAAA;YACL,OAAO,aAAa,EAAE;QAC1B;KACH;IAED,OAAO;AACH,QAAA,+BAA+B,EAAE;AAC7B,YAAA,OAAO,EAAE,yBAAyB;AAClC,YAAA,QAAQ,EAAE;AACb,SAAA;QACD,iBAAiB,EAAE,CAAC,EAA2B,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE;KAC3E;AACL;;ACxBA;;AAEG;;;;"}