{"version":3,"file":"taiga-ui-core-utils-miscellaneous.mjs","sources":["../../../projects/core/utils/miscellaneous/font-scaling.ts","../../../projects/core/utils/miscellaneous/get-duration.ts","../../../projects/core/utils/miscellaneous/is-editing-key.ts","../../../projects/core/utils/miscellaneous/is-obscured.ts","../../../projects/core/utils/miscellaneous/provide-taiga.ts","../../../projects/core/utils/miscellaneous/liquid-glass.ts","../../../projects/core/utils/miscellaneous/override-options.ts","../../../projects/core/utils/miscellaneous/size-bigger.ts","../../../projects/core/utils/miscellaneous/taiga-ui-core-utils-miscellaneous.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {\n    inject,\n    InjectionToken,\n    type Provider,\n    type Signal,\n    signal,\n    type WritableSignal,\n} from '@angular/core';\nimport {TUI_FONT_SIZE_HANDLER} from '@taiga-ui/cdk/directives/font-size';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\n\nexport const TUI_FONT_OFFSET = new InjectionToken<Signal<number>>(\n    ngDevMode ? 'TUI_FONT_OFFSET' : '',\n    {factory: () => signal(0)},\n);\n\nexport function tuiEnableFontScaling(): Provider {\n    return {\n        provide: TUI_FONT_SIZE_HANDLER,\n        useFactory: () => {\n            const offset = inject<WritableSignal<number>>(TUI_FONT_OFFSET);\n            const {documentElement} = inject(DOCUMENT);\n\n            return (size: number): void => {\n                const current = tuiClamp(size, 17, 28) - 17;\n\n                offset.set(current);\n\n                return documentElement.style.setProperty(\n                    '--t-font-offset',\n                    String(current),\n                );\n            };\n        },\n    };\n}\n","export const TUI_ANIMATIONS_DEFAULT_DURATION = 300;\n\nexport function tuiGetDuration(speed: number): number {\n    return speed && TUI_ANIMATIONS_DEFAULT_DURATION / speed;\n}\n","const KEYS: readonly string[] = [\n    'Spacebar',\n    'Backspace',\n    'Delete',\n    'ArrowLeft',\n    'ArrowRight',\n    'Left',\n    'Right',\n    'End',\n    'Home',\n];\n\n/**\n * Check if pressed key is interactive in terms of input field\n */\nexport function tuiIsEditingKey(key = ''): boolean {\n    return key.length === 1 || KEYS.includes(key);\n}\n","import {tuiGetElementObscures} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * @internal\n */\nexport function tuiIsObscured(el: HTMLElement, exceptSelector = 'tui-popups'): boolean {\n    return !!tuiGetElementObscures(el)?.some((el) => !el.closest(exceptSelector));\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n    effect,\n    type EnvironmentProviders,\n    inject,\n    InjectionToken,\n    provideAppInitializer,\n    type Provider,\n} from '@angular/core';\nimport {Meta, REMOVE_STYLES_ON_COMPONENT_DESTROY} from '@angular/platform-browser';\nimport {tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_DARK_MODE} from '@taiga-ui/core/tokens';\nimport {provideEventPlugins} from '@taiga-ui/event-plugins';\n\nimport {tuiEnableFontScaling} from './font-scaling';\n\ninterface ExperimentalAPIs {\n    readonly all: boolean;\n    readonly liquidGlass: boolean;\n}\n\nexport interface TuiOptions {\n    readonly mode?: 'dark' | 'light';\n    readonly apis: Partial<ExperimentalAPIs> | 'stable';\n    readonly fontScaling: boolean;\n    readonly scrollbars: 'custom' | 'native';\n}\n\nconst DEFAULT: TuiOptions = {\n    apis: 'stable',\n    fontScaling: true,\n    scrollbars: 'custom',\n};\n\nexport const TUI_OPTIONS = new InjectionToken<TuiOptions>(ngDevMode ? 'TUI_OPTIONS' : '');\n\nexport function provideTaiga(\n    config: Partial<TuiOptions> = {},\n): Array<EnvironmentProviders | Provider> {\n    const options = {...DEFAULT, ...config};\n\n    const providers: Array<EnvironmentProviders | Provider> = [\n        {\n            provide: REMOVE_STYLES_ON_COMPONENT_DESTROY,\n            useValue: false,\n        },\n        {\n            provide: TUI_OPTIONS,\n            useValue: options,\n        },\n        provideEventPlugins(),\n        provideAppInitializer(() => {\n            const doc = inject(DOCUMENT);\n            const meta = inject(Meta);\n            const mode = inject(TUI_DARK_MODE);\n\n            if (options.scrollbars === 'custom') {\n                doc.documentElement.classList.add('tui-zero-scrollbar');\n            }\n\n            if (tuiIsPresent(options.mode)) {\n                mode.set(options.mode === 'dark');\n            }\n\n            if (options.fontScaling && !meta.getTag('name=\"text-scale\"')) {\n                meta.addTag({name: 'text-scale', content: 'scale'});\n            }\n\n            effect(() => {\n                if (mode()) {\n                    doc.body.setAttribute('tuiTheme', 'dark');\n                } else {\n                    doc.body.removeAttribute('tuiTheme');\n                }\n            });\n        }),\n    ];\n\n    if (options.fontScaling) {\n        providers.push(tuiEnableFontScaling());\n    }\n\n    return providers;\n}\n","import {inject, InjectionToken} from '@angular/core';\n\nimport {TUI_OPTIONS} from './provide-taiga';\n\nexport const TUI_LIQUID_GLASS = new InjectionToken<boolean>(\n    ngDevMode ? 'TUI_LIQUID_GLASS' : '',\n    {\n        factory: () => {\n            const {apis} = inject(TUI_OPTIONS);\n\n            return apis !== 'stable' && (apis.all || !!apis.liquidGlass);\n        },\n    },\n);\n","export function tuiOverrideOptions<T>(\n    override: Partial<T>,\n    fallback: T,\n): (directive: T | null, options: T | null) => T {\n    return (directive, options) => {\n        const result = directive || {...(options || fallback)};\n\n        Object.keys(override).forEach((key) => {\n            // Update directive props with new defaults before inputs are processed\n            (result as Record<string, unknown>)[key] = override[key as keyof T];\n        });\n\n        return result;\n    };\n}\n","import {type TuiSizeXXL, type TuiSizeXXS} from '@taiga-ui/core/types';\n\nconst SIZES: Record<TuiSizeXXL | TuiSizeXXS, number> = {\n    xxs: 0,\n    xs: 1,\n    s: 2,\n    m: 3,\n    l: 4,\n    xl: 5,\n    xxl: 6,\n};\n\n/**\n * Compares size constants to determine if first size is bigger than the second\n *\n * @param size size that we need to compare\n * @param biggerThanSize size to compare with, 's' by default\n */\nexport function tuiSizeBigger(\n    size: TuiSizeXXL | TuiSizeXXS,\n    biggerThanSize: TuiSizeXXL | TuiSizeXXS = 's',\n): boolean {\n    return SIZES[size] > SIZES[biggerThanSize];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}