@ethlete/core 4.30.0 → 5.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/fesm2022/ethlete-core.mjs +4019 -4810
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/generators/generators.json +14 -0
- package/generators/migrate-to-v5/create-provider.js +158 -0
- package/generators/migrate-to-v5/migration.js +28 -0
- package/generators/migrate-to-v5/router-state-service.js +1064 -0
- package/generators/migrate-to-v5/schema.json +29 -0
- package/generators/migrate-to-v5/viewport-service.js +1678 -0
- package/generators/tailwind-4-theme/generator.js +490 -0
- package/generators/tailwind-4-theme/schema.json +32 -0
- package/package.json +18 -11
- package/types/ethlete-core.d.ts +2161 -0
- package/index.d.ts +0 -1968
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethlete-core.mjs","sources":["../tmp-esm2022/lib/components/structured-data/structured-data.component.js","../tmp-esm2022/lib/constants/viewport.constants.js","../tmp-esm2022/lib/decorators/memo/memo.decorator.js","../tmp-esm2022/lib/utils/destroy.utils.js","../tmp-esm2022/lib/utils/active-selection-model.utils.js","../tmp-esm2022/lib/utils/angular.utils.js","../tmp-esm2022/lib/utils/animation.utils.js","../tmp-esm2022/lib/utils/clamp.util.js","../tmp-esm2022/lib/utils/clone.util.js","../tmp-esm2022/lib/utils/component-id.utils.js","../tmp-esm2022/lib/utils/cookie.util.js","../tmp-esm2022/lib/utils/equal.util.js","../tmp-esm2022/lib/utils/form.utils.js","../tmp-esm2022/lib/utils/inject.utils.js","../tmp-esm2022/lib/utils/intersection-observer.utils.js","../tmp-esm2022/lib/utils/key-press-manager.utils.js","../tmp-esm2022/lib/services/click-observer.service.js","../tmp-esm2022/lib/services/content-observer.service.js","../tmp-esm2022/lib/services/focus-visible.service.js","../tmp-esm2022/lib/services/intersection-observer.service.js","../tmp-esm2022/lib/services/resize-observer.service.js","../tmp-esm2022/lib/services/router-state.service.js","../tmp-esm2022/lib/services/viewport.service.js","../tmp-esm2022/lib/utils/media-query-observable.util.js","../tmp-esm2022/lib/utils/scrollable.utils.js","../tmp-esm2022/lib/utils/signal.utils.js","../tmp-esm2022/lib/utils/logger.js","../tmp-esm2022/lib/utils/mutation-observable.util.js","../tmp-esm2022/lib/utils/object.utils.js","../tmp-esm2022/lib/utils/reactive-binding.util.js","../tmp-esm2022/lib/utils/resize-observable.util.js","../tmp-esm2022/lib/utils/round.utils.js","../tmp-esm2022/lib/utils/runtime-error.utils.js","../tmp-esm2022/lib/utils/selection-model.utils.js","../tmp-esm2022/lib/utils/smart-block-scroll-strategy.utils.js","../tmp-esm2022/lib/utils/value.utils.js","../tmp-esm2022/lib/utils/viewport.util.js","../tmp-esm2022/lib/directives/animatable/animatable.directive.js","../tmp-esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.js","../tmp-esm2022/lib/directives/animated-if/animated-if.directive.js","../tmp-esm2022/lib/directives/root-boundary/root-boundary.directive.js","../tmp-esm2022/lib/directives/animated-overlay/animated-overlay.directive.js","../tmp-esm2022/lib/directives/click-outside/click-outside.directive.js","../tmp-esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.js","../tmp-esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.js","../tmp-esm2022/lib/directives/debug/debug.directive.js","../tmp-esm2022/lib/directives/delayable/delayable.directive.js","../tmp-esm2022/lib/directives/is-active-element/is-active-element.directive.js","../tmp-esm2022/lib/directives/is-element/is-element.directive.js","../tmp-esm2022/lib/directives/let/let.types.js","../tmp-esm2022/lib/directives/let/let.directive.js","../tmp-esm2022/lib/directives/observe-content/observe-content.directive.js","../tmp-esm2022/lib/directives/observe-resize/observe-resize.directive.js","../tmp-esm2022/lib/directives/observe-scroll-state/observe-scroll-state.constants.js","../tmp-esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.js","../tmp-esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.js","../tmp-esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.js","../tmp-esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.js","../tmp-esm2022/lib/directives/observe-visibility/observe-visibility.directive.js","../tmp-esm2022/lib/directives/repeat/repeat.directive.js","../tmp-esm2022/lib/directives/seo/seo.directive.constants.js","../tmp-esm2022/lib/directives/seo/seo.directive.utils.js","../tmp-esm2022/lib/directives/seo/seo.directive.js","../tmp-esm2022/lib/pipes/infer-mime-type/infer-mime-type.util.js","../tmp-esm2022/lib/pipes/infer-mime-type/infer-mime-type.pipe.js","../tmp-esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.js","../tmp-esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.js","../tmp-esm2022/lib/pipes/normalize-match-state/normalize-match-state.util.js","../tmp-esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.js","../tmp-esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.util.js","../tmp-esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.js","../tmp-esm2022/lib/pipes/normalize-match-score/normalize-match-score.util.js","../tmp-esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.js","../tmp-esm2022/lib/pipes/normalize-match-type/normalize-match-type.util.js","../tmp-esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.js","../tmp-esm2022/lib/pipes/to-array/to-array.util.js","../tmp-esm2022/lib/pipes/to-array/to-array.pipe.js","../tmp-esm2022/lib/props/create-prop-handlers.js","../tmp-esm2022/lib/props/element-dictionary.js","../tmp-esm2022/lib/props/props-binding.js","../tmp-esm2022/lib/props/create-props.js","../tmp-esm2022/lib/props/create-setup.js","../tmp-esm2022/lib/props/dependency-stash.js","../tmp-esm2022/lib/props/props.directive.js","../tmp-esm2022/lib/props/template-input.js","../tmp-esm2022/lib/types/angular.types.js","../tmp-esm2022/lib/validators/at-least-one-required.validator.js","../tmp-esm2022/lib/validators/is-array-not-empty.validator.js","../tmp-esm2022/lib/validators/is-email.validator.js","../tmp-esm2022/lib/validators/must-match.validator.js","../tmp-esm2022/lib/validators/index.js","../tmp-esm2022/index.js","../tmp-esm2022/ethlete-core.js"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport * as i0 from \"@angular/core\";\nexport class StructuredDataComponent {\n constructor() {\n this._sanitizer = inject(DomSanitizer);\n }\n set data(currentValue) {\n this.jsonLD = this.getSafeHTML(currentValue);\n }\n getSafeHTML(value) {\n const json = value ? JSON.stringify(value, null, 2).replace(/<\\/script>/g, '<\\\\/script>') : '';\n const html = `<script type=\"application/ld+json\">${json}</script>`;\n return this._sanitizer.bypassSecurityTrustHtml(html);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: StructuredDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.0\", type: StructuredDataComponent, isStandalone: true, selector: \"et-structured-data\", inputs: { data: \"data\" }, host: { properties: { \"innerHTML\": \"this.jsonLD\" }, styleAttribute: \"display: none\" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: StructuredDataComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'et-structured-data',\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: none',\n },\n }]\n }], propDecorators: { data: [{\n type: Input\n }], jsonLD: [{\n type: HostBinding,\n args: ['innerHTML']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1kYXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc3RydWN0dXJlZC1kYXRhL3N0cnVjdHVyZWQtZGF0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7O0FBYW5FLE1BQU0sT0FBTyx1QkFBdUI7SUFWcEM7UUFXbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQWVwRDtJQWJDLElBQ0ksSUFBSSxDQUFDLFlBQWdGO1FBQ3ZGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBS0QsV0FBVyxDQUFDLEtBQXlFO1FBQ25GLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRixNQUFNLElBQUksR0FBRyxzQ0FBc0MsSUFBSSxXQUFXLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OEdBZlUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsK0xBUHhCLEVBQUU7OzJGQU9ELHVCQUF1QjtrQkFWbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGVBQWU7cUJBQ3ZCO2lCQUNGOzhCQUtLLElBQUk7c0JBRFAsS0FBSztnQkFNTixNQUFNO3NCQURMLFdBQVc7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBpbmplY3QsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSnNvbkxEIH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1zdHJ1Y3R1cmVkLWRhdGEnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogJycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgc3R5bGU6ICdkaXNwbGF5OiBub25lJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlZERhdGFDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YShjdXJyZW50VmFsdWU6IEpzb25MRC5XaXRoQ29udGV4dDxKc29uTEQuVGhpbmc+IHwgSnNvbkxELkdyYXBoIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuanNvbkxEID0gdGhpcy5nZXRTYWZlSFRNTChjdXJyZW50VmFsdWUpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdpbm5lckhUTUwnKVxuICBqc29uTEQ/OiBTYWZlSHRtbDtcblxuICBnZXRTYWZlSFRNTCh2YWx1ZTogSnNvbkxELldpdGhDb250ZXh0PEpzb25MRC5UaGluZz4gfCBKc29uTEQuR3JhcGggfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QganNvbiA9IHZhbHVlID8gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpLnJlcGxhY2UoLzxcXC9zY3JpcHQ+L2csICc8XFxcXC9zY3JpcHQ+JykgOiAnJztcbiAgICBjb25zdCBodG1sID0gYDxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2xkK2pzb25cIj4ke2pzb259PC9zY3JpcHQ+YDtcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const VIEWPORT_CONFIG = new InjectionToken('ViewportConfig');\n/**\n * Default viewport config based on Tailwind CSS.\n * @see https://tailwindcss.com/docs/screens\n */\nexport const DEFAULT_VIEWPORT_CONFIG = {\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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY29uc3RhbnRzL3ZpZXdwb3J0LmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQztBQUVwRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBbUI7SUFDckQsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNaLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDZCxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ2YsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztRQUNoQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQ2hCLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7S0FDeEI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdwb3J0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgVklFV1BPUlRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFZpZXdwb3J0Q29uZmlnPignVmlld3BvcnRDb25maWcnKTtcblxuLyoqXG4gKiBEZWZhdWx0IHZpZXdwb3J0IGNvbmZpZyBiYXNlZCBvbiBUYWlsd2luZCBDU1MuXG4gKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2NyZWVuc1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9WSUVXUE9SVF9DT05GSUc6IFZpZXdwb3J0Q29uZmlnID0ge1xuICBicmVha3BvaW50czoge1xuICAgIHhzOiBbMCwgNjM5XSxcbiAgICBzbTogWzY0MCwgNzY3XSxcbiAgICBtZDogWzc2OCwgMTAyM10sXG4gICAgbGc6IFsxMDI0LCAxMjc5XSxcbiAgICB4bDogWzEyODAsIDE1MzVdLFxuICAgICcyeGwnOiBbMTUzNiwgSW5maW5pdHldLFxuICB9LFxufTtcbiJdfQ==","function memoize(func, resolver, cache) {\n const memoized = function (...args) {\n const key = resolver.apply(this, args);\n const cache = memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n const result = func.apply(this, args);\n memoized.cache = cache.set(key, result) ?? cache;\n return result;\n };\n memoized.cache = cache;\n return memoized;\n}\nconst defaultResolver = (...args) => args.join('-');\nexport const Memo = (config = {}) => (_, __, descriptor) => {\n if (typeof descriptor.value !== 'function') {\n throw new Error('Memoization can be applied only to methods');\n }\n const resolver = config.resolver ?? defaultResolver;\n const cache = config.cache ?? new Map();\n descriptor.value = memoize(descriptor.value, resolver, cache);\n return descriptor;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtby5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kZWNvcmF0b3JzL21lbW8vbWVtby5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLFNBQVMsT0FBTyxDQUFDLElBQXNDLEVBQUUsUUFBc0IsRUFBRSxLQUFjO0lBQzdGLE1BQU0sUUFBUSxHQUFHLFVBQXlCLEdBQUcsSUFBZTtRQUMxRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBRTdCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDakQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFdkIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sZUFBZSxHQUFpQixDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FDZixDQUFDLFNBQXFCLEVBQUUsRUFBRSxFQUFFLENBQzVCLENBQUMsQ0FBVSxFQUFFLEVBQVUsRUFBRSxVQUE4QixFQUFzQixFQUFFO0lBQzdFLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUM7SUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXhDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWVtb1Jlc29sdmVyIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKC4uLmFyZ3M6IGFueVtdKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcExpa2U8SyA9IHVua25vd24sIFYgPSB1bmtub3duPiB7XG4gIHNldChrZXk6IEssIHY6IFYpOiBNYXBMaWtlPEssIFY+O1xuICBnZXQoa2V5OiBLKTogVjtcbiAgaGFzKGtleTogSyk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb0NvbmZpZyB7XG4gIHJlc29sdmVyPzogTWVtb1Jlc29sdmVyO1xuICBjYWNoZT86IE1hcExpa2U7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYzogKC4uLl9hcmdzOiB1bmtub3duW10pID0+IHVua25vd24sIHJlc29sdmVyOiBNZW1vUmVzb2x2ZXIsIGNhY2hlOiBNYXBMaWtlKSB7XG4gIGNvbnN0IG1lbW9pemVkID0gZnVuY3Rpb24gKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgIGNvbnN0IGtleSA9IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIGNvbnN0IGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSA/PyBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIG1lbW9pemVkLmNhY2hlID0gY2FjaGU7XG5cbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5jb25zdCBkZWZhdWx0UmVzb2x2ZXI6IE1lbW9SZXNvbHZlciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IGFyZ3Muam9pbignLScpO1xuXG5leHBvcnQgY29uc3QgTWVtbyA9XG4gIChjb25maWc6IE1lbW9Db25maWcgPSB7fSkgPT5cbiAgKF86IHVua25vd24sIF9fOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IFByb3BlcnR5RGVzY3JpcHRvciA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9pemF0aW9uIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gbWV0aG9kcycpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVyID0gY29uZmlnLnJlc29sdmVyID8/IGRlZmF1bHRSZXNvbHZlcjtcbiAgICBjb25zdCBjYWNoZSA9IGNvbmZpZy5jYWNoZSA/PyBuZXcgTWFwKCk7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gbWVtb2l6ZShkZXNjcmlwdG9yLnZhbHVlLCByZXNvbHZlciwgY2FjaGUpO1xuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xuIl19","import { DestroyRef, assertInInjectionContext, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nexport const createDestroy = () => {\n assertInInjectionContext(createDestroy);\n const destroy$ = new Subject();\n const ref = inject(DestroyRef);\n ref.onDestroy(() => {\n destroy$.next(true);\n destroy$.complete();\n });\n return destroy$.asObservable();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2Rlc3Ryb3kudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQ2hDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFFeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9CLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlc3Ryb3kgPSAoKSA9PiB7XG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChjcmVhdGVEZXN0cm95KTtcblxuICBjb25zdCBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgY29uc3QgcmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIGRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlc3Ryb3kkLmFzT2JzZXJ2YWJsZSgpO1xufTtcbiJdfQ==","import { DOWN_ARROW, END, HOME, PAGE_DOWN, PAGE_UP, UP_ARROW } from '@angular/cdk/keycodes';\nimport { BehaviorSubject, map, of, switchMap, takeUntil, tap } from 'rxjs';\nimport { createDestroy } from './destroy.utils';\nexport class ActiveSelectionModel {\n get selectionModel$() {\n return this._selectionModel$.asObservable();\n }\n get selectionModel() {\n return this._selectionModel$.value;\n }\n get activeOption$() {\n return this._activeOption$.asObservable();\n }\n get activeOption() {\n return this._activeOption$.value;\n }\n constructor() {\n this._destroy$ = createDestroy();\n this._selectionModel$ = new BehaviorSubject(null);\n this._activeOption$ = new BehaviorSubject(null);\n this._selectionModel$\n .pipe(takeUntil(this._destroy$), switchMap((model) => model?.filteredOptions$ ?? of([])), tap(() => this._resetActiveOptions()))\n .subscribe();\n }\n setSelectionModel(selectionModel) {\n this._selectionModel$.next(selectionModel);\n return this;\n }\n setActiveOption(option) {\n this._activeOption$.next(option);\n return this;\n }\n isOptionActive$(option) {\n return this.activeOption$.pipe(map((activeOption) => activeOption === option));\n }\n evaluateKeyboardEvent(event, config) {\n const { skipDisabled = false } = config ?? {};\n const keyCode = event.keyCode;\n const activeOption = this.activeOption;\n if (!this.selectionModel || !activeOption)\n return null;\n const currentIndex = this.selectionModel?.getOptionIndex(activeOption);\n if (currentIndex === null)\n return null;\n let newActiveOption = undefined;\n switch (keyCode) {\n case DOWN_ARROW:\n {\n newActiveOption = this.selectionModel?.getOptionByOffset(1, currentIndex, { skipDisabled });\n }\n break;\n case UP_ARROW:\n {\n newActiveOption = this.selectionModel?.getOptionByOffset(-1, currentIndex, { skipDisabled });\n }\n break;\n case PAGE_UP:\n {\n newActiveOption = this.selectionModel?.getOptionByOffset(-10, currentIndex, { skipDisabled, clamp: true });\n }\n break;\n case PAGE_DOWN:\n {\n newActiveOption = this.selectionModel?.getOptionByOffset(10, currentIndex, { skipDisabled, clamp: true });\n }\n break;\n case HOME:\n {\n newActiveOption = this.selectionModel?.getFirstOption();\n }\n break;\n case END:\n {\n newActiveOption = this.selectionModel?.getLastOption();\n }\n break;\n }\n if (newActiveOption !== undefined) {\n event.preventDefault();\n }\n if (newActiveOption !== activeOption && newActiveOption) {\n this._activeOption$.next(newActiveOption);\n }\n return newActiveOption ?? null;\n }\n _resetActiveOptions() {\n const firstOption = this.selectionModel?.getFirstOption();\n this._activeOption$.next(firstOption ?? null);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXNlbGVjdGlvbi1tb2RlbC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2FjdGl2ZS1zZWxlY3Rpb24tbW9kZWwudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdoRCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBR0QsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFHRDtRQWxCaUIsY0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBUTVCLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUEyQixJQUFJLENBQUMsQ0FBQztRQVF2RSxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFXLElBQUksQ0FBQyxDQUFDO1FBR3BFLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENB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S0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksZUFBZSxLQUFLLFlBQVksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxlQUFlLElBQUksSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUUxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5ELCBIT01FLCBQQUdFX0RPV04sIFBBR0VfVVAsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSB9IGZyb20gJy4vZGVzdHJveS51dGlscyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJy4vc2VsZWN0aW9uLW1vZGVsLnV0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFjdGl2ZVNlbGVjdGlvbk1vZGVsPFQgPSB1bmtub3duPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIGdldCBzZWxlY3Rpb25Nb2RlbCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJC52YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25Nb2RlbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGlvbk1vZGVsPFQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGFjdGl2ZU9wdGlvbiQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU9wdGlvbiQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IGFjdGl2ZU9wdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlT3B0aW9uJC52YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVPcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgc3dpdGNoTWFwKChtb2RlbCkgPT4gbW9kZWw/LmZpbHRlcmVkT3B0aW9ucyQgPz8gb2YoW10pKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX3Jlc2V0QWN0aXZlT3B0aW9ucygpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCQubmV4dChzZWxlY3Rpb25Nb2RlbCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFjdGl2ZU9wdGlvbihvcHRpb246IFQgfCBudWxsKSB7XG4gICAgdGhpcy5fYWN0aXZlT3B0aW9uJC5uZXh0KG9wdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlzT3B0aW9uQWN0aXZlJChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVPcHRpb24kLnBpcGUobWFwKChhY3RpdmVPcHRpb24pID0+IGFjdGl2ZU9wdGlvbiA9PT0gb3B0aW9uKSk7XG4gIH1cblxuICBldmFsdWF0ZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbmZpZz86IHsgc2tpcERpc2FibGVkPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgeyBza2lwRGlzYWJsZWQgPSBmYWxzZSB9ID0gY29uZmlnID8/IHt9O1xuXG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5hY3RpdmVPcHRpb247XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uTW9kZWwgfHwgIWFjdGl2ZU9wdGlvbikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLnNlbGVjdGlvbk1vZGVsPy5nZXRPcHRpb25JbmRleChhY3RpdmVPcHRpb24pO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgbmV3QWN0aXZlT3B0aW9uOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICB7XG4gICAgICAgICAgbmV3QWN0aXZlT3B0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlbD8uZ2V0T3B0aW9uQnlPZmZzZXQoMSwgY3VycmVudEluZGV4LCB7IHNraXBEaXNhYmxlZCB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXdBY3RpdmVPcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGVsPy5nZXRPcHRpb25CeU9mZnNldCgtMSwgY3VycmVudEluZGV4LCB7IHNraXBEaXNhYmxlZCB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAge1xuICAgICAgICAgIG5ld0FjdGl2ZU9wdGlvbiA9IHRoaXMuc2VsZWN0aW9uTW9kZWw/LmdldE9wdGlvbkJ5T2Zmc2V0KC0xMCwgY3VycmVudEluZGV4LCB7IHNraXBEaXNhYmxlZCwgY2xhbXA6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBBR0VfRE9XTjpcbiAgICAgICAge1xuICAgICAgICAgIG5ld0FjdGl2ZU9wdGlvbiA9IHRoaXMuc2VsZWN0aW9uTW9kZWw/LmdldE9wdGlvbkJ5T2Zmc2V0KDEwLCBjdXJyZW50SW5kZXgsIHsgc2tpcERpc2FibGVkLCBjbGFtcDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSE9NRTpcbiAgICAgICAge1xuICAgICAgICAgIG5ld0FjdGl2ZU9wdGlvbiA9IHRoaXMuc2VsZWN0aW9uTW9kZWw/LmdldEZpcnN0T3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVORDpcbiAgICAgICAge1xuICAgICAgICAgIG5ld0FjdGl2ZU9wdGlvbiA9IHRoaXMuc2VsZWN0aW9uTW9kZWw/LmdldExhc3RPcHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAobmV3QWN0aXZlT3B0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKG5ld0FjdGl2ZU9wdGlvbiAhPT0gYWN0aXZlT3B0aW9uICYmIG5ld0FjdGl2ZU9wdGlvbikge1xuICAgICAgdGhpcy5fYWN0aXZlT3B0aW9uJC5uZXh0KG5ld0FjdGl2ZU9wdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0FjdGl2ZU9wdGlvbiA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRBY3RpdmVPcHRpb25zKCkge1xuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlbD8uZ2V0Rmlyc3RPcHRpb24oKTtcblxuICAgIHRoaXMuX2FjdGl2ZU9wdGlvbiQubmV4dChmaXJzdE9wdGlvbiA/PyBudWxsKTtcbiAgfVxufVxuIl19","import { of, startWith, switchMap } from 'rxjs';\nexport function switchQueryListChanges() {\n return function (source) {\n return source.pipe(switchMap((value) => value?.changes.pipe(startWith(value)) ?? of(null)));\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2FuZ3VsYXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFnRSxNQUFxQjtRQUMxRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBa0IsQ0FBQztJQUMvRyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUeXBlZFF1ZXJ5TGlzdCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaFF1ZXJ5TGlzdENoYW5nZXMoKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFR5cGVkUXVlcnlMaXN0PHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKHN3aXRjaE1hcCgodmFsdWUpID0+IHZhbHVlPy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHZhbHVlKSkgPz8gb2YobnVsbCkpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9O1xufVxuIl19","import { combineLatest, Observable, Subject } from 'rxjs';\nexport const nextFrame = (cb) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n};\nexport const fromNextFrame = () => {\n return new Observable((observer) => {\n nextFrame(() => {\n observer.next();\n observer.complete();\n });\n });\n};\nexport const forceReflow = (element = document.body) => {\n return element.offsetHeight;\n};\nexport const createFlipAnimationGroup = (config) => {\n const { elements, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)' } = config;\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 return createFlipAnimation({ element, originElement, duration, easing });\n });\n const onStart$ = combineLatest(flips.map((animation) => animation.onStart$));\n const onFinish$ = combineLatest(flips.map((animation) => animation.onFinish$));\n const onCancel$ = combineLatest(flips.map((animation) => animation.onCancel$));\n const updateInit = () => {\n flips.forEach((animation) => animation.updateInit());\n };\n const play = () => {\n flips.forEach((animation) => animation.play());\n };\n const cancel = () => {\n flips.forEach((animation) => animation.cancel());\n };\n return {\n updateInit,\n play,\n cancel,\n onStart$,\n onFinish$,\n onCancel$,\n };\n};\nexport const createFlipAnimation = (config) => {\n const { element: el, originElement = el, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)' } = config;\n let initialRect = originElement.getBoundingClientRect();\n let animation = null;\n const onStart$ = new Subject();\n const onFinish$ = new Subject();\n const onCancel$ = new Subject();\n const onAnimationFinish = () => {\n cleanup();\n onFinish$.next();\n };\n const onAnimationCancel = () => {\n cleanup();\n onCancel$.next();\n };\n const cleanup = () => {\n if (!animation) {\n return;\n }\n animation.removeEventListener('finish', onAnimationFinish);\n animation.removeEventListener('cancel', onAnimationCancel);\n };\n const updateInit = () => {\n initialRect = originElement.getBoundingClientRect();\n };\n const play = () => {\n const lastRect = el.getBoundingClientRect();\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 animation = el.animate([\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 duration,\n easing,\n fill: 'both',\n });\n animation.addEventListener('finish', onAnimationFinish);\n animation.addEventListener('cancel', onAnimationCancel);\n onStart$.next();\n };\n const cancel = () => {\n animation?.cancel();\n cleanup();\n };\n return {\n updateInit,\n play,\n cancel,\n onStart$: onStart$.asObservable(),\n onFinish$: onFinish$.asObservable(),\n onCancel$: onCancel$.asObservable(),\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvYW5pbWF0aW9uLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFjLEVBQUUsRUFBRTtJQUMxQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7UUFDekIscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQ2hDLE9BQU8sSUFBSSxVQUFVLENBQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUN2QyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBdUIsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ2xFLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQztBQUM5QixDQUFDLENBQUM7QUFxQkYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFnQyxFQUFFLEVBQUU7SUFDM0UsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyw4QkFBOEIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVyRixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVB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QUM7SUFFRixNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDbEIsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBRXBCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFVBQVU7UUFDVixJQUFJO1FBQ0osTUFBTTtRQUNOLFFBQVEsRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFO1FBQ2pDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFO1FBQ25DLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFO0tBQ3BDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBuZXh0RnJhbWUgPSAoY2I6ICgpID0+IHZvaWQpID0+IHtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBmcm9tTmV4dEZyYW1lID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oKG9ic2VydmVyKSA9PiB7XG4gICAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcmNlUmVmbG93ID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuYm9keSkgPT4ge1xuICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG59O1xuXG5pbnRlcmZhY2UgRmxpcEFuaW1hdGlvbkdyb3VwQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50cyB0byBhbmltYXRlXG4gICAqL1xuICBlbGVtZW50czogQXJyYXk8SFRNTEVsZW1lbnQgfCB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBvcmlnaW5FbGVtZW50PzogSFRNTEVsZW1lbnQgfT47XG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAZGVmYXVsdCAyNTBcbiAgICovXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgdGhlIGFuaW1hdGlvblxuICAgKiBAZGVmYXVsdCAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSdcbiAgICovXG4gIGVhc2luZz86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZsaXBBbmltYXRpb25Hcm91cCA9IChjb25maWc6IEZsaXBBbmltYXRpb25Hcm91cENvbmZpZykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRzLCBkdXJhdGlvbiA9IDI1MCwgZWFzaW5nID0gJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknIH0gPSBjb25maWc7XG5cbiAgY29uc3QgZmxpcHMgPSBlbGVtZW50cy5tYXAoKGVsKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9ICdlbGVtZW50JyBpbiBlbCA/IGVsLmVsZW1lbnQgOiBlbDtcbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gJ29yaWdpbkVsZW1lbnQnIGluIGVsID8gZWwub3JpZ2luRWxlbWVudCA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBjcmVhdGVGbGlwQW5pbWF0aW9uKHsgZWxlbWVudCwgb3JpZ2luRWxlbWVudCwgZHVyYXRpb24sIGVhc2luZyB9KTtcbiAgfSk7XG5cbiAgY29uc3Qgb25TdGFydCQgPSBjb21iaW5lTGF0ZXN0KGZsaXBzLm1hcCgoYW5pbWF0aW9uKSA9PiBhbmltYXRpb24ub25TdGFydCQpKTtcbiAgY29uc3Qgb25GaW5pc2gkID0gY29tYmluZUxhdGVzdChmbGlwcy5tYXAoKGFuaW1hdGlvbikgPT4gYW5pbWF0aW9uLm9uRmluaXNoJCkpO1xuICBjb25zdCBvbkNhbmNlbCQgPSBjb21iaW5lTGF0ZXN0KGZsaXBzLm1hcCgoYW5pbWF0aW9uKSA9PiBhbmltYXRpb24ub25DYW5jZWwkKSk7XG5cbiAgY29uc3QgdXBkYXRlSW5pdCA9ICgpID0+IHtcbiAgICBmbGlwcy5mb3JFYWNoKChhbmltYXRpb24pID0+IGFuaW1hdGlvbi51cGRhdGVJbml0KCkpO1xuICB9O1xuXG4gIGNvbnN0IHBsYXkgPSAoKSA9PiB7XG4gICAgZmxpcHMuZm9yRWFjaCgoYW5pbWF0aW9uKSA9PiBhbmltYXRpb24ucGxheSgpKTtcbiAgfTtcblxuICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgZmxpcHMuZm9yRWFjaCgoYW5pbWF0aW9uKSA9PiBhbmltYXRpb24uY2FuY2VsKCkpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgdXBkYXRlSW5pdCxcbiAgICBwbGF5LFxuICAgIGNhbmNlbCxcbiAgICBvblN0YXJ0JCxcbiAgICBvbkZpbmlzaCQsXG4gICAgb25DYW5jZWwkLFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBGbGlwQW5pbWF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGFuaW1hdGVcbiAgICovXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byB1c2UgYXMgdGhlIG9yaWdpbiBmb3IgdGhlIGFuaW1hdGlvblxuICAgKiBAZGVmYXVsdCBlbGVtZW50XG4gICAqL1xuICBvcmlnaW5FbGVtZW50PzogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAZGVmYXVsdCAyNTBcbiAgICovXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgdGhlIGFuaW1hdGlvblxuICAgKiBAZGVmYXVsdCAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSdcbiAgICovXG4gIGVhc2luZz86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZsaXBBbmltYXRpb24gPSAoY29uZmlnOiBGbGlwQW5pbWF0aW9uQ29uZmlnKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudDogZWwsIG9yaWdpbkVsZW1lbnQgPSBlbCwgZHVyYXRpb24gPSAyNTAsIGVhc2luZyA9ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyB9ID0gY29uZmlnO1xuXG4gIGxldCBpbml0aWFsUmVjdCA9IG9yaWdpbkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCBhbmltYXRpb246IEFuaW1hdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IG9uU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3Qgb25GaW5pc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3Qgb25DYW5jZWwkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdCBvbkFuaW1hdGlvbkZpbmlzaCA9ICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgb25GaW5pc2gkLm5leHQoKTtcbiAgfTtcblxuICBjb25zdCBvbkFuaW1hdGlvbkNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgb25DYW5jZWwkLm5leHQoKTtcbiAgfTtcblxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGlmICghYW5pbWF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYW5pbWF0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZpbmlzaCcsIG9uQW5pbWF0aW9uRmluaXNoKTtcbiAgICBhbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FuY2VsJywgb25BbmltYXRpb25DYW5jZWwpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUluaXQgPSAoKSA9PiB7XG4gICAgaW5pdGlhbFJlY3QgPSBvcmlnaW5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9O1xuXG4gIGNvbnN0IHBsYXkgPSAoKSA9PiB7XG4gICAgY29uc3QgbGFzdFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IGRlbHRhID0ge1xuICAgICAgeDogaW5pdGlhbFJlY3QubGVmdCAtIGxhc3RSZWN0LmxlZnQsXG4gICAgICB5OiBpbml0aWFsUmVjdC50b3AgLSBsYXN0UmVjdC50b3AsXG4gICAgICBzY2FsZVg6IGluaXRpYWxSZWN0LndpZHRoIC8gbGFzdFJlY3Qud2lkdGgsXG4gICAgICBzY2FsZVk6IGluaXRpYWxSZWN0LmhlaWdodCAvIGxhc3RSZWN0LmhlaWdodCxcbiAgICB9O1xuXG4gICAgYW5pbWF0aW9uID0gZWwuYW5pbWF0ZShcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGBcbiAgICAgICAgICB0cmFuc2xhdGUoJHtkZWx0YS54fXB4LCAke2RlbHRhLnl9cHgpXG4gICAgICAgICAgc2NhbGUoJHtkZWx0YS5zY2FsZVh9LCAke2RlbHRhLnNjYWxlWX0pXG4gICAgICAgIGAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gICAgICAgICAgdHJhbnNmb3JtOiAnbm9uZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgZWFzaW5nLFxuICAgICAgICBmaWxsOiAnYm90aCcsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBhbmltYXRpb24uYWRkRXZlbnRMaXN0ZW5lcignZmluaXNoJywgb25BbmltYXRpb25GaW5pc2gpO1xuICAgIGFuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjYW5jZWwnLCBvbkFuaW1hdGlvbkNhbmNlbCk7XG5cbiAgICBvblN0YXJ0JC5uZXh0KCk7XG4gIH07XG5cbiAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgIGFuaW1hdGlvbj8uY2FuY2VsKCk7XG5cbiAgICBjbGVhbnVwKCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGVJbml0LFxuICAgIHBsYXksXG4gICAgY2FuY2VsLFxuICAgIG9uU3RhcnQkOiBvblN0YXJ0JC5hc09ic2VydmFibGUoKSxcbiAgICBvbkZpbmlzaCQ6IG9uRmluaXNoJC5hc09ic2VydmFibGUoKSxcbiAgICBvbkNhbmNlbCQ6IG9uQ2FuY2VsJC5hc09ic2VydmFibGUoKSxcbiAgfTtcbn07XG4iXX0=","export const clamp = (value, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhbXAudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2NsYW1wLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFO0lBQ3pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY2xhbXAgPSAodmFsdWU6IG51bWJlciwgbWluID0gMCwgbWF4ID0gMTAwKSA9PiB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcbn07XG4iXX0=","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-var */\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 */\nconst set = (obj, key, val) => {\n if (typeof val.value === 'object')\n val.value = clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n }\n else\n obj[key] = val.value;\n};\nexport const clone = (original) => {\n if (typeof original !== 'object')\n return original;\n var _og = original;\n var i = 0, k, list, tmp, str = Object.prototype.toString.call(_og);\n if (str === '[object Object]') {\n tmp = Object.create(_og.__proto__ || null);\n }\n else if (str === '[object Array]') {\n tmp = Array(_og.length);\n }\n else if (str === '[object Set]') {\n tmp = new Set();\n _og.forEach(function (val) {\n tmp.add(clone(val));\n });\n }\n else if (str === '[object Map]') {\n tmp = new Map();\n _og.forEach(function (val, key) {\n tmp.set(clone(key), clone(val));\n });\n }\n else if (str === '[object Date]') {\n tmp = new Date(+_og);\n }\n else if (str === '[object RegExp]') {\n tmp = new RegExp(_og.source, _og.flags);\n }\n else if (str === '[object DataView]') {\n tmp = new _og.constructor(clone(_og.buffer));\n }\n else if (str === '[object ArrayBuffer]') {\n tmp = _og.slice(0);\n }\n else if (str.slice(-6) === 'Array]') {\n // ArrayBuffer.isView(x)\n // ~> `new` bcuz `Buffer.slice` => ref\n tmp = new _og.constructor(_og);\n }\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]));\n }\n for (i = 0, list = Object.getOwnPropertyNames(_og); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === _og[k])\n continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(_og, k));\n }\n }\n return tmp || _og;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2Nsb25lLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELDJCQUEyQjtBQUMzQjs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFRLEVBQUUsR0FBUSxFQUFFLEdBQVEsRUFBRSxFQUFFO0lBQzNDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFFBQVE7UUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3ZHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDOztRQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFJLFFBQVcsRUFBSyxFQUFFO0lBQ3pDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRWxELElBQUksR0FBRyxHQUFHLFFBQWUsQ0FBQztJQUUxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQ1AsQ0FBQyxFQUNELElBQUksRUFDSixHQUFRLEVBQ1IsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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RixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vKipcbiAqIFN0b2xlbiBmcm9tIGtsb25hIHRvIGF2b2lkIGFkZGluZyBhIGRlcGVuZGVuY3lcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQva2xvbmFcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgTHVrZSBFZHdhcmRzIDxsdWtlLmVkd2FyZHMwNUBnbWFpbC5jb20+IChsdWtlZWQuY29tKVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKi9cblxuY29uc3Qgc2V0ID0gKG9iajogYW55LCBrZXk6IGFueSwgdmFsOiBhbnkpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWwudmFsdWUgPT09ICdvYmplY3QnKSB2YWwudmFsdWUgPSBjbG9uZSh2YWwudmFsdWUpO1xuICBpZiAoIXZhbC5lbnVtZXJhYmxlIHx8IHZhbC5nZXQgfHwgdmFsLnNldCB8fCAhdmFsLmNvbmZpZ3VyYWJsZSB8fCAhdmFsLndyaXRhYmxlIHx8IGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBvYmpba2V5XSA9IHZhbC52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbG9uZSA9IDxUPihvcmlnaW5hbDogVCk6IFQgPT4ge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnb2JqZWN0JykgcmV0dXJuIG9yaWdpbmFsO1xuXG4gIHZhciBfb2cgPSBvcmlnaW5hbCBhcyBhbnk7XG5cbiAgdmFyIGkgPSAwLFxuICAgIGssXG4gICAgbGlzdCxcbiAgICB0bXA6IGFueSxcbiAgICBzdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoX29nKTtcblxuICBpZiAoc3RyID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHRtcCA9IE9iamVjdC5jcmVhdGUoX29nLl9fcHJvdG9fXyB8fCBudWxsKTtcbiAgfSBlbHNlIGlmIChzdHIgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICB0bXAgPSBBcnJheShfb2cubGVuZ3RoKTtcbiAgfSBlbHNlIGlmIChzdHIgPT09ICdbb2JqZWN0IFNldF0nKSB7XG4gICAgdG1wID0gbmV3IFNldCgpO1xuICAgIF9vZy5mb3JFYWNoKGZ1bmN0aW9uICh2YWw6IGFueSkge1xuICAgICAgdG1wLmFkZChjbG9uZSh2YWwpKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChzdHIgPT09ICdbb2JqZWN0IE1hcF0nKSB7XG4gICAgdG1wID0gbmV3IE1hcCgpO1xuICAgIF9vZy5mb3JFYWNoKGZ1bmN0aW9uICh2YWw6IGFueSwga2V5OiBhbnkpIHtcbiAgICAgIHRtcC5zZXQoY2xvbmUoa2V5KSwgY2xvbmUodmFsKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoc3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICB0bXAgPSBuZXcgRGF0ZSgrX29nKTtcbiAgfSBlbHNlIGlmIChzdHIgPT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgdG1wID0gbmV3IFJlZ0V4cChfb2cuc291cmNlLCBfb2cuZmxhZ3MpO1xuICB9IGVsc2UgaWYgKHN0ciA9PT0gJ1tvYmplY3QgRGF0YVZpZXddJykge1xuICAgIHRtcCA9IG5ldyBfb2cuY29uc3RydWN0b3IoY2xvbmUoX29nLmJ1ZmZlcikpO1xuICB9IGVsc2UgaWYgKHN0ciA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuICAgIHRtcCA9IF9vZy5zbGljZSgwKTtcbiAgfSBlbHNlIGlmIChzdHIuc2xpY2UoLTYpID09PSAnQXJyYXldJykge1xuICAgIC8vIEFycmF5QnVmZmVyLmlzVmlldyh4KVxuICAgIC8vIH4+IGBuZXdgIGJjdXogYEJ1ZmZlci5zbGljZWAgPT4gcmVmXG4gICAgdG1wID0gbmV3IF9vZy5jb25zdHJ1Y3Rvcihfb2cpO1xuICB9XG5cbiAgaWYgKHRtcCkge1xuICAgIGZvciAobGlzdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoX29nKTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNldCh0bXAsIGxpc3RbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX29nLCBsaXN0W2ldISkpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGxpc3QgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfb2cpOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRtcCwgKGsgPSBsaXN0W2ldISkpICYmIHRtcFtrXSA9PT0gX29nW2tdKSBjb250aW51ZTtcbiAgICAgIHNldCh0bXAsIGssIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX29nLCBrKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRtcCB8fCBfb2c7XG59O1xuIl19","const componentIds = new Map();\nexport const createComponentId = (prefix) => {\n const id = componentIds.get(prefix) ?? 0;\n componentIds.set(prefix, id + 1);\n return `${prefix}-${id}`;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWlkLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvY29tcG9uZW50LWlkLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWpDLE9BQU8sR0FBRyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY29tcG9uZW50SWRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbXBvbmVudElkID0gKHByZWZpeDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlkID0gY29tcG9uZW50SWRzLmdldChwcmVmaXgpID8/IDA7XG4gIGNvbXBvbmVudElkcy5zZXQocHJlZml4LCBpZCArIDEpO1xuXG4gIHJldHVybiBgJHtwcmVmaXh9LSR7aWR9YDtcbn07XG4iXX0=","export const hasCookie = (name) => {\n if (typeof document === 'undefined') {\n return false;\n }\n return document.cookie.split(';').some((c) => {\n return c.trim().startsWith(name + '=');\n });\n};\nexport const getCookie = (name) => {\n if (typeof document === 'undefined') {\n return null;\n }\n // From https://stackoverflow.com/questions/10730362/get-cookie-by-name\n return ('; ' + document.cookie).split(`; ${name}=`).pop()?.split(';')[0];\n};\nexport const setCookie = (name, data, expiresInDays = 30, domain = getDomain(), path = '/', sameSite = 'lax') => {\n if (typeof document === 'undefined') {\n return;\n }\n const sameSiteUpper = sameSite.toUpperCase();\n const date = new Date();\n date.setTime(date.getTime() + expiresInDays * 24 * 60 * 60 * 1000);\n document.cookie = `${name}=${data}; path=${path}; expires=${date.toUTCString()}; domain=${domain}; SameSite=${sameSiteUpper};`;\n};\nexport const deleteCookie = (name, path = '/', domain = getDomain()) => {\n if (hasCookie(name)) {\n document.cookie =\n name +\n '=' +\n (path ? ';path=' + path : '') +\n (domain ? ';domain=' + domain : '') +\n ';expires=Thu, 01 Jan 1970 00:00:01 GMT';\n }\n};\nexport const getDomain = () => {\n if (typeof navigator === 'undefined') {\n return null;\n }\n const hostname = window.location.hostname;\n if (hostname.includes('localhost')) {\n return 'localhost';\n }\n const hostIsIP = hostname.match(/^(\\d{1,3}\\.){3}\\d{1,3}$/);\n if (hostIsIP) {\n return hostname;\n }\n const splitHost = hostname.split('.');\n if (splitHost.length > 2) {\n return `${splitHost[splitHost.length - 2]}.${splitHost[splitHost.length - 1]}`;\n }\n return hostname;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy9jb29raWUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUN4QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDM0MsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3hDLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixJQUFZLEVBQ1osSUFBWSxFQUNaLGFBQWEsR0FBRyxFQUFFLEVBQ2xCLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFDcEIsSUFBSSxHQUFHLEdBQUcsRUFDVixXQUFzQyxLQUFLLEVBQzNDLEVBQUU7SUFDRixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksYUFBYSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksTUFBTSxjQUFjLGFBQWEsR0FBRyxDQUFDO0FBQ2pJLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzdFLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEIsUUFBUSxDQUFDLE1BQU07WUFDYixJQUFJO2dCQUNKLEdBQUc7Z0JBQ0gsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsd0NBQXdDLENBQUM7SUFDN0MsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDNUIsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUUxQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRTNELElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV0QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBoYXNDb29raWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpLnNvbWUoKGMpID0+IHtcbiAgICByZXR1cm4gYy50cmltKCkuc3RhcnRzV2l0aChuYW1lICsgJz0nKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29va2llID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDczMDM2Mi9nZXQtY29va2llLWJ5LW5hbWVcbiAgcmV0dXJuICgnOyAnICsgZG9jdW1lbnQuY29va2llKS5zcGxpdChgOyAke25hbWV9PWApLnBvcCgpPy5zcGxpdCgnOycpWzBdO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldENvb2tpZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhOiBzdHJpbmcsXG4gIGV4cGlyZXNJbkRheXMgPSAzMCxcbiAgZG9tYWluID0gZ2V0RG9tYWluKCksXG4gIHBhdGggPSAnLycsXG4gIHNhbWVTaXRlOiAnc3RyaWN0JyB8ICdub25lJyB8ICdsYXgnID0gJ2xheCcsXG4pID0+IHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzYW1lU2l0ZVVwcGVyID0gc2FtZVNpdGUudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIGV4cGlyZXNJbkRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblxuICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT0ke2RhdGF9OyBwYXRoPSR7cGF0aH07IGV4cGlyZXM9JHtkYXRlLnRvVVRDU3RyaW5nKCl9OyBkb21haW49JHtkb21haW59OyBTYW1lU2l0ZT0ke3NhbWVTaXRlVXBwZXJ9O2A7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ29va2llID0gKG5hbWU6IHN0cmluZywgcGF0aCA9ICcvJywgZG9tYWluID0gZ2V0RG9tYWluKCkpID0+IHtcbiAgaWYgKGhhc0Nvb2tpZShuYW1lKSkge1xuICAgIGRvY3VtZW50LmNvb2tpZSA9XG4gICAgICBuYW1lICtcbiAgICAgICc9JyArXG4gICAgICAocGF0aCA/ICc7cGF0aD0nICsgcGF0aCA6ICcnKSArXG4gICAgICAoZG9tYWluID8gJztkb21haW49JyArIGRvbWFpbiA6ICcnKSArXG4gICAgICAnO2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RG9tYWluID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGlmIChob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0JykpIHtcbiAgICByZXR1cm4gJ2xvY2FsaG9zdCc7XG4gIH1cblxuICBjb25zdCBob3N0SXNJUCA9IGhvc3RuYW1lLm1hdGNoKC9eKFxcZHsxLDN9XFwuKXszfVxcZHsxLDN9JC8pO1xuXG4gIGlmIChob3N0SXNJUCkge1xuICAgIHJldHVybiBob3N0bmFtZTtcbiAgfVxuXG4gIGNvbnN0IHNwbGl0SG9zdCA9IGhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgaWYgKHNwbGl0SG9zdC5sZW5ndGggPiAyKSB7XG4gICAgcmV0dXJuIGAke3NwbGl0SG9zdFtzcGxpdEhvc3QubGVuZ3RoIC0gMl19LiR7c3BsaXRIb3N0W3NwbGl0SG9zdC5sZW5ndGggLSAxXX1gO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufTtcbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-var */\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 */\nconst has = Object.prototype.hasOwnProperty;\nfunction find(iter, tar, key) {\n for (key of iter.keys()) {\n if (equal(key, tar))\n return key;\n }\n}\nexport const equal = (foo, bar) => {\n var ctor, len, tmp;\n if (foo === bar)\n return true;\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date)\n return foo.getTime() === bar.getTime();\n if (ctor === RegExp)\n return foo.toString() === bar.toString();\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 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)\n return false;\n }\n if (!bar.has(tmp))\n return false;\n }\n return true;\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)\n return false;\n }\n if (!equal(len[1], bar.get(tmp))) {\n return false;\n }\n }\n return true;\n }\n if (ctor === ArrayBuffer) {\n foo = new Uint8Array(foo);\n bar = new Uint8Array(bar);\n }\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 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 if (!ctor || typeof foo === 'object') {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor))\n return false;\n if (!(ctor in bar) || !equal(foo[ctor], bar[ctor]))\n return false;\n }\n return Object.keys(bar).length === len;\n }\n }\n return foo !== foo && bar !== bar;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2VxdWFsLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELDJCQUEyQjtBQUMzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBRTVDLFNBQVMsSUFBSSxDQUFDLElBQVMsRUFBRSxHQUFRLEVBQUUsR0FBUztJQUMxQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUN4QixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7SUFDbEMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFRLEVBQUUsR0FBUSxFQUFFLEVBQUU7SUFDMUMsSUFBSSxJQUFTLEVBQUUsR0FBUSxFQUFFLEdBQVEsQ0FBQztJQUNsQyxJQUFJLEdBQUcsS0FBSyxHQUFHO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFN0IsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0QsSUFBSSxJQUFJLEtBQUssSUFBSTtZQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxRCxJQUFJLElBQUksS0FBSyxNQUFNO1lBQUUsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTlELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FB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QyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNSLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNuRSxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNwQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8qKlxuICogU3RvbGVuIGZyb20gZGVxdWFsIHRvIGF2b2lkIGFkZGluZyBhIGRlcGVuZGVuY3lcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQvZGVxdWFsXG4gKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSBMdWtlIEVkd2FyZHMgPGx1a2UuZWR3YXJkczA1QGdtYWlsLmNvbT4gKGx1a2VlZC5jb20pXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG5jb25zdCBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBmaW5kKGl0ZXI6IGFueSwgdGFyOiBhbnksIGtleT86IGFueSkge1xuICBmb3IgKGtleSBvZiBpdGVyLmtleXMoKSkge1xuICAgIGlmIChlcXVhbChrZXksIHRhcikpIHJldHVybiBrZXk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGVxdWFsID0gKGZvbzogYW55LCBiYXI6IGFueSkgPT4ge1xuICB2YXIgY3RvcjogYW55LCBsZW46IGFueSwgdG1wOiBhbnk7XG4gIGlmIChmb28gPT09IGJhcikgcmV0dXJuIHRydWU7XG5cbiAgaWYgKGZvbyAmJiBiYXIgJiYgKGN0b3IgPSBmb28uY29uc3RydWN0b3IpID09PSBiYXIuY29uc3RydWN0b3IpIHtcbiAgICBpZiAoY3RvciA9PT0gRGF0ZSkgcmV0dXJuIGZvby5nZXRUaW1lKCkgPT09IGJhci5nZXRUaW1lKCk7XG4gICAgaWYgKGN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGZvby50b1N0cmluZygpID09PSBiYXIudG9TdHJpbmcoKTtcblxuICAgIGlmIChjdG9yID09PSBBcnJheSkge1xuICAgICAgaWYgKChsZW4gPSBmb28ubGVuZ3RoKSA9PT0gYmFyLmxlbmd0aCkge1xuICAgICAgICB3aGlsZSAobGVuLS0gJiYgZXF1YWwoZm9vW2xlbl0sIGJhcltsZW5dKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVuID09PSAtMTtcbiAgICB9XG5cbiAgICBpZiAoY3RvciA9PT0gU2V0KSB7XG4gICAgICBpZiAoZm9vLnNpemUgIT09IGJhci5zaXplKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGVuIG9mIGZvbykge1xuICAgICAgICB0bXAgPSBsZW47XG4gICAgICAgIGlmICh0bXAgJiYgdHlwZW9mIHRtcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0bXAgPSBmaW5kKGJhciwgdG1wKTtcbiAgICAgICAgICBpZiAoIXRtcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYmFyLmhhcyh0bXApKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY3RvciA9PT0gTWFwKSB7XG4gICAgICBpZiAoZm9vLnNpemUgIT09IGJhci5zaXplKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGVuIG9mIGZvbykge1xuICAgICAgICB0bXAgPSBsZW5bMF07XG4gICAgICAgIGlmICh0bXAgJiYgdHlwZW9mIHRtcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0bXAgPSBmaW5kKGJhciwgdG1wKTtcbiAgICAgICAgICBpZiAoIXRtcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWwobGVuWzFdLCBiYXIuZ2V0KHRtcCkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgIGZvbyA9IG5ldyBVaW50OEFycmF5KGZvbyk7XG4gICAgICBiYXIgPSBuZXcgVWludDhBcnJheShiYXIpO1xuICAgIH0gZWxzZSBpZiAoY3RvciA9PT0gRGF0YVZpZXcpIHtcbiAgICAgIGlmICgobGVuID0gZm9vLmJ5dGVMZW5ndGgpID09PSBiYXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICB3aGlsZSAobGVuLS0gJiYgZm9vLmdldEludDgobGVuKSA9PT0gYmFyLmdldEludDgobGVuKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVuID09PSAtMTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGZvbykpIHtcbiAgICAgIGlmICgobGVuID0gZm9vLmJ5dGVMZW5ndGgpID09PSBiYXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICB3aGlsZSAobGVuLS0gJiYgZm9vW2xlbl0gPT09IGJhcltsZW5dKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZW4gPT09IC0xO1xuICAgIH1cblxuICAgIGlmICghY3RvciB8fCB0eXBlb2YgZm9vID09PSAnb2JqZWN0Jykge1xuICAgICAgbGVuID0gMDtcbiAgICAgIGZvciAoY3RvciBpbiBmb28pIHtcbiAgICAgICAgaWYgKGhhcy5jYWxsKGZvbywgY3RvcikgJiYgKytsZW4gJiYgIWhhcy5jYWxsKGJhciwgY3RvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCEoY3RvciBpbiBiYXIpIHx8ICFlcXVhbChmb29bY3Rvcl0sIGJhcltjdG9yXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhiYXIpLmxlbmd0aCA9PT0gbGVuO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb28gIT09IGZvbyAmJiBiYXIgIT09IGJhcjtcbn07XG4iXX0=","import { FormArray, FormControl, FormGroup } from '@angular/forms';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const cloneFormGroup = (formGroup) => {\n const cloneLevel = (group, cloneGroup) => {\n Object.keys(group.controls).forEach((key) => {\n const control = group.controls[key];\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n cloneGroup.addControl(key, cloneControl);\n cloneLevel(control, cloneControl);\n }\n else if (control instanceof FormArray) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cloneArrayControl = new FormArray([], control.validator, control.asyncValidator);\n control.controls.forEach((control) => {\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n const innerClone = cloneLevel(control, cloneControl);\n cloneArrayControl.push(innerClone);\n }\n else {\n const cloneControlItem = new FormControl({ value: control.value, disabled: control.disabled }, control.validator, control.asyncValidator);\n cloneArrayControl.push(cloneControlItem);\n }\n });\n cloneGroup.addControl(key, cloneArrayControl);\n }\n else {\n const cloneControl = new FormControl({ value: control.value, disabled: control.disabled }, control.validator, control.asyncValidator);\n cloneGroup.addControl(key, cloneControl);\n }\n });\n return cloneGroup;\n };\n const clonedForm = cloneLevel(formGroup, new FormGroup({}));\n clonedForm.setValue(formGroup.value);\n clonedForm.updateValueAndValidity();\n return clonedForm;\n};\nexport const getFormGroupValue = (formGroup) => {\n const value = {};\n Object.keys(formGroup.controls).forEach((key) => {\n const control = formGroup.controls[key];\n if (control instanceof FormGroup) {\n value[key] = getFormGroupValue(control);\n }\n else if (control instanceof FormArray) {\n value[key] = control.controls.map((control) => {\n if (control instanceof FormGroup) {\n return getFormGroupValue(control);\n }\n else {\n return control.value ?? null;\n }\n });\n }\n else {\n value[key] = control.value ?? null;\n }\n });\n return value;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUEyQixTQUFZLEVBQUUsRUFBRTtJQUN2RSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWdCLEVBQUUsVUFBcUIsRUFBRSxFQUFFO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFFLENBQUM7WUFFckMsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFbEYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBRXpDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEMsQ0FBQztpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztnQkFDeEMsOERBQThEO2dCQUM5RCxNQUFNLGlCQUFpQixHQUFHLElBQUksU0FBUyxDQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFNUYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFD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bnRlbnQiOlsiaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IGNsb25lRm9ybUdyb3VwID0gPFQgZXh0ZW5kcyBGb3JtR3JvdXA8YW55Pj4oZm9ybUdyb3VwOiBUKSA9PiB7XG4gIGNvbnN0IGNsb25lTGV2ZWwgPSAoZ3JvdXA6IEZvcm1Hcm91cCwgY2xvbmVHcm91cDogRm9ybUdyb3VwKSA9PiB7XG4gICAgT2JqZWN0LmtleXMoZ3JvdXAuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmNvbnRyb2xzW2tleV0hO1xuXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBjb25zdCBjbG9uZUNvbnRyb2wgPSBuZXcgRm9ybUdyb3VwKHt9LCBjb250cm9sLnZhbGlkYXRvciwgY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG5cbiAgICAgICAgY2xvbmVHcm91cC5hZGRDb250cm9sKGtleSwgY2xvbmVDb250cm9sKTtcblxuICAgICAgICBjbG9uZUxldmVsKGNvbnRyb2wsIGNsb25lQ29udHJvbCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgY2xvbmVBcnJheUNvbnRyb2wgPSBuZXcgRm9ybUFycmF5PGFueT4oW10sIGNvbnRyb2wudmFsaWRhdG9yLCBjb250cm9sLmFzeW5jVmFsaWRhdG9yKTtcblxuICAgICAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVDb250cm9sID0gbmV3IEZvcm1Hcm91cCh7fSwgY29udHJvbC52YWxpZGF0b3IsIGNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDbG9uZSA9IGNsb25lTGV2ZWwoY29udHJvbCwgY2xvbmVDb250cm9sKTtcbiAgICAgICAgICAgIGNsb25lQXJyYXlDb250cm9sLnB1c2goaW5uZXJDbG9uZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQ29udHJvbEl0ZW0gPSBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGNvbnRyb2wudmFsdWUsIGRpc2FibGVkOiBjb250cm9sLmRpc2FibGVkIH0sXG4gICAgICAgICAgICAgIGNvbnRyb2wudmFsaWRhdG9yLFxuICAgICAgICAgICAgICBjb250cm9sLmFzeW5jVmFsaWRhdG9yLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsb25lQXJyYXlDb250cm9sLnB1c2goY2xvbmVDb250cm9sSXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjbG9uZUdyb3VwLmFkZENvbnRyb2woa2V5LCBjbG9uZUFycmF5Q29udHJvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjbG9uZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgeyB2YWx1ZTogY29udHJvbC52YWx1ZSwgZGlzYWJsZWQ6IGNvbnRyb2wuZGlzYWJsZWQgfSxcbiAgICAgICAgICBjb250cm9sLnZhbGlkYXRvcixcbiAgICAgICAgICBjb250cm9sLmFzeW5jVmFsaWRhdG9yLFxuICAgICAgICApO1xuXG4gICAgICAgIGNsb25lR3JvdXAuYWRkQ29udHJvbChrZXksIGNsb25lQ29udHJvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2xvbmVHcm91cDtcbiAgfTtcblxuICBjb25zdCBjbG9uZWRGb3JtID0gY2xvbmVMZXZlbChmb3JtR3JvdXAsIG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgY2xvbmVkRm9ybS5zZXRWYWx1ZShmb3JtR3JvdXAudmFsdWUpO1xuICBjbG9uZWRGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICByZXR1cm4gY2xvbmVkRm9ybSBhcyBUO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1Hcm91cFZhbHVlID0gPFQgZXh0ZW5kcyBGb3JtR3JvdXA+KGZvcm1Hcm91cDogVCkgPT4ge1xuICBjb25zdCB2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNba2V5XSE7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgdmFsdWVba2V5XSA9IGdldEZvcm1Hcm91cFZhbHVlKGNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgdmFsdWVba2V5XSA9IGNvbnRyb2wuY29udHJvbHMubWFwKChjb250cm9sKSA9PiB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEZvcm1Hcm91cFZhbHVlKGNvbnRyb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlID8/IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZVtrZXldID0gY29udHJvbC52YWx1ZSA/PyBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbiJdfQ==","import { ElementRef, TemplateRef, inject } from '@angular/core';\nexport const injectHostElement = () => inject(ElementRef).nativeElement;\nexport const injectTemplateRef = () => inject(TemplateRef);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvaW5qZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFvQixFQUFFLENBQUMsTUFBTSxDQUFnQixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFFeEcsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBZ0IsRUFBRSxDQUFDLE1BQU0sQ0FBaUIsV0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBpbmplY3RIb3N0RWxlbWVudCA9IDxUID0gSFRNTEVsZW1lbnQ+KCkgPT4gaW5qZWN0PEVsZW1lbnRSZWY8VD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBpbmplY3RUZW1wbGF0ZVJlZiA9IDxDID0gdW5rbm93bj4oKSA9PiBpbmplY3Q8VGVtcGxhdGVSZWY8Qz4+KFRlbXBsYXRlUmVmKTtcbiJdfQ==","// TODO: This needs to be redone, it's a mess...\nexport const getIntersectionInfo = (intersections) => {\n const reverseIntersections = [...intersections].reverse();\n const firstIntersecting = intersections.find((i) => i.intersectionRatio > 0);\n const lastIntersecting = reverseIntersections.find((i) => i.intersectionRatio > 0);\n const firstIntersectingIndex = intersections.findIndex((i) => i === firstIntersecting);\n const lastIntersectingIndex = intersections.findIndex((i) => i === lastIntersecting);\n if (!firstIntersecting || !lastIntersecting)\n return null;\n const greaterIntersecting = firstIntersecting.intersectionRatio > lastIntersecting.intersectionRatio ? firstIntersecting : lastIntersecting;\n const greaterIntersectingIndex = firstIntersecting.intersectionRatio > lastIntersecting.intersectionRatio\n ? firstIntersectingIndex\n : lastIntersectingIndex;\n const hasFullIntersection = intersections.some((i) => i.intersectionRatio === 1);\n const hasMultipleFullIntersections = intersections.filter((i) => i.intersectionRatio === 1).length > 1;\n const firstFullIntersectionIndex = intersections.findIndex((i) => i.intersectionRatio === 1);\n const firstFullIntersection = intersections.find((i) => i.intersectionRatio === 1);\n const lastFullIntersection = reverseIntersections.find((i) => i.intersectionRatio === 1);\n const lastFullIntersectionIndex = intersections.findIndex((i) => i === lastFullIntersection);\n const firstNonIntersectingIndex = intersections.findIndex((i) => i.intersectionRatio === 0);\n const firstNonIntersection = intersections.find((i) => i.intersectionRatio === 0);\n const lastNonIntersection = reverseIntersections.find((i) => i.intersectionRatio === 0);\n const lastNonIntersectingIndex = intersections.findIndex((i) => i === lastNonIntersection);\n return {\n partial: {\n hasAny: !!firstIntersecting || !!lastIntersecting,\n hasMultiple: !!firstIntersecting || (!!lastIntersecting && firstIntersecting !== lastIntersecting),\n first: {\n intersection: firstIntersecting,\n index: firstIntersectingIndex,\n },\n last: {\n intersection: lastIntersecting,\n index: lastIntersectingIndex,\n },\n biggest: {\n intersection: greaterIntersecting,\n index: greaterIntersectingIndex,\n },\n },\n full: {\n hasAny: hasFullIntersection,\n hasMultiple: hasMultipleFullIntersections,\n first: {\n index: firstFullIntersectionIndex,\n intersection: firstFullIntersection,\n },\n last: {\n index: lastFullIntersectionIndex,\n intersection: lastFullIntersection,\n },\n },\n none: {\n first: {\n index: firstNonIntersectingIndex,\n intersection: firstNonIntersection,\n },\n last: {\n index: lastNonIntersectingIndex,\n intersection: lastNonIntersection,\n },\n },\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJzZWN0aW9uLW9ic2VydmVyLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLGFBQTBDLEVBQUUsRUFBRTtJQUNoRixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxRCxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRW5GLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLGlCQUFpQixDQUFDLENBQUM7SUFDdkYsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztJQUVyRixJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV6RCxNQUFNLG1CQUFtQixHQUN2QixpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBRWxILE1BQU0sd0JB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QUFZLEVBQUUsb0JBQW9CO2FBQ25DO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSx3QkFBd0I7Z0JBQy9CLFlBQVksRUFBRSxtQkFBbUI7YUFDbEM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBUaGlzIG5lZWRzIHRvIGJlIHJlZG9uZSwgaXQncyBhIG1lc3MuLi5cbmV4cG9ydCBjb25zdCBnZXRJbnRlcnNlY3Rpb25JbmZvID0gKGludGVyc2VjdGlvbnM6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSkgPT4ge1xuICBjb25zdCByZXZlcnNlSW50ZXJzZWN0aW9ucyA9IFsuLi5pbnRlcnNlY3Rpb25zXS5yZXZlcnNlKCk7XG4gIGNvbnN0IGZpcnN0SW50ZXJzZWN0aW5nID0gaW50ZXJzZWN0aW9ucy5maW5kKChpKSA9PiBpLmludGVyc2VjdGlvblJhdGlvID4gMCk7XG4gIGNvbnN0IGxhc3RJbnRlcnNlY3RpbmcgPSByZXZlcnNlSW50ZXJzZWN0aW9ucy5maW5kKChpKSA9PiBpLmludGVyc2VjdGlvblJhdGlvID4gMCk7XG5cbiAgY29uc3QgZmlyc3RJbnRlcnNlY3RpbmdJbmRleCA9IGludGVyc2VjdGlvbnMuZmluZEluZGV4KChpKSA9PiBpID09PSBmaXJzdEludGVyc2VjdGluZyk7XG4gIGNvbnN0IGxhc3RJbnRlcnNlY3RpbmdJbmRleCA9IGludGVyc2VjdGlvbnMuZmluZEluZGV4KChpKSA9PiBpID09PSBsYXN0SW50ZXJzZWN0aW5nKTtcblxuICBpZiAoIWZpcnN0SW50ZXJzZWN0aW5nIHx8ICFsYXN0SW50ZXJzZWN0aW5nKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBncmVhdGVySW50ZXJzZWN0aW5nID1cbiAgICBmaXJzdEludGVyc2VjdGluZy5pbnRlcnNlY3Rpb25SYXRpbyA+IGxhc3RJbnRlcnNlY3RpbmcuaW50ZXJzZWN0aW9uUmF0aW8gPyBmaXJzdEludGVyc2VjdGluZyA6IGxhc3RJbnRlcnNlY3Rpbmc7XG5cbiAgY29uc3QgZ3JlYXRlckludGVyc2VjdGluZ0luZGV4ID1cbiAgICBmaXJzdEludGVyc2VjdGluZy5pbnRlcnNlY3Rpb25SYXRpbyA+IGxhc3RJbnRlcnNlY3RpbmcuaW50ZXJzZWN0aW9uUmF0aW9cbiAgICAgID8gZmlyc3RJbnRlcnNlY3RpbmdJbmRleFxuICAgICAgOiBsYXN0SW50ZXJzZWN0aW5nSW5kZXg7XG5cbiAgY29uc3QgaGFzRnVsbEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnMuc29tZSgoaSkgPT4gaS5pbnRlcnNlY3Rpb25SYXRpbyA9PT0gMSk7XG4gIGNvbnN0IGhhc011bHRpcGxlRnVsbEludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3Rpb25zLmZpbHRlcigoaSkgPT4gaS5pbnRlcnNlY3Rpb25SYXRpbyA9PT0gMSkubGVuZ3RoID4gMTtcblxuICBjb25zdCBmaXJzdEZ1bGxJbnRlcnNlY3Rpb25JbmRleCA9IGludGVyc2VjdGlvbnMuZmluZEluZGV4KChpKSA9PiBpLmludGVyc2VjdGlvblJhdGlvID09PSAxKTtcbiAgY29uc3QgZmlyc3RGdWxsSW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9ucy5maW5kKChpKSA9PiBpLmludGVyc2VjdGlvblJhdGlvID09PSAxKTtcblxuICBjb25zdCBsYXN0RnVsbEludGVyc2VjdGlvbiA9IHJldmVyc2VJbnRlcnNlY3Rpb25zLmZpbmQoKGkpID0+IGkuaW50ZXJzZWN0aW9uUmF0aW8gPT09IDEpO1xuICBjb25zdCBsYXN0RnVsbEludGVyc2VjdGlvbkluZGV4ID0gaW50ZXJzZWN0aW9ucy5maW5kSW5kZXgoKGkpID0+IGkgPT09IGxhc3RGdWxsSW50ZXJzZWN0aW9uKTtcblxuICBjb25zdCBmaXJzdE5vbkludGVyc2VjdGluZ0luZGV4ID0gaW50ZXJzZWN0aW9ucy5maW5kSW5kZXgoKGkpID0+IGkuaW50ZXJzZWN0aW9uUmF0aW8gPT09IDApO1xuICBjb25zdCBmaXJzdE5vbkludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnMuZmluZCgoaSkgPT4gaS5pbnRlcnNlY3Rpb25SYXRpbyA9PT0gMCk7XG5cbiAgY29uc3QgbGFzdE5vbkludGVyc2VjdGlvbiA9IHJldmVyc2VJbnRlcnNlY3Rpb25zLmZpbmQoKGkpID0+IGkuaW50ZXJzZWN0aW9uUmF0aW8gPT09IDApO1xuICBjb25zdCBsYXN0Tm9uSW50ZXJzZWN0aW5nSW5kZXggPSBpbnRlcnNlY3Rpb25zLmZpbmRJbmRleCgoaSkgPT4gaSA9PT0gbGFzdE5vbkludGVyc2VjdGlvbik7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJ0aWFsOiB7XG4gICAgICBoYXNBbnk6ICEhZmlyc3RJbnRlcnNlY3RpbmcgfHwgISFsYXN0SW50ZXJzZWN0aW5nLFxuICAgICAgaGFzTXVsdGlwbGU6ICEhZmlyc3RJbnRlcnNlY3RpbmcgfHwgKCEhbGFzdEludGVyc2VjdGluZyAmJiBmaXJzdEludGVyc2VjdGluZyAhPT0gbGFzdEludGVyc2VjdGluZyksXG4gICAgICBmaXJzdDoge1xuICAgICAgICBpbnRlcnNlY3Rpb246IGZpcnN0SW50ZXJzZWN0aW5nLFxuICAgICAgICBpbmRleDogZmlyc3RJbnRlcnNlY3RpbmdJbmRleCxcbiAgICAgIH0sXG4gICAgICBsYXN0OiB7XG4gICAgICAgIGludGVyc2VjdGlvbjogbGFzdEludGVyc2VjdGluZyxcbiAgICAgICAgaW5kZXg6IGxhc3RJbnRlcnNlY3RpbmdJbmRleCxcbiAgICAgIH0sXG4gICAgICBiaWdnZXN0OiB7XG4gICAgICAgIGludGVyc2VjdGlvbjogZ3JlYXRlckludGVyc2VjdGluZyxcbiAgICAgICAgaW5kZXg6IGdyZWF0ZXJJbnRlcnNlY3RpbmdJbmRleCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBmdWxsOiB7XG4gICAgICBoYXNBbnk6IGhhc0Z1bGxJbnRlcnNlY3Rpb24sXG4gICAgICBoYXNNdWx0aXBsZTogaGFzTXVsdGlwbGVGdWxsSW50ZXJzZWN0aW9ucyxcbiAgICAgIGZpcnN0OiB7XG4gICAgICAgIGluZGV4OiBmaXJzdEZ1bGxJbnRlcnNlY3Rpb25JbmRleCxcbiAgICAgICAgaW50ZXJzZWN0aW9uOiBmaXJzdEZ1bGxJbnRlcnNlY3Rpb24sXG4gICAgICB9LFxuICAgICAgbGFzdDoge1xuICAgICAgICBpbmRleDogbGFzdEZ1bGxJbnRlcnNlY3Rpb25JbmRleCxcbiAgICAgICAgaW50ZXJzZWN0aW9uOiBsYXN0RnVsbEludGVyc2VjdGlvbixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBub25lOiB7XG4gICAgICBmaXJzdDoge1xuICAgICAgICBpbmRleDogZmlyc3ROb25JbnRlcnNlY3RpbmdJbmRleCxcbiAgICAgICAgaW50ZXJzZWN0aW9uOiBmaXJzdE5vbkludGVyc2VjdGlvbixcbiAgICAgIH0sXG4gICAgICBsYXN0OiB7XG4gICAgICAgIGluZGV4OiBsYXN0Tm9uSW50ZXJzZWN0aW5nSW5kZXgsXG4gICAgICAgIGludGVyc2VjdGlvbjogbGFzdE5vbkludGVyc2VjdGlvbixcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn07XG4iXX0=","import { BehaviorSubject, Subject, takeUntil, timer } from 'rxjs';\nexport class KeyPressManager {\n constructor(key) {\n this.key = key;\n this._isKeyPressed$ = new BehaviorSubject(false);\n this._keyPressCount$ = new BehaviorSubject(0);\n this._stopTimeout$ = new Subject();\n }\n isPressed(event) {\n const key = event.keyCode;\n if (key === this.key) {\n this._isKeyPressed$.next(this._keyPressCount$.value > 1);\n this._keyPressCount$.next(this._keyPressCount$.value + 1);\n this._stopTimeout$.next();\n timer(100)\n .pipe(takeUntil(this._stopTimeout$))\n .subscribe(() => this.clear());\n }\n else {\n this.clear();\n }\n return this._isKeyPressed$.value;\n }\n clear() {\n this._isKeyPressed$.next(false);\n this._keyPressCount$.next(0);\n this._stopTimeout$.next();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LXByZXNzLW1hbmFnZXIudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy9rZXktcHJlc3MtbWFuYWdlci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxFLE1BQU0sT0FBTyxlQUFlO0lBTTFCLFlBQTRCLEdBQVc7UUFBWCxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBTHRCLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFWCxDQUFDO0lBRTNDLFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTFCLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTFCLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ25DLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIHRha2VVbnRpbCwgdGltZXIgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIEtleVByZXNzTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzS2V5UHJlc3NlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2V5UHJlc3NDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0b3BUaW1lb3V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGtleTogbnVtYmVyKSB7fVxuXG4gIGlzUHJlc3NlZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGU7XG5cbiAgICBpZiAoa2V5ID09PSB0aGlzLmtleSkge1xuICAgICAgdGhpcy5faXNLZXlQcmVzc2VkJC5uZXh0KHRoaXMuX2tleVByZXNzQ291bnQkLnZhbHVlID4gMSk7XG4gICAgICB0aGlzLl9rZXlQcmVzc0NvdW50JC5uZXh0KHRoaXMuX2tleVByZXNzQ291bnQkLnZhbHVlICsgMSk7XG5cbiAgICAgIHRoaXMuX3N0b3BUaW1lb3V0JC5uZXh0KCk7XG5cbiAgICAgIHRpbWVyKDEwMClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3N0b3BUaW1lb3V0JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGVhcigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pc0tleVByZXNzZWQkLnZhbHVlO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5faXNLZXlQcmVzc2VkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLl9rZXlQcmVzc0NvdW50JC5uZXh0KDApO1xuICAgIHRoaXMuX3N0b3BUaW1lb3V0JC5uZXh0KCk7XG4gIH1cbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, Subject, fromEvent } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class ClickObserverFactory {\n create() {\n return fromEvent(document, 'click');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickObserverFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nexport class ClickObserverService {\n constructor() {\n this._clickObserverFactory = inject(ClickObserverFactory);\n this._observedElements = new Map();\n }\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n observe(elementOrRef) {\n const element = coerceElement(elementOrRef);\n return new Observable((observer) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n _observeElement(element) {\n if (!this._observedElements.has(element)) {\n const stream = new Subject();\n const observer = this._clickObserverFactory.create();\n const sub = observer.subscribe((event) => stream.next(event));\n this._observedElements.set(element, { observer: sub, stream, count: 1 });\n }\n else {\n this._observedElements.get(element).count++;\n }\n return this._observedElements.get(element).stream;\n }\n _unobserveElement(element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element).count--;\n if (!this._observedElements.get(element).count) {\n this._cleanupObserver(element);\n }\n }\n }\n _cleanupObserver(element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element);\n if (observer) {\n observer.unsubscribe();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickObserverService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb2JzZXJ2ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2NsaWNrLW9ic2VydmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQWMsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFZLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5RSxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLE1BQU07UUFDSixPQUFPLFNBQVMsQ0FBYSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0FIVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURQLE1BQU07OzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQVFsQyxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBRVUsMEJBQXFCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFckQsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBT2hDLENBQUM7S0F1REw7SUFyREMsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBSUQsT0FBTyxDQUFDLFlBQTJDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBOEIsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVoRCxPQUFPLEdBQUcsRUFBRTtnQkFDVixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBZ0I7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUVyRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFOUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUUsQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQWdCO1FBQ3hDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUM7WUFDbEUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDOzhHQWhFVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURQLE1BQU07OzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbiAqL1xuaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ2xpY2tPYnNlcnZlckZhY3Rvcnkge1xuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ2NsaWNrJyk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDbGlja09ic2VydmVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2NsaWNrT2JzZXJ2ZXJGYWN0b3J5ID0gaW5qZWN0KENsaWNrT2JzZXJ2ZXJGYWN0b3J5KTtcblxuICBwcml2YXRlIF9vYnNlcnZlZEVsZW1lbnRzID0gbmV3IE1hcDxcbiAgICBFbGVtZW50LFxuICAgIHtcbiAgICAgIG9ic2VydmVyOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICAgICAgcmVhZG9ubHkgc3RyZWFtOiBTdWJqZWN0PE1vdXNlRXZlbnQ+O1xuICAgICAgY291bnQ6IG51bWJlcjtcbiAgICB9XG4gID4oKTtcblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmZvckVhY2goKF8sIGVsZW1lbnQpID0+IHRoaXMuX2NsZWFudXBPYnNlcnZlcihlbGVtZW50KSk7XG4gIH1cblxuICBvYnNlcnZlKGVsZW1lbnQ6IEVsZW1lbnQpOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBvYnNlcnZlKGVsZW1lbnQ6IEVsZW1lbnRSZWY8RWxlbWVudD4pOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBvYnNlcnZlKGVsZW1lbnRPclJlZjogRWxlbWVudCB8IEVsZW1lbnRSZWY8RWxlbWVudD4pOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gY29lcmNlRWxlbWVudChlbGVtZW50T3JSZWYpO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8TW91c2VFdmVudD4pID0+IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX29ic2VydmVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc3RyZWFtLnN1YnNjcmliZShvYnNlcnZlcik7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl91bm9ic2VydmVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBTdWJqZWN0PE1vdXNlRXZlbnQ+IHtcbiAgICBpZiAoIXRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSB0aGlzLl9jbGlja09ic2VydmVyRmFjdG9yeS5jcmVhdGUoKTtcblxuICAgICAgY29uc3Qgc3ViID0gb2JzZXJ2ZXIuc3Vic2NyaWJlKChldmVudCkgPT4gc3RyZWFtLm5leHQoZXZlbnQpKTtcblxuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgeyBvYnNlcnZlcjogc3ViLCBzdHJlYW0sIGNvdW50OiAxIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlbGVtZW50KSEuY291bnQrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpIS5zdHJlYW07XG4gIH1cblxuICBwcml2YXRlIF91bm9ic2VydmVFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpIS5jb3VudC0tO1xuICAgICAgaWYgKCF0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlbGVtZW50KSEuY291bnQpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cE9ic2VydmVyKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXBPYnNlcnZlcihlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCB7IG9ic2VydmVyLCBzdHJlYW0gfSA9IHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpITtcbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class MutationObserverFactory {\n create(callback) {\n return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: MutationObserverFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nexport class ContentObserverService {\n constructor() {\n this._mutationObserverFactory = inject(MutationObserverFactory);\n this._observedElements = new Map();\n }\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n observe(elementOrRef) {\n const element = coerceElement(elementOrRef);\n return new Observable((observer) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n _observeElement(element) {\n if (!this._observedElements.has(element)) {\n const stream = new Subject();\n const observer = this._mutationObserverFactory.create((mutations) => stream.next(mutations));\n if (observer) {\n observer.observe(element, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n this._observedElements.set(element, { observer, stream, count: 1 });\n }\n else {\n this._observedElements.get(element).count++;\n }\n return this._observedElements.get(element).stream;\n }\n _unobserveElement(element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element).count--;\n if (!this._observedElements.get(element).count) {\n this._cleanupObserver(element);\n }\n }\n }\n _cleanupObserver(element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element);\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ContentObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ContentObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ContentObserverService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1vYnNlcnZlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2VydmljZXMvY29udGVudC1vYnNlcnZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFjLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBWSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR3JELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsTUFBTSxDQUFDLFFBQTBCO1FBQy9CLE9BQU8sT0FBTyxnQkFBZ0IsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RixDQUFDOzhHQUhVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRFYsTUFBTTs7MkZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBUWxDLE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFFVSw2QkFBd0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUUzRCxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFPaEMsQ0FBQztLQTJETDtJQXpEQyxXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFJRCxPQUFPLENBQUMsWUFBMkM7UUFDakQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FB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bi1udWxsLWFzc2VydGlvbiAqL1xuaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdXRhdGlvbk9ic2VydmVyRmFjdG9yeSB7XG4gIGNyZWF0ZShjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjayk6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRPYnNlcnZlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeSA9IGluamVjdChNdXRhdGlvbk9ic2VydmVyRmFjdG9yeSk7XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZWRFbGVtZW50cyA9IG5ldyBNYXA8XG4gICAgRWxlbWVudCxcbiAgICB7XG4gICAgICBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGw7XG4gICAgICByZWFkb25seSBzdHJlYW06IFN1YmplY3Q8TXV0YXRpb25SZWNvcmRbXT47XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgIH1cbiAgPigpO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZm9yRWFjaCgoXywgZWxlbWVudCkgPT4gdGhpcy5fY2xlYW51cE9ic2VydmVyKGVsZW1lbnQpKTtcbiAgfVxuXG4gIG9ic2VydmUoZWxlbWVudDogRWxlbWVudCk6IE9ic2VydmFibGU8TXV0YXRpb25SZWNvcmRbXT47XG4gIG9ic2VydmUoZWxlbWVudDogRWxlbWVudFJlZjxFbGVtZW50Pik6IE9ic2VydmFibGU8TXV0YXRpb25SZWNvcmRbXT47XG4gIG9ic2VydmUoZWxlbWVudE9yUmVmOiBFbGVtZW50IHwgRWxlbWVudFJlZjxFbGVtZW50Pik6IE9ic2VydmFibGU8TXV0YXRpb25SZWNvcmRbXT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsZW1lbnRPclJlZik7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxNdXRhdGlvblJlY29yZFtdPikgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fb2JzZXJ2ZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdHJlYW0uc3Vic2NyaWJlKG9ic2VydmVyKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IFN1YmplY3Q8TXV0YXRpb25SZWNvcmRbXT4ge1xuICAgIGlmICghdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdWJqZWN0PE11dGF0aW9uUmVjb3JkW10+KCk7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5LmNyZWF0ZSgobXV0YXRpb25zKSA9PiBzdHJlYW0ubmV4dChtdXRhdGlvbnMpKTtcbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHsgb2JzZXJ2ZXIsIHN0cmVhbSwgY291bnQ6IDEgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpIS5jb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhLnN0cmVhbTtcbiAgfVxuXG4gIHByaXZhdGUgX3Vub2JzZXJ2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlbGVtZW50KSkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhLmNvdW50LS07XG4gICAgICBpZiAoIXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpIS5jb3VudCkge1xuICAgICAgICB0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cE9ic2VydmVyKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IHsgb2JzZXJ2ZXIsIHN0cmVhbSB9ID0gdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhO1xuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG59XG4iXX0=","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class FocusVisibleService {\n get isFocusVisible() {\n return this._hadKeyboardEvent;\n }\n constructor() {\n this._document = inject(DOCUMENT);\n this._hadKeyboardEvent = false;\n this._document.addEventListener('keydown', this.onKeyDown.bind(this), true);\n this._document.addEventListener('mousedown', this.onPointerDown.bind(this), true);\n this._document.addEventListener('pointerdown', this.onPointerDown.bind(this), true);\n this._document.addEventListener('touchstart', this.onPointerDown.bind(this), true);\n }\n onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n this._hadKeyboardEvent = true;\n }\n onPointerDown() {\n this._hadKeyboardEvent = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: FocusVisibleService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: FocusVisibleService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdmlzaWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2VydmljZXMvZm9jdXMtdmlzaWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLG1CQUFtQjtJQUs5QixJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVEO1FBUmlCLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBT2hDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBZ0I7UUFDeEIsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQzs4R0ExQlUsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRm9jdXNWaXNpYmxlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICBwcml2YXRlIF9oYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG5cbiAgZ2V0IGlzRm9jdXNWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl9oYWRLZXlib2FyZEV2ZW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duLmJpbmQodGhpcyksIHRydWUpO1xuICAgIHRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Qb2ludGVyRG93bi5iaW5kKHRoaXMpLCB0cnVlKTtcbiAgICB0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bi5iaW5kKHRoaXMpLCB0cnVlKTtcbiAgICB0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblBvaW50ZXJEb3duLmJpbmQodGhpcyksIHRydWUpO1xuICB9XG5cbiAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICB9XG5cbiAgb25Qb2ludGVyRG93bigpIHtcbiAgICB0aGlzLl9oYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class IntersectionObserverFactory {\n create(callback) {\n return typeof IntersectionObserver === 'undefined' ? null : new IntersectionObserver(callback);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IntersectionObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IntersectionObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IntersectionObserverFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nexport class IntersectionObserverService {\n constructor() {\n this._intersectionObserverFactory = inject(IntersectionObserverFactory);\n this._observedElements = new Map();\n }\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n observe(elementOrRef) {\n const element = coerceElement(elementOrRef);\n return new Observable((observer) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n _observeElement(element) {\n if (!this._observedElements.has(element)) {\n const stream = new Subject();\n const observer = this._intersectionObserverFactory.create((mutations) => stream.next(mutations));\n if (observer) {\n observer.observe(element);\n }\n this._observedElements.set(element, { observer, stream, count: 1 });\n }\n else {\n this._observedElements.get(element).count++;\n }\n return this._observedElements.get(element).stream;\n }\n _unobserveElement(element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element).count--;\n if (!this._observedElements.get(element).count) {\n this._cleanupObserver(element);\n }\n }\n }\n _cleanupObserver(element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element);\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IntersectionObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IntersectionObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IntersectionObserverService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJzZWN0aW9uLW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2REFBNkQ7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQVksT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUdyRCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLE1BQU0sQ0FBQyxRQUFzQztRQUMzQyxPQUFPLE9BQU8sb0JBQW9CLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakcsQ0FBQzs4R0FIVSwyQkFBMkI7a0hBQTNCLDJCQUEyQixjQURkLE1BQU07OzJGQUNuQiwyQkFBMkI7a0JBRHZDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQVFsQyxNQUFNLE9BQU8sMkJBQTJCO0lBRHhDO1FBRVUsaUNBQTRCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbkUsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBT2hDLENBQUM7S0F1REw7SUFyREMsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBSUQsT0FBTyxDQUFDLFlBQTJDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBK0MsRUFBRSxFQUFFO1lBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVoRCxPQUFPLEdBQUcsRUFBRTtnQkFDVixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBZ0I7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBK0IsQ0FBQztZQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDakcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUFnQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBZ0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDO1lBQ2xFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs4R0FoRVUsMkJBQTJCO2tIQUEzQiwyQkFBMkIsY0FEZCxNQUFNOzsyRkFDbkIsMkJBQTJCO2tCQUR2QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24gKi9cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJGYWN0b3J5IHtcbiAgY3JlYXRlKGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfaW50ZXJzZWN0aW9uT2JzZXJ2ZXJGYWN0b3J5ID0gaW5qZWN0KEludGVyc2VjdGlvbk9ic2VydmVyRmFjdG9yeSk7XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZWRFbGVtZW50cyA9IG5ldyBNYXA8XG4gICAgRWxlbWVudCxcbiAgICB7XG4gICAgICBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsO1xuICAgICAgcmVhZG9ubHkgc3RyZWFtOiBTdWJqZWN0PEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXT47XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgIH1cbiAgPigpO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZm9yRWFjaCgoXywgZWxlbWVudCkgPT4gdGhpcy5fY2xlYW51cE9ic2VydmVyKGVsZW1lbnQpKTtcbiAgfVxuXG4gIG9ic2VydmUoZWxlbWVudDogRWxlbWVudCk6IE9ic2VydmFibGU8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdPjtcbiAgb2JzZXJ2ZShlbGVtZW50OiBFbGVtZW50UmVmPEVsZW1lbnQ+KTogT2JzZXJ2YWJsZTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10+O1xuICBvYnNlcnZlKGVsZW1lbnRPclJlZjogRWxlbWVudCB8IEVsZW1lbnRSZWY8RWxlbWVudD4pOiBPYnNlcnZhYmxlPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsZW1lbnRPclJlZik7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10+KSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9vYnNlcnZlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN0cmVhbS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdW5vYnNlcnZlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vYnNlcnZlRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogU3ViamVjdDxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10+IHtcbiAgICBpZiAoIXRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3ViamVjdDxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10+KCk7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUoKG11dGF0aW9ucykgPT4gc3RyZWFtLm5leHQobXV0YXRpb25zKSk7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHsgb2JzZXJ2ZXIsIHN0cmVhbSwgY291bnQ6IDEgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpIS5jb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhLnN0cmVhbTtcbiAgfVxuXG4gIHByaXZhdGUgX3Vub2JzZXJ2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlbGVtZW50KSkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhLmNvdW50LS07XG4gICAgICBpZiAoIXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGVsZW1lbnQpIS5jb3VudCkge1xuICAgICAgICB0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cE9ic2VydmVyKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IHsgb2JzZXJ2ZXIsIHN0cmVhbSB9ID0gdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhO1xuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG59XG4iXX0=","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class ResizeObserverFactory {\n create(callback) {\n return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ResizeObserverFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nexport class ResizeObserverService {\n constructor() {\n this._mutationObserverFactory = inject(ResizeObserverFactory);\n this._observedElements = new Map();\n }\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n observe(elementOrRef) {\n const element = coerceElement(elementOrRef);\n return new Observable((observer) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n _observeElement(element) {\n if (!this._observedElements.has(element)) {\n const stream = new Subject();\n const observer = this._mutationObserverFactory.create((resizes) => stream.next(resizes));\n if (observer) {\n observer.observe(element);\n }\n this._observedElements.set(element, { observer, stream, count: 1 });\n }\n else {\n this._observedElements.get(element).count++;\n }\n return this._observedElements.get(element).stream;\n }\n _unobserveElement(element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element).count--;\n if (!this._observedElements.get(element).count) {\n this._cleanupObserver(element);\n }\n }\n }\n _cleanupObserver(element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element);\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ResizeObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ResizeObserverService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9yZXNpemUtb2JzZXJ2ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2REFBNkQ7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQVksT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUdyRCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLE1BQU0sQ0FBQyxRQUFnQztRQUNyQyxPQUFPLE9BQU8sY0FBYyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRixDQUFDOzhHQUhVLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRFIsTUFBTTs7MkZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBUWxDLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFFVSw2QkFBd0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV6RCxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFPaEMsQ0FBQztLQXVETDtJQXJEQyxXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFJRCxPQUFPLENBQUMsWUFBMkM7UUFDakQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUF5QyxFQUFFLEVBQUU7WUFDbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWhELE9BQU8sR0FBRyxFQUFFO2dCQUNWLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFnQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6RixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUUsQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQWdCO1FBQ3hDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUM7WUFDbEUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsQ0FBQztZQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDOzhHQWhFVSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQURSLE1BQU07OzJGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbiAqL1xuaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXNpemVPYnNlcnZlckZhY3Rvcnkge1xuICBjcmVhdGUoY2FsbGJhY2s6IFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2spOiBSZXNpemVPYnNlcnZlciB8IG51bGwge1xuICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IG5ldyBSZXNpemVPYnNlcnZlcihjYWxsYmFjayk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXNpemVPYnNlcnZlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeSA9IGluamVjdChSZXNpemVPYnNlcnZlckZhY3RvcnkpO1xuXG4gIHByaXZhdGUgX29ic2VydmVkRWxlbWVudHMgPSBuZXcgTWFwPFxuICAgIEVsZW1lbnQsXG4gICAge1xuICAgICAgb2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbDtcbiAgICAgIHJlYWRvbmx5IHN0cmVhbTogU3ViamVjdDxSZXNpemVPYnNlcnZlckVudHJ5W10+O1xuICAgICAgY291bnQ6IG51bWJlcjtcbiAgICB9XG4gID4oKTtcblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmZvckVhY2goKF8sIGVsZW1lbnQpID0+IHRoaXMuX2NsZWFudXBPYnNlcnZlcihlbGVtZW50KSk7XG4gIH1cblxuICBvYnNlcnZlKGVsZW1lbnQ6IEVsZW1lbnQpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT47XG4gIG9ic2VydmUoZWxlbWVudDogRWxlbWVudFJlZjxFbGVtZW50Pik6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPjtcbiAgb2JzZXJ2ZShlbGVtZW50T3JSZWY6IEVsZW1lbnQgfCBFbGVtZW50UmVmPEVsZW1lbnQ+KTogT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gY29lcmNlRWxlbWVudChlbGVtZW50T3JSZWYpO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPikgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fb2JzZXJ2ZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdHJlYW0uc3Vic2NyaWJlKG9ic2VydmVyKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IFN1YmplY3Q8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPiB7XG4gICAgaWYgKCF0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlbGVtZW50KSkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IFN1YmplY3Q8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPigpO1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSB0aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUoKHJlc2l6ZXMpID0+IHN0cmVhbS5uZXh0KHJlc2l6ZXMpKTtcbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgeyBvYnNlcnZlciwgc3RyZWFtLCBjb3VudDogMSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhLmNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlbGVtZW50KSEuc3RyZWFtO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5vYnNlcnZlRWxlbWVudChlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlbGVtZW50KSEuY291bnQtLTtcbiAgICAgIGlmICghdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZWxlbWVudCkhLmNvdW50KSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXBPYnNlcnZlcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbGVhbnVwT2JzZXJ2ZXIoZWxlbWVudDogRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlbGVtZW50KSkge1xuICAgICAgY29uc3QgeyBvYnNlcnZlciwgc3RyZWFtIH0gPSB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlbGVtZW50KSE7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { inject, Injectable, signal } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, map, pairwise, shareReplay, tap, } from 'rxjs';\nimport { equal } from '../utils';\nimport * as i0 from \"@angular/core\";\nconst ET_DISABLE_SCROLL_TOP = Symbol('ET_DISABLE_SCROLL_TOP');\nconst ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE = Symbol('ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE');\nconst ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE = Symbol('ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE');\nexport const routerDisableScrollTop = (config = {}) => {\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};\nexport const ET_PROPERTY_REMOVED = Symbol('ET_PROPERTY_REMOVED');\nexport class RouterStateService {\n get route$() {\n return this._route$.asObservable().pipe(distinctUntilChanged());\n }\n get route() {\n return this._route$.getValue();\n }\n get state$() {\n return this._state$.asObservable();\n }\n get state() {\n return this._state$.getValue();\n }\n get data$() {\n return this._state$.pipe(map((state) => state.data), distinctUntilChanged((a, b) => equal(a, b)));\n }\n get data() {\n return this._state$.getValue().data;\n }\n get pathParams$() {\n return this._state$.pipe(map((state) => state.pathParams), distinctUntilChanged((a, b) => equal(a, b)));\n }\n get pathParams() {\n return this._state$.getValue().pathParams;\n }\n get queryParams$() {\n return this._state$.pipe(map((state) => state.queryParams), distinctUntilChanged((a, b) => equal(a, b)));\n }\n get queryParams() {\n return this._state$.getValue().queryParams;\n }\n get title$() {\n return this._state$.pipe(map((state) => state.title), distinctUntilChanged());\n }\n get title() {\n return this._state$.getValue().title;\n }\n get fragment$() {\n return this._state$.pipe(map((state) => state.fragment), distinctUntilChanged());\n }\n get fragment() {\n return this._state$.getValue().fragment;\n }\n get dataChanges$() {\n return this.data$.pipe(pairwise(), map((v) => this._findChanges(v)), shareReplay({ bufferSize: 1, refCount: true }));\n }\n get queryParamChanges$() {\n return this.queryParams$.pipe(pairwise(), map((v) => this._findChanges(v)), shareReplay({ bufferSize: 1, refCount: true }));\n }\n get pathParamChanges$() {\n return this.pathParams$.pipe(pairwise(), map((v) => this._findChanges(v)), shareReplay({ bufferSize: 1, refCount: true }));\n }\n constructor() {\n this._isScrollTopOnNavigationEnabled = false;\n this._router = inject(Router);\n this._route$ = new BehaviorSubject(window.location.pathname);\n this._state$ = new BehaviorSubject(this._getInitialState());\n this._afterInitialize$ = new BehaviorSubject(false);\n this.afterInitialize$ = this._afterInitialize$.pipe(filter((v) => v));\n this.latestEvent = signal(null, ...(ngDevMode ? [{ debugName: \"latestEvent\" }] : []));\n this._router.events\n .pipe(tap((event) => this.latestEvent.set(event)), filter((event) => event instanceof NavigationEnd), distinctUntilChanged((a, b) => a.url === b.url), map((event) => {\n const { url } = event;\n const urlWithoutQueryParams = url.split('?')[0] ?? '';\n const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';\n return withoutFragment;\n }), tap(() => {\n if (!this._afterInitialize$.getValue()) {\n this._afterInitialize$.next(true);\n }\n }))\n .subscribe(this._route$);\n combineLatest([this._route$, this._afterInitialize$])\n .pipe(tap(([, afterInitialize]) => {\n if (!afterInitialize)\n return;\n let route = this._router.routerState.snapshot.root;\n while (route.firstChild) {\n route = route.firstChild;\n }\n const { data, params, queryParams, title, fragment } = route;\n this._state$.next({\n data,\n pathParams: params,\n queryParams,\n title: title ?? null,\n fragment,\n });\n }))\n .subscribe();\n }\n enableScrollEnhancements(config = {}) {\n if (this._isScrollTopOnNavigationEnabled) {\n return;\n }\n this._isScrollTopOnNavigationEnabled = true;\n combineLatest([this._state$.pipe(pairwise()), this._route$.pipe(pairwise())])\n .pipe(debounceTime(1))\n .subscribe(([[prevState, currState], [prevRoute, currRoute]]) => {\n const sameUrlNavigation = prevRoute === currRoute;\n const didFragmentChange = prevState.fragment !== currState.fragment;\n if (sameUrlNavigation) {\n const allQueryParams = [\n ...new Set(Object.keys(prevState.queryParams).concat(Object.keys(currState.queryParams))),\n ];\n const changedQueryParams = allQueryParams.filter((key) => currState.queryParams[key] !== prevState.queryParams[key]);\n if (!config.queryParamTriggerList?.length && !didFragmentChange) {\n return;\n }\n const caseQueryParams = changedQueryParams.some((key) => config.queryParamTriggerList?.includes(key));\n const caseFragment = didFragmentChange && config.fragment?.enabled;\n if (caseQueryParams) {\n (config.scrollElement ?? document.documentElement).scrollTop = 0;\n }\n else if (caseFragment) {\n const fragmentElement = document.getElementById(currState.fragment ?? '');\n if (fragmentElement) {\n fragmentElement.scrollIntoView({ behavior: config.fragment?.smooth ? 'smooth' : 'auto' });\n }\n }\n }\n else {\n const viaReturnRoute = currState.data[ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE] && prevState.data[ET_DISABLE_SCROLL_TOP];\n const explicitly = currState.data[ET_DISABLE_SCROLL_TOP];\n const pathParamsChange = currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE];\n if (viaReturnRoute || explicitly || pathParamsChange) {\n return;\n }\n const el = config.scrollElement ?? document.documentElement;\n el.scrollTop = 0;\n }\n });\n }\n selectQueryParam(key) {\n return this._state$.pipe(map((state) => state.queryParams[key]), distinctUntilChanged());\n }\n selectPathParam(key) {\n return this._state$.pipe(map((state) => state.pathParams[key]), distinctUntilChanged());\n }\n selectData(key) {\n return this._state$.pipe(map((state) => state.data[key]), distinctUntilChanged((a, b) => equal(a, b)));\n }\n _findChanges([previous, current,]) {\n const changes = {};\n const allKeys = new Set([\n ...Object.keys(previous),\n ...Object.keys(current),\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 changes[key] = val;\n }\n }\n return changes;\n }\n _getInitialState() {\n const data = {};\n const pathParams = {};\n const queryParams = {};\n const title = null;\n let fragment = null;\n const currentQueryParams = window.location.search;\n const currentFragment = window.location.hash;\n if (currentQueryParams) {\n const params = new URLSearchParams(currentQueryParams);\n params.forEach((value, key) => {\n queryParams[key] = value;\n });\n }\n if (currentFragment) {\n fragment = currentFragment.slice(1);\n }\n return {\n data,\n pathParams,\n queryParams,\n title,\n fragment,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RouterStateService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RouterStateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9yb3V0ZXItc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFlLGFBQWEsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsUUFBUSxFQUNSLFdBQVcsRUFDWCxHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUVqQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzlELE1BQU0scUNBQXFDLEdBQUcsTUFBTSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7QUFDOUYsTUFBTSwwQ0FBMEMsR0FBRyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztBQWdCeEcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxTQUF1QyxFQUFFLEVBQUUsRUFBRTtJQUNsRixPQUFPO1FBQ0wsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xILEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFD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aW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGEsIEV2ZW50LCBOYXZpZ2F0aW9uRW5kLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBwYWlyd2lzZSxcbiAgc2hhcmVSZXBsYXksXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBlcXVhbCB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgRVRfRElTQUJMRV9TQ1JPTExfVE9QID0gU3ltYm9sKCdFVF9ESVNBQkxFX1NDUk9MTF9UT1AnKTtcbmNvbnN0IEVUX0RJU0FCTEVfU0NST0xMX1RPUF9BU19SRVRVUk5fUk9VVEUgPSBTeW1ib2woJ0VUX0RJU0FCTEVfU0NST0xMX1RPUF9BU19SRVRVUk5fUk9VVEUnKTtcbmNvbnN0IEVUX0RJU0FCTEVfU0NST0xMX1RPUF9PTl9QQVRIX1BBUkFNX0NIQU5HRSA9IFN5bWJvbCgnRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyRGlzYWJsZVNjcm9sbFRvcENvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgc2Nyb2xsIHRvIHRvcCBPTkxZIHdoZW4gbmF2aWdhdGluZyBiYWNrIHRvIHRoaXMgcm91dGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhc1JldHVyblJvdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHNjcm9sbCB0byB0b3Agd2hlbiBhIHBhdGggcGFyYW0gY2hhbmdlcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG9uUGF0aFBhcmFtQ2hhbmdlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IHJvdXRlckRpc2FibGVTY3JvbGxUb3AgPSAoY29uZmlnOiBSb3V0ZXJEaXNhYmxlU2Nyb2xsVG9wQ29uZmlnID0ge30pID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oIWNvbmZpZy5hc1JldHVyblJvdXRlID8geyBbRVRfRElTQUJMRV9TQ1JPTExfVE9QXTogdHJ1ZSB9IDogeyBbRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURV06IHRydWUgfSksXG4gICAgLi4uKGNvbmZpZy5vblBhdGhQYXJhbUNoYW5nZSA/IHsgW0VUX0RJU0FCTEVfU0NST0xMX1RPUF9PTl9QQVRIX1BBUkFNX0NIQU5HRV06IHRydWUgfSA6IHt9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBFVF9QUk9QRVJUWV9SRU1PVkVEID0gU3ltYm9sKCdFVF9QUk9QRVJUWV9SRU1PVkVEJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsRW5oYW5jZW1lbnRzQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBzY3JvbGxFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcXVlcnkgcGFyYW1zIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBzY3JvbGwgdG8gdG9wLlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAZXhhbXBsZSBbJ3BhZ2UnXSAvLyB3aWxsIHNjcm9sbCB0byB0b3Agd2hlbiB0aGUgcGFnZSBxdWVyeSBwYXJhbSBjaGFuZ2VzXG4gICAqL1xuICBxdWVyeVBhcmFtVHJpZ2dlckxpc3Q/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIENvbmZpZyBmb3IgZnJhZ21lbnQgc2Nyb2xsaW5nLlxuICAgKi9cbiAgZnJhZ21lbnQ/OiB7XG4gICAgLyoqXG4gICAgICogRW5hYmxlIGZyYWdtZW50IHNjcm9sbGluZyAoc2Nyb2xsIHRvIGVsZW1lbnQgd2l0aCBpZClcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdXNlIHNtb290aCBzY3JvbGxpbmcgb3Igbm90LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgc21vb3RoPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJTdGF0ZSB7XG4gIGRhdGE6IERhdGE7XG4gIHBhdGhQYXJhbXM6IFBhcmFtcztcbiAgcXVlcnlQYXJhbXM6IFBhcmFtcztcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGZyYWdtZW50OiBzdHJpbmcgfCBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUm91dGVyU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaXNTY3JvbGxUb3BPbk5hdmlnYXRpb25FbmFibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSb3V0ZXJTdGF0ZT4odGhpcy5fZ2V0SW5pdGlhbFN0YXRlKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FmdGVySW5pdGlhbGl6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYWZ0ZXJJbml0aWFsaXplJCA9IHRoaXMuX2FmdGVySW5pdGlhbGl6ZSQucGlwZShmaWx0ZXIoKHYpID0+IHYpKTtcblxuICBnZXQgcm91dGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgfVxuXG4gIGdldCByb3V0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGRhdGEkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLmRhdGEpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpLmRhdGE7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucGF0aFBhcmFtcyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLmdldFZhbHVlKCkucGF0aFBhcmFtcztcbiAgfVxuXG4gIGdldCBxdWVyeVBhcmFtcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUucXVlcnlQYXJhbXMpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5UGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5xdWVyeVBhcmFtcztcbiAgfVxuXG4gIGdldCB0aXRsZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUudGl0bGUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS50aXRsZTtcbiAgfVxuXG4gIGdldCBmcmFnbWVudCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuZnJhZ21lbnQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGZyYWdtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5mcmFnbWVudDtcbiAgfVxuXG4gIGdldCBkYXRhQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBxdWVyeVBhcmFtQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXMkLnBpcGUoXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKCh2KSA9PiB0aGlzLl9maW5kQ2hhbmdlcyh2KSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aFBhcmFtQ2hhbmdlcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFBhcmFtcyQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGxhdGVzdEV2ZW50ID0gc2lnbmFsPEV2ZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IHRoaXMubGF0ZXN0RXZlbnQuc2V0KGV2ZW50KSksXG4gICAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLnVybCA9PT0gYi51cmwpLFxuICAgICAgICBtYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB1cmwgfSA9IGV2ZW50O1xuXG4gICAgICAgICAgY29uc3QgdXJsV2l0aG91dFF1ZXJ5UGFyYW1zID0gdXJsLnNwbGl0KCc/JylbMF0gPz8gJyc7XG4gICAgICAgICAgY29uc3Qgd2l0aG91dEZyYWdtZW50ID0gdXJsV2l0aG91dFF1ZXJ5UGFyYW1zLnNwbGl0KCcjJylbMF0gPz8gJyc7XG5cbiAgICAgICAgICByZXR1cm4gd2l0aG91dEZyYWdtZW50O1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2FmdGVySW5pdGlhbGl6ZSQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5fYWZ0ZXJJbml0aWFsaXplJC5uZXh0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuX3JvdXRlJCk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9yb3V0ZSQsIHRoaXMuX2FmdGVySW5pdGlhbGl6ZSRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoWywgYWZ0ZXJJbml0aWFsaXplXSkgPT4ge1xuICAgICAgICAgIGlmICghYWZ0ZXJJbml0aWFsaXplKSByZXR1cm47XG5cbiAgICAgICAgICBsZXQgcm91dGUgPSB0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdDtcblxuICAgICAgICAgIHdoaWxlIChyb3V0ZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkYXRhLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCB0aXRsZSwgZnJhZ21lbnQgfSA9IHJvdXRlO1xuXG4gICAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlID8/IG51bGwsXG4gICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBlbmFibGVTY3JvbGxFbmhhbmNlbWVudHMoY29uZmlnOiBTY3JvbGxFbmhhbmNlbWVudHNDb25maWcgPSB7fSkge1xuICAgIGlmICh0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc3RhdGUkLnBpcGUocGFpcndpc2UoKSksIHRoaXMuX3JvdXRlJC5waXBlKHBhaXJ3aXNlKCkpXSlcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtbcHJldlN0YXRlLCBjdXJyU3RhdGVdLCBbcHJldlJvdXRlLCBjdXJyUm91dGVdXSkgPT4ge1xuICAgICAgICBjb25zdCBzYW1lVXJsTmF2aWdhdGlvbiA9IHByZXZSb3V0ZSA9PT0gY3VyclJvdXRlO1xuICAgICAgICBjb25zdCBkaWRGcmFnbWVudENoYW5nZSA9IHByZXZTdGF0ZS5mcmFnbWVudCAhPT0gY3VyclN0YXRlLmZyYWdtZW50O1xuXG4gICAgICAgIGlmIChzYW1lVXJsTmF2aWdhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGFsbFF1ZXJ5UGFyYW1zID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChPYmplY3Qua2V5cyhwcmV2U3RhdGUucXVlcnlQYXJhbXMpLmNvbmNhdChPYmplY3Qua2V5cyhjdXJyU3RhdGUucXVlcnlQYXJhbXMpKSksXG4gICAgICAgICAgXTtcblxuICAgICAgICAgIGNvbnN0IGNoYW5nZWRRdWVyeVBhcmFtcyA9IGFsbFF1ZXJ5UGFyYW1zLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+IGN1cnJTdGF0ZS5xdWVyeVBhcmFtc1trZXldICE9PSBwcmV2U3RhdGUucXVlcnlQYXJhbXNba2V5XSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFjb25maWcucXVlcnlQYXJhbVRyaWdnZXJMaXN0Py5sZW5ndGggJiYgIWRpZEZyYWdtZW50Q2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2FzZVF1ZXJ5UGFyYW1zID0gY2hhbmdlZFF1ZXJ5UGFyYW1zLnNvbWUoKGtleSkgPT4gY29uZmlnLnF1ZXJ5UGFyYW1UcmlnZ2VyTGlzdD8uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgICAgY29uc3QgY2FzZUZyYWdtZW50ID0gZGlkRnJhZ21lbnRDaGFuZ2UgJiYgY29uZmlnLmZyYWdtZW50Py5lbmFibGVkO1xuXG4gICAgICAgICAgaWYgKGNhc2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgKGNvbmZpZy5zY3JvbGxFbGVtZW50ID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNhc2VGcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY3VyclN0YXRlLmZyYWdtZW50ID8/ICcnKTtcblxuICAgICAgICAgICAgaWYgKGZyYWdtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICBmcmFnbWVudEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogY29uZmlnLmZyYWdtZW50Py5zbW9vdGggPyAnc21vb3RoJyA6ICdhdXRvJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmlhUmV0dXJuUm91dGUgPVxuICAgICAgICAgICAgY3VyclN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURV0gJiYgcHJldlN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QXTtcbiAgICAgICAgICBjb25zdCBleHBsaWNpdGx5ID0gY3VyclN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QXTtcbiAgICAgICAgICBjb25zdCBwYXRoUGFyYW1zQ2hhbmdlID0gY3VyclN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFXTtcblxuICAgICAgICAgIGlmICh2aWFSZXR1cm5Sb3V0ZSB8fCBleHBsaWNpdGx5IHx8IHBhdGhQYXJhbXNDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbCA9IGNvbmZpZy5zY3JvbGxFbGVtZW50ID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdFF1ZXJ5UGFyYW08VCA9IHN0cmluZyB8IHVuZGVmaW5lZD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5xdWVyeVBhcmFtc1trZXldKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdFBhdGhQYXJhbTxUID0gc3RyaW5nIHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLnBhdGhQYXJhbXNba2V5XSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG4gIH1cblxuICBzZWxlY3REYXRhPFQgPSB1bmtub3duPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLmRhdGFba2V5XSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kQ2hhbmdlczxUIGV4dGVuZHMgW1JlY29yZDxzdHJpbmcsIHVua25vd24+LCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0sIEogZXh0ZW5kcyBQYXJ0aWFsPFRbbnVtYmVyXT4+KFtcbiAgICBwcmV2aW91cyxcbiAgICBjdXJyZW50LFxuICBdOiBUKSB7XG4gICAgY29uc3QgY2hhbmdlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGNvbnN0IGFsbEtleXMgPSBuZXcgU2V0PGtleW9mIHR5cGVvZiBwcmV2aW91cyAmIGtleW9mIHR5cGVvZiBjdXJyZW50PihbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwcmV2aW91cyksXG4gICAgICAuLi5PYmplY3Qua2V5cyhjdXJyZW50KSxcbiAgICBdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleXMpIHtcbiAgICAgIGlmICghZXF1YWwocHJldmlvdXNba2V5XSwgY3VycmVudFtrZXldKSkge1xuICAgICAgICBjb25zdCB2YWwgPSBjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCA/IEVUX1BST1BFUlRZX1JFTU9WRUQgOiBjdXJyZW50W2tleV07XG5cbiAgICAgICAgY2hhbmdlc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VzIGFzIEo7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbml0aWFsU3RhdGUoKTogUm91dGVyU3RhdGUge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBjb25zdCBwYXRoUGFyYW1zID0ge307XG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IHRpdGxlID0gbnVsbDtcbiAgICBsZXQgZnJhZ21lbnQgPSBudWxsO1xuXG4gICAgY29uc3QgY3VycmVudFF1ZXJ5UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQgPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuICAgIGlmIChjdXJyZW50UXVlcnlQYXJhbXMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoY3VycmVudFF1ZXJ5UGFyYW1zKTtcblxuICAgICAgcGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRGcmFnbWVudCkge1xuICAgICAgZnJhZ21lbnQgPSBjdXJyZW50RnJhZ21lbnQuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBwYXRoUGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICB0aXRsZSxcbiAgICAgIGZyYWdtZW50LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==","import { __decorate, __metadata } from \"tslib\";\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Subject, combineLatest, debounceTime, finalize, map, shareReplay, takeUntil, tap, } from 'rxjs';\nimport { DEFAULT_VIEWPORT_CONFIG, VIEWPORT_CONFIG } from '../constants';\nimport { Memo } from '../decorators/memo';\nimport { equal } from '../utils';\nimport { ResizeObserverService } from './resize-observer.service';\nimport * as i0 from \"@angular/core\";\nexport class ViewportService {\n get isXs$() {\n return this._isXs$.asObservable();\n }\n get isXs() {\n return this._isXs$.value;\n }\n get isSm$() {\n return this._isSm$.asObservable();\n }\n get isSm() {\n return this._isSm$.value;\n }\n get isMd$() {\n return this._isMd$.asObservable();\n }\n get isMd() {\n return this._isMd$.value;\n }\n get isLg$() {\n return this._isLg$.asObservable();\n }\n get isLg() {\n return this._isLg$.value;\n }\n get isXl$() {\n return this._isXl$.asObservable();\n }\n get isXl() {\n return this._isXl$.value;\n }\n get is2Xl$() {\n return this._is2Xl$.asObservable();\n }\n get is2Xl() {\n return this._is2Xl$.value;\n }\n get viewportSize$() {\n return this._viewportSize$.asObservable();\n }\n get viewportSize() {\n return this._viewportSize$.value;\n }\n get scrollbarSize$() {\n return this._scrollbarSize$.asObservable();\n }\n get scrollbarSize() {\n return this._scrollbarSize$.value;\n }\n get currentViewport() {\n return this.getCurrentViewport([this.isXs, this.isSm, this.isMd, this.isLg, this.isXl, this.is2Xl]);\n }\n constructor() {\n this._resizeObserverService = inject(ResizeObserverService);\n this._viewportConfig = inject(VIEWPORT_CONFIG, { optional: true }) || DEFAULT_VIEWPORT_CONFIG;\n this._breakpointObserver = inject(BreakpointObserver);\n this._viewportMonitorStop$ = new Subject();\n this._isViewportMonitorEnabled = false;\n this._isXs$ = new BehaviorSubject(this.isMatched({ max: 'xs' }));\n this._isSm$ = new BehaviorSubject(this.isMatched({ min: 'sm', max: 'sm' }));\n this._isMd$ = new BehaviorSubject(this.isMatched({ min: 'md', max: 'md' }));\n this._isLg$ = new BehaviorSubject(this.isMatched({ min: 'lg', max: 'lg' }));\n this._isXl$ = new BehaviorSubject(this.isMatched({ min: 'xl', max: 'xl' }));\n this._is2Xl$ = new BehaviorSubject(this.isMatched({ min: '2xl' }));\n this._viewportSize$ = new BehaviorSubject(null);\n this._scrollbarSize$ = new BehaviorSubject(null);\n this.currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(map((val) => this.getCurrentViewport(val)), debounceTime(0), shareReplay({ bufferSize: 1, refCount: true }));\n this._observeDefaultBreakpoints();\n }\n observe(options) {\n const mediaQuery = this._buildMediaQuery(options);\n return this._breakpointObserver.observe(mediaQuery).pipe(map((x) => x.matches), shareReplay({ bufferSize: 1, refCount: true }));\n }\n isMatched(options) {\n const mediaQuery = this._buildMediaQuery(options);\n return this._breakpointObserver.isMatched(mediaQuery);\n }\n /**\n * Applies size CSS variables to the documentElement in pixels.\n * - `--et-vw`: viewport width excluding scrollbar width\n * - `--et-vh`: viewport height excluding scrollbar height\n * - `--et-sw`: scrollbar width\n * - `--et-sh`: scrollbar height\n */\n monitorViewport() {\n if (this._isViewportMonitorEnabled)\n return;\n this._isViewportMonitorEnabled = true;\n this._resizeObserverService\n .observe(document.documentElement)\n .pipe(tap((e) => {\n const entry = e[0];\n if (!entry)\n return;\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n const obj = { width, height };\n if (equal(obj, this._viewportSize$.value))\n return;\n document.documentElement.style.setProperty('--et-vw', `${obj.width}px`);\n document.documentElement.style.setProperty('--et-vh', `${obj.height}px`);\n this._viewportSize$.next(obj);\n }), finalize(() => {\n document.documentElement.style.removeProperty('--et-vw');\n document.documentElement.style.removeProperty('--et-vh');\n this._viewportSize$.next(null);\n }), takeUntil(this._viewportMonitorStop$))\n .subscribe();\n const scrollbarRuler = document.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 document.body.appendChild(scrollbarRuler);\n this._resizeObserverService\n .observe(scrollbarRuler)\n .pipe(tap((e) => {\n const entry = e[0];\n if (!entry)\n return;\n const size = entry.contentRect.width;\n const obj = { width: 100 - size, height: 100 - size };\n if (equal(obj, this._scrollbarSize$.value))\n return;\n document.documentElement.style.setProperty('--et-sw', `${obj.width}px`);\n document.documentElement.style.setProperty('--et-sh', `${obj.height}px`);\n this._scrollbarSize$.next(obj);\n }), finalize(() => {\n document.body.removeChild(scrollbarRuler);\n document.documentElement.style.removeProperty('--et-vw');\n document.documentElement.style.removeProperty('--et-vh');\n this._scrollbarSize$.next(null);\n }), takeUntil(this._viewportMonitorStop$))\n .subscribe();\n }\n unmonitorViewport() {\n this._viewportMonitorStop$.next();\n this._isViewportMonitorEnabled = false;\n }\n getBreakpointSize(type, option) {\n const index = option === 'min' ? 0 : 1;\n const size = this._viewportConfig.breakpoints[type][index];\n if (size === Infinity || size === 0) {\n return size;\n }\n if (option === 'min') {\n return size;\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 _observeDefaultBreakpoints() {\n this.observe({ max: 'xs' }).subscribe(this._isXs$);\n this.observe({ min: 'sm', max: 'sm' }).subscribe(this._isSm$);\n this.observe({ min: 'md', max: 'md' }).subscribe(this._isMd$);\n this.observe({ min: 'lg', max: 'lg' }).subscribe(this._isLg$);\n this.observe({ min: 'xl', max: 'xl' }).subscribe(this._isXl$);\n this.observe({ min: '2xl' }).subscribe(this._is2Xl$);\n }\n _buildMediaQuery(options) {\n if (!options.min && !options.max) {\n throw new Error('At least one of min or max must be defined');\n }\n const mediaQueryParts = [];\n if (options.min) {\n if (typeof options.min === 'number') {\n mediaQueryParts.push(`(min-width: ${options.min}px)`);\n }\n else {\n mediaQueryParts.push(`(min-width: ${this.getBreakpointSize(options.min, 'min')}px)`);\n }\n }\n if (options.min && options.max) {\n mediaQueryParts.push('and');\n }\n if (options.max) {\n if (typeof options.max === 'number') {\n mediaQueryParts.push(`(max-width: ${options.max}px)`);\n }\n else {\n mediaQueryParts.push(`(max-width: ${this.getBreakpointSize(options.max, 'max')}px)`);\n }\n }\n return mediaQueryParts.join(' ');\n }\n getCurrentViewport([isXs, isSm, isMd, isLg, isXl, is2Xl]) {\n if (isXs) {\n return 'xs';\n }\n else if (isSm) {\n return 'sm';\n }\n else if (isMd) {\n return 'md';\n }\n else if (isLg) {\n return 'lg';\n }\n else if (isXl) {\n return 'xl';\n }\n else if (is2Xl) {\n return '2xl';\n }\n return 'xs';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ViewportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ViewportService, providedIn: 'root' }); }\n}\n__decorate([\n Memo(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [String, String]),\n __metadata(\"design:returntype\", void 0)\n], ViewportService.prototype, \"getBreakpointSize\", null);\n__decorate([\n Memo({\n resolver: (v) => {\n return `${v.min ?? ''}-${v.max ?? ''}`;\n },\n }),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ViewportService.prototype, \"_buildMediaQuery\", null);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ViewportService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [], propDecorators: { getBreakpointSize: [], _buildMediaQuery: [] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFDTCxlQUFlLEVBRWYsT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osUUFBUSxFQUNSLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBV2xFLE1BQU0sT0FBTyxlQUFlO0lBa0IxQixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFD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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQU85RDtRQUNDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQTNSVSxlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOztBQXdNbEI7SUFEQyxJQUFJLEVBQUU7Ozs7d0RBaUJOO0FBZ0JPO0lBTFAsSUFBSSxDQUFDO1FBQ0osUUFBUSxFQUFFLENBQUMsQ0FBeUIsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLENBQUM7S0FDRixDQUFDOzs7O3VEQTZCRDsyRkFsUVUsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7d0RBdU1DLGlCQUFpQixNQWdDVCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBERUZBVUxUX1ZJRVdQT1JUX0NPTkZJRywgVklFV1BPUlRfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1lbW8gfSBmcm9tICcuLi9kZWNvcmF0b3JzL21lbW8nO1xuaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXNpemUtb2JzZXJ2ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCdWlsZE1lZGlhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi92aWV3cG9ydC50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmlld3BvcnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KFJlc2l6ZU9ic2VydmVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdwb3J0Q29uZmlnID0gaW5qZWN0KFZJRVdQT1JUX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KSB8fCBERUZBVUxUX1ZJRVdQT1JUX0NPTkZJRztcbiAgcHJpdmF0ZSByZWFkb25seSBfYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld3BvcnRNb25pdG9yU3RvcCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pc1ZpZXdwb3J0TW9uaXRvckVuYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pc1hzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtYXg6ICd4cycgfSkpO1xuICBwcml2YXRlIF9pc1NtJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICdzbScsIG1heDogJ3NtJyB9KSk7XG4gIHByaXZhdGUgX2lzTWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmlzTWF0Y2hlZCh7IG1pbjogJ21kJywgbWF4OiAnbWQnIH0pKTtcbiAgcHJpdmF0ZSBfaXNMZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuaXNNYXRjaGVkKHsgbWluOiAnbGcnLCBtYXg6ICdsZycgfSkpO1xuICBwcml2YXRlIF9pc1hsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICd4bCcsIG1heDogJ3hsJyB9KSk7XG4gIHByaXZhdGUgX2lzMlhsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICcyeGwnIH0pKTtcblxuICBwcml2YXRlIF92aWV3cG9ydFNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaXplIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgX3Njcm9sbGJhclNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaXplIHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGlzWHMkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1hzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc1hzKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1hzJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1NtJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTbSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNTbSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTbSQudmFsdWU7XG4gIH1cblxuICBnZXQgaXNNZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzTWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWQkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzTGckKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0xnJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc0xnKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0xnJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1hsJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNYbCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNYbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNYbCQudmFsdWU7XG4gIH1cblxuICBnZXQgaXMyWGwkKCkge1xuICAgIHJldHVybiB0aGlzLl9pczJYbCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXMyWGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzMlhsJC52YWx1ZTtcbiAgfVxuXG4gIGdldCB2aWV3cG9ydFNpemUkKCkge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydFNpemUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHZpZXdwb3J0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBzY3JvbGxiYXJTaXplJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU2l6ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc2Nyb2xsYmFyU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU2l6ZSQudmFsdWU7XG4gIH1cblxuICBjdXJyZW50Vmlld3BvcnQkID0gY29tYmluZUxhdGVzdChbdGhpcy5pc1hzJCwgdGhpcy5pc1NtJCwgdGhpcy5pc01kJCwgdGhpcy5pc0xnJCwgdGhpcy5pc1hsJCwgdGhpcy5pczJYbCRdKS5waXBlKFxuICAgIG1hcCgodmFsKSA9PiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCh2YWwpKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBnZXQgY3VycmVudFZpZXdwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydChbdGhpcy5pc1hzLCB0aGlzLmlzU20sIHRoaXMuaXNNZCwgdGhpcy5pc0xnLCB0aGlzLmlzWGwsIHRoaXMuaXMyWGxdKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX29ic2VydmVEZWZhdWx0QnJlYWtwb2ludHMoKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fYnVpbGRNZWRpYVF1ZXJ5KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKG1lZGlhUXVlcnkpLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHgubWF0Y2hlcyksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBpc01hdGNoZWQob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pOiBib29sZWFuIHtcbiAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fYnVpbGRNZWRpYVF1ZXJ5KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQobWVkaWFRdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBzaXplIENTUyB2YXJpYWJsZXMgdG8gdGhlIGRvY3VtZW50RWxlbWVudCBpbiBwaXhlbHMuXG4gICAqIC0gYC0tZXQtdndgOiB2aWV3cG9ydCB3aWR0aCBleGNsdWRpbmcgc2Nyb2xsYmFyIHdpZHRoXG4gICAqIC0gYC0tZXQtdmhgOiB2aWV3cG9ydCBoZWlnaHQgZXhjbHVkaW5nIHNjcm9sbGJhciBoZWlnaHRcbiAgICogLSBgLS1ldC1zd2A6IHNjcm9sbGJhciB3aWR0aFxuICAgKiAtIGAtLWV0LXNoYDogc2Nyb2xsYmFyIGhlaWdodFxuICAgKi9cbiAgbW9uaXRvclZpZXdwb3J0KCkge1xuICAgIGlmICh0aGlzLl9pc1ZpZXdwb3J0TW9uaXRvckVuYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuX2lzVmlld3BvcnRNb25pdG9yRW5hYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlclNlcnZpY2VcbiAgICAgIC5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGVudHJ5LmNvbnRlbnRSZWN0LndpZHRoO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodDtcblxuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgd2lkdGgsIGhlaWdodCB9O1xuXG4gICAgICAgICAgaWYgKGVxdWFsKG9iaiwgdGhpcy5fdmlld3BvcnRTaXplJC52YWx1ZSkpIHJldHVybjtcblxuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ldC12dycsIGAke29iai53aWR0aH1weGApO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ldC12aCcsIGAke29iai5oZWlnaHR9cHhgKTtcblxuICAgICAgICAgIHRoaXMuX3ZpZXdwb3J0U2l6ZSQubmV4dChvYmopO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12dycpO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12aCcpO1xuXG4gICAgICAgICAgdGhpcy5fdmlld3BvcnRTaXplJC5uZXh0KG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3ZpZXdwb3J0TW9uaXRvclN0b3AkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IHNjcm9sbGJhclJ1bGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2Nyb2xsYmFyUnVsZXIuc3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIHNjcm9sbGJhclJ1bGVyLnN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgc2Nyb2xsYmFyUnVsZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBzY3JvbGxiYXJSdWxlci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgc2Nyb2xsYmFyUnVsZXIuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2Nyb2xsYmFyUnVsZXIpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlXG4gICAgICAub2JzZXJ2ZShzY3JvbGxiYXJSdWxlcilcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBzaXplID0gZW50cnkuY29udGVudFJlY3Qud2lkdGg7XG5cbiAgICAgICAgICBjb25zdCBvYmogPSB7IHdpZHRoOiAxMDAgLSBzaXplLCBoZWlnaHQ6IDEwMCAtIHNpemUgfTtcblxuICAgICAgICAgIGlmIChlcXVhbChvYmosIHRoaXMuX3Njcm9sbGJhclNpemUkLnZhbHVlKSkgcmV0dXJuO1xuXG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWV0LXN3JywgYCR7b2JqLndpZHRofXB4YCk7XG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWV0LXNoJywgYCR7b2JqLmhlaWdodH1weGApO1xuXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsYmFyU2l6ZSQubmV4dChvYmopO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2Nyb2xsYmFyUnVsZXIpO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12dycpO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12aCcpO1xuXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsYmFyU2l6ZSQubmV4dChudWxsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl92aWV3cG9ydE1vbml0b3JTdG9wJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB1bm1vbml0b3JWaWV3cG9ydCgpIHtcbiAgICB0aGlzLl92aWV3cG9ydE1vbml0b3JTdG9wJC5uZXh0KCk7XG4gICAgdGhpcy5faXNWaWV3cG9ydE1vbml0b3JFbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICBATWVtbygpXG4gIGdldEJyZWFrcG9pbnRTaXplKHR5cGU6IEJyZWFrcG9pbnQsIG9wdGlvbjogJ21pbicgfCAnbWF4Jykge1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9uID09PSAnbWluJyA/IDAgOiAxO1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLl92aWV3cG9ydENvbmZpZy5icmVha3BvaW50c1t0eXBlXVtpbmRleF07XG5cbiAgICBpZiAoc2l6ZSA9PT0gSW5maW5pdHkgfHwgc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHNpemU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbiA9PT0gJ21pbicpIHtcbiAgICAgIHJldHVybiBzaXplO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byBzY2FsaW5nLCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHZpZXdwb3J0IG1heSBiZSBhIGRlY2ltYWwgbnVtYmVyLlxuICAgIC8vIEVnLiBvbiBXaW5kb3dzIDExIHdpdGggMTUwJSBzY2FsaW5nLCB0aGUgdmlld3BvcnQgc2l6ZSBtYXkgYmUgMTUzNS4zM3B4XG4gICAgLy8gYW5kIHRodXMgbm90IG1hdGNoaW5nIGFueSBvZiB0aGUgZGVmYXVsdCBicmVha3BvaW50cy5cbiAgICByZXR1cm4gc2l6ZSArIDAuOTtcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVEZWZhdWx0QnJlYWtwb2ludHMoKSB7XG4gICAgdGhpcy5vYnNlcnZlKHsgbWF4OiAneHMnIH0pLnN1YnNjcmliZSh0aGlzLl9pc1hzJCk7XG4gICAgdGhpcy5vYnNlcnZlKHsgbWluOiAnc20nLCBtYXg6ICdzbScgfSkuc3Vic2NyaWJlKHRoaXMuX2lzU20kKTtcbiAgICB0aGlzLm9ic2VydmUoeyBtaW46ICdtZCcsIG1heDogJ21kJyB9KS5zdWJzY3JpYmUodGhpcy5faXNNZCQpO1xuICAgIHRoaXMub2JzZXJ2ZSh7IG1pbjogJ2xnJywgbWF4OiAnbGcnIH0pLnN1YnNjcmliZSh0aGlzLl9pc0xnJCk7XG4gICAgdGhpcy5vYnNlcnZlKHsgbWluOiAneGwnLCBtYXg6ICd4bCcgfSkuc3Vic2NyaWJlKHRoaXMuX2lzWGwkKTtcbiAgICB0aGlzLm9ic2VydmUoeyBtaW46ICcyeGwnIH0pLnN1YnNjcmliZSh0aGlzLl9pczJYbCQpO1xuICB9XG5cbiAgQE1lbW8oe1xuICAgIHJlc29sdmVyOiAodjogQnVpbGRNZWRpYVF1ZXJ5T3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIGAke3YubWluID8/ICcnfS0ke3YubWF4ID8/ICcnfWA7XG4gICAgfSxcbiAgfSlcbiAgcHJpdmF0ZSBfYnVpbGRNZWRpYVF1ZXJ5KG9wdGlvbnM6IEJ1aWxkTWVkaWFRdWVyeU9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMubWluICYmICFvcHRpb25zLm1heCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgb2YgbWluIG9yIG1heCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZWRpYVF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAob3B0aW9ucy5taW4pIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW4gPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1lZGlhUXVlcnlQYXJ0cy5wdXNoKGAobWluLXdpZHRoOiAke29wdGlvbnMubWlufXB4KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVkaWFRdWVyeVBhcnRzLnB1c2goYChtaW4td2lkdGg6ICR7dGhpcy5nZXRCcmVha3BvaW50U2l6ZShvcHRpb25zLm1pbiwgJ21pbicpfXB4KWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1pbiAmJiBvcHRpb25zLm1heCkge1xuICAgICAgbWVkaWFRdWVyeVBhcnRzLnB1c2goJ2FuZCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1heCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbWVkaWFRdWVyeVBhcnRzLnB1c2goYChtYXgtd2lkdGg6ICR7b3B0aW9ucy5tYXh9cHgpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZWRpYVF1ZXJ5UGFydHMucHVzaChgKG1heC13aWR0aDogJHt0aGlzLmdldEJyZWFrcG9pbnRTaXplKG9wdGlvbnMubWF4LCAnbWF4Jyl9cHgpYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lZGlhUXVlcnlQYXJ0cy5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRWaWV3cG9ydChbaXNYcywgaXNTbSwgaXNNZCwgaXNMZywgaXNYbCwgaXMyWGxdOiBbXG4gICAgYm9vbGVhbixcbiAgICBib29sZWFuLFxuICAgIGJvb2xlYW4sXG4gICAgYm9vbGVhbixcbiAgICBib29sZWFuLFxuICAgIGJvb2xlYW4sXG4gIF0pOiBCcmVha3BvaW50IHtcbiAgICBpZiAoaXNYcykge1xuICAgICAgcmV0dXJuICd4cyc7XG4gICAgfSBlbHNlIGlmIChpc1NtKSB7XG4gICAgICByZXR1cm4gJ3NtJztcbiAgICB9IGVsc2UgaWYgKGlzTWQpIHtcbiAgICAgIHJldHVybiAnbWQnO1xuICAgIH0gZWxzZSBpZiAoaXNMZykge1xuICAgICAgcmV0dXJuICdsZyc7XG4gICAgfSBlbHNlIGlmIChpc1hsKSB7XG4gICAgICByZXR1cm4gJ3hsJztcbiAgICB9IGVsc2UgaWYgKGlzMlhsKSB7XG4gICAgICByZXR1cm4gJzJ4bCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICd4cyc7XG4gIH1cbn1cbiJdfQ==","import { map, Observable, startWith } from 'rxjs';\nexport const createMediaQueryObservable = (query) => {\n const mq = window.matchMedia(query);\n const observable = new Observable((observer) => {\n const eventHandler = (event) => {\n observer.next(event);\n };\n mq.addEventListener('change', eventHandler);\n return () => {\n mq.removeEventListener('change', eventHandler);\n };\n }).pipe(startWith(mq), map(({ matches }) => ({\n matches,\n query,\n })));\n return observable;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtcXVlcnktb2JzZXJ2YWJsZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvbWVkaWEtcXVlcnktb2JzZXJ2YWJsZS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFZLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQzFELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUF1QyxFQUFFLEVBQUU7UUFDNUUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUEwQixFQUFFLEVBQUU7WUFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7UUFFRixFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ0wsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsT0FBTztRQUNQLEtBQUs7S0FDTixDQUFDLENBQUMsQ0FDSixDQUFDO0lBRUYsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBPYnNlcnZlciwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNZWRpYVF1ZXJ5T2JzZXJ2YWJsZSA9IChxdWVyeTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1xID0gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpO1xuXG4gIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPE1lZGlhUXVlcnlMaXN0RXZlbnQ+KSA9PiB7XG4gICAgY29uc3QgZXZlbnRIYW5kbGVyID0gKGV2ZW50OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB7XG4gICAgICBvYnNlcnZlci5uZXh0KGV2ZW50KTtcbiAgICB9O1xuXG4gICAgbXEuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZXZlbnRIYW5kbGVyKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtcS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudEhhbmRsZXIpO1xuICAgIH07XG4gIH0pLnBpcGUoXG4gICAgc3RhcnRXaXRoKG1xKSxcbiAgICBtYXAoKHsgbWF0Y2hlcyB9KSA9PiAoe1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIHF1ZXJ5LFxuICAgIH0pKSxcbiAgKTtcblxuICByZXR1cm4gb2JzZXJ2YWJsZTtcbn07XG4iXX0=","import { clamp } from './clamp.util';\nexport const elementCanScroll = (element, direction) => {\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;\n if (direction === 'x') {\n return scrollWidth > clientWidth;\n }\n else if (direction === 'y') {\n return scrollHeight > clientHeight;\n }\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n};\nexport const isElementVisible = (options) => {\n let { container } = options;\n const { element } = options;\n if (!element || container === null) {\n return null;\n }\n container ||= document.documentElement;\n const canScroll = elementCanScroll(container);\n if (!canScroll) {\n return {\n inline: true,\n block: true,\n blockIntersection: 1,\n inlineIntersection: 1,\n intersectionRatio: 1,\n isIntersecting: true,\n element,\n };\n }\n const elementRect = options.elementRect || element.getBoundingClientRect();\n const containerRect = options.containerRect || container.getBoundingClientRect();\n const elementInlineStart = elementRect.left;\n const elementBlockStart = elementRect.top;\n const containerInlineStart = containerRect.left;\n const containerBlockStart = containerRect.top;\n const elWith = elementRect.width || 1;\n const elHeight = elementRect.height || 1;\n const elementInlineEnd = elementInlineStart + elWith;\n const elementBlockEnd = elementBlockStart + elHeight;\n const containerInlineEnd = containerInlineStart + containerRect.width;\n const containerBlockEnd = containerBlockStart + containerRect.height;\n const isElementInlineVisible = elementInlineStart >= containerInlineStart && elementInlineEnd <= containerInlineEnd;\n const isElementBlockVisible = elementBlockStart >= containerBlockStart && elementBlockEnd <= containerBlockEnd;\n const inlineIntersection = Math.min(elementInlineEnd, containerInlineEnd) - Math.max(elementInlineStart, containerInlineStart);\n const blockIntersection = Math.min(elementBlockEnd, containerBlockEnd) - Math.max(elementBlockStart, containerBlockStart);\n const inlineIntersectionPercentage = clamp(inlineIntersection / elWith, 0, 1);\n const blockIntersectionPercentage = clamp(blockIntersection / elHeight, 0, 1);\n return {\n inline: isElementInlineVisible,\n block: isElementBlockVisible,\n inlineIntersection: inlineIntersectionPercentage,\n blockIntersection: blockIntersectionPercentage,\n isIntersecting: isElementInlineVisible && isElementBlockVisible,\n element,\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};\nexport const getElementScrollCoordinates = (options) => {\n let { container } = options;\n const { element, direction, behavior = 'smooth', origin = 'nearest', scrollBlockMargin = 0, scrollInlineMargin = 0, } = options;\n if (!element || container === null) {\n return {\n behavior,\n left: undefined,\n top: undefined,\n };\n }\n container ||= document.documentElement;\n const canScroll = elementCanScroll(container);\n if (!canScroll) {\n return {\n behavior,\n left: undefined,\n top: undefined,\n };\n }\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const { scrollLeft, scrollTop } = container;\n const { width: elementWidth, height: elementHeight, left: elementLeft, top: elementTop } = elementRect;\n const { width: containerWidth, height: containerHeight, left: containerLeft, top: containerTop } = containerRect;\n const shouldScrollLeft = direction === 'inline' || direction === 'both' || !direction;\n const shouldScrollTop = direction === 'block' || direction === 'both' || !direction;\n let scrollLeftTo = scrollLeft;\n let scrollTopTo = scrollTop;\n const scrollToElementStart = () => {\n const relativeTop = elementTop - containerTop;\n const relativeLeft = elementLeft - containerLeft;\n const amountToScrollTop = relativeTop;\n const amountToScrollLeft = relativeLeft;\n const scrollTopPosition = scrollTop + amountToScrollTop;\n const scrollLeftPosition = scrollLeft + amountToScrollLeft;\n scrollLeftTo = scrollLeftPosition - scrollInlineMargin;\n scrollTopTo = scrollTopPosition - scrollBlockMargin;\n };\n const scrollToElementEnd = () => {\n const relativeTop = elementTop - containerTop;\n const relativeLeft = elementLeft - containerLeft;\n const amountToScrollTop = relativeTop - containerHeight + elementHeight;\n const amountToScrollLeft = relativeLeft - containerWidth + elementWidth;\n const scrollTopPosition = scrollTop + amountToScrollTop;\n const scrollLeftPosition = scrollLeft + amountToScrollLeft;\n scrollLeftTo = scrollLeftPosition + scrollInlineMargin;\n scrollTopTo = scrollTopPosition + scrollBlockMargin;\n };\n const scrollToElementCenter = () => {\n const relativeTop = elementTop - containerTop;\n const relativeLeft = elementLeft - containerLeft;\n const amountToScrollTop = relativeTop - containerHeight / 2 + elementHeight / 2;\n const amountToScrollLeft = relativeLeft - containerWidth / 2 + elementWidth / 2;\n const scrollTopPosition = scrollTop + amountToScrollTop;\n const scrollLeftPosition = scrollLeft + amountToScrollLeft;\n scrollLeftTo = scrollLeftPosition;\n scrollTopTo = scrollTopPosition;\n };\n const scrollToElementNearest = () => {\n const isAbove = elementRect.bottom < containerRect.top;\n const isPartialAbove = elementRect.top < containerRect.top && elementRect.bottom > containerRect.top;\n const isBelow = elementRect.top > containerRect.bottom;\n const isPartialBelow = elementRect.top < containerRect.bottom && elementRect.bottom > containerRect.bottom;\n const isLeft = elementRect.right < containerRect.left;\n const isPartialLeft = elementRect.left < containerRect.left && elementRect.right > containerRect.left;\n const isRight = elementRect.left > containerRect.right;\n const isPartialRight = elementRect.left < containerRect.right && elementRect.right > containerRect.right;\n if (isAbove || isPartialAbove || isLeft || isPartialLeft) {\n scrollToElementStart();\n }\n else if (isBelow || isPartialBelow || isRight || isPartialRight) {\n scrollToElementEnd();\n }\n };\n switch (origin) {\n case 'start':\n scrollToElementStart();\n break;\n case 'end':\n scrollToElementEnd();\n break;\n case 'center':\n scrollToElementCenter();\n break;\n case 'nearest':\n scrollToElementNearest();\n break;\n }\n return {\n behavior,\n left: shouldScrollLeft ? scrollLeftTo : undefined,\n top: shouldScrollTop ? scrollTopTo : undefined,\n };\n};\nexport const scrollToElement = (options) => {\n options.container?.scrollTo(getElementScrollCoordinates(options));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsU0FBcUIsRUFBRSxFQUFFO0lBQzlFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekUsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM3QixPQUFPLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sWUFBWSxHQUFHLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQWdFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWdDLEVBQW1DLEVBQUU7SUFDcEcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsS0FBSyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxJQUFJO1lBQ1gsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsY0FBYyxFQUFFLElBQUk7WUFDcEIsT0FBTztTQUNSLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMzRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRWpGLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztJQUM1QyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFFMUMsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQ2hELE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztJQUU5QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUV6QyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFFckQsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUVyRSxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixJQUFJLG9CQUFvQixJQUFJLGdCQUFnQixJQUFJLGtCQUFrQixDQUFDO0lBQ3BILE1BQU0scUJBQXFCLEdBQUcsaUJBQWlCLElBQUksbUJBQW1CLElBQUksZUFBZSxJQUFJLGlCQUFpQixDQUFDO0lBRS9HLE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdEcsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFbEcsTUFBTSw0QkFBNEIsR0FBRyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLDJCQUEyQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlFLE9BQU87UUFDTCxNQUFNLEVBQUUsc0JBQXNCO1FBQzlCLEtBQUssRUFBRSxxQkFBcUI7UUFDNUIsa0JBQWtCLEVBQUUsNEJBQTRCO1FBQ2hELGlCQUFpQixFQUFFLDJCQUEyQjtRQUM5QyxjQUFjLEVBQUUsc0JBQXNCLElBQUkscUJBQXFCO1FBQy9ELE9BQU87UUFFUCw2R0FBNkc7UUFDN0csaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLDJCQUEyQixDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztLQUMvRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxPQUErQixFQUFtQixFQUFFO0lBQzlGLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDNUIsTUFBTSxFQUNKLE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxHQUFHLFFBQVEsRUFDbkIsTUFBTSxHQUFHLFNBQVMsRUFDbEIsaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixrQkFBa0IsR0FBRyxDQUFDLEdBQ3ZCLEdBQUcsT0FBTyxDQUFDO0lBRVosSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTztZQUNMLFFBQVE7WUFDUixJQUFJLEVBQUUsU0FBUztZQUNmLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLEtBQUssUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUV2QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsUUFBUTtZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsR0FBRyxFQUFFLFNBQVM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRXhELE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQzVDLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDO0lBQ3ZHLE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBRWpILE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3RGLE1BQU0sZUFBZSxHQUFHLFNBQVMsS0FBSyxPQUFPLElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUVwRixJQUFJLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDOUIsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBRTVCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLGFBQWEsQ0FBQztRQUVqRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztRQUN0QyxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQztRQUV4QyxNQUFNLGlCQUFpQixHQUFHLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztRQUN4RCxNQUFNLGtCQUFrQixHQUFHLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztRQUUzRCxZQUFZLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDdkQsV0FBVyxHQUFHLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQ3RELENBQUMsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQzlCLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLGFBQWEsQ0FBQztRQUVqRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxlQUFlLEdBQUcsYUFBYSxDQUFDO1FBQ3hFLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxHQUFHLGNBQWMsR0FBRyxZQUFZLENBQUM7UUFFeEUsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLEdBQUcsa0JBQWtCLENBQUM7UUFFM0QsWUFBWSxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQ3ZELFdBQVcsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztJQUN0RCxDQUFDLENBQUM7SUFFRixNQUFNLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtRQUNqQyxNQUFNLFdBQVcsR0FBRyxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxhQUFhLENBQUM7UUFFakQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLEdBQUcsZUFBZSxHQUFHLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVoRixNQUFNLGlCQUFpQixHQUFHLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztRQUN4RCxNQUFNLGtCQUFrQixHQUFHLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztRQUUzRCxZQUFZLEdBQUcsa0JBQWtCLENBQUM7UUFDbEMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN2RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBRXJHLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUN2RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBRTNHLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztRQUN0RCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBRXRHLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUN2RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBRXpHLElBQUksT0FBTyxJQUFJLGNBQWMsSUFBSSxNQUFNLElBQUksYUFBYSxFQUFFLENBQUM7WUFDekQsb0JBQW9CLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxPQUFPLElBQUksY0FBYyxJQUFJLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNsRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxPQUFPO1lBQ1Ysb0JBQW9CLEVBQUUsQ0FBQztZQUN2QixNQUFNO1FBQ1IsS0FBSyxLQUFLO1lBQ1Isa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gscUJBQXFCLEVBQUUsQ0FBQztZQUN4QixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixNQUFNO0lBQ1YsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRO1FBQ1IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDakQsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQy9DLENBQUM7QUFDSixDQUFDLENBQUM7QUE2Q0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBK0IsRUFBRSxFQUFFO0lBQ2pFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAgfSBmcm9tICcuL2NsYW1wLnV0aWwnO1xuXG5leHBvcnQgY29uc3QgZWxlbWVudENhblNjcm9sbCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZGlyZWN0aW9uPzogJ3gnIHwgJ3knKSA9PiB7XG4gIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQsIHNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCB9ID0gZWxlbWVudDtcblxuICBpZiAoZGlyZWN0aW9uID09PSAneCcpIHtcbiAgICByZXR1cm4gc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd5Jykge1xuICAgIHJldHVybiBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQ7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0IHx8IHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGg7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElzRWxlbWVudFZpc2libGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNoZWNrIGlmIGl0IGlzIHZpc2libGUgaW5zaWRlIGEgY29udGFpbmVyLlxuICAgKi9cbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluc2lkZS5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIncyByZWN0IHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW5zaWRlLiBDYW4gYmUgc3VwcGxpZWQgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgRE9NIHJlYWRzLlxuICAgKiBAZGVmYXVsdCBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICovXG4gIGNvbnRhaW5lclJlY3Q/OiBET01SZWN0IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQncyByZWN0LiBDYW4gYmUgc3VwcGxpZWQgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgRE9NIHJlYWRzLlxuICAgKiBAZGVmYXVsdCBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICovXG4gIGVsZW1lbnRSZWN0PzogRE9NUmVjdCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbi5cbiAgICovXG4gIGlubGluZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBibG9jayBkaXJlY3Rpb24uXG4gICAqL1xuICBibG9jazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGVsZW1lbnQgdGhhdCBpcyB2aXNpYmxlIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLlxuICAgKi9cbiAgaW5saW5lSW50ZXJzZWN0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uLlxuICAgKi9cbiAgYmxvY2tJbnRlcnNlY3Rpb246IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyBpbnRlcnNlY3RpbmcgdGhlIGNvbnRhaW5lci5cbiAgICovXG4gIGlzSW50ZXJzZWN0aW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcmF0aW8gb2YgdGhlIGVsZW1lbnQgdGhhdCBpcyBpbnRlcnNlY3RpbmcgdGhlIGNvbnRhaW5lci5cbiAgICovXG4gIGludGVyc2VjdGlvblJhdGlvOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgaXMgYmVpbmcgY2hlY2tlZCBmb3IgdmlzaWJpbGl0eS5cbiAgICovXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgaXNFbGVtZW50VmlzaWJsZSA9IChvcHRpb25zOiBJc0VsZW1lbnRWaXNpYmxlT3B0aW9ucyk6IEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eSB8IG51bGwgPT4ge1xuICBsZXQgeyBjb250YWluZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgZWxlbWVudCB9ID0gb3B0aW9ucztcblxuICBpZiAoIWVsZW1lbnQgfHwgY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb250YWluZXIgfHw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKGNvbnRhaW5lcik7XG5cbiAgaWYgKCFjYW5TY3JvbGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5saW5lOiB0cnVlLFxuICAgICAgYmxvY2s6IHRydWUsXG4gICAgICBibG9ja0ludGVyc2VjdGlvbjogMSxcbiAgICAgIGlubGluZUludGVyc2VjdGlvbjogMSxcbiAgICAgIGludGVyc2VjdGlvblJhdGlvOiAxLFxuICAgICAgaXNJbnRlcnNlY3Rpbmc6IHRydWUsXG4gICAgICBlbGVtZW50LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IG9wdGlvbnMuZWxlbWVudFJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY29udGFpbmVyUmVjdCA9IG9wdGlvbnMuY29udGFpbmVyUmVjdCB8fCBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVN0YXJ0ID0gZWxlbWVudFJlY3QubGVmdDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU3RhcnQgPSBlbGVtZW50UmVjdC50b3A7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lU3RhcnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrU3RhcnQgPSBjb250YWluZXJSZWN0LnRvcDtcblxuICBjb25zdCBlbFdpdGggPSBlbGVtZW50UmVjdC53aWR0aCB8fCAxO1xuICBjb25zdCBlbEhlaWdodCA9IGVsZW1lbnRSZWN0LmhlaWdodCB8fCAxO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVFbmQgPSBlbGVtZW50SW5saW5lU3RhcnQgKyBlbFdpdGg7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja0VuZCA9IGVsZW1lbnRCbG9ja1N0YXJ0ICsgZWxIZWlnaHQ7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lRW5kID0gY29udGFpbmVySW5saW5lU3RhcnQgKyBjb250YWluZXJSZWN0LndpZHRoO1xuICBjb25zdCBjb250YWluZXJCbG9ja0VuZCA9IGNvbnRhaW5lckJsb2NrU3RhcnQgKyBjb250YWluZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBpc0VsZW1lbnRJbmxpbmVWaXNpYmxlID0gZWxlbWVudElubGluZVN0YXJ0ID49IGNvbnRhaW5lcklubGluZVN0YXJ0ICYmIGVsZW1lbnRJbmxpbmVFbmQgPD0gY29udGFpbmVySW5saW5lRW5kO1xuICBjb25zdCBpc0VsZW1lbnRCbG9ja1Zpc2libGUgPSBlbGVtZW50QmxvY2tTdGFydCA+PSBjb250YWluZXJCbG9ja1N0YXJ0ICYmIGVsZW1lbnRCbG9ja0VuZCA8PSBjb250YWluZXJCbG9ja0VuZDtcblxuICBjb25zdCBpbmxpbmVJbnRlcnNlY3Rpb24gPVxuICAgIE1hdGgubWluKGVsZW1lbnRJbmxpbmVFbmQsIGNvbnRhaW5lcklubGluZUVuZCkgLSBNYXRoLm1heChlbGVtZW50SW5saW5lU3RhcnQsIGNvbnRhaW5lcklubGluZVN0YXJ0KTtcbiAgY29uc3QgYmxvY2tJbnRlcnNlY3Rpb24gPVxuICAgIE1hdGgubWluKGVsZW1lbnRCbG9ja0VuZCwgY29udGFpbmVyQmxvY2tFbmQpIC0gTWF0aC5tYXgoZWxlbWVudEJsb2NrU3RhcnQsIGNvbnRhaW5lckJsb2NrU3RhcnQpO1xuXG4gIGNvbnN0IGlubGluZUludGVyc2VjdGlvblBlcmNlbnRhZ2UgPSBjbGFtcChpbmxpbmVJbnRlcnNlY3Rpb24gLyBlbFdpdGgsIDAsIDEpO1xuICBjb25zdCBibG9ja0ludGVyc2VjdGlvblBlcmNlbnRhZ2UgPSBjbGFtcChibG9ja0ludGVyc2VjdGlvbiAvIGVsSGVpZ2h0LCAwLCAxKTtcblxuICByZXR1cm4ge1xuICAgIGlubGluZTogaXNFbGVtZW50SW5saW5lVmlzaWJsZSxcbiAgICBibG9jazogaXNFbGVtZW50QmxvY2tWaXNpYmxlLFxuICAgIGlubGluZUludGVyc2VjdGlvbjogaW5saW5lSW50ZXJzZWN0aW9uUGVyY2VudGFnZSxcbiAgICBibG9ja0ludGVyc2VjdGlvbjogYmxvY2tJbnRlcnNlY3Rpb25QZXJjZW50YWdlLFxuICAgIGlzSW50ZXJzZWN0aW5nOiBpc0VsZW1lbnRJbmxpbmVWaXNpYmxlICYmIGlzRWxlbWVudEJsb2NrVmlzaWJsZSxcbiAgICBlbGVtZW50LFxuXG4gICAgLy8gUm91bmQgdGhlIGludGVyc2VjdGlvbiByYXRpbyB0byB0aGUgbmVhcmVzdCAwLjAxIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IGVycm9ycyBhbmQgc3lzdGVtIHNjYWxpbmcgaXNzdWVzLlxuICAgIGludGVyc2VjdGlvblJhdGlvOiBNYXRoLnJvdW5kKE1hdGgubWluKGlubGluZUludGVyc2VjdGlvblBlcmNlbnRhZ2UsIGJsb2NrSW50ZXJzZWN0aW9uUGVyY2VudGFnZSkgKiAxMDApIC8gMTAwLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyA9IChvcHRpb25zOiBTY3JvbGxUb0VsZW1lbnRPcHRpb25zKTogU2Nyb2xsVG9PcHRpb25zID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBkaXJlY3Rpb24sXG4gICAgYmVoYXZpb3IgPSAnc21vb3RoJyxcbiAgICBvcmlnaW4gPSAnbmVhcmVzdCcsXG4gICAgc2Nyb2xsQmxvY2tNYXJnaW4gPSAwLFxuICAgIHNjcm9sbElubGluZU1hcmdpbiA9IDAsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3IsXG4gICAgICBsZWZ0OiB1bmRlZmluZWQsXG4gICAgICB0b3A6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29udGFpbmVyIHx8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgY29uc3QgY2FuU2Nyb2xsID0gZWxlbWVudENhblNjcm9sbChjb250YWluZXIpO1xuXG4gIGlmICghY2FuU2Nyb2xsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJlaGF2aW9yLFxuICAgICAgbGVmdDogdW5kZWZpbmVkLFxuICAgICAgdG9wOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCB9ID0gY29udGFpbmVyO1xuICBjb25zdCB7IHdpZHRoOiBlbGVtZW50V2lkdGgsIGhlaWdodDogZWxlbWVudEhlaWdodCwgbGVmdDogZWxlbWVudExlZnQsIHRvcDogZWxlbWVudFRvcCB9ID0gZWxlbWVudFJlY3Q7XG4gIGNvbnN0IHsgd2lkdGg6IGNvbnRhaW5lcldpZHRoLCBoZWlnaHQ6IGNvbnRhaW5lckhlaWdodCwgbGVmdDogY29udGFpbmVyTGVmdCwgdG9wOiBjb250YWluZXJUb3AgfSA9IGNvbnRhaW5lclJlY3Q7XG5cbiAgY29uc3Qgc2hvdWxkU2Nyb2xsTGVmdCA9IGRpcmVjdGlvbiA9PT0gJ2lubGluZScgfHwgZGlyZWN0aW9uID09PSAnYm90aCcgfHwgIWRpcmVjdGlvbjtcbiAgY29uc3Qgc2hvdWxkU2Nyb2xsVG9wID0gZGlyZWN0aW9uID09PSAnYmxvY2snIHx8IGRpcmVjdGlvbiA9PT0gJ2JvdGgnIHx8ICFkaXJlY3Rpb247XG5cbiAgbGV0IHNjcm9sbExlZnRUbyA9IHNjcm9sbExlZnQ7XG4gIGxldCBzY3JvbGxUb3BUbyA9IHNjcm9sbFRvcDtcblxuICBjb25zdCBzY3JvbGxUb0VsZW1lbnRTdGFydCA9ICgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3A7XG4gICAgY29uc3QgcmVsYXRpdmVMZWZ0ID0gZWxlbWVudExlZnQgLSBjb250YWluZXJMZWZ0O1xuXG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxUb3AgPSByZWxhdGl2ZVRvcDtcbiAgICBjb25zdCBhbW91bnRUb1Njcm9sbExlZnQgPSByZWxhdGl2ZUxlZnQ7XG5cbiAgICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcCArIGFtb3VudFRvU2Nyb2xsVG9wO1xuICAgIGNvbnN0IHNjcm9sbExlZnRQb3NpdGlvbiA9IHNjcm9sbExlZnQgKyBhbW91bnRUb1Njcm9sbExlZnQ7XG5cbiAgICBzY3JvbGxMZWZ0VG8gPSBzY3JvbGxMZWZ0UG9zaXRpb24gLSBzY3JvbGxJbmxpbmVNYXJnaW47XG4gICAgc2Nyb2xsVG9wVG8gPSBzY3JvbGxUb3BQb3NpdGlvbiAtIHNjcm9sbEJsb2NrTWFyZ2luO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvRWxlbWVudEVuZCA9ICgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3A7XG4gICAgY29uc3QgcmVsYXRpdmVMZWZ0ID0gZWxlbWVudExlZnQgLSBjb250YWluZXJMZWZ0O1xuXG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxUb3AgPSByZWxhdGl2ZVRvcCAtIGNvbnRhaW5lckhlaWdodCArIGVsZW1lbnRIZWlnaHQ7XG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxMZWZ0ID0gcmVsYXRpdmVMZWZ0IC0gY29udGFpbmVyV2lkdGggKyBlbGVtZW50V2lkdGg7XG5cbiAgICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcCArIGFtb3VudFRvU2Nyb2xsVG9wO1xuICAgIGNvbnN0IHNjcm9sbExlZnRQb3NpdGlvbiA9IHNjcm9sbExlZnQgKyBhbW91bnRUb1Njcm9sbExlZnQ7XG5cbiAgICBzY3JvbGxMZWZ0VG8gPSBzY3JvbGxMZWZ0UG9zaXRpb24gKyBzY3JvbGxJbmxpbmVNYXJnaW47XG4gICAgc2Nyb2xsVG9wVG8gPSBzY3JvbGxUb3BQb3NpdGlvbiArIHNjcm9sbEJsb2NrTWFyZ2luO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvRWxlbWVudENlbnRlciA9ICgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3A7XG4gICAgY29uc3QgcmVsYXRpdmVMZWZ0ID0gZWxlbWVudExlZnQgLSBjb250YWluZXJMZWZ0O1xuXG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxUb3AgPSByZWxhdGl2ZVRvcCAtIGNvbnRhaW5lckhlaWdodCAvIDIgKyBlbGVtZW50SGVpZ2h0IC8gMjtcbiAgICBjb25zdCBhbW91bnRUb1Njcm9sbExlZnQgPSByZWxhdGl2ZUxlZnQgLSBjb250YWluZXJXaWR0aCAvIDIgKyBlbGVtZW50V2lkdGggLyAyO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb24gPSBzY3JvbGxUb3AgKyBhbW91bnRUb1Njcm9sbFRvcDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0UG9zaXRpb24gPSBzY3JvbGxMZWZ0ICsgYW1vdW50VG9TY3JvbGxMZWZ0O1xuXG4gICAgc2Nyb2xsTGVmdFRvID0gc2Nyb2xsTGVmdFBvc2l0aW9uO1xuICAgIHNjcm9sbFRvcFRvID0gc2Nyb2xsVG9wUG9zaXRpb247XG4gIH07XG5cbiAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50TmVhcmVzdCA9ICgpID0+IHtcbiAgICBjb25zdCBpc0Fib3ZlID0gZWxlbWVudFJlY3QuYm90dG9tIDwgY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3QgaXNQYXJ0aWFsQWJvdmUgPSBlbGVtZW50UmVjdC50b3AgPCBjb250YWluZXJSZWN0LnRvcCAmJiBlbGVtZW50UmVjdC5ib3R0b20gPiBjb250YWluZXJSZWN0LnRvcDtcblxuICAgIGNvbnN0IGlzQmVsb3cgPSBlbGVtZW50UmVjdC50b3AgPiBjb250YWluZXJSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBpc1BhcnRpYWxCZWxvdyA9IGVsZW1lbnRSZWN0LnRvcCA8IGNvbnRhaW5lclJlY3QuYm90dG9tICYmIGVsZW1lbnRSZWN0LmJvdHRvbSA+IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgY29uc3QgaXNMZWZ0ID0gZWxlbWVudFJlY3QucmlnaHQgPCBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgY29uc3QgaXNQYXJ0aWFsTGVmdCA9IGVsZW1lbnRSZWN0LmxlZnQgPCBjb250YWluZXJSZWN0LmxlZnQgJiYgZWxlbWVudFJlY3QucmlnaHQgPiBjb250YWluZXJSZWN0LmxlZnQ7XG5cbiAgICBjb25zdCBpc1JpZ2h0ID0gZWxlbWVudFJlY3QubGVmdCA+IGNvbnRhaW5lclJlY3QucmlnaHQ7XG4gICAgY29uc3QgaXNQYXJ0aWFsUmlnaHQgPSBlbGVtZW50UmVjdC5sZWZ0IDwgY29udGFpbmVyUmVjdC5yaWdodCAmJiBlbGVtZW50UmVjdC5yaWdodCA+IGNvbnRhaW5lclJlY3QucmlnaHQ7XG5cbiAgICBpZiAoaXNBYm92ZSB8fCBpc1BhcnRpYWxBYm92ZSB8fCBpc0xlZnQgfHwgaXNQYXJ0aWFsTGVmdCkge1xuICAgICAgc2Nyb2xsVG9FbGVtZW50U3RhcnQoKTtcbiAgICB9IGVsc2UgaWYgKGlzQmVsb3cgfHwgaXNQYXJ0aWFsQmVsb3cgfHwgaXNSaWdodCB8fCBpc1BhcnRpYWxSaWdodCkge1xuICAgICAgc2Nyb2xsVG9FbGVtZW50RW5kKCk7XG4gICAgfVxuICB9O1xuXG4gIHN3aXRjaCAob3JpZ2luKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgc2Nyb2xsVG9FbGVtZW50U3RhcnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBzY3JvbGxUb0VsZW1lbnRFbmQoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBzY3JvbGxUb0VsZW1lbnRDZW50ZXIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25lYXJlc3QnOlxuICAgICAgc2Nyb2xsVG9FbGVtZW50TmVhcmVzdCgpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yLFxuICAgIGxlZnQ6IHNob3VsZFNjcm9sbExlZnQgPyBzY3JvbGxMZWZ0VG8gOiB1bmRlZmluZWQsXG4gICAgdG9wOiBzaG91bGRTY3JvbGxUb3AgPyBzY3JvbGxUb3BUbyA6IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBzY3JvbGwgdG8uXG4gICAqL1xuICBlbGVtZW50PzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Nyb2xsIGNvbnRhaW5lciB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgaW4uXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIHRvIHNjcm9sbCBpbi5cbiAgICogQGRlZmF1bHQgJ2JvdGgnXG4gICAqL1xuICBkaXJlY3Rpb24/OiAnaW5saW5lJyB8ICdibG9jaycgfCAnYm90aCc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gb2YgdGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLlxuICAgKiBAZGVmYXVsdCAnbmVhcmVzdCdcbiAgICovXG4gIG9yaWdpbj86ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ25lYXJlc3QnO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Nyb2xsIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCAnc21vb3RoJ1xuICAgKi9cbiAgYmVoYXZpb3I/OiBTY3JvbGxCZWhhdmlvcjtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBpbmxpbmUtbWFyZ2luXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNjcm9sbElubGluZU1hcmdpbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBibG9jay1tYXJnaW5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc2Nyb2xsQmxvY2tNYXJnaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSAob3B0aW9uczogU2Nyb2xsVG9FbGVtZW50T3B0aW9ucykgPT4ge1xuICBvcHRpb25zLmNvbnRhaW5lcj8uc2Nyb2xsVG8oZ2V0RWxlbWVudFNjcm9sbENvb3JkaW5hdGVzKG9wdGlvbnMpKTtcbn07XG4iXX0=","import { coerceElement } from '@angular/cdk/coercion';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, ElementRef, Injector, NgZone, PLATFORM_ID, QueryList, Renderer2, RendererStyleFlags2, afterNextRender, computed, effect, inject, isDevMode, isSignal, linkedSignal, runInInjectionContext, signal, untracked, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationSkipped, Router } from '@angular/router';\nimport { Observable, debounceTime, distinctUntilChanged, filter, fromEvent, map, merge, of, pairwise, startWith, switchMap, take, takeUntil, tap, } from 'rxjs';\nimport { ET_PROPERTY_REMOVED, RouterStateService, ViewportService } from '../services';\nimport { nextFrame } from './animation.utils';\nimport { equal } from './equal.util';\nimport { createMediaQueryObservable } from './media-query-observable.util';\nimport { isElementVisible } from './scrollable.utils';\nfunction isElementSignal(el) {\n if (isSignal(el)) {\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElement' in val && 'previousElement' in val;\n }\n return false;\n}\nconst documentElementSignal = () => signal({\n currentElement: document.documentElement,\n previousElement: null,\n currentElements: [document.documentElement],\n previousElements: [],\n});\nconst buildElementSignal = (el) => {\n if (el === null || el === undefined) {\n return signal({ currentElement: null, previousElement: null, currentElements: [], previousElements: [] });\n }\n if (isElementSignal(el)) {\n return el;\n }\n let mElSignal = null;\n const switchElement = () => switchMap((elOrRef) => {\n if (elOrRef instanceof QueryList) {\n return elOrRef.changes.pipe(startWith(elOrRef), map(() => elOrRef.toArray().map((r) => coerceElement(r))));\n }\n else if (Array.isArray(elOrRef)) {\n return of(elOrRef.map((r) => coerceElement(r)));\n }\n else {\n const coercedEl = coerceElement(elOrRef);\n return of(coercedEl ? [coercedEl] : null);\n }\n });\n if (el instanceof Observable) {\n mElSignal = toSignal(el.pipe(switchElement()), { initialValue: null });\n }\n else if (isSignal(el)) {\n mElSignal = toSignal(toObservable(el).pipe(switchElement()), { initialValue: null });\n }\n else if (el instanceof QueryList) {\n mElSignal = toSignal(el.changes.pipe(startWith(el), map(() => el.toArray().map((r) => coerceElement(r)))), { initialValue: null });\n }\n else {\n mElSignal = signal([coerceElement(el)]);\n }\n const elSig = toSignal(toObservable(mElSignal).pipe(startWith(null), pairwise(), map(([previousElements, currentElements]) => {\n const previousEl = previousElements?.[0] ?? null;\n const currentEl = currentElements?.[0] ?? null;\n if (currentEl && !(currentEl instanceof HTMLElement)) {\n console.error('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. This will cause issues. Received:', currentEl);\n }\n return {\n previousElements: previousElements ?? [],\n currentElements: currentElements ?? [],\n currentElement: currentEl,\n previousElement: previousEl,\n };\n })), { initialValue: { currentElement: null, previousElement: null, previousElements: [], currentElements: [] } });\n return computed(() => elSig(), {\n equal: (a, b) => a.currentElement === b.currentElement &&\n a.previousElement === b.previousElement &&\n a.currentElements.length === b.currentElements.length &&\n a.currentElements.every((v, i) => v === b.currentElements[i]) &&\n a.previousElements.length === b.previousElements.length &&\n a.previousElements.every((v, i) => v === b.previousElements[i]),\n });\n};\nconst firstElementSignal = (el) => {\n return computed(() => {\n const current = el();\n if (current.currentElements.length > 1) {\n console.warn('More than one element is bound to the signal. Only the first element will be used.', current.currentElements);\n }\n const curr = current.currentElements[0] ?? null;\n const prev = current.previousElements[0] ?? null;\n return { currentElement: curr, previousElement: prev };\n }, { equal: (a, b) => a.currentElement === b.currentElement && a.previousElement === b.previousElement });\n};\nexport const buildSignalEffects = (el, config) => {\n const elements = buildElementSignal(el);\n const injector = inject(Injector);\n effect(() => {\n const { currentElements, previousElements } = elements();\n for (const previousEl of previousElements) {\n if (currentElements.includes(previousEl))\n continue;\n const tokens = Object.keys(config.tokenMap)\n .map((key) => key.split(' '))\n .flat();\n if (!tokens.length)\n continue;\n config.cleanupFn(previousEl, tokens);\n }\n for (const currentEl of currentElements) {\n if (previousElements.includes(currentEl))\n continue;\n for (const [tokens, condition] of Object.entries(config.tokenMap)) {\n untracked(() => {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length)\n return;\n config.updateFn(currentEl, tokenArray, condition());\n });\n }\n }\n });\n const effects = {};\n const has = (tokens) => tokens in effects;\n const push = (tokens, signal) => {\n if (has(tokens))\n return;\n runInInjectionContext(injector, () => {\n effects[tokens] = effect(() => {\n const { currentElements } = untracked(() => elements());\n const value = signal();\n for (const el of currentElements) {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length)\n continue;\n config.updateFn(el, tokenArray, value);\n }\n });\n });\n };\n const pushMany = (map) => {\n for (const [tokens, signal] of Object.entries(map)) {\n push(tokens, signal);\n }\n };\n const remove = (tokens) => {\n effects[tokens]?.destroy();\n delete effects[tokens];\n for (const el of elements().currentElements) {\n const tokenArray = tokens.split(' ');\n if (!tokenArray.length)\n continue;\n config.cleanupFn(el, tokenArray);\n }\n };\n const removeMany = (tokens) => {\n for (const token of tokens) {\n remove(token);\n }\n };\n pushMany(config.tokenMap);\n return { remove, removeMany, has, push, pushMany };\n};\nexport const signalIsRendered = () => {\n const isRendered = signal(false, ...(ngDevMode ? [{ debugName: \"isRendered\" }] : []));\n afterNextRender(() => isRendered.set(true));\n return isRendered.asReadonly();\n};\nexport const signalClasses = (el, classMap) => {\n const renderer = inject(Renderer2);\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 }\n else {\n tokens.forEach((token) => renderer.addClass(el, token));\n }\n },\n });\n};\nexport const signalHostClasses = (classMap) => signalClasses(inject(ElementRef), classMap);\nconst ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected', 'hidden', 'inert'];\nexport const signalAttributes = (el, attributeMap) => {\n const renderer = inject(Renderer2);\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 }\n else {\n renderer.removeAttribute(el, token);\n }\n continue;\n }\n if (condition === null || condition === undefined) {\n renderer.removeAttribute(el, token);\n }\n else {\n renderer.setAttribute(el, token, `${condition}`);\n }\n }\n },\n });\n};\nexport const signalHostAttributes = (attributeMap) => signalAttributes(inject(ElementRef), attributeMap);\nexport const signalStyles = (el, styleMap) => {\n const renderer = inject(Renderer2);\n return buildSignalEffects(el, {\n tokenMap: styleMap,\n cleanupFn: (el, tokens) => tokens.forEach((token) => renderer.removeStyle(el, token, RendererStyleFlags2.DashCase)),\n updateFn: (el, tokens, condition) => {\n for (const token of tokens) {\n if (condition === null || condition === undefined) {\n renderer.removeStyle(el, token, RendererStyleFlags2.DashCase);\n }\n else {\n renderer.setStyle(el, token, `${condition}`, RendererStyleFlags2.DashCase);\n }\n }\n },\n });\n};\nexport const signalHostStyles = (styleMap) => signalStyles(inject(ElementRef), styleMap);\nexport const boundingClientRectToElementRect = (rect) => ({\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});\nexport const createElementDimensions = (el, rect) => {\n if (!el) {\n return {\n rect: null,\n client: null,\n scroll: null,\n offset: null,\n };\n }\n const cachedNormalizedRect = rect ? boundingClientRectToElementRect(rect) : null;\n const rectFn = () => cachedNormalizedRect ? cachedNormalizedRect : boundingClientRectToElementRect(el.getBoundingClientRect());\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};\nexport const signalElementDimensions = (el) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const initialValue = () => createElementDimensions(elements().currentElement);\n const elementDimensionsSignal = signal(initialValue(), ...(ngDevMode ? [{ debugName: \"elementDimensionsSignal\" }] : []));\n const observer = new ResizeObserver((e) => {\n if (!isRendered())\n return;\n const entry = e[0];\n if (entry) {\n const target = entry.target;\n const newDimensions = createElementDimensions(target);\n zone.run(() => elementDimensionsSignal.set(newDimensions));\n }\n });\n effect(() => {\n const els = elements();\n untracked(() => {\n elementDimensionsSignal.set(initialValue());\n if (els.previousElement) {\n observer.disconnect();\n }\n if (els.currentElement) {\n const computedDisplay = getComputedStyle(els.currentElement).display;\n const currentElIsAngularComponent = els.currentElement?.tagName.toLowerCase().includes('-');\n if (computedDisplay === 'inline' && isDevMode() && currentElIsAngularComponent) {\n console.error(`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 observer.observe(els.currentElement);\n }\n });\n });\n destroyRef.onDestroy(() => observer.disconnect());\n return computed(() => elementDimensionsSignal(), {\n equal: (a, b) => equal(a, b),\n });\n};\nexport const signalHostElementDimensions = () => signalElementDimensions(inject(ElementRef));\nexport const signalElementMutations = (el, options) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const elementMutationsSignal = signal(null, ...(ngDevMode ? [{ debugName: \"elementMutationsSignal\" }] : []));\n const observer = new MutationObserver((e) => {\n if (!isRendered())\n return;\n const entry = e[0];\n if (entry) {\n zone.run(() => elementMutationsSignal.set(entry));\n }\n });\n effect(() => {\n const els = elements();\n elementMutationsSignal.set(null);\n if (els.previousElement) {\n observer.disconnect();\n }\n if (els.currentElement) {\n observer.observe(els.currentElement, options);\n }\n });\n destroyRef.onDestroy(() => observer.disconnect());\n return elementMutationsSignal.asReadonly();\n};\nexport const signalHostElementMutations = (options) => signalElementMutations(inject(ElementRef), options);\nexport const areScrollStatesEqual = (a, b) => {\n return (a.canScroll === b.canScroll &&\n a.canScrollHorizontally === b.canScrollHorizontally &&\n a.canScrollVertically === b.canScrollVertically &&\n equal(a.elementDimensions, b.elementDimensions));\n};\nexport const signalElementScrollState = (el, options) => {\n const elements = buildElementSignal(el);\n const observedEl = firstElementSignal(elements);\n const elementDimensions = signalElementDimensions(elements);\n const elementMutations = signalElementMutations(elements, { childList: true, subtree: true, attributes: true });\n const isRendered = signalIsRendered();\n const initialScrollPosition = options?.initialScrollPosition;\n if (initialScrollPosition) {\n const ref = effect(() => {\n if (!isRendered())\n return;\n const scrollPosition = initialScrollPosition();\n const element = observedEl().currentElement;\n if (scrollPosition && element) {\n if (scrollPosition.left !== undefined)\n element.scrollLeft = scrollPosition.left;\n if (scrollPosition.top !== undefined)\n element.scrollTop = scrollPosition.top;\n ref.destroy();\n }\n }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\n }\n const notScrollable = (dimensions) => ({\n canScroll: false,\n canScrollHorizontally: false,\n canScrollVertically: false,\n elementDimensions: dimensions,\n });\n return computed(() => {\n const element = observedEl().currentElement;\n const dimensions = elementDimensions();\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 if (!element || !isRendered())\n return notScrollable(dimensions);\n const { scrollWidth, scrollHeight, clientHeight, clientWidth } = element;\n const canScrollHorizontally = scrollWidth > clientWidth;\n const canScrollVertically = scrollHeight > clientHeight;\n return {\n canScroll: canScrollHorizontally || canScrollVertically,\n canScrollHorizontally,\n canScrollVertically,\n elementDimensions: dimensions,\n };\n }, { equal: (a, b) => areScrollStatesEqual(a, b) });\n};\nexport const signalHostElementScrollState = () => signalElementScrollState(inject(ElementRef));\nexport const signalElementIntersection = (el, options) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const root = firstElementSignal(options?.root ? buildElementSignal(options?.root) : documentElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = options?.enabled ?? signal(true);\n const elementIntersectionSignal = signal([], ...(ngDevMode ? [{ debugName: \"elementIntersectionSignal\" }] : []));\n const observer = signal(null, ...(ngDevMode ? [{ debugName: \"observer\" }] : []));\n const currentlyObservedElements = new Set();\n const updateIntersections = (entries) => {\n let currentValues = [...elementIntersectionSignal()];\n for (const entry of entries) {\n const existingEntryIndex = currentValues.findIndex((v) => v.target === entry.target);\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 const intersectionEntry = {\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 };\n if (existingEntryIndex !== -1) {\n currentValues = [\n ...currentValues.slice(0, existingEntryIndex),\n intersectionEntry,\n ...currentValues.slice(existingEntryIndex + 1),\n ];\n }\n else {\n currentValues = [...currentValues, intersectionEntry];\n }\n }\n zone.run(() => elementIntersectionSignal.set(currentValues));\n };\n const updateIntersectionObserver = (rendered, enabled, rootEl) => {\n observer()?.disconnect();\n currentlyObservedElements.clear();\n if (!rendered || !enabled || !rootEl) {\n observer.set(null);\n return;\n }\n const newObserver = new IntersectionObserver((entries) => updateIntersections(entries), {\n ...options,\n root: rootEl,\n });\n observer.set(newObserver);\n };\n const updateObservedElements = (observer, elements) => {\n const rootEl = root().currentElement;\n if (!observer || !rootEl)\n return;\n const rootBounds = rootEl.getBoundingClientRect();\n const currIntersectionValue = elementIntersectionSignal();\n const newIntersectionValue = [];\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 if (!existingEntry) {\n console.warn('Could not find existing entry for element. The intersection observer might be broken now.', el);\n continue;\n }\n newIntersectionValue.push(existingEntry);\n continue;\n }\n const elBounds = el.getBoundingClientRect();\n const initialElementVisibility = isElementVisible({\n container: rootEl,\n element: el,\n containerRect: rootBounds,\n elementRect: elBounds,\n });\n if (!initialElementVisibility) {\n console.error('No visibility data found for element.', {\n element: el,\n container: rootEl,\n });\n continue;\n }\n const intersectionEntry = {\n boundingClientRect: elBounds,\n intersectionRatio: initialElementVisibility.intersectionRatio,\n intersectionRect: elBounds,\n isIntersecting: initialElementVisibility.isIntersecting,\n rootBounds: rootBounds,\n target: el,\n time: performance.now(),\n };\n newIntersectionValue.push(intersectionEntry);\n currentlyObservedElements.add(el);\n observer.observe(el);\n }\n for (const el of elements.previousElements) {\n if (elements.currentElements.includes(el))\n continue;\n observer.unobserve(el);\n currentlyObservedElements.delete(el);\n }\n elementIntersectionSignal.set(newIntersectionValue);\n };\n effect(() => {\n const rootEl = root().currentElement;\n const rendered = isRendered();\n const enabled = isEnabled();\n untracked(() => updateIntersectionObserver(rendered, enabled, rootEl));\n });\n effect(() => {\n const els = elements();\n const obs = observer();\n untracked(() => updateObservedElements(obs, els));\n });\n destroyRef.onDestroy(() => observer()?.disconnect());\n return elementIntersectionSignal.asReadonly();\n};\nexport const signalHostElementIntersection = (options) => signalElementIntersection(inject(ElementRef), options);\nexport const signalElementChildren = (el) => {\n const elements = buildElementSignal(el);\n const isRendered = signalIsRendered();\n const elementMutations = signalElementMutations(elements, { childList: true, subtree: true, attributes: true });\n return computed(() => {\n if (!isRendered())\n return [];\n const els = elements();\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 if (!els.currentElement)\n return [];\n const children = [];\n for (let index = 0; index < els.currentElement.children.length; index++) {\n const element = els.currentElement.children[index];\n if (element instanceof HTMLElement) {\n children.push(element);\n }\n }\n return children;\n }, { equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) });\n};\nexport const previousSignalValue = (signal) => {\n const obs = toObservable(signal).pipe(pairwise(), map(([prev]) => prev));\n return toSignal(obs);\n};\nexport const syncSignal = (from, to, options) => {\n let isFirstRun = options?.skipSyncRead ? false : true;\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 }\n catch {\n isFirstRun = false;\n if (isDevMode()) {\n console.warn('Failed to sync signals. The target signal is not yet initialized.', { from, to });\n }\n }\n }\n const ref = effect(() => {\n const formVal = from();\n if (options?.skipFirstRun && isFirstRun) {\n isFirstRun = false;\n return;\n }\n untracked(() => {\n to.set(formVal);\n });\n }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\n return ref;\n};\nexport const controlValueSignal = (control, options) => {\n let initialValue = null;\n const getRawValueSafe = (ctrl) => {\n try {\n return isSignal(ctrl) ? (ctrl()?.getRawValue() ?? null) : (ctrl?.getRawValue() ?? null);\n }\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 initialValue = getRawValueSafe(control);\n const controlStream = isSignal(control)\n ? toObservable(control)\n : of(control);\n const controlObs = controlStream.pipe(switchMap((ctrl) => {\n if (!ctrl)\n return of(null);\n const vcsObs = options?.debounceTime\n ? ctrl.valueChanges.pipe(debounceTime(options.debounceTime))\n : ctrl.valueChanges;\n return vcsObs.pipe(startWith(ctrl.getRawValue()), map(() => ctrl.getRawValue()));\n }));\n const obs = !options?.debounceFirst ? merge(of(initialValue), controlObs) : controlObs;\n return toSignal(obs.pipe(distinctUntilChanged((a, b) => equal(a, b))), {\n initialValue,\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 = (control, options) => {\n const obs = toObservable(controlValueSignal(control, options)).pipe(pairwise(), startWith([null, control.getRawValue()]));\n return toSignal(obs, { requireSync: true });\n};\n/**\n * @deprecated Use `controlValueSignal` instead with `debounceTime` set to `300` and `debounceFirst` set to `true`.\n */\nexport const debouncedControlValueSignal = (control, options) => controlValueSignal(control, options ?? { debounceTime: 300, debounceFirst: true });\nexport const transformOrReturn = (src, config) => {\n const transformer = config?.transform;\n if (transformer) {\n return computed(() => transformer(src()));\n }\n return src;\n};\nconst createInitialRoute = () => {\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const router = inject(Router);\n if (!isBrowser) {\n return router.url;\n }\n return window.location.pathname + window.location.search + window.location.hash;\n};\n/** Inject the current router event */\nexport const injectRouterEvent = () => {\n const routerStateService = inject(RouterStateService);\n const initialRoute = createInitialRoute();\n return linkedSignal({\n source: () => new NavigationEnd(-1, initialRoute, initialRoute),\n computation: () => routerStateService.latestEvent(),\n }).asReadonly();\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¶m=true#fragment\"\n */\nexport const injectUrl = () => {\n const event = injectRouterEvent();\n const url = signal(createInitialRoute(), ...(ngDevMode ? [{ debugName: \"url\" }] : []));\n effect(() => {\n const currentEvent = event();\n untracked(() => {\n if (currentEvent instanceof NavigationEnd) {\n url.set(currentEvent.urlAfterRedirects);\n }\n else if (currentEvent instanceof NavigationSkipped) {\n url.set(currentEvent.url);\n }\n });\n });\n return url.asReadonly();\n};\n/**\n * Inject the current route\n * @example \"/my-page\"\n */\nexport const injectRoute = () => {\n const url = injectUrl();\n return computed(() => {\n const fullUrl = url();\n const urlWithoutQueryParams = fullUrl.split('?')[0] ?? '';\n const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';\n return withoutFragment;\n });\n};\nconst createRouterState = (router) => {\n let route = router.routerState.snapshot.root;\n while (route.firstChild) {\n route = route.firstChild;\n }\n const { data, params, queryParams, title, fragment } = route;\n return {\n data,\n pathParams: params,\n queryParams,\n title: title ?? null,\n fragment,\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 = () => {\n const event = injectRouterEvent();\n const router = inject(Router);\n const routerState = signal(createRouterState(router), ...(ngDevMode ? [{ debugName: \"routerState\" }] : []));\n effect(() => {\n const e = event();\n untracked(() => {\n if (e instanceof NavigationEnd && e.id === -1) {\n return;\n }\n else {\n routerState.set(createRouterState(router));\n }\n });\n });\n return computed(() => routerState(), { equal });\n};\n/** Inject a signal containing the current route fragment (the part after the # inside the url if present) */\nexport const injectFragment = (config) => {\n const routerState = injectRouterState();\n const fragment = computed(() => routerState().fragment, ...(ngDevMode ? [{ debugName: \"fragment\" }] : []));\n return transformOrReturn(fragment, config);\n};\n/** Inject all currently available query parameters as a signal */\nexport const injectQueryParams = () => {\n const routerState = injectRouterState();\n const queryParams = computed(() => routerState().queryParams, ...(ngDevMode ? [{ debugName: \"queryParams\" }] : []));\n return queryParams;\n};\n/** Inject all currently available route data as a signal */\nexport const injectRouteData = () => {\n const routerState = injectRouterState();\n const data = computed(() => routerState().data, ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n return data;\n};\n/** Inject the current route title as a signal */\nexport const injectRouteTitle = (config) => {\n const routerState = injectRouterState();\n const title = computed(() => routerState().title, ...(ngDevMode ? [{ debugName: \"title\" }] : []));\n return transformOrReturn(title, config);\n};\n/** Inject all currently available path parameters as a signal */\nexport const injectPathParams = () => {\n const routerState = injectRouterState();\n const pathParams = computed(() => routerState().pathParams, ...(ngDevMode ? [{ debugName: \"pathParams\" }] : []));\n return pathParams;\n};\n/** Inject a specific query parameter as a signal */\nexport const injectQueryParam = (key, config) => {\n const queryParams = injectQueryParams();\n const src = computed(() => queryParams()[key] ?? null);\n return transformOrReturn(src, config);\n};\n/** Inject a specific route data item as a signal */\nexport const injectRouteDataItem = (key, config) => {\n const data = injectRouteData();\n const src = computed(() => data()[key] ?? null);\n return transformOrReturn(src, config);\n};\n/** Inject a specific path parameter as a signal */\nexport const injectPathParam = (key, config) => {\n const pathParams = injectPathParams();\n const src = computed(() => pathParams()[key] ?? null);\n return transformOrReturn(src, config);\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 = () => {\n const queryParams = injectQueryParams();\n const prevQueryParams = previousSignalValue(queryParams);\n return computed(() => {\n const current = queryParams();\n const previous = prevQueryParams() ?? {};\n const changes = {};\n const allKeys = new Set([\n ...Object.keys(previous),\n ...Object.keys(current),\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 changes[key] = val;\n }\n }\n return changes;\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 = () => {\n const pathParams = injectPathParams();\n const prevPathParams = previousSignalValue(pathParams);\n return computed(() => {\n const current = pathParams();\n const previous = prevPathParams() ?? {};\n const changes = {};\n const allKeys = new Set([\n ...Object.keys(previous),\n ...Object.keys(current),\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 changes[key] = val;\n }\n }\n return changes;\n });\n};\nexport const createIsRenderedSignal = () => {\n const value = signal(false, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n nextFrame(() => {\n if (!value()) {\n console.error('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 return {\n state: value,\n bind: () => effect(() => value.set(true)),\n };\n};\nexport const createCanAnimateSignal = () => {\n const value = signal(false, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n nextFrame(() => {\n value.set(true);\n });\n return {\n state: value.asReadonly(),\n };\n};\nexport const signalElementLastScrollDirection = (el) => {\n const elements = buildElementSignal(el);\n const element = firstElementSignal(elements);\n const destroyRef = inject(DestroyRef);\n const lastScrollDirection = signal(null, ...(ngDevMode ? [{ debugName: \"lastScrollDirection\" }] : []));\n let lastScrollTop = 0;\n let lastScrollLeft = 0;\n toObservable(element)\n .pipe(switchMap(({ currentElement }) => {\n if (!currentElement) {\n lastScrollDirection.set(null);\n lastScrollTop = 0;\n lastScrollLeft = 0;\n return of(null);\n }\n return fromEvent(currentElement, 'scroll').pipe(tap(() => {\n const { scrollTop, scrollLeft } = currentElement;\n const time = Date.now();\n if (scrollTop > lastScrollTop) {\n lastScrollDirection.set({ type: 'down', time });\n }\n else if (scrollTop < lastScrollTop) {\n lastScrollDirection.set({ type: 'up', time });\n }\n else if (scrollLeft > lastScrollLeft) {\n lastScrollDirection.set({ type: 'right', time });\n }\n else if (scrollLeft < lastScrollLeft) {\n lastScrollDirection.set({ type: 'left', time });\n }\n lastScrollTop = scrollTop;\n lastScrollLeft = scrollLeft;\n }));\n }), takeUntilDestroyed(destroyRef))\n .subscribe();\n return lastScrollDirection.asReadonly();\n};\nexport const signalHostElementLastScrollDirection = () => signalElementLastScrollDirection(inject(ElementRef));\nexport const maybeSignalValue = (value) => {\n if (isSignal(value)) {\n return value();\n }\n return value;\n};\n/** The deadzone in pixels after which the cursor drag scroll will take effect. */\nconst CURSOR_DRAG_SCROLL_DEADZONE = 5;\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/** A function to apply cursor drag scroll behavior to an element. */\nexport const useCursorDragScroll = (el, options) => {\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 scrollState = signalElementScrollState(elements);\n const renderer = inject(Renderer2);\n const isDragging = signal(false, ...(ngDevMode ? [{ debugName: \"isDragging\" }] : []));\n const isInitDragging = signal(false, ...(ngDevMode ? [{ debugName: \"isInitDragging\" }] : []));\n const initialDragPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"initialDragPosition\" }] : []));\n const initialScrollPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"initialScrollPosition\" }] : []));\n const dragAmount = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"dragAmount\" }] : []));\n const document = inject(DOCUMENT);\n const canScroll = computed(() => {\n const currentScrollState = scrollState();\n const direction = maybeSignalValue(allowedDirection);\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 }, ...(ngDevMode ? [{ debugName: \"canScroll\" }] : []));\n // Cleanup if the element the cursor drag scroll is bound to gets changed\n effect(() => {\n const { previousElement } = element();\n if (previousElement) {\n renderer.removeStyle(previousElement, 'cursor');\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 untracked(() => {\n const el = element().currentElement;\n if (!el)\n return;\n if (!currCanScroll || !isEnabled) {\n renderer.removeStyle(el, 'cursor');\n renderer.removeStyle(el, 'scrollSnapType');\n renderer.removeStyle(el, 'scrollBehavior');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS);\n renderer.removeClass(el, CURSOR_DRAG_INIT_CLASS);\n renderer.removeStyle(document.documentElement, 'cursor');\n return;\n }\n if (currIsInitDragging) {\n renderer.addClass(el, CURSOR_DRAG_INIT_CLASS);\n }\n if (currIsDragging) {\n renderer.addClass(el, CURSOR_DRAG_SCROLLING_CLASS);\n renderer.setStyle(el, 'scrollSnapType', 'none');\n renderer.setStyle(el, 'scrollBehavior', 'unset');\n renderer.setStyle(el, 'cursor', 'grabbing');\n renderer.setStyle(document.documentElement, 'cursor', 'grabbing');\n }\n if (!currIsInitDragging && !currIsDragging) {\n renderer.setStyle(el, 'cursor', 'grab');\n renderer.removeStyle(el, 'scrollSnapType');\n renderer.removeStyle(el, 'scrollBehavior');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS);\n renderer.removeClass(el, CURSOR_DRAG_INIT_CLASS);\n renderer.removeStyle(document.documentElement, 'cursor');\n }\n });\n });\n // Update the element's scroll position when the user drags\n effect(() => {\n const currDragAmount = dragAmount();\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 if (!el || !currIsDragging)\n return;\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 const updateDragging = (e) => {\n const el = element().currentElement;\n if (!el)\n return;\n const dx = (e.clientX - initialDragPosition().x) * -1;\n const dy = (e.clientY - initialDragPosition().y) * -1;\n dragAmount.set({ x: dx, y: dy });\n if (Math.abs(dx) > CURSOR_DRAG_SCROLL_DEADZONE || Math.abs(dy) > CURSOR_DRAG_SCROLL_DEADZONE) {\n isDragging.set(true);\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 const setupDragging = (e) => {\n const mouseUp = fromEvent(document, 'mouseup');\n const mouseMove = fromEvent(document, 'mousemove');\n const el = element().currentElement;\n if (!el)\n return;\n mouseMove\n .pipe(takeUntilDestroyed(destroyRef), takeUntil(mouseUp), tap((e) => updateDragging(e)))\n .subscribe();\n mouseUp\n .pipe(take(1), takeUntilDestroyed(destroyRef), tap(() => updateDraggingEnd()))\n .subscribe();\n initialDragPosition.set({ x: e.clientX, y: e.clientY });\n initialScrollPosition.set({ x: el.scrollLeft, y: el.scrollTop });\n isInitDragging.set(true);\n };\n toObservable(element)\n .pipe(map((e) => e?.currentElement), switchMap((el) => (el ? fromEvent(el, 'mousedown') : of(null))), filter((e) => !!e), filter(() => enabled()), tap((e) => setupDragging(e)), takeUntilDestroyed())\n .subscribe();\n return {\n isDragging: isDragging.asReadonly(),\n currentDragAmount: dragAmount.asReadonly(),\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 = (source) => {\n const value = signal(null, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n const ref = effect(() => {\n const val = source();\n if (val) {\n value.set(val);\n ref.destroy();\n }\n }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\n return value.asReadonly();\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 = (source) => {\n const value = signal(null, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n const ref = effect(() => {\n const val = source();\n if (!val) {\n value.set(val);\n ref.destroy();\n }\n }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\n return value.asReadonly();\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 = (valueFn) => {\n const valueSignal = signal(null, ...(ngDevMode ? [{ debugName: \"valueSignal\" }] : []));\n afterNextRender(() => {\n valueSignal.set(valueFn());\n });\n return valueSignal;\n};\n/** Inject a signal containing a boolean value indicating if the viewport is xs */\nexport const injectIsXs = () => {\n return toSignal(inject(ViewportService).isXs$, { requireSync: true });\n};\n/** Inject a signal containing a boolean value indicating if the viewport is sm */\nexport const injectIsSm = () => {\n return toSignal(inject(ViewportService).isSm$, { requireSync: true });\n};\n/** Inject a signal containing a boolean value indicating if the viewport is md */\nexport const injectIsMd = () => {\n return toSignal(inject(ViewportService).isMd$, { requireSync: true });\n};\n/** Inject a signal containing a boolean value indicating if the viewport is lg */\nexport const injectIsLg = () => {\n return toSignal(inject(ViewportService).isLg$, { requireSync: true });\n};\n/** Inject a signal containing a boolean value indicating if the viewport is xl */\nexport const injectIsXl = () => {\n return toSignal(inject(ViewportService).isXl$, { requireSync: true });\n};\n/** Inject a signal containing a boolean value indicating if the viewport is 2xl */\nexport const injectIs2Xl = () => {\n return toSignal(inject(ViewportService).is2Xl$, { requireSync: true });\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) => {\n return inject(ViewportService).isMatched(options);\n};\n/**\n * Inject a signal containing a boolean value indicating if the viewport is matching the provided options.\n */\nexport const injectObserveBreakpoint = (options) => {\n return toSignal(inject(ViewportService).observe(options), { initialValue: injectBreakpointIsMatched(options) });\n};\n/** Inject a signal containing the current breakpoint. */\nexport const injectCurrentBreakpoint = () => {\n return toSignal(inject(ViewportService).currentViewport$, {\n initialValue: inject(ViewportService).currentViewport,\n });\n};\n/** Inject a signal that indicates if the user is using a portrait display */\nexport const injectIsPortrait = () => {\n const queryResult = toSignal(createMediaQueryObservable('(orientation: portrait)'), { requireSync: true });\n return computed(() => queryResult()?.matches);\n};\n/** Inject a signal that indicates if the user is using a landscape display */\nexport const injectIsLandscape = () => {\n const queryResult = toSignal(createMediaQueryObservable('(orientation: landscape)'), { requireSync: true });\n return computed(() => queryResult()?.matches);\n};\n/** Inject a signal containing the current display orientation */\nexport const injectDisplayOrientation = () => {\n const isPortrait = injectIsPortrait();\n return computed(() => {\n if (isPortrait())\n return 'portrait';\n return 'landscape';\n });\n};\n/** Inject a signal that indicates if the device has a touch input */\nexport const injectHasTouchInput = () => {\n const queryResult = toSignal(createMediaQueryObservable('(pointer: coarse)'), { requireSync: true });\n return computed(() => queryResult()?.matches);\n};\n/** Inject a signal that indicates if the device has a fine input (mouse or stylus) */\nexport const injectHasPrecisionInput = () => {\n const queryResult = toSignal(createMediaQueryObservable('(pointer: fine)'), { requireSync: true });\n return computed(() => queryResult()?.matches);\n};\n/** Inject a signal containing the current device input type */\nexport const injectDeviceInputType = () => {\n const isTouch = injectHasTouchInput();\n return computed(() => {\n if (isTouch())\n return 'touch';\n return 'mouse';\n });\n};\n/** Inject a signal containing a boolean value indicating if the user can hover (eg. using a mouse) */\nexport const injectCanHover = () => {\n const queryResult = toSignal(createMediaQueryObservable('(hover: hover)'), { requireSync: true });\n return computed(() => queryResult()?.matches);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUNMLFVBQVUsRUFFVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFHbkIsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBQ0gsS0FBSyxFQUNMLEVBQUUsRUFDRixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxtQkFBbUIsRUFBZSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUs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QUFDO1FBQzlCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsc0dBQXNHO0FBQ3RHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7SUFDakMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVsRyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBFZmZlY3RSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFBMQVRGT1JNX0lELFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgU2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgaXNTaWduYWwsXG4gIGxpbmtlZFNpZ25hbCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblNraXBwZWQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHBhaXJ3aXNlLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRVRfUFJPUEVSVFlfUkVNT1ZFRCwgUm91dGVyU3RhdGUsIFJvdXRlclN0YXRlU2VydmljZSwgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5leHRGcmFtZSB9IGZyb20gJy4vYW5pbWF0aW9uLnV0aWxzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi9lcXVhbC51dGlsJztcbmltcG9ydCB7IGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZhYmxlIH0gZnJvbSAnLi9tZWRpYS1xdWVyeS1vYnNlcnZhYmxlLnV0aWwnO1xuaW1wb3J0IHsgaXNFbGVtZW50VmlzaWJsZSB9IGZyb20gJy4vc2Nyb2xsYWJsZS51dGlscyc7XG5cbnR5cGUgU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PlxuICB8IEFycmF5PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZDtcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUgPVxuICB8IEhUTUxFbGVtZW50XG4gIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgfCBPYnNlcnZhYmxlPFNpZ25hbEVsZW1lbnRCaW5kaW5nQ29tcGxleFR5cGU+XG4gIHwgU2lnbmFsPFNpZ25hbEVsZW1lbnRCaW5kaW5nQ29tcGxleFR5cGU+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgRWxlbWVudFNpZ25hbDtcblxudHlwZSBFbGVtZW50U2lnbmFsID0gU2lnbmFsPHtcbiAgLyoqIEBkZXByZWNhdGVkIEFsd2F5cyB1c2UgY3VycmVudEVsZW1lbnRzICAqL1xuICBjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCBBbHdheXMgdXNlIHByZXZpb3VzRWxlbWVudHMgICovXG4gIHByZXZpb3VzRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBjdXJyZW50RWxlbWVudHM6IEhUTUxFbGVtZW50W107XG4gIHByZXZpb3VzRWxlbWVudHM6IEhUTUxFbGVtZW50W107XG59PjtcblxudHlwZSBFbGVtZW50U2lnbmFsVmFsdWUgPSBSZXR1cm5UeXBlPEVsZW1lbnRTaWduYWw+O1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTaWduYWwoZWw6IHVua25vd24pOiBlbCBpcyBFbGVtZW50U2lnbmFsIHtcbiAgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIGNvbnN0IHZhbCA9IGVsKCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiAnY3VycmVudEVsZW1lbnQnIGluIHZhbCAmJiAncHJldmlvdXNFbGVtZW50JyBpbiB2YWw7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IGRvY3VtZW50RWxlbWVudFNpZ25hbCA9ICgpOiBFbGVtZW50U2lnbmFsID0+XG4gIHNpZ25hbCh7XG4gICAgY3VycmVudEVsZW1lbnQ6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBwcmV2aW91c0VsZW1lbnQ6IG51bGwsXG4gICAgY3VycmVudEVsZW1lbnRzOiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSxcbiAgICBwcmV2aW91c0VsZW1lbnRzOiBbXSxcbiAgfSk7XG5cbmNvbnN0IGJ1aWxkRWxlbWVudFNpZ25hbCA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEVsZW1lbnRTaWduYWwgPT4ge1xuICBpZiAoZWwgPT09IG51bGwgfHwgZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzaWduYWwoeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBjdXJyZW50RWxlbWVudHM6IFtdLCBwcmV2aW91c0VsZW1lbnRzOiBbXSB9KTtcbiAgfVxuXG4gIGlmIChpc0VsZW1lbnRTaWduYWwoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgbGV0IG1FbFNpZ25hbDogU2lnbmFsPEhUTUxFbGVtZW50W10gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHN3aXRjaEVsZW1lbnQgPSAoKSA9PlxuICAgIHN3aXRjaE1hcCgoZWxPclJlZjogU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSkgPT4ge1xuICAgICAgaWYgKGVsT3JSZWYgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICAgICAgcmV0dXJuIGVsT3JSZWYuY2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChlbE9yUmVmKSxcbiAgICAgICAgICBtYXAoKCkgPT4gZWxPclJlZi50b0FycmF5KCkubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWxPclJlZikpIHtcbiAgICAgICAgcmV0dXJuIG9mKGVsT3JSZWYubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2VyY2VkRWwgPSBjb2VyY2VFbGVtZW50KGVsT3JSZWYpO1xuICAgICAgICByZXR1cm4gb2YoY29lcmNlZEVsID8gW2NvZXJjZWRFbF0gOiBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBpZiAoZWwgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgbUVsU2lnbmFsID0gdG9TaWduYWwoZWwucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChpc1NpZ25hbChlbCkpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbCh0b09ic2VydmFibGUoZWwpLnBpcGUoc3dpdGNoRWxlbWVudCgpKSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChcbiAgICAgIGVsLmNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGVsKSxcbiAgICAgICAgbWFwKCgpID0+IGVsLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICksXG4gICAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCB9LFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbUVsU2lnbmFsID0gc2lnbmFsKFtjb2VyY2VFbGVtZW50KGVsKV0pO1xuICB9XG5cbiAgY29uc3QgZWxTaWcgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUobUVsU2lnbmFsKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgoW3ByZXZpb3VzRWxlbWVudHMsIGN1cnJlbnRFbGVtZW50c10pID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNFbCA9IHByZXZpb3VzRWxlbWVudHM/LlswXSA/PyBudWxsO1xuICAgICAgICBjb25zdCBjdXJyZW50RWwgPSBjdXJyZW50RWxlbWVudHM/LlswXSA/PyBudWxsO1xuXG4gICAgICAgIGlmIChjdXJyZW50RWwgJiYgIShjdXJyZW50RWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1JlY2VpdmVkIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuIFlvdSBhcmUgcHJvYmFibHkgdXNpbmcgdmlld0NoaWxkIG9yIGNvbnRlbnRDaGlsZCBvbiBhIGNvbXBvbmVudCB3aXRob3V0IHRoZSByZWFkIG9wdGlvbiBzZXQgdG8gRWxlbWVudFJlZi4gVGhpcyB3aWxsIGNhdXNlIGlzc3Vlcy4gUmVjZWl2ZWQ6JyxcbiAgICAgICAgICAgIGN1cnJlbnRFbCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2aW91c0VsZW1lbnRzOiBwcmV2aW91c0VsZW1lbnRzID8/IFtdLFxuICAgICAgICAgIGN1cnJlbnRFbGVtZW50czogY3VycmVudEVsZW1lbnRzID8/IFtdLFxuICAgICAgICAgIGN1cnJlbnRFbGVtZW50OiBjdXJyZW50RWwsXG4gICAgICAgICAgcHJldmlvdXNFbGVtZW50OiBwcmV2aW91c0VsLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnRzOiBbXSwgY3VycmVudEVsZW1lbnRzOiBbXSB9IH0sXG4gICk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IGVsU2lnKCksIHtcbiAgICBlcXVhbDogKGEsIGIpID0+XG4gICAgICBhLmN1cnJlbnRFbGVtZW50ID09PSBiLmN1cnJlbnRFbGVtZW50ICYmXG4gICAgICBhLnByZXZpb3VzRWxlbWVudCA9PT0gYi5wcmV2aW91c0VsZW1lbnQgJiZcbiAgICAgIGEuY3VycmVudEVsZW1lbnRzLmxlbmd0aCA9PT0gYi5jdXJyZW50RWxlbWVudHMubGVuZ3RoICYmXG4gICAgICBhLmN1cnJlbnRFbGVtZW50cy5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYi5jdXJyZW50RWxlbWVudHNbaV0pICYmXG4gICAgICBhLnByZXZpb3VzRWxlbWVudHMubGVuZ3RoID09PSBiLnByZXZpb3VzRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICBhLnByZXZpb3VzRWxlbWVudHMuZXZlcnkoKHYsIGkpID0+IHYgPT09IGIucHJldmlvdXNFbGVtZW50c1tpXSksXG4gIH0pO1xufTtcblxuY29uc3QgZmlyc3RFbGVtZW50U2lnbmFsID0gKGVsOiBFbGVtZW50U2lnbmFsKSA9PiB7XG4gIHJldHVybiBjb21wdXRlZChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZWwoKTtcblxuICAgICAgaWYgKGN1cnJlbnQuY3VycmVudEVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdNb3JlIHRoYW4gb25lIGVsZW1lbnQgaXMgYm91bmQgdG8gdGhlIHNpZ25hbC4gT25seSB0aGUgZmlyc3QgZWxlbWVudCB3aWxsIGJlIHVzZWQuJyxcbiAgICAgICAgICBjdXJyZW50LmN1cnJlbnRFbGVtZW50cyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VyciA9IGN1cnJlbnQuY3VycmVudEVsZW1lbnRzWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBwcmV2ID0gY3VycmVudC5wcmV2aW91c0VsZW1lbnRzWzBdID8/IG51bGw7XG5cbiAgICAgIHJldHVybiB7IGN1cnJlbnRFbGVtZW50OiBjdXJyLCBwcmV2aW91c0VsZW1lbnQ6IHByZXYgfTtcbiAgICB9LFxuICAgIHsgZXF1YWw6IChhLCBiKSA9PiBhLmN1cnJlbnRFbGVtZW50ID09PSBiLmN1cnJlbnRFbGVtZW50ICYmIGEucHJldmlvdXNFbGVtZW50ID09PSBiLnByZXZpb3VzRWxlbWVudCB9LFxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFNpZ25hbEVmZmVjdHNDb25maWc8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+IHtcbiAgLyoqIFRoZSB0b2tlbnMgdG8gYXBwbHkgYW5kIHRoZWlyIHNpZ25hbCB2YWx1ZSAgKi9cbiAgdG9rZW5NYXA6IFQ7XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGZvciBlbGVtZW50cyB0aGF0IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBzaWduYWwgZWZmZWN0cyAqL1xuICBjbGVhbnVwRm46IChlbDogSFRNTEVsZW1lbnQsIHRva2Vuczogc3RyaW5nW10pID0+IHZvaWQ7XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGZvciBlbGVtZW50cyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIHNpZ25hbCBlZmZlY3RzIG9yIHdoZW4gdGhlaXIgc2lnbmFsIHZhbHVlIGNoYW5nZXMgKi9cbiAgdXBkYXRlRm46IChlbDogSFRNTEVsZW1lbnQsIHRva2Vuczogc3RyaW5nW10sIGNvbmRpdGlvblJlc3VsdDogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2lnbmFsRWZmZWN0cyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oXG4gIGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsXG4gIGNvbmZpZzogQnVpbGRTaWduYWxFZmZlY3RzQ29uZmlnPFQ+LFxuKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50RWxlbWVudHMsIHByZXZpb3VzRWxlbWVudHMgfSA9IGVsZW1lbnRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IHByZXZpb3VzRWwgb2YgcHJldmlvdXNFbGVtZW50cykge1xuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50cy5pbmNsdWRlcyhwcmV2aW91c0VsKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHRva2VucyA9IE9iamVjdC5rZXlzKGNvbmZpZy50b2tlbk1hcClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkuc3BsaXQoJyAnKSlcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgaWYgKCF0b2tlbnMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uZmlnLmNsZWFudXBGbihwcmV2aW91c0VsLCB0b2tlbnMpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY3VycmVudEVsIG9mIGN1cnJlbnRFbGVtZW50cykge1xuICAgICAgaWYgKHByZXZpb3VzRWxlbWVudHMuaW5jbHVkZXMoY3VycmVudEVsKSkgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3QgW3Rva2VucywgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudG9rZW5NYXApKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAgIGNvbmZpZy51cGRhdGVGbihjdXJyZW50RWwsIHRva2VuQXJyYXksIGNvbmRpdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBlZmZlY3RzOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2Vuczogc3RyaW5nKSA9PiB0b2tlbnMgaW4gZWZmZWN0cztcblxuICBjb25zdCBwdXNoID0gKHRva2Vuczogc3RyaW5nLCBzaWduYWw6IFNpZ25hbDx1bmtub3duPikgPT4ge1xuICAgIGlmIChoYXModG9rZW5zKSkgcmV0dXJuO1xuXG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3RzW3Rva2Vuc10gPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRFbGVtZW50cyB9ID0gdW50cmFja2VkKCgpID0+IGVsZW1lbnRzKCkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNpZ25hbCgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uZmlnLnVwZGF0ZUZuKGVsLCB0b2tlbkFycmF5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHB1c2hNYW55ID0gKG1hcDogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuICAgIGZvciAoY29uc3QgW3Rva2Vucywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2Vucywgc2lnbmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlID0gKHRva2Vuczogc3RyaW5nKSA9PiB7XG4gICAgZWZmZWN0c1t0b2tlbnNdPy5kZXN0cm95KCk7XG5cbiAgICBkZWxldGUgZWZmZWN0c1t0b2tlbnNdO1xuXG4gICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50cykge1xuICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgaWYgKCF0b2tlbkFycmF5Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbmZpZy5jbGVhbnVwRm4oZWwsIHRva2VuQXJyYXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmVNYW55ID0gKHRva2Vuczogc3RyaW5nW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgcmVtb3ZlKHRva2VuKTtcbiAgICB9XG4gIH07XG5cbiAgcHVzaE1hbnkoY29uZmlnLnRva2VuTWFwKTtcblxuICByZXR1cm4geyByZW1vdmUsIHJlbW92ZU1hbnksIGhhcywgcHVzaCwgcHVzaE1hbnkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxJc1JlbmRlcmVkID0gKCkgPT4ge1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBhZnRlck5leHRSZW5kZXIoKCkgPT4gaXNSZW5kZXJlZC5zZXQodHJ1ZSkpO1xuXG4gIHJldHVybiBpc1JlbmRlcmVkLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxDbGFzc2VzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBjbGFzc01hcDogVCkgPT4ge1xuICBjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoZWwsIHtcbiAgICB0b2tlbk1hcDogY2xhc3NNYXAsXG4gICAgY2xlYW51cEZuOiAoZWwsIHRva2VucykgPT4gdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgdG9rZW4pKSxcbiAgICB1cGRhdGVGbjogKGVsLCB0b2tlbnMsIGNvbmRpdGlvbikgPT4ge1xuICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgdG9rZW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gcmVuZGVyZXIuYWRkQ2xhc3MoZWwsIHRva2VuKSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCcsICdoaWRkZW4nLCAnaW5lcnQnXTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBhdHRyaWJ1dGVNYXA6IFQsXG4pID0+IHtcbiAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKGVsLCB7XG4gICAgdG9rZW5NYXA6IGF0dHJpYnV0ZU1hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IGVsLnJlbW92ZUF0dHJpYnV0ZSh0b2tlbikpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBpZiAoQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMuaW5jbHVkZXModG9rZW4pKSB7XG4gICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCB0b2tlbiwgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZWwsIHRva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsLCB0b2tlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCB0b2tlbiwgYCR7Y29uZGl0aW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgcmV0dXJuIGJ1aWxkU2lnbmFsRWZmZWN0cyhlbCwge1xuICAgIHRva2VuTWFwOiBzdHlsZU1hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCB0b2tlbiwgUmVuZGVyZXJTdHlsZUZsYWdzMi5EYXNoQ2FzZSkpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsIHRva2VuLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgdG9rZW4sIGAke2NvbmRpdGlvbn1gLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naWNhbFNpemUge1xuICBpbmxpbmVTaXplOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBFbGVtZW50UmVjdCA9IHtcbiAgYm90dG9tOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIHJpZ2h0OiBudW1iZXI7XG4gIHRvcDogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRTaXplID0ge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBib3VuZGluZ0NsaWVudFJlY3RUb0VsZW1lbnRSZWN0ID0gKHJlY3Q6IERPTVJlY3RSZWFkT25seSk6IEVsZW1lbnRSZWN0ID0+ICh7XG4gIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gIGxlZnQ6IHJlY3QubGVmdCxcbiAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gIHRvcDogcmVjdC50b3AsXG4gIHdpZHRoOiByZWN0LndpZHRoLFxuICB4OiByZWN0LngsXG4gIHk6IHJlY3QueSxcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRWxlbWVudERpbWVuc2lvbnMgPSAoZWw6IEhUTUxFbGVtZW50IHwgbnVsbCwgcmVjdD86IERPTVJlY3QpOiBOdWxsYWJsZUVsZW1lbnREaW1lbnNpb25zID0+IHtcbiAgaWYgKCFlbCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWN0OiBudWxsLFxuICAgICAgY2xpZW50OiBudWxsLFxuICAgICAgc2Nyb2xsOiBudWxsLFxuICAgICAgb2Zmc2V0OiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBjYWNoZWROb3JtYWxpemVkUmVjdCA9IHJlY3QgPyBib3VuZGluZ0NsaWVudFJlY3RUb0VsZW1lbnRSZWN0KHJlY3QpIDogbnVsbDtcbiAgY29uc3QgcmVjdEZuID0gKCkgPT5cbiAgICBjYWNoZWROb3JtYWxpemVkUmVjdCA/IGNhY2hlZE5vcm1hbGl6ZWRSZWN0IDogYm91bmRpbmdDbGllbnRSZWN0VG9FbGVtZW50UmVjdChlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG5cbiAgcmV0dXJuIHtcbiAgICByZWN0OiByZWN0Rm4sXG4gICAgY2xpZW50OiB7IHdpZHRoOiBlbC5jbGllbnRXaWR0aCwgaGVpZ2h0OiBlbC5jbGllbnRIZWlnaHQgfSxcbiAgICBzY3JvbGw6IHsgd2lkdGg6IGVsLnNjcm9sbFdpZHRoLCBoZWlnaHQ6IGVsLnNjcm9sbEhlaWdodCB9LFxuICAgIG9mZnNldDogeyB3aWR0aDogZWwub2Zmc2V0V2lkdGgsIGhlaWdodDogZWwub2Zmc2V0SGVpZ2h0IH0sXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBFbGVtZW50RGltZW5zaW9ucyA9IHtcbiAgcmVjdDogKCkgPT4gRWxlbWVudFJlY3Q7XG4gIGNsaWVudDogRWxlbWVudFNpemU7XG4gIHNjcm9sbDogRWxlbWVudFNpemU7XG4gIG9mZnNldDogRWxlbWVudFNpemU7XG59O1xuXG5leHBvcnQgdHlwZSBOdWxsYWJsZUVsZW1lbnREaW1lbnNpb25zID0ge1xuICBbSyBpbiBrZXlvZiBFbGVtZW50RGltZW5zaW9uc106IEVsZW1lbnREaW1lbnNpb25zW0tdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50RGltZW5zaW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICgpID0+IGNyZWF0ZUVsZW1lbnREaW1lbnNpb25zKGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQpO1xuXG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zU2lnbmFsID0gc2lnbmFsPE51bGxhYmxlRWxlbWVudERpbWVuc2lvbnM+KGluaXRpYWxWYWx1ZSgpKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGVudHJ5LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IG5ld0RpbWVuc2lvbnMgPSBjcmVhdGVFbGVtZW50RGltZW5zaW9ucyh0YXJnZXQpO1xuXG4gICAgICB6b25lLnJ1bigoKSA9PiBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQobmV3RGltZW5zaW9ucykpO1xuICAgIH1cbiAgfSk7XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zU2lnbmFsLnNldChpbml0aWFsVmFsdWUoKSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wdXRlZERpc3BsYXkgPSBnZXRDb21wdXRlZFN0eWxlKGVscy5jdXJyZW50RWxlbWVudCkuZGlzcGxheTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy0nKTtcblxuICAgICAgICBpZiAoY29tcHV0ZWREaXNwbGF5ID09PSAnaW5saW5lJyAmJiBpc0Rldk1vZGUoKSAmJiBjdXJyZW50RWxJc0FuZ3VsYXJDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEVsZW1lbnQgPCR7ZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PiBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCBhbmQgaGFzIGEgZGlzcGxheSBvZiAnaW5saW5lJy4gSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBiZSBvYnNlcnZlZCBmb3IgZGltZW5zaW9ucy4gUGxlYXNlIGNoYW5nZSBpdCB0byAnYmxvY2snIG9yIHNvbWV0aGluZyBlbHNlLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gZWxlbWVudERpbWVuc2lvbnNTaWduYWwoKSwge1xuICAgIGVxdWFsOiAoYSwgYikgPT4gZXF1YWwoYSwgYiksXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50RGltZW5zaW9ucyA9ICgpID0+IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50TXV0YXRpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBNdXRhdGlvbk9ic2VydmVySW5pdCkgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICBjb25zdCBlbGVtZW50TXV0YXRpb25zU2lnbmFsID0gc2lnbmFsPE11dGF0aW9uUmVjb3JkIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuc2V0KGVudHJ5KSk7XG4gICAgfVxuICB9KTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICBlbGVtZW50TXV0YXRpb25zU2lnbmFsLnNldChudWxsKTtcblxuICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbHMuY3VycmVudEVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRNdXRhdGlvbnMgPSAob3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PlxuICBzaWduYWxFbGVtZW50TXV0YXRpb25zKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCB0eXBlIFNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZU9wdGlvbnMgPSB7XG4gIC8qKiBUaGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRpb24gdG8gc2Nyb2xsIHRvLiBPbmNlIGEgdHJ1dGh5IHZhbHVlIGdldCdzIGVtaXR0ZWQsIGFsbCBmdXJ0aGVyIHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQuICovXG4gIGluaXRpYWxTY3JvbGxQb3NpdGlvbj86IFNpZ25hbDxTY3JvbGxUb09wdGlvbnMgfCBudWxsPjtcbn07XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRTY3JvbGxTdGF0ZSA9IHtcbiAgY2FuU2Nyb2xsOiBib29sZWFuO1xuICBjYW5TY3JvbGxIb3Jpem9udGFsbHk6IGJvb2xlYW47XG4gIGNhblNjcm9sbFZlcnRpY2FsbHk6IGJvb2xlYW47XG4gIGVsZW1lbnREaW1lbnNpb25zOiBOdWxsYWJsZUVsZW1lbnREaW1lbnNpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGFyZVNjcm9sbFN0YXRlc0VxdWFsID0gKGE6IEVsZW1lbnRTY3JvbGxTdGF0ZSwgYjogRWxlbWVudFNjcm9sbFN0YXRlKSA9PiB7XG4gIHJldHVybiAoXG4gICAgYS5jYW5TY3JvbGwgPT09IGIuY2FuU2Nyb2xsICYmXG4gICAgYS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgPT09IGIuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ICYmXG4gICAgYS5jYW5TY3JvbGxWZXJ0aWNhbGx5ID09PSBiLmNhblNjcm9sbFZlcnRpY2FsbHkgJiZcbiAgICBlcXVhbChhLmVsZW1lbnREaW1lbnNpb25zLCBiLmVsZW1lbnREaW1lbnNpb25zKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogU2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlT3B0aW9ucykgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IG9ic2VydmVkRWwgPSBmaXJzdEVsZW1lbnRTaWduYWwoZWxlbWVudHMpO1xuICBjb25zdCBlbGVtZW50RGltZW5zaW9ucyA9IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGVsZW1lbnRzKTtcbiAgY29uc3QgZWxlbWVudE11dGF0aW9ucyA9IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoZWxlbWVudHMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxTY3JvbGxQb3NpdGlvbiA9IG9wdGlvbnM/LmluaXRpYWxTY3JvbGxQb3NpdGlvbjtcblxuICBpZiAoaW5pdGlhbFNjcm9sbFBvc2l0aW9uKSB7XG4gICAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gaW5pdGlhbFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gb2JzZXJ2ZWRFbCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gJiYgZWxlbWVudCkge1xuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24ubGVmdCAhPT0gdW5kZWZpbmVkKSBlbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi5sZWZ0O1xuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24udG9wICE9PSB1bmRlZmluZWQpIGVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb24udG9wO1xuICAgICAgICByZWYuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgbm90U2Nyb2xsYWJsZSA9IChkaW1lbnNpb25zOiBOdWxsYWJsZUVsZW1lbnREaW1lbnNpb25zKSA9PiAoe1xuICAgIGNhblNjcm9sbDogZmFsc2UsXG4gICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5OiBmYWxzZSxcbiAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5OiBmYWxzZSxcbiAgICBlbGVtZW50RGltZW5zaW9uczogZGltZW5zaW9ucyxcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkPEVsZW1lbnRTY3JvbGxTdGF0ZT4oXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IG9ic2VydmVkRWwoKS5jdXJyZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBlbGVtZW50RGltZW5zaW9ucygpO1xuXG4gICAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgICAvLyBDaGFuZ2VzIHRvIHRoZSBET00gY2FuIGFmZmVjdCB0aGUgc2Nyb2xsIHN0YXRlIG9mIHRoZSBlbGVtZW50LlxuICAgICAgZWxlbWVudE11dGF0aW9ucygpO1xuXG4gICAgICBpZiAoIWVsZW1lbnQgfHwgIWlzUmVuZGVyZWQoKSkgcmV0dXJuIG5vdFNjcm9sbGFibGUoZGltZW5zaW9ucyk7XG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0LCBjbGllbnRXaWR0aCB9ID0gZWxlbWVudDtcblxuICAgICAgY29uc3QgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID0gc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGNhblNjcm9sbFZlcnRpY2FsbHkgPSBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhblNjcm9sbDogY2FuU2Nyb2xsSG9yaXpvbnRhbGx5IHx8IGNhblNjcm9sbFZlcnRpY2FsbHksXG4gICAgICAgIGNhblNjcm9sbEhvcml6b250YWxseSxcbiAgICAgICAgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgICB9O1xuICAgIH0sXG4gICAgeyBlcXVhbDogKGEsIGIpID0+IGFyZVNjcm9sbFN0YXRlc0VxdWFsKGEsIGIpIH0sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRTY3JvbGxTdGF0ZSA9ICgpID0+IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZShpbmplY3QoRWxlbWVudFJlZikpO1xuXG5leHBvcnQgdHlwZSBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucyA9IE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+ICYge1xuICByb290PzogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlO1xuICBlbmFibGVkPzogU2lnbmFsPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgcm9vdCA9IGZpcnN0RWxlbWVudFNpZ25hbChvcHRpb25zPy5yb290ID8gYnVpbGRFbGVtZW50U2lnbmFsKG9wdGlvbnM/LnJvb3QpIDogZG9jdW1lbnRFbGVtZW50U2lnbmFsKCkpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGlzRW5hYmxlZCA9IG9wdGlvbnM/LmVuYWJsZWQgPz8gc2lnbmFsKHRydWUpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdPihbXSk7XG4gIGNvbnN0IG9ic2VydmVyID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgY3VycmVudGx5T2JzZXJ2ZWRFbGVtZW50cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgY29uc3QgdXBkYXRlSW50ZXJzZWN0aW9ucyA9IChlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICBsZXQgY3VycmVudFZhbHVlcyA9IFsuLi5lbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsKCldO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0VudHJ5SW5kZXggPSBjdXJyZW50VmFsdWVzLmZpbmRJbmRleCgodikgPT4gdi50YXJnZXQgPT09IGVudHJ5LnRhcmdldCk7XG5cbiAgICAgIC8vIFJvdW5kIHRoZSBpbnRlcnNlY3Rpb24gcmF0aW8gdG8gdGhlIG5lYXJlc3QgMC4wMSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBlcnJvcnMgYW5kIHN5c3RlbSBzY2FsaW5nIGlzc3Vlcy5cbiAgICAgIGNvbnN0IHJvdW5kZWRJbnRlcnNlY3Rpb25SYXRpbyA9IE1hdGgucm91bmQoZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gKiAxMDApIC8gMTAwO1xuXG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb25FbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSA9IHtcbiAgICAgICAgYm91bmRpbmdDbGllbnRSZWN0OiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QsXG4gICAgICAgIGludGVyc2VjdGlvblJhdGlvOiByb3VuZGVkSW50ZXJzZWN0aW9uUmF0aW8sXG4gICAgICAgIGludGVyc2VjdGlvblJlY3Q6IGVudHJ5LmludGVyc2VjdGlvblJlY3QsXG4gICAgICAgIGlzSW50ZXJzZWN0aW5nOiBlbnRyeS5pc0ludGVyc2VjdGluZyxcbiAgICAgICAgcm9vdEJvdW5kczogZW50cnkucm9vdEJvdW5kcyxcbiAgICAgICAgdGFyZ2V0OiBlbnRyeS50YXJnZXQsXG4gICAgICAgIHRpbWU6IGVudHJ5LnRpbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoZXhpc3RpbmdFbnRyeUluZGV4ICE9PSAtMSkge1xuICAgICAgICBjdXJyZW50VmFsdWVzID0gW1xuICAgICAgICAgIC4uLmN1cnJlbnRWYWx1ZXMuc2xpY2UoMCwgZXhpc3RpbmdFbnRyeUluZGV4KSxcbiAgICAgICAgICBpbnRlcnNlY3Rpb25FbnRyeSxcbiAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKGV4aXN0aW5nRW50cnlJbmRleCArIDEpLFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFZhbHVlcyA9IFsuLi5jdXJyZW50VmFsdWVzLCBpbnRlcnNlY3Rpb25FbnRyeV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQoY3VycmVudFZhbHVlcykpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUludGVyc2VjdGlvbk9ic2VydmVyID0gKHJlbmRlcmVkOiBib29sZWFuLCBlbmFibGVkOiBib29sZWFuLCByb290RWw6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICBjdXJyZW50bHlPYnNlcnZlZEVsZW1lbnRzLmNsZWFyKCk7XG5cbiAgICBpZiAoIXJlbmRlcmVkIHx8ICFlbmFibGVkIHx8ICFyb290RWwpIHtcbiAgICAgIG9ic2VydmVyLnNldChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4gdXBkYXRlSW50ZXJzZWN0aW9ucyhlbnRyaWVzKSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJvb3Q6IHJvb3RFbCxcbiAgICB9KTtcblxuICAgIG9ic2VydmVyLnNldChuZXdPYnNlcnZlcik7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlT2JzZXJ2ZWRFbGVtZW50cyA9IChvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsLCBlbGVtZW50czogRWxlbWVudFNpZ25hbFZhbHVlKSA9PiB7XG4gICAgY29uc3Qgcm9vdEVsID0gcm9vdCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgaWYgKCFvYnNlcnZlciB8fCAhcm9vdEVsKSByZXR1cm47XG5cbiAgICBjb25zdCByb290Qm91bmRzID0gcm9vdEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3QgY3VyckludGVyc2VjdGlvblZhbHVlID0gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCgpO1xuICAgIGNvbnN0IG5ld0ludGVyc2VjdGlvblZhbHVlOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICBpZiAoY3VycmVudGx5T2JzZXJ2ZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnlJbmRleCA9IGN1cnJJbnRlcnNlY3Rpb25WYWx1ZS5maW5kSW5kZXgoKHYpID0+IHYudGFyZ2V0ID09PSBlbCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnkgPSBjdXJySW50ZXJzZWN0aW9uVmFsdWVbZXhpc3RpbmdFbnRyeUluZGV4XTtcblxuICAgICAgICBpZiAoIWV4aXN0aW5nRW50cnkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBmaW5kIGV4aXN0aW5nIGVudHJ5IGZvciBlbGVtZW50LiBUaGUgaW50ZXJzZWN0aW9uIG9ic2VydmVyIG1pZ2h0IGJlIGJyb2tlbiBub3cuJywgZWwpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3SW50ZXJzZWN0aW9uVmFsdWUucHVzaChleGlzdGluZ0VudHJ5KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsQm91bmRzID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGNvbnN0IGluaXRpYWxFbGVtZW50VmlzaWJpbGl0eSA9IGlzRWxlbWVudFZpc2libGUoe1xuICAgICAgICBjb250YWluZXI6IHJvb3RFbCxcbiAgICAgICAgZWxlbWVudDogZWwsXG4gICAgICAgIGNvbnRhaW5lclJlY3Q6IHJvb3RCb3VuZHMsXG4gICAgICAgIGVsZW1lbnRSZWN0OiBlbEJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWluaXRpYWxFbGVtZW50VmlzaWJpbGl0eSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB2aXNpYmlsaXR5IGRhdGEgZm91bmQgZm9yIGVsZW1lbnQuJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgICAgIGNvbnRhaW5lcjogcm9vdEVsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uRW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgPSB7XG4gICAgICAgIGJvdW5kaW5nQ2xpZW50UmVjdDogZWxCb3VuZHMsXG4gICAgICAgIGludGVyc2VjdGlvblJhdGlvOiBpbml0aWFsRWxlbWVudFZpc2liaWxpdHkuaW50ZXJzZWN0aW9uUmF0aW8sXG4gICAgICAgIGludGVyc2VjdGlvblJlY3Q6IGVsQm91bmRzLFxuICAgICAgICBpc0ludGVyc2VjdGluZzogaW5pdGlhbEVsZW1lbnRWaXNpYmlsaXR5LmlzSW50ZXJzZWN0aW5nLFxuICAgICAgICByb290Qm91bmRzOiByb290Qm91bmRzLFxuICAgICAgICB0YXJnZXQ6IGVsLFxuICAgICAgICB0aW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIH07XG5cbiAgICAgIG5ld0ludGVyc2VjdGlvblZhbHVlLnB1c2goaW50ZXJzZWN0aW9uRW50cnkpO1xuXG4gICAgICBjdXJyZW50bHlPYnNlcnZlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVsKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzLnByZXZpb3VzRWxlbWVudHMpIHtcbiAgICAgIGlmIChlbGVtZW50cy5jdXJyZW50RWxlbWVudHMuaW5jbHVkZXMoZWwpKSBjb250aW51ZTtcblxuICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVsKTtcbiAgICAgIGN1cnJlbnRseU9ic2VydmVkRWxlbWVudHMuZGVsZXRlKGVsKTtcbiAgICB9XG5cbiAgICBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLnNldChuZXdJbnRlcnNlY3Rpb25WYWx1ZSk7XG4gIH07XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByb290RWwgPSByb290KCkuY3VycmVudEVsZW1lbnQ7XG4gICAgY29uc3QgcmVuZGVyZWQgPSBpc1JlbmRlcmVkKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHVwZGF0ZUludGVyc2VjdGlvbk9ic2VydmVyKHJlbmRlcmVkLCBlbmFibGVkLCByb290RWwpKTtcbiAgfSk7XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuICAgIGNvbnN0IG9icyA9IG9ic2VydmVyKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4gdXBkYXRlT2JzZXJ2ZWRFbGVtZW50cyhvYnMsIGVscykpO1xuICB9KTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlcigpPy5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudEludGVyc2VjdGlvbiA9IChvcHRpb25zPzogU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMpID0+XG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24oaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRDaGlsZHJlbiA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcbiAgY29uc3QgZWxlbWVudE11dGF0aW9ucyA9IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoZWxlbWVudHMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZChcbiAgICAoKSA9PiB7XG4gICAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuIFtdO1xuXG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgICAvLyBDaGFuZ2VzIHRvIHRoZSBET00gbWF5IGFmZmVjdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnQuXG4gICAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICAgIGlmICghZWxzLmN1cnJlbnRFbGVtZW50KSByZXR1cm4gW107XG5cbiAgICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9LFxuICAgIHsgZXF1YWw6IChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYltpXSkgfSxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2aW91c1NpZ25hbFZhbHVlID0gPFQ+KHNpZ25hbDogU2lnbmFsPFQ+KSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShzaWduYWwpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBtYXAoKFtwcmV2XSkgPT4gcHJldiksXG4gICk7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icyk7XG59O1xuXG5leHBvcnQgdHlwZSBTeW5jU2lnbmFsT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSB0YXJnZXQgc2lnbmFsIHdpbGwgbm90IGJlIHVwZGF0ZWQgd2l0aCB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlIGluIGEgc3luYyBvcGVyYXRpb24uXG4gICAqIFRoaXMgc2hvdWxkIGJlIHNldCB0byB0cnVlIGZvciBzaWduYWxzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCBmaXJzdCBiZWZvcmUgc3luY2luZyAoZWcuIHJlcXVpcmVkIGlucHV0cylcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNraXBTeW5jUmVhZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBmaXJzdCB0aW1lIHRoZSBlZmZlY3Qgd2lsbCBiZSB0cmlnZ2VyZWQgd2lsbCBiZSBza2lwcGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcEZpcnN0UnVuPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzeW5jU2lnbmFsID0gPFQ+KGZyb206IFNpZ25hbDxUPiwgdG86IFdyaXRhYmxlU2lnbmFsPFQ+LCBvcHRpb25zPzogU3luY1NpZ25hbE9wdGlvbnMpID0+IHtcbiAgbGV0IGlzRmlyc3RSdW4gPSBvcHRpb25zPy5za2lwU3luY1JlYWQgPyBmYWxzZSA6IHRydWU7XG5cbiAgaWYgKCFvcHRpb25zPy5za2lwU3luY1JlYWQpIHtcbiAgICB0cnkge1xuICAgICAgLy8gdGhpcyBtaWdodCB0aHJvdyBpZiB0aGUgc2lnbmFsIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKGVnLiBhIHJlcXVpcmVkIHNpZ25hbCBpbnB1dCBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yKVxuICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGp1c3Qgc2tpcCB0aGUgaW5pdGlhbCBzeW5jXG4gICAgICB0by5zZXQoZnJvbSgpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGlzRmlyc3RSdW4gPSBmYWxzZTtcblxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHN5bmMgc2lnbmFscy4gVGhlIHRhcmdldCBzaWduYWwgaXMgbm90IHlldCBpbml0aWFsaXplZC4nLCB7IGZyb20sIHRvIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlZiA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybVZhbCA9IGZyb20oKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwRmlyc3RSdW4gJiYgaXNGaXJzdFJ1bikge1xuICAgICAgaXNGaXJzdFJ1biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0by5zZXQoZm9ybVZhbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZWY7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJvdW5jZUZpcnN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbCA9IDxcbiAgVENvbnRyb2xJbnB1dCBleHRlbmRzIFNpZ25hbDxBYnN0cmFjdENvbnRyb2wgfCBudWxsPiB8IEFic3RyYWN0Q29udHJvbCxcbiAgVENvbnRyb2wgZXh0ZW5kcyBUQ29udHJvbElucHV0IGV4dGVuZHMgU2lnbmFsPGluZmVyIFRTaWduYWxDb250cm9sPiA/IFRTaWduYWxDb250cm9sIDogVENvbnRyb2xJbnB1dCxcbj4oXG4gIGNvbnRyb2w6IFRDb250cm9sSW5wdXQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIHR5cGUgVFZhbHVlID0gUmV0dXJuVHlwZTxOb25OdWxsYWJsZTxUQ29udHJvbD5bJ2dldFJhd1ZhbHVlJ10+O1xuXG4gIGxldCBpbml0aWFsVmFsdWU6IFRWYWx1ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGdldFJhd1ZhbHVlU2FmZSA9IChjdHJsOiBTaWduYWw8QWJzdHJhY3RDb250cm9sIHwgbnVsbD4gfCBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogVFZhbHVlIHwgbnVsbCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBpc1NpZ25hbChjdHJsKSA/IChjdHJsKCk/LmdldFJhd1ZhbHVlKCkgPz8gbnVsbCkgOiAoY3RybD8uZ2V0UmF3VmFsdWUoKSA/PyBudWxsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZSBlcnJvcnMuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgcGFzc2VkIGNvbnRyb2wgaXMgYSByZXF1aXJlZCBpbnB1dCBhbmQgaXMgbm90IHlldCBpbml0aWFsaXplZC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBpbml0aWFsVmFsdWUgPSBnZXRSYXdWYWx1ZVNhZmUoY29udHJvbCk7XG5cbiAgY29uc3QgY29udHJvbFN0cmVhbSA9IGlzU2lnbmFsKGNvbnRyb2wpXG4gICAgPyB0b09ic2VydmFibGU8QWJzdHJhY3RDb250cm9sIHwgbnVsbD4oY29udHJvbClcbiAgICA6IG9mPEFic3RyYWN0Q29udHJvbCB8IG51bGw+KGNvbnRyb2wpO1xuXG4gIGNvbnN0IGNvbnRyb2xPYnMgPSBjb250cm9sU3RyZWFtLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjdHJsKSA9PiB7XG4gICAgICBpZiAoIWN0cmwpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgY29uc3QgdmNzT2JzID0gb3B0aW9ucz8uZGVib3VuY2VUaW1lXG4gICAgICAgID8gY3RybC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUob3B0aW9ucy5kZWJvdW5jZVRpbWUpKVxuICAgICAgICA6IGN0cmwudmFsdWVDaGFuZ2VzO1xuXG4gICAgICByZXR1cm4gdmNzT2JzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChjdHJsLmdldFJhd1ZhbHVlKCkpLFxuICAgICAgICBtYXAoKCkgPT4gY3RybC5nZXRSYXdWYWx1ZSgpKSxcbiAgICAgICk7XG4gICAgfSksXG4gICk7XG5cbiAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFRWYWx1ZSB8IG51bGw+ID0gIW9wdGlvbnM/LmRlYm91bmNlRmlyc3QgPyBtZXJnZShvZihpbml0aWFsVmFsdWUpLCBjb250cm9sT2JzKSA6IGNvbnRyb2xPYnM7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBlcXVhbChhLCBiKSkpLCB7XG4gICAgaW5pdGlhbFZhbHVlLFxuICB9KTtcbn07XG5cbi8qKlxuICogVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHBhaXIgaXMgdGhlIHByZXZpb3VzIHZhbHVlIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBjb250cm9sVmFsdWVTaWduYWxXaXRoUHJldmlvdXMgPSA8VCBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucykpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBzdGFydFdpdGgoW251bGwsIGNvbnRyb2wuZ2V0UmF3VmFsdWUoKV0pLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBzZXQgdG8gYDMwMGAgYW5kIGBkZWJvdW5jZUZpcnN0YCBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgY29uc3QgZGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiBjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucyA/PyB7IGRlYm91bmNlVGltZTogMzAwLCBkZWJvdW5jZUZpcnN0OiB0cnVlIH0pO1xuXG5leHBvcnQgdHlwZSBJbmplY3RVdGlsQ29uZmlnID0ge1xuICAvKiogVGhlIGluamVjdG9yIHRvIHVzZSBmb3IgdGhlIGluamVjdGlvbi4gTXVzdCBiZSBwcm92aWRlZCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIHdpdGhpbiBhIGluamVjdGlvbiBjb250ZXh0LiAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufTtcblxuZXhwb3J0IHR5cGUgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxJbiwgT3V0PiA9IHtcbiAgLyoqXG4gICAqIEEgdHJhbnNmb3JtIGZ1bmN0aW9uIHNpbWlsYXIgdG8gdGhlIGB0cmFuc2Zvcm1gIGZ1bmN0aW9uIGluIEFuZ3VsYXIgaW5wdXQgYmluZGluZ3MuXG4gICAqIENhbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgdmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLlxuICAgKiBFLmcuIHRyYW5zZm9ybWluZyBgXCJ0cnVlXCJgIHRvIGB0cnVlYCBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZS5cbiAgICovXG4gIHRyYW5zZm9ybT86ICh2YWx1ZTogSW4pID0+IE91dDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1PclJldHVybiA9IDxJbiwgT3V0PihzcmM6IFNpZ25hbDxJbj4sIGNvbmZpZz86IEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8SW4sIE91dD4pID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjb25maWc/LnRyYW5zZm9ybTtcblxuICBpZiAodHJhbnNmb3JtZXIpIHtcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gdHJhbnNmb3JtZXIoc3JjKCkpKTtcbiAgfVxuXG4gIHJldHVybiBzcmMgYXMgdW5rbm93biBhcyBTaWduYWw8T3V0Pjtcbn07XG5cbmNvbnN0IGNyZWF0ZUluaXRpYWxSb3V0ZSA9ICgpID0+IHtcbiAgY29uc3QgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIGlmICghaXNCcm93c2VyKSB7XG4gICAgcmV0dXJuIHJvdXRlci51cmw7XG4gIH1cblxuICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xufTtcblxuLyoqIEluamVjdCB0aGUgY3VycmVudCByb3V0ZXIgZXZlbnQgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZXJFdmVudCA9ICgpID0+IHtcbiAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgY29uc3QgaW5pdGlhbFJvdXRlID0gY3JlYXRlSW5pdGlhbFJvdXRlKCk7XG5cbiAgcmV0dXJuIGxpbmtlZFNpZ25hbCh7XG4gICAgc291cmNlOiAoKSA9PiBuZXcgTmF2aWdhdGlvbkVuZCgtMSwgaW5pdGlhbFJvdXRlLCBpbml0aWFsUm91dGUpLFxuICAgIGNvbXB1dGF0aW9uOiAoKSA9PiByb3V0ZXJTdGF0ZVNlcnZpY2UubGF0ZXN0RXZlbnQoKSxcbiAgfSkuYXNSZWFkb25seSgpO1xufTtcblxuLyoqXG4gKiBJbmplY3QgdGhlIGN1cnJlbnQgdXJsLlxuICogVGhlIHVybCBpbmNsdWRlcyBxdWVyeSBwYXJhbXMgYXMgd2VsbCBhcyB0aGUgZnJhZ21lbnQuIFVzZSBgaW5qZWN0Um91dGVgIGluc3RlYWQgaWYgeW91IGFyZSBub3QgaW50cnVzdGVkIGluIHRob3NlLlxuICogQGV4YW1wbGUgXCIvbXktcGFnZT9xdWVyeT0xJnBhcmFtPXRydWUjZnJhZ21lbnRcIlxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0VXJsID0gKCkgPT4ge1xuICBjb25zdCBldmVudCA9IGluamVjdFJvdXRlckV2ZW50KCk7XG5cbiAgY29uc3QgdXJsID0gc2lnbmFsKGNyZWF0ZUluaXRpYWxSb3V0ZSgpKTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IGV2ZW50KCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRFdmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdXJsLnNldChjdXJyZW50RXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50RXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU2tpcHBlZCkge1xuICAgICAgICB1cmwuc2V0KGN1cnJlbnRFdmVudC51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdXJsLmFzUmVhZG9ubHkoKTtcbn07XG5cbi8qKlxuICogSW5qZWN0IHRoZSBjdXJyZW50IHJvdXRlXG4gKiBAZXhhbXBsZSBcIi9teS1wYWdlXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFJvdXRlID0gKCkgPT4ge1xuICBjb25zdCB1cmwgPSBpbmplY3RVcmwoKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZ1bGxVcmwgPSB1cmwoKTtcbiAgICBjb25zdCB1cmxXaXRob3V0UXVlcnlQYXJhbXMgPSBmdWxsVXJsLnNwbGl0KCc/JylbMF0gPz8gJyc7XG4gICAgY29uc3Qgd2l0aG91dEZyYWdtZW50ID0gdXJsV2l0aG91dFF1ZXJ5UGFyYW1zLnNwbGl0KCcjJylbMF0gPz8gJyc7XG5cbiAgICByZXR1cm4gd2l0aG91dEZyYWdtZW50O1xuICB9KTtcbn07XG5cbmNvbnN0IGNyZWF0ZVJvdXRlclN0YXRlID0gKHJvdXRlcjogUm91dGVyKSA9PiB7XG4gIGxldCByb3V0ZSA9IHJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuXG4gIHdoaWxlIChyb3V0ZS5maXJzdENoaWxkKSB7XG4gICAgcm91dGUgPSByb3V0ZS5maXJzdENoaWxkO1xuICB9XG5cbiAgY29uc3QgeyBkYXRhLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCB0aXRsZSwgZnJhZ21lbnQgfSA9IHJvdXRlO1xuXG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBwYXRoUGFyYW1zOiBwYXJhbXMsXG4gICAgcXVlcnlQYXJhbXMsXG4gICAgdGl0bGU6IHRpdGxlID8/IG51bGwsXG4gICAgZnJhZ21lbnQsXG4gIH07XG59O1xuXG4vKipcbiAqIEluamVjdCB0aGUgY29tcGxldGUgcm91dGVyIHN0YXRlLiBUaGlzIGluY2x1ZGVzIHRoZSBjdXJyZW50IHJvdXRlIGRhdGEsIHBhdGggcGFyYW1zLCBxdWVyeSBwYXJhbXMsIHRpdGxlIGFuZCBmcmFnbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFJvdXRlclN0YXRlID0gKCkgPT4ge1xuICBjb25zdCBldmVudCA9IGluamVjdFJvdXRlckV2ZW50KCk7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIGNvbnN0IHJvdXRlclN0YXRlID0gc2lnbmFsPFJvdXRlclN0YXRlPihjcmVhdGVSb3V0ZXJTdGF0ZShyb3V0ZXIpKTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGUgPSBldmVudCgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiBlLmlkID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3V0ZXJTdGF0ZS5zZXQoY3JlYXRlUm91dGVyU3RhdGUocm91dGVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiByb3V0ZXJTdGF0ZSgpLCB7IGVxdWFsIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IHJvdXRlIGZyYWdtZW50ICh0aGUgcGFydCBhZnRlciB0aGUgIyBpbnNpZGUgdGhlIHVybCBpZiBwcmVzZW50KSAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEZyYWdtZW50ID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgY29uc3Qgcm91dGVyU3RhdGUgPSBpbmplY3RSb3V0ZXJTdGF0ZSgpO1xuICBjb25zdCBmcmFnbWVudCA9IGNvbXB1dGVkKCgpID0+IHJvdXRlclN0YXRlKCkuZnJhZ21lbnQpO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihmcmFnbWVudCwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcXVlcnkgcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFF1ZXJ5UGFyYW1zID0gKCkgPT4ge1xuICBjb25zdCByb3V0ZXJTdGF0ZSA9IGluamVjdFJvdXRlclN0YXRlKCk7XG5cbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBjb21wdXRlZCgoKSA9PiByb3V0ZXJTdGF0ZSgpLnF1ZXJ5UGFyYW1zKTtcblxuICByZXR1cm4gcXVlcnlQYXJhbXM7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHJvdXRlIGRhdGEgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZURhdGEgPSAoKSA9PiB7XG4gIGNvbnN0IHJvdXRlclN0YXRlID0gaW5qZWN0Um91dGVyU3RhdGUoKTtcblxuICBjb25zdCBkYXRhID0gY29tcHV0ZWQoKCkgPT4gcm91dGVyU3RhdGUoKS5kYXRhKTtcblxuICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKiBJbmplY3QgdGhlIGN1cnJlbnQgcm91dGUgdGl0bGUgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZVRpdGxlID0gPFQgPSBzdHJpbmcgfCBudWxsPihjb25maWc/OiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+KSA9PiB7XG4gIGNvbnN0IHJvdXRlclN0YXRlID0gaW5qZWN0Um91dGVyU3RhdGUoKTtcbiAgY29uc3QgdGl0bGUgPSBjb21wdXRlZCgoKSA9PiByb3V0ZXJTdGF0ZSgpLnRpdGxlKTtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4odGl0bGUsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBhdGggcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvdXRlclN0YXRlID0gaW5qZWN0Um91dGVyU3RhdGUoKTtcblxuICBjb25zdCBwYXRoUGFyYW1zID0gY29tcHV0ZWQoKCkgPT4gcm91dGVyU3RhdGUoKS5wYXRoUGFyYW1zKTtcblxuICByZXR1cm4gcGF0aFBhcmFtcztcbn07XG5cbi8qKiBJbmplY3QgYSBzcGVjaWZpYyBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RRdWVyeVBhcmFtID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBpbmplY3RRdWVyeVBhcmFtcygpO1xuICBjb25zdCBzcmMgPSBjb21wdXRlZCgoKSA9PiBxdWVyeVBhcmFtcygpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPHN0cmluZyB8IG51bGw+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcm91dGUgZGF0YSBpdGVtIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVEYXRhSXRlbSA9IDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIGNvbmZpZz86IEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8dW5rbm93biwgVD4pID0+IHtcbiAgY29uc3QgZGF0YSA9IGluamVjdFJvdXRlRGF0YSgpO1xuICBjb25zdCBzcmMgPSBjb21wdXRlZCgoKSA9PiBkYXRhKClba2V5XSA/PyBudWxsKSBhcyBTaWduYWw8VD47XG5cbiAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzcGVjaWZpYyBwYXRoIHBhcmFtZXRlciBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbSA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGtleTogc3RyaW5nLFxuICBjb25maWc/OiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IHBhdGhQYXJhbXMgPSBpbmplY3RQYXRoUGFyYW1zKCk7XG4gIGNvbnN0IHNyYyA9IGNvbXB1dGVkKCgpID0+IHBhdGhQYXJhbXMoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xufTtcblxuLyoqXG4gKiBJbmplY3QgcXVlcnkgcGFyYW1zIHRoYXQgY2hhbmdlZCBkdXJpbmcgbmF2aWdhdGlvbi4gVW5jaGFuZ2VkIHF1ZXJ5IHBhcmFtcyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBSZW1vdmVkIHF1ZXJ5IHBhcmFtcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBzeW1ib2wgYEVUX1BST1BFUlRZX1JFTU9WRURgLlxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0UXVlcnlQYXJhbUNoYW5nZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gaW5qZWN0UXVlcnlQYXJhbXMoKTtcbiAgY29uc3QgcHJldlF1ZXJ5UGFyYW1zID0gcHJldmlvdXNTaWduYWxWYWx1ZShxdWVyeVBhcmFtcyk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gcXVlcnlQYXJhbXMoKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IHByZXZRdWVyeVBhcmFtcygpID8/IHt9O1xuXG4gICAgY29uc3QgY2hhbmdlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGNvbnN0IGFsbEtleXMgPSBuZXcgU2V0PGtleW9mIHR5cGVvZiBwcmV2aW91cyAmIGtleW9mIHR5cGVvZiBjdXJyZW50PihbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwcmV2aW91cyksXG4gICAgICAuLi5PYmplY3Qua2V5cyhjdXJyZW50KSxcbiAgICBdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleXMpIHtcbiAgICAgIGlmICghZXF1YWwocHJldmlvdXNba2V5XSwgY3VycmVudFtrZXldKSkge1xuICAgICAgICBjb25zdCB2YWwgPSBjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCA/IEVUX1BST1BFUlRZX1JFTU9WRUQgOiBjdXJyZW50W2tleV07XG5cbiAgICAgICAgY2hhbmdlc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9KTtcbn07XG5cbi8qKlxuICogSW5qZWN0IHBhdGggcGFyYW1zIHRoYXQgY2hhbmdlZCBkdXJpbmcgbmF2aWdhdGlvbi4gVW5jaGFuZ2VkIHBhdGggcGFyYW1zIHdpbGwgYmUgaWdub3JlZC5cbiAqIFJlbW92ZWQgcGF0aCBwYXJhbXMgd2lsbCBiZSByZXByZXNlbnRlZCBieSB0aGUgc3ltYm9sIGBFVF9QUk9QRVJUWV9SRU1PVkVEYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbUNoYW5nZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHBhdGhQYXJhbXMgPSBpbmplY3RQYXRoUGFyYW1zKCk7XG4gIGNvbnN0IHByZXZQYXRoUGFyYW1zID0gcHJldmlvdXNTaWduYWxWYWx1ZShwYXRoUGFyYW1zKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoUGFyYW1zKCk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBwcmV2UGF0aFBhcmFtcygpID8/IHt9O1xuXG4gICAgY29uc3QgY2hhbmdlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGNvbnN0IGFsbEtleXMgPSBuZXcgU2V0PGtleW9mIHR5cGVvZiBwcmV2aW91cyAmIGtleW9mIHR5cGVvZiBjdXJyZW50PihbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwcmV2aW91cyksXG4gICAgICAuLi5PYmplY3Qua2V5cyhjdXJyZW50KSxcbiAgICBdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleXMpIHtcbiAgICAgIGlmICghZXF1YWwocHJldmlvdXNba2V5XSwgY3VycmVudFtrZXldKSkge1xuICAgICAgICBjb25zdCB2YWwgPSBjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCA/IEVUX1BST1BFUlRZX1JFTU9WRUQgOiBjdXJyZW50W2tleV07XG5cbiAgICAgICAgY2hhbmdlc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJc1JlbmRlcmVkU2lnbmFsID0gKCkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICBpZiAoIXZhbHVlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdSZW5kZXIgc2lnbmFsIHdhcyBub3Qgc2V0IHRvIHRydWUuIFRoaXMgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE1ha2Ugc3VyZSB0byAuYmluZCgpIHRoZSByZW5kZXIgc2lnbmFsIGF0IHRoZSBlbmQgb2YgdGhlIGNvbnN0cnVjdG9yLicsXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogdmFsdWUsXG4gICAgYmluZDogKCkgPT4gZWZmZWN0KCgpID0+IHZhbHVlLnNldCh0cnVlKSksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ2FuQW5pbWF0ZVNpZ25hbCA9ICgpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgdmFsdWUuc2V0KHRydWUpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB2YWx1ZS5hc1JlYWRvbmx5KCksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBFbGVtZW50TGFzdFNjcm9sbERpcmVjdGlvblR5cGUgPSAndXAnIHwgJ2Rvd24nIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcblxuZXhwb3J0IHR5cGUgRWxlbWVudExhc3RTY3JvbGxEaXJlY3Rpb24gPSB7XG4gIHR5cGU6IEVsZW1lbnRMYXN0U2Nyb2xsRGlyZWN0aW9uVHlwZTtcbiAgdGltZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRMYXN0U2Nyb2xsRGlyZWN0aW9uID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCBlbGVtZW50ID0gZmlyc3RFbGVtZW50U2lnbmFsKGVsZW1lbnRzKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgbGFzdFNjcm9sbERpcmVjdGlvbiA9IHNpZ25hbDxFbGVtZW50TGFzdFNjcm9sbERpcmVjdGlvbiB8IG51bGw+KG51bGwpO1xuXG4gIGxldCBsYXN0U2Nyb2xsVG9wID0gMDtcbiAgbGV0IGxhc3RTY3JvbGxMZWZ0ID0gMDtcblxuICB0b09ic2VydmFibGUoZWxlbWVudClcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeyBjdXJyZW50RWxlbWVudCB9KSA9PiB7XG4gICAgICAgIGlmICghY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICBsYXN0U2Nyb2xsRGlyZWN0aW9uLnNldChudWxsKTtcbiAgICAgICAgICBsYXN0U2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICBsYXN0U2Nyb2xsTGVmdCA9IDA7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KGN1cnJlbnRFbGVtZW50LCAnc2Nyb2xsJykucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbExlZnQgfSA9IGN1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIGlmIChzY3JvbGxUb3AgPiBsYXN0U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAgIGxhc3RTY3JvbGxEaXJlY3Rpb24uc2V0KHsgdHlwZTogJ2Rvd24nLCB0aW1lIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAgIGxhc3RTY3JvbGxEaXJlY3Rpb24uc2V0KHsgdHlwZTogJ3VwJywgdGltZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA+IGxhc3RTY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgIGxhc3RTY3JvbGxEaXJlY3Rpb24uc2V0KHsgdHlwZTogJ3JpZ2h0JywgdGltZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IGxhc3RTY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgIGxhc3RTY3JvbGxEaXJlY3Rpb24uc2V0KHsgdHlwZTogJ2xlZnQnLCB0aW1lIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0U2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgICAgICAgbGFzdFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZiksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICByZXR1cm4gbGFzdFNjcm9sbERpcmVjdGlvbi5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRMYXN0U2Nyb2xsRGlyZWN0aW9uID0gKCkgPT4gc2lnbmFsRWxlbWVudExhc3RTY3JvbGxEaXJlY3Rpb24oaW5qZWN0KEVsZW1lbnRSZWYpKTtcblxuZXhwb3J0IHR5cGUgQ3Vyc29yRHJhZ1Njcm9sbERpcmVjdGlvbiA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgfCAnYm90aCc7XG5cbmV4cG9ydCB0eXBlIE1heWJlU2lnbmFsPFQ+ID0gVCB8IFNpZ25hbDxUPjtcblxuZXhwb3J0IGNvbnN0IG1heWJlU2lnbmFsVmFsdWUgPSA8VD4odmFsdWU6IE1heWJlU2lnbmFsPFQ+KSA9PiB7XG4gIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUoKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIEN1cnNvckRyYWdTY3JvbGxPcHRpb25zID0ge1xuICAvKiogSWYgdHJ1ZSwgY3Vyc29yIGRyYWcgc2Nyb2xsaW5nIHdpbGwgYmUgZW5hYmxlZC4gKi9cbiAgZW5hYmxlZD86IFNpZ25hbDxib29sZWFuPjtcblxuICAvKiogVGhlIGFsbG93ZWQgc2Nyb2xsIGRpcmVjdGlvbi4gKi9cbiAgYWxsb3dlZERpcmVjdGlvbj86IE1heWJlU2lnbmFsPEN1cnNvckRyYWdTY3JvbGxEaXJlY3Rpb24+O1xufTtcblxuLyoqIFRoZSBkZWFkem9uZSBpbiBwaXhlbHMgYWZ0ZXIgd2hpY2ggdGhlIGN1cnNvciBkcmFnIHNjcm9sbCB3aWxsIHRha2UgZWZmZWN0LiAqL1xuY29uc3QgQ1VSU09SX0RSQUdfU0NST0xMX0RFQURaT05FID0gNTtcblxuLyoqIFRoZSBjbGFzcyB0aGF0IGlzIGFkZGVkIHRvIHRoZSBlbGVtZW50IHdoZW4gdGhlIGN1cnNvciBpcyBiZWluZyBkcmFnZ2VkLiAqL1xuY29uc3QgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTID0gJ2V0LWN1cnNvci1kcmFnLXNjcm9sbC0tc2Nyb2xsaW5nJztcbmNvbnN0IENVUlNPUl9EUkFHX0lOSVRfQ0xBU1MgPSAnZXQtY3Vyc29yLWRyYWctc2Nyb2xsLS1pbml0JztcblxuLyoqIEEgZnVuY3Rpb24gdG8gYXBwbHkgY3Vyc29yIGRyYWcgc2Nyb2xsIGJlaGF2aW9yIHRvIGFuIGVsZW1lbnQuICovXG5leHBvcnQgY29uc3QgdXNlQ3Vyc29yRHJhZ1Njcm9sbCA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogQ3Vyc29yRHJhZ1Njcm9sbE9wdGlvbnMpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCBlbGVtZW50ID0gZmlyc3RFbGVtZW50U2lnbmFsKGVsZW1lbnRzKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgeyBlbmFibGVkID0gc2lnbmFsKHRydWUpLCBhbGxvd2VkRGlyZWN0aW9uID0gJ2JvdGgnIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBzY3JvbGxTdGF0ZSA9IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZShlbGVtZW50cyk7XG4gIGNvbnN0IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIGNvbnN0IGlzRHJhZ2dpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpc0luaXREcmFnZ2luZyA9IHNpZ25hbChmYWxzZSk7XG4gIGNvbnN0IGluaXRpYWxEcmFnUG9zaXRpb24gPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBjb25zdCBpbml0aWFsU2Nyb2xsUG9zaXRpb24gPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBjb25zdCBkcmFnQW1vdW50ID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIGNvbnN0IGNhblNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsU3RhdGUgPSBzY3JvbGxTdGF0ZSgpO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG1heWJlU2lnbmFsVmFsdWUoYWxsb3dlZERpcmVjdGlvbik7XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgIHJldHVybiBjdXJyZW50U2Nyb2xsU3RhdGUuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5IHx8IGN1cnJlbnRTY3JvbGxTdGF0ZS5jYW5TY3JvbGxWZXJ0aWNhbGx5O1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICAgIHJldHVybiBjdXJyZW50U2Nyb2xsU3RhdGUuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5O1xuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFN0YXRlLmNhblNjcm9sbFZlcnRpY2FsbHk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDbGVhbnVwIGlmIHRoZSBlbGVtZW50IHRoZSBjdXJzb3IgZHJhZyBzY3JvbGwgaXMgYm91bmQgdG8gZ2V0cyBjaGFuZ2VkXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBwcmV2aW91c0VsZW1lbnQgfSA9IGVsZW1lbnQoKTtcblxuICAgIGlmIChwcmV2aW91c0VsZW1lbnQpIHtcbiAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKHByZXZpb3VzRWxlbWVudCwgJ2N1cnNvcicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ29uZGl0aW9uYWxseSBhcHBseSBzdHlsZXMvY2xhc3NlcyB0byB0aGUgZWxlbWVudCBhbmQgdGhlIGRvY3VtZW50XG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VyckNhblNjcm9sbCA9IGNhblNjcm9sbCgpO1xuICAgIGNvbnN0IGlzRW5hYmxlZCA9IGVuYWJsZWQoKTtcbiAgICBjb25zdCBjdXJySXNEcmFnZ2luZyA9IGlzRHJhZ2dpbmcoKTtcbiAgICBjb25zdCBjdXJySXNJbml0RHJhZ2dpbmcgPSBpc0luaXREcmFnZ2luZygpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZWxlbWVudCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICAgIGlmICghY3VyckNhblNjcm9sbCB8fCAhaXNFbmFibGVkKSB7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnY3Vyc29yJyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnc2Nyb2xsU25hcFR5cGUnKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICdzY3JvbGxCZWhhdmlvcicpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIENVUlNPUl9EUkFHX0lOSVRfQ0xBU1MpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdjdXJzb3InKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycklzSW5pdERyYWdnaW5nKSB7XG4gICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVsLCBDVVJTT1JfRFJBR19JTklUX0NMQVNTKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJJc0RyYWdnaW5nKSB7XG4gICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVsLCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MpO1xuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ3Njcm9sbFNuYXBUeXBlJywgJ25vbmUnKTtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdzY3JvbGxCZWhhdmlvcicsICd1bnNldCcpO1xuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2N1cnNvcicsICdncmFiYmluZycpO1xuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdjdXJzb3InLCAnZ3JhYmJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJySXNJbml0RHJhZ2dpbmcgJiYgIWN1cnJJc0RyYWdnaW5nKSB7XG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnY3Vyc29yJywgJ2dyYWInKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICdzY3JvbGxTbmFwVHlwZScpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3Njcm9sbEJlaGF2aW9yJyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgQ1VSU09SX0RSQUdfSU5JVF9DTEFTUyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2N1cnNvcicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgdGhlIGVsZW1lbnQncyBzY3JvbGwgcG9zaXRpb24gd2hlbiB0aGUgdXNlciBkcmFnc1xuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJEcmFnQW1vdW50ID0gZHJhZ0Ftb3VudCgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJJc0RyYWdnaW5nID0gaXNEcmFnZ2luZygpO1xuICAgICAgY29uc3QgZWwgPSBlbGVtZW50KCkuY3VycmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCB7IHg6IGRyYWdYLCB5OiBkcmFnWSB9ID0gY3VyckRyYWdBbW91bnQ7XG4gICAgICBjb25zdCB7IHg6IHNjcm9sbFgsIHk6IHNjcm9sbFkgfSA9IGluaXRpYWxTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgY29uc3QgY3VyckFsbG93ZWREaXJlY3Rpb24gPSBtYXliZVNpZ25hbFZhbHVlKGFsbG93ZWREaXJlY3Rpb24pO1xuXG4gICAgICBpZiAoIWVsIHx8ICFjdXJySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICBzd2l0Y2ggKGN1cnJBbGxvd2VkRGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIGVsLnNjcm9sbCh7XG4gICAgICAgICAgICB0b3A6IGRyYWdZICsgc2Nyb2xsWSxcbiAgICAgICAgICAgIGxlZnQ6IGRyYWdYICsgc2Nyb2xsWCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICAgIGVsLnNjcm9sbCh7XG4gICAgICAgICAgICBsZWZ0OiBkcmFnWCArIHNjcm9sbFgsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ2luc3RhbnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgICAgZWwuc2Nyb2xsKHtcbiAgICAgICAgICAgIHRvcDogZHJhZ1kgKyBzY3JvbGxZLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlRHJhZ2dpbmcgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZHggPSAoZS5jbGllbnRYIC0gaW5pdGlhbERyYWdQb3NpdGlvbigpLngpICogLTE7XG4gICAgY29uc3QgZHkgPSAoZS5jbGllbnRZIC0gaW5pdGlhbERyYWdQb3NpdGlvbigpLnkpICogLTE7XG5cbiAgICBkcmFnQW1vdW50LnNldCh7IHg6IGR4LCB5OiBkeSB9KTtcblxuICAgIGlmIChNYXRoLmFicyhkeCkgPiBDVVJTT1JfRFJBR19TQ1JPTExfREVBRFpPTkUgfHwgTWF0aC5hYnMoZHkpID4gQ1VSU09SX0RSQUdfU0NST0xMX0RFQURaT05FKSB7XG4gICAgICBpc0RyYWdnaW5nLnNldCh0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlRHJhZ2dpbmdFbmQgPSAoKSA9PiB7XG4gICAgaXNEcmFnZ2luZy5zZXQoZmFsc2UpO1xuICAgIGlzSW5pdERyYWdnaW5nLnNldChmYWxzZSk7XG4gICAgaW5pdGlhbERyYWdQb3NpdGlvbi5zZXQoeyB4OiAwLCB5OiAwIH0pO1xuICAgIGluaXRpYWxTY3JvbGxQb3NpdGlvbi5zZXQoeyB4OiAwLCB5OiAwIH0pO1xuICAgIGRyYWdBbW91bnQuc2V0KHsgeDogMCwgeTogMCB9KTtcbiAgfTtcblxuICBjb25zdCBzZXR1cERyYWdnaW5nID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb3VzZVVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpO1xuICAgIGNvbnN0IG1vdXNlTW92ZSA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbW92ZScpO1xuICAgIGNvbnN0IGVsID0gZWxlbWVudCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgbW91c2VNb3ZlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpLFxuICAgICAgICB0YWtlVW50aWwobW91c2VVcCksXG4gICAgICAgIHRhcCgoZSkgPT4gdXBkYXRlRHJhZ2dpbmcoZSkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbW91c2VVcFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcbiAgICAgICAgdGFwKCgpID0+IHVwZGF0ZURyYWdnaW5nRW5kKCkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaW5pdGlhbERyYWdQb3NpdGlvbi5zZXQoeyB4OiBlLmNsaWVudFgsIHk6IGUuY2xpZW50WSB9KTtcbiAgICBpbml0aWFsU2Nyb2xsUG9zaXRpb24uc2V0KHsgeDogZWwuc2Nyb2xsTGVmdCwgeTogZWwuc2Nyb2xsVG9wIH0pO1xuICAgIGlzSW5pdERyYWdnaW5nLnNldCh0cnVlKTtcbiAgfTtcblxuICB0b09ic2VydmFibGUoZWxlbWVudClcbiAgICAucGlwZShcbiAgICAgIG1hcCgoZSkgPT4gZT8uY3VycmVudEVsZW1lbnQpLFxuICAgICAgc3dpdGNoTWFwKChlbCkgPT4gKGVsID8gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsLCAnbW91c2Vkb3duJykgOiBvZihudWxsKSkpLFxuICAgICAgZmlsdGVyKChlKTogZSBpcyBNb3VzZUV2ZW50ID0+ICEhZSksXG4gICAgICBmaWx0ZXIoKCkgPT4gZW5hYmxlZCgpKSxcbiAgICAgIHRhcCgoZSkgPT4gc2V0dXBEcmFnZ2luZyhlKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIHJldHVybiB7XG4gICAgaXNEcmFnZ2luZzogaXNEcmFnZ2luZy5hc1JlYWRvbmx5KCksXG4gICAgY3VycmVudERyYWdBbW91bnQ6IGRyYWdBbW91bnQuYXNSZWFkb25seSgpLFxuICB9O1xufTtcblxuLyoqXG4gKiBBIGNvbXB1dGVkIHRoYXQgd2lsbCBvbmx5IGJlIHJlYWN0aXZlIHVudGlsIHRoZSBzb3VyY2Ugc2lnbmFsIGNvbnRhaW5zIGEgdHJ1dGh5IHZhbHVlLlxuICogQWxsIHN1YnNlcXVlbnQgY2hhbmdlcyBpbnNpZGUgdGhlIGNvbXB1dGF0aW9uIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXB1dGVkVGlsbFRydXRoeSA9IDxUPihzb3VyY2U6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHNpZ25hbDxUIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB2YWwgPSBzb3VyY2UoKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHZhbHVlLnNldCh2YWwpO1xuICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZS5hc1JlYWRvbmx5KCk7XG59O1xuXG4vKipcbiAqIEEgY29tcHV0ZWQgdGhhdCB3aWxsIG9ubHkgYmUgcmVhY3RpdmUgdW50aWwgdGhlIHNvdXJjZSBzaWduYWwgY29udGFpbnMgYSBmYWxzeSB2YWx1ZS5cbiAqIEFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgaW5zaWRlIHRoZSBjb21wdXRhdGlvbiB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wdXRlZFRpbGxGYWxzeSA9IDxUPihzb3VyY2U6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHNpZ25hbDxUIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB2YWwgPSBzb3VyY2UoKTtcblxuICAgIGlmICghdmFsKSB7XG4gICAgICB2YWx1ZS5zZXQodmFsKTtcbiAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdmFsdWUuYXNSZWFkb25seSgpO1xufTtcblxuLyoqXG4gKiBBIHdyaXRlYWJsZSBzaWduYWwgdGhhdCB3aWxsIGJlIHNldCB0byB0aGUgcHJvdmlkZWQgdmFsdWUgb25jZSBhbGwgaW5wdXRzIGFyZSBzZXQuXG4gKiBEdXJpbmcgdGhhdCB0aW1lLCB0aGUgc2lnbmFsIHdpbGwgYmUgc2V0IHRvIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmVycmVkU2lnbmFsID0gPFQgZXh0ZW5kcyAoKSA9PiB1bmtub3duPih2YWx1ZUZuOiBUKSA9PiB7XG4gIGNvbnN0IHZhbHVlU2lnbmFsID0gc2lnbmFsPFJldHVyblR5cGU8VD4gfCBudWxsPihudWxsKTtcblxuICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgIHZhbHVlU2lnbmFsLnNldCh2YWx1ZUZuKCkgYXMgUmV0dXJuVHlwZTxUPik7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZVNpZ25hbDtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgeHMgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJc1hzID0gKCkgPT4ge1xuICByZXR1cm4gdG9TaWduYWwoaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuaXNYcyQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIHNtICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXNTbSA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzU20kLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyBtZCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdElzTWQgPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5pc01kJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgbGcgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJc0xnID0gKCkgPT4ge1xuICByZXR1cm4gdG9TaWduYWwoaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuaXNMZyQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIHhsICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXNYbCA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzWGwkLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyAyeGwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJczJYbCA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzMlhsJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogSW5qZWN0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAqIFRoaXMgdmFsdWUgaXMgbm90IHJlYWN0aXZlLiBJZiB5b3Ugd2FudCB0byByZWFjdCB0byBjaGFuZ2VzLCB1c2UgdGhlIHtAbGluayBpbmplY3RPYnNlcnZlQnJlYWtwb2ludH0gZnVuY3Rpb24gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEJyZWFrcG9pbnRJc01hdGNoZWQgPSAob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pID0+IHtcbiAgcmV0dXJuIGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzTWF0Y2hlZChvcHRpb25zKTtcbn07XG5cbi8qKlxuICogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0T2JzZXJ2ZUJyZWFrcG9pbnQgPSAob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLm9ic2VydmUob3B0aW9ucyksIHsgaW5pdGlhbFZhbHVlOiBpbmplY3RCcmVha3BvaW50SXNNYXRjaGVkKG9wdGlvbnMpIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQuICovXG5leHBvcnQgY29uc3QgaW5qZWN0Q3VycmVudEJyZWFrcG9pbnQgPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5jdXJyZW50Vmlld3BvcnQkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5jdXJyZW50Vmlld3BvcnQsXG4gIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCB0aGF0IGluZGljYXRlcyBpZiB0aGUgdXNlciBpcyB1c2luZyBhIHBvcnRyYWl0IGRpc3BsYXkgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJc1BvcnRyYWl0ID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeVJlc3VsdCA9IHRvU2lnbmFsKGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZhYmxlKCcob3JpZW50YXRpb246IHBvcnRyYWl0KScpLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiBxdWVyeVJlc3VsdCgpPy5tYXRjaGVzKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIHVzZXIgaXMgdXNpbmcgYSBsYW5kc2NhcGUgZGlzcGxheSAqL1xuZXhwb3J0IGNvbnN0IGluamVjdElzTGFuZHNjYXBlID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeVJlc3VsdCA9IHRvU2lnbmFsKGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZhYmxlKCcob3JpZW50YXRpb246IGxhbmRzY2FwZSknKSwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gcXVlcnlSZXN1bHQoKT8ubWF0Y2hlcyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZGlzcGxheSBvcmllbnRhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdERpc3BsYXlPcmllbnRhdGlvbiA9ICgpID0+IHtcbiAgY29uc3QgaXNQb3J0cmFpdCA9IGluamVjdElzUG9ydHJhaXQoKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChpc1BvcnRyYWl0KCkpIHJldHVybiAncG9ydHJhaXQnO1xuICAgIHJldHVybiAnbGFuZHNjYXBlJztcbiAgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkZXZpY2UgaGFzIGEgdG91Y2ggaW5wdXQgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RIYXNUb3VjaElucHV0ID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeVJlc3VsdCA9IHRvU2lnbmFsKGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZhYmxlKCcocG9pbnRlcjogY29hcnNlKScpLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiBxdWVyeVJlc3VsdCgpPy5tYXRjaGVzKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRldmljZSBoYXMgYSBmaW5lIGlucHV0IChtb3VzZSBvciBzdHlsdXMpICAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEhhc1ByZWNpc2lvbklucHV0ID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeVJlc3VsdCA9IHRvU2lnbmFsKGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZhYmxlKCcocG9pbnRlcjogZmluZSknKSwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gcXVlcnlSZXN1bHQoKT8ubWF0Y2hlcyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZGV2aWNlIGlucHV0IHR5cGUgKi9cbmV4cG9ydCBjb25zdCBpbmplY3REZXZpY2VJbnB1dFR5cGUgPSAoKSA9PiB7XG4gIGNvbnN0IGlzVG91Y2ggPSBpbmplY3RIYXNUb3VjaElucHV0KCk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoaXNUb3VjaCgpKSByZXR1cm4gJ3RvdWNoJztcbiAgICByZXR1cm4gJ21vdXNlJztcbiAgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHVzZXIgY2FuIGhvdmVyIChlZy4gdXNpbmcgYSBtb3VzZSkgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RDYW5Ib3ZlciA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlSZXN1bHQgPSB0b1NpZ25hbChjcmVhdGVNZWRpYVF1ZXJ5T2JzZXJ2YWJsZSgnKGhvdmVyOiBob3ZlciknKSwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gcXVlcnlSZXN1bHQoKT8ubWF0Y2hlcyk7XG59O1xuIl19","import { injectQueryParam } from './signal.utils';\nexport const DISABLE_LOGGER_PARAM = 'et-logger-quiet';\nexport const createLogger = (config) => {\n const { scope, feature } = config;\n const disableLogging = injectQueryParam(DISABLE_LOGGER_PARAM);\n const writeLog = (...args) => {\n if (disableLogging()) {\n return;\n }\n console.log(...args);\n };\n return {\n log: (...args) => writeLog(`\\x1B[32;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n warn: (...args) => writeLog(`\\x1B[93;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n error: (...args) => writeLog(`\\x1B[31;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBT3RELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtJQUN6RCxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNsQyxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRTlELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQUUsRUFBRTtRQUN0QyxJQUFJLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEtBQUssSUFBSSxPQUFPLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzRixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLElBQUksT0FBTyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDNUYsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFlLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLE9BQU8sU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBQzlGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RRdWVyeVBhcmFtIH0gZnJvbSAnLi9zaWduYWwudXRpbHMnO1xuXG5leHBvcnQgY29uc3QgRElTQUJMRV9MT0dHRVJfUEFSQU0gPSAnZXQtbG9nZ2VyLXF1aWV0JztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlTG9nZ2VyQ29uZmlnID0ge1xuICBzY29wZTogc3RyaW5nO1xuICBmZWF0dXJlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTG9nZ2VyID0gKGNvbmZpZzogQ3JlYXRlTG9nZ2VyQ29uZmlnKSA9PiB7XG4gIGNvbnN0IHsgc2NvcGUsIGZlYXR1cmUgfSA9IGNvbmZpZztcbiAgY29uc3QgZGlzYWJsZUxvZ2dpbmcgPSBpbmplY3RRdWVyeVBhcmFtKERJU0FCTEVfTE9HR0VSX1BBUkFNKTtcblxuICBjb25zdCB3cml0ZUxvZyA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBpZiAoZGlzYWJsZUxvZ2dpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGxvZzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gd3JpdGVMb2coYFxceDFCWzMyOzQwOzI0bVske3Njb3BlfSAke2ZlYXR1cmV9XVxceDFCW21gLCAuLi5hcmdzKSxcbiAgICB3YXJuOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB3cml0ZUxvZyhgXFx4MUJbOTM7NDA7MjRtWyR7c2NvcGV9ICR7ZmVhdHVyZX1dXFx4MUJbbWAsIC4uLmFyZ3MpLFxuICAgIGVycm9yOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB3cml0ZUxvZyhgXFx4MUJbMzE7NDA7MjRtWyR7c2NvcGV9ICR7ZmVhdHVyZX1dXFx4MUJbbWAsIC4uLmFyZ3MpLFxuICB9O1xufTtcbiJdfQ==","import { Observable } from 'rxjs';\nexport const createMutationObservable = (config) => {\n const elements = Array.isArray(config.elements) ? config.elements : [config.elements];\n return new Observable((obs) => {\n const observer = new MutationObserver((mutations) => {\n if (config.options?.styleIgnoreList) {\n const allowedMutations = [];\n for (const mutation of mutations) {\n if (mutation.type === 'attributes') {\n const attributeName = mutation.attributeName;\n if (!attributeName || attributeName !== 'style')\n continue;\n const oldValue = mutation.oldValue;\n const newValue = mutation.target.getAttribute('style');\n const oldValueStyles = oldValue?.split(';').map((s) => s.trim()) ?? [];\n const newValueStyles = newValue?.split(';').map((s) => s.trim()) ?? [];\n const changedStyles = newValueStyles.filter((s) => !oldValueStyles.includes(s));\n if (changedStyles.some((s) => {\n const [key] = s.split(':');\n if (!key)\n return false;\n return config.options?.styleIgnoreList?.includes(key);\n }))\n continue;\n allowedMutations.push(mutation);\n }\n }\n if (allowedMutations.length) {\n obs.next(allowedMutations);\n }\n }\n else {\n obs.next(mutations);\n }\n });\n for (const element of elements) {\n observer.observe(element, config.options);\n }\n return () => observer.disconnect();\n });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24tb2JzZXJ2YWJsZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvbXV0YXRpb24tb2JzZXJ2YWJsZS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUd4QyxFQUFFLEVBQUU7SUFDSCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdEYsT0FBTyxJQUFJLFVBQVUsQ0FBbUIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLGdCQUFnQixHQUFxQixFQUFFLENBQUM7Z0JBRTlDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2pDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQzt3QkFDbkMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQzt3QkFFN0MsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUssT0FBTzs0QkFBRSxTQUFTO3dCQUUxRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO3dCQUNuQyxNQUFNLFFBQVEsR0FBSSxRQUFRLENBQUMsTUFBc0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBRXhFLE1BQU0sY0FBYyxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3ZFLE1BQU0sY0FBYyxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBRXZFLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUVoRixJQUNFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDdkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBRTNCLElBQUksQ0FBQyxHQUFHO2dDQUFFLE9BQU8sS0FBSyxDQUFDOzRCQUV2QixPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDeEQsQ0FBQyxDQUFDOzRCQUVGLFNBQVM7d0JBRVgsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNsQyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTXV0YXRpb25PYnNlcnZhYmxlID0gKGNvbmZpZzoge1xuICBlbGVtZW50czogSFRNTEVsZW1lbnQgfCBIVE1MRWxlbWVudFtdO1xuICBvcHRpb25zPzogTXV0YXRpb25PYnNlcnZlckluaXQgJiB7IHN0eWxlSWdub3JlTGlzdD86IHN0cmluZ1tdIH07XG59KSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuaXNBcnJheShjb25maWcuZWxlbWVudHMpID8gY29uZmlnLmVsZW1lbnRzIDogW2NvbmZpZy5lbGVtZW50c107XG5cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPE11dGF0aW9uUmVjb3JkW10+KChvYnMpID0+IHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIGlmIChjb25maWcub3B0aW9ucz8uc3R5bGVJZ25vcmVMaXN0KSB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRNdXRhdGlvbnM6IE11dGF0aW9uUmVjb3JkW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUgfHwgYXR0cmlidXRlTmFtZSAhPT0gJ3N0eWxlJykgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gbXV0YXRpb24ub2xkVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWVTdHlsZXMgPSBvbGRWYWx1ZT8uc3BsaXQoJzsnKS5tYXAoKHMpID0+IHMudHJpbSgpKSA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlU3R5bGVzID0gbmV3VmFsdWU/LnNwbGl0KCc7JykubWFwKChzKSA9PiBzLnRyaW0oKSkgPz8gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRTdHlsZXMgPSBuZXdWYWx1ZVN0eWxlcy5maWx0ZXIoKHMpID0+ICFvbGRWYWx1ZVN0eWxlcy5pbmNsdWRlcyhzKSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2hhbmdlZFN0eWxlcy5zb21lKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2tleV0gPSBzLnNwbGl0KCc6Jyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5vcHRpb25zPy5zdHlsZUlnbm9yZUxpc3Q/LmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBhbGxvd2VkTXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGxvd2VkTXV0YXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIG9icy5uZXh0KGFsbG93ZWRNdXRhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMubmV4dChtdXRhdGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIGNvbmZpZy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9KTtcbn07XG4iXX0=","export const isObject = (value) => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\nexport const isArray = (value) => {\n return Array.isArray(value);\n};\nexport const getObjectProperty = (obj, prop) => {\n const hasDotNotation = prop.includes('.');\n const hasBracketNotation = prop.includes('[');\n if (!hasDotNotation && !hasBracketNotation)\n return obj[prop];\n const props = prop.split('.');\n let value = obj;\n for (const prop of props) {\n if (!isObject(value))\n return undefined;\n if (prop.includes('[')) {\n const [key, index] = prop.split('[').map((part) => part.replace(']', ''));\n const arr = value[key];\n if (!Array.isArray(arr))\n return undefined;\n value = arr[+index];\n }\n else {\n value = value[prop];\n }\n }\n return value;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvb2JqZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBb0MsRUFBRTtJQUMzRSxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFjLEVBQXNCLEVBQUU7SUFDNUQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBNEIsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUM5RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsa0JBQWtCO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QixJQUFJLEtBQUssR0FBWSxHQUFHLENBQUM7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFxQixDQUFDO1lBQzlGLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFFMUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVua25vd25bXSA9PiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPYmplY3RQcm9wZXJ0eSA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFzRG90Tm90YXRpb24gPSBwcm9wLmluY2x1ZGVzKCcuJyk7XG4gIGNvbnN0IGhhc0JyYWNrZXROb3RhdGlvbiA9IHByb3AuaW5jbHVkZXMoJ1snKTtcblxuICBpZiAoIWhhc0RvdE5vdGF0aW9uICYmICFoYXNCcmFja2V0Tm90YXRpb24pIHJldHVybiBvYmpbcHJvcF07XG5cbiAgY29uc3QgcHJvcHMgPSBwcm9wLnNwbGl0KCcuJyk7XG5cbiAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqO1xuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHByb3AuaW5jbHVkZXMoJ1snKSkge1xuICAgICAgY29uc3QgW2tleSwgaW5kZXhdID0gcHJvcC5zcGxpdCgnWycpLm1hcCgocGFydCkgPT4gcGFydC5yZXBsYWNlKCddJywgJycpKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgICAgY29uc3QgYXJyID0gdmFsdWVba2V5XTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICB2YWx1ZSA9IGFyclsraW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4iXX0=","import { ElementRef, assertInInjectionContext, inject } from '@angular/core';\nimport { distinctUntilChanged, map, of, switchMap, takeUntil } from 'rxjs';\nimport { fromNextFrame } from './animation.utils';\nimport { createDestroy } from './destroy.utils';\nconst isAttributeRenderBinding = (value) => typeof value === 'boolean';\nconst isAttributeValueBinding = (value) => typeof value === 'object';\n/**\n * @deprecated Use one of the following instead:\n * - `signalHostAttributes`\n * - `signalHostClasses`\n * - `signalHostStyles`\n * - `signalAttributes`\n * - `signalClasses`\n * - `signalStyles`\n *\n * Will be removed in v5.\n */\nexport const createReactiveBindings = (...values) => {\n assertInInjectionContext(createReactiveBindings);\n const rootElementRef = inject(ElementRef);\n const destroy$ = createDestroy();\n const subscriptions = [];\n const pushedAttributes = [];\n const defaults = {};\n const push = (value) => {\n const { attribute, observable, elementRef, eager } = value;\n const elRef = elementRef || rootElementRef;\n const attributes = Array.isArray(attribute) ? attribute : [attribute];\n pushedAttributes.push(attributes);\n for (const attribute of attributes) {\n if (!defaults[attribute]) {\n defaults[attribute] = elRef.nativeElement.getAttribute(attribute) || undefined;\n }\n }\n const subscription = observable\n .pipe(takeUntil(destroy$), distinctUntilChanged((a, b) => {\n if (isAttributeRenderBinding(a) && isAttributeRenderBinding(b)) {\n return a === b;\n }\n else if (isAttributeValueBinding(a) && isAttributeValueBinding(b)) {\n return a.render === b.render && a.value === b.value;\n }\n return false;\n }), switchMap((v) => (eager ? of(v) : fromNextFrame().pipe(map(() => v)))))\n .subscribe((value) => {\n const currentAttributes = pushedAttributes.find((s) => s.some((current) => attributes.includes(current))) || [];\n for (const attribute of currentAttributes) {\n const isSingleClassMutation = attribute.startsWith('class.');\n const isMultipleClassMutation = attribute === 'class';\n const render = isAttributeRenderBinding(value) ? value : value.render;\n if (isSingleClassMutation) {\n const className = attribute.replace('class.', '');\n if (!className) {\n continue;\n }\n if (!render) {\n elRef.nativeElement.classList.remove(className);\n }\n else {\n elRef.nativeElement.classList.add(className);\n }\n }\n else if (isMultipleClassMutation) {\n const classes = isAttributeRenderBinding(value) ? '' : `${value.value}`;\n if (!classes) {\n continue;\n }\n if (!render) {\n elRef.nativeElement.classList.remove(...classes.split(' '));\n }\n else {\n elRef.nativeElement.classList.add(...classes.split(' '));\n }\n }\n else {\n const attributeValue = isAttributeRenderBinding(value) ? true : `${value.value}`;\n if (!attribute) {\n continue;\n }\n if (!render) {\n elRef.nativeElement.removeAttribute(attribute);\n }\n else {\n elRef.nativeElement.setAttribute(attribute, `${attributeValue}`);\n }\n }\n }\n });\n subscriptions.push({ attributes, subscription });\n };\n const remove = (...attributes) => {\n for (const attribute of attributes) {\n const sub = subscriptions.find((s) => s.attributes.includes(attribute));\n const attributeStack = pushedAttributes.find((a) => a.includes(attribute));\n if (sub) {\n sub.attributes = sub.attributes.filter((a) => a !== attribute);\n attributeStack?.splice(attributeStack.indexOf(attribute), 1);\n if (sub.attributes.length === 0) {\n sub.subscription.unsubscribe();\n subscriptions.splice(subscriptions.indexOf(sub), 1);\n }\n }\n }\n };\n const reset = () => {\n for (const attribute in defaults) {\n if (defaults[attribute] === undefined) {\n rootElementRef.nativeElement.removeAttribute(attribute);\n }\n else {\n rootElementRef.nativeElement.setAttribute(attribute, defaults[attribute]);\n }\n }\n };\n for (const value of values) {\n push(value);\n }\n return {\n push,\n remove,\n reset,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtYmluZGluZy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvcmVhY3RpdmUtYmluZGluZy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBNEIsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQmhELE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsS0FBcUQsRUFDcEIsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUNqRSxNQUFNLHVCQUF1QixHQUFHLENBQzlCLEtBQXFELEVBQ3JCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFRL0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxNQUE0QixFQUF5QixFQUFFO0lBQy9GLHdCQUF3QixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztJQUNuRSxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBMkQsRUFBRSxDQUFDO0lBQ2pGLE1BQU0sZ0JBQWdCLEdBQWUsRUFBRSxDQUFDO0lBRXhDLE1BQU0sUUFBUSxHQUF1QyxFQUFFLENBQUM7SUFFeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUF5QixFQUFFLEVBQUU7UUFDekMsTUFBTSxF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QyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFXLENBQUMsQ0FBQztZQUN0RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJO1FBQ0osTUFBTTtRQUNOLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmcm9tTmV4dEZyYW1lIH0gZnJvbSAnLi9hbmltYXRpb24udXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSB9IGZyb20gJy4vZGVzdHJveS51dGlscyc7XG5cbnR5cGUgQXR0cmlidXRlVmFsdWVCaW5kaW5nID0ge1xuICByZW5kZXI6IGJvb2xlYW47XG4gIHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyO1xufTtcblxudHlwZSBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nID0gYm9vbGVhbjtcblxuZXhwb3J0IHR5cGUgUmVhY3RpdmVBdHRyaWJ1dGVzID0ge1xuICBhdHRyaWJ1dGU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVZhbHVlQmluZGluZyB8IEF0dHJpYnV0ZVJlbmRlckJpbmRpbmc+O1xuICBlYWdlcj86IGJvb2xlYW47XG4gIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pjtcbn07XG5cbmNvbnN0IGlzQXR0cmlidXRlUmVuZGVyQmluZGluZyA9IChcbiAgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlQmluZGluZyB8IEF0dHJpYnV0ZVJlbmRlckJpbmRpbmcsXG4pOiB2YWx1ZSBpcyBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuY29uc3QgaXNBdHRyaWJ1dGVWYWx1ZUJpbmRpbmcgPSAoXG4gIHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZUJpbmRpbmcgfCBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nLFxuKTogdmFsdWUgaXMgQXR0cmlidXRlVmFsdWVCaW5kaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RpdmVCaW5kaW5nUmVzdWx0IHtcbiAgcmVzZXQ6ICgpID0+IHZvaWQ7XG4gIHJlbW92ZTogKC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwdXNoOiAodmFsdWU6IFJlYWN0aXZlQXR0cmlidXRlcykgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgaW5zdGVhZDpcbiAqIC0gYHNpZ25hbEhvc3RBdHRyaWJ1dGVzYFxuICogLSBgc2lnbmFsSG9zdENsYXNzZXNgXG4gKiAtIGBzaWduYWxIb3N0U3R5bGVzYFxuICogLSBgc2lnbmFsQXR0cmlidXRlc2BcbiAqIC0gYHNpZ25hbENsYXNzZXNgXG4gKiAtIGBzaWduYWxTdHlsZXNgXG4gKlxuICogV2lsbCBiZSByZW1vdmVkIGluIHY1LlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyA9ICguLi52YWx1ZXM6IFJlYWN0aXZlQXR0cmlidXRlc1tdKTogUmVhY3RpdmVCaW5kaW5nUmVzdWx0ID0+IHtcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MpO1xuXG4gIGNvbnN0IHJvb3RFbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgY29uc3QgZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uczogeyBhdHRyaWJ1dGVzOiBzdHJpbmdbXTsgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfVtdID0gW107XG4gIGNvbnN0IHB1c2hlZEF0dHJpYnV0ZXM6IHN0cmluZ1tdW10gPSBbXTtcblxuICBjb25zdCBkZWZhdWx0czogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IHt9O1xuXG4gIGNvbnN0IHB1c2ggPSAodmFsdWU6IFJlYWN0aXZlQXR0cmlidXRlcykgPT4ge1xuICAgIGNvbnN0IHsgYXR0cmlidXRlLCBvYnNlcnZhYmxlLCBlbGVtZW50UmVmLCBlYWdlciB9ID0gdmFsdWU7XG4gICAgY29uc3QgZWxSZWYgPSBlbGVtZW50UmVmIHx8IHJvb3RFbGVtZW50UmVmO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBBcnJheS5pc0FycmF5KGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUgOiBbYXR0cmlidXRlXTtcbiAgICBwdXNoZWRBdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlcyk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIWRlZmF1bHRzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgZGVmYXVsdHNbYXR0cmlidXRlXSA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwoZGVzdHJveSQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4ge1xuICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZVJlbmRlckJpbmRpbmcoYSkgJiYgaXNBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzQXR0cmlidXRlVmFsdWVCaW5kaW5nKGEpICYmIGlzQXR0cmlidXRlVmFsdWVCaW5kaW5nKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5yZW5kZXIgPT09IGIucmVuZGVyICYmIGEudmFsdWUgPT09IGIudmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh2KSA9PiAoZWFnZXIgPyBvZih2KSA6IGZyb21OZXh0RnJhbWUoKS5waXBlKG1hcCgoKSA9PiB2KSkpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBdHRyaWJ1dGVzID0gcHVzaGVkQXR0cmlidXRlcy5maW5kKChzKSA9PiBzLnNvbWUoKGN1cnJlbnQpID0+IGF0dHJpYnV0ZXMuaW5jbHVkZXMoY3VycmVudCkpKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBjdXJyZW50QXR0cmlidXRlcykge1xuICAgICAgICAgIGNvbnN0IGlzU2luZ2xlQ2xhc3NNdXRhdGlvbiA9IGF0dHJpYnV0ZS5zdGFydHNXaXRoKCdjbGFzcy4nKTtcbiAgICAgICAgICBjb25zdCBpc011bHRpcGxlQ2xhc3NNdXRhdGlvbiA9IGF0dHJpYnV0ZSA9PT0gJ2NsYXNzJztcblxuICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGlzQXR0cmlidXRlUmVuZGVyQmluZGluZyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLnJlbmRlcjtcblxuICAgICAgICAgIGlmIChpc1NpbmdsZUNsYXNzTXV0YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGF0dHJpYnV0ZS5yZXBsYWNlKCdjbGFzcy4nLCAnJyk7XG5cbiAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNdWx0aXBsZUNsYXNzTXV0YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBpc0F0dHJpYnV0ZVJlbmRlckJpbmRpbmcodmFsdWUpID8gJycgOiBgJHt2YWx1ZS52YWx1ZX1gO1xuXG4gICAgICAgICAgICBpZiAoIWNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc2VzLnNwbGl0KCcgJykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMuc3BsaXQoJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gaXNBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nKHZhbHVlKSA/IHRydWUgOiBgJHt2YWx1ZS52YWx1ZX1gO1xuXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgYCR7YXR0cmlidXRlVmFsdWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHN1YnNjcmlwdGlvbnMucHVzaCh7IGF0dHJpYnV0ZXMsIHN1YnNjcmlwdGlvbiB9KTtcbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoLi4uYXR0cmlidXRlczogc3RyaW5nW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBzdWIgPSBzdWJzY3JpcHRpb25zLmZpbmQoKHMpID0+IHMuYXR0cmlidXRlcy5pbmNsdWRlcyhhdHRyaWJ1dGUpKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVN0YWNrID0gcHVzaGVkQXR0cmlidXRlcy5maW5kKChhKSA9PiBhLmluY2x1ZGVzKGF0dHJpYnV0ZSkpO1xuXG4gICAgICBpZiAoc3ViKSB7XG4gICAgICAgIHN1Yi5hdHRyaWJ1dGVzID0gc3ViLmF0dHJpYnV0ZXMuZmlsdGVyKChhKSA9PiBhICE9PSBhdHRyaWJ1dGUpO1xuICAgICAgICBhdHRyaWJ1dGVTdGFjaz8uc3BsaWNlKGF0dHJpYnV0ZVN0YWNrLmluZGV4T2YoYXR0cmlidXRlKSwgMSk7XG5cbiAgICAgICAgaWYgKHN1Yi5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHN1Yi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zLnNwbGljZShzdWJzY3JpcHRpb25zLmluZGV4T2Yoc3ViKSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgaW4gZGVmYXVsdHMpIHtcbiAgICAgIGlmIChkZWZhdWx0c1thdHRyaWJ1dGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm9vdEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgZGVmYXVsdHNbYXR0cmlidXRlXSBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIHB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwdXNoLFxuICAgIHJlbW92ZSxcbiAgICByZXNldCxcbiAgfTtcbn07XG4iXX0=","import { Observable } from 'rxjs';\nexport const createResizeObservable = (config) => {\n const elements = Array.isArray(config.elements) ? config.elements : [config.elements];\n return new Observable((obs) => {\n const observer = new ResizeObserver((entries) => obs.next(entries));\n for (const element of elements) {\n observer.observe(element, config.options);\n }\n return () => observer.disconnect();\n });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmFibGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Jlc2l6ZS1vYnNlcnZhYmxlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BR3RDLEVBQUUsRUFBRTtJQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0RixPQUFPLElBQUksVUFBVSxDQUF3QixDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFcEUsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzaXplT2JzZXJ2YWJsZSA9IChjb25maWc6IHtcbiAgZWxlbWVudHM6IEhUTUxFbGVtZW50IHwgSFRNTEVsZW1lbnRbXTtcbiAgb3B0aW9ucz86IFJlc2l6ZU9ic2VydmVyT3B0aW9ucztcbn0pID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5pc0FycmF5KGNvbmZpZy5lbGVtZW50cykgPyBjb25maWcuZWxlbWVudHMgOiBbY29uZmlnLmVsZW1lbnRzXTtcblxuICByZXR1cm4gbmV3IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPigob2JzKSA9PiB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IG9icy5uZXh0KGVudHJpZXMpKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBjb25maWcub3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSk7XG59O1xuIl19","export const round = (value, precision = 0) => {\n const multiplier = Math.pow(10, precision);\n return Math.round(value * multiplier) / multiplier;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91bmQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy9yb3VuZC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxFQUFFO0lBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3JELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCByb3VuZCA9ICh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb24gPSAwKSA9PiB7XG4gIGNvbnN0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBtdWx0aXBsaWVyKSAvIG11bHRpcGxpZXI7XG59O1xuIl19","import { clone } from './clone.util';\nexport const RUNTIME_ERROR_NO_DATA = '__ET_NO_DATA__';\nexport class RuntimeError extends Error {\n constructor(code, message, devOnly = false, data = RUNTIME_ERROR_NO_DATA) {\n super(formatRuntimeError(code, message, devOnly));\n this.code = code;\n this.devOnly = devOnly;\n this.data = data;\n if (data !== RUNTIME_ERROR_NO_DATA) {\n try {\n const _data = clone(data);\n setTimeout(() => {\n console.error(_data);\n }, 1);\n }\n catch {\n setTimeout(() => {\n console.error(data);\n }, 1);\n }\n }\n }\n}\nexport function formatRuntimeError(code, message, devOnly) {\n // prefix code with zeros if it's less than 100\n const codeWithZeros = code < 10 ? `00${code}` : code < 100 ? `0${code}` : code;\n const fullCode = `ET${codeWithZeros}`;\n const devOnlyText = devOnly ? ' [DEV ONLY] ' : '';\n return `${devOnlyText}${fullCode}${message ? ': ' + message : ''}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1lcnJvci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3J1bnRpbWUtZXJyb3IudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUV0RCxNQUFNLE9BQU8sWUFBK0IsU0FBUSxLQUFLO0lBQ3ZELFlBQ1MsSUFBTyxFQUNkLE9BQThCLEVBQ3ZCLFVBQVUsS0FBSyxFQUNmLE9BQWdCLHFCQUFxQjtRQUU1QyxLQUFLLENBQUMsa0JBQWtCLENBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBTDlDLFNBQUksR0FBSixJQUFJLENBQUc7UUFFUCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBaUM7UUFJNUMsSUFBSSxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUxQixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsSUFBTyxFQUNQLE9BQThCLEVBQzlCLE9BQWdCO0lBRWhCLCtDQUErQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFL0UsTUFBTSxRQUFRLEdBQUcsS0FBSyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELE9BQU8sR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsb25lIH0gZnJvbSAnLi9jbG9uZS51dGlsJztcblxuZXhwb3J0IGNvbnN0IFJVTlRJTUVfRVJST1JfTk9fREFUQSA9ICdfX0VUX05PX0RBVEFfXyc7XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lRXJyb3I8VCBleHRlbmRzIG51bWJlcj4gZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2RlOiBULFxuICAgIG1lc3NhZ2U6IG51bGwgfCBmYWxzZSB8IHN0cmluZyxcbiAgICBwdWJsaWMgZGV2T25seSA9IGZhbHNlLFxuICAgIHB1YmxpYyBkYXRhOiB1bmtub3duID0gUlVOVElNRV9FUlJPUl9OT19EQVRBLFxuICApIHtcbiAgICBzdXBlcihmb3JtYXRSdW50aW1lRXJyb3I8VD4oY29kZSwgbWVzc2FnZSwgZGV2T25seSkpO1xuXG4gICAgaWYgKGRhdGEgIT09IFJVTlRJTUVfRVJST1JfTk9fREFUQSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgX2RhdGEgPSBjbG9uZShkYXRhKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKF9kYXRhKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSdW50aW1lRXJyb3I8VCBleHRlbmRzIG51bWJlcj4oXG4gIGNvZGU6IFQsXG4gIG1lc3NhZ2U6IG51bGwgfCBmYWxzZSB8IHN0cmluZyxcbiAgZGV2T25seTogYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIC8vIHByZWZpeCBjb2RlIHdpdGggemVyb3MgaWYgaXQncyBsZXNzIHRoYW4gMTAwXG4gIGNvbnN0IGNvZGVXaXRoWmVyb3MgPSBjb2RlIDwgMTAgPyBgMDAke2NvZGV9YCA6IGNvZGUgPCAxMDAgPyBgMCR7Y29kZX1gIDogY29kZTtcblxuICBjb25zdCBmdWxsQ29kZSA9IGBFVCR7Y29kZVdpdGhaZXJvc31gO1xuICBjb25zdCBkZXZPbmx5VGV4dCA9IGRldk9ubHkgPyAnIFtERVYgT05MWV0gJyA6ICcnO1xuICByZXR1cm4gYCR7ZGV2T25seVRleHR9JHtmdWxsQ29kZX0ke21lc3NhZ2UgPyAnOiAnICsgbWVzc2FnZSA6ICcnfWA7XG59XG4iXX0=","import { assertInInjectionContext } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, combineLatest, filter, map, shareReplay, startWith, take, takeUntil, tap, } from 'rxjs';\nimport { switchQueryListChanges } from './angular.utils';\nimport { createDestroy } from './destroy.utils';\nimport { getObjectProperty, isObject } from './object.utils';\nexport class SelectionModel {\n get selection$() {\n return this._selection$.asObservable();\n }\n get selection() {\n return this._selection$.value;\n }\n get options$() {\n return this._options$.asObservable();\n }\n get options() {\n return this._options$.value;\n }\n get valueBinding$() {\n return this._valueBinding$.asObservable();\n }\n get valueBinding() {\n return this._valueBinding$.value;\n }\n get keyBinding$() {\n return combineLatest([this._keyBinding$, this.valueBinding$]).pipe(map(([keyBinding, valueBinding]) => keyBinding || valueBinding));\n }\n get keyBinding() {\n return this._keyBinding$.value || this.valueBinding;\n }\n get labelBinding$() {\n return this._labelBinding$.asObservable();\n }\n get labelBinding() {\n return this._labelBinding$.value;\n }\n get disabledBinding$() {\n return this._disabledBinding$.asObservable();\n }\n get disabledBinding() {\n return this._disabledBinding$.value;\n }\n get allowMultiple$() {\n return this._allowMultiple$.asObservable();\n }\n get allowMultiple() {\n return this._allowMultiple$.value;\n }\n get filter$() {\n return this._filter$.asObservable();\n }\n get filter() {\n return this._filter$.value;\n }\n constructor() {\n this._destroy$ = createDestroy();\n this._lastSelectionSetSubscription = null;\n this._selection$ = new BehaviorSubject([]);\n this._options$ = new BehaviorSubject([]);\n this.optionsSignal = toSignal(this.options$);\n this._valueBinding$ = new BehaviorSubject(null);\n this._keyBinding$ = new BehaviorSubject(null);\n this._labelBinding$ = new BehaviorSubject(null);\n this._disabledBinding$ = new BehaviorSubject(null);\n this._allowMultiple$ = new BehaviorSubject(false);\n this._filter$ = new BehaviorSubject('');\n this.value$ = combineLatest([this.selection$, this.valueBinding$, this.allowMultiple$]).pipe(map(([selection, valueBinding, allowMultiple]) => {\n if (allowMultiple) {\n return selection.map((option) => this.execFnOrGetOptionProperty(option, valueBinding));\n }\n const [option] = selection;\n if (!option)\n return null;\n return this.execFnOrGetOptionProperty(option, valueBinding);\n }));\n this.filteredOptions$ = combineLatest([this.options$, this.filter$, this.labelBinding$]).pipe(map(([options, filter]) => this.getFilteredOptions(filter, options)), shareReplay({ bufferSize: 1, refCount: true }));\n this._optionsAndSelection$ = combineLatest([this._options$, this._selection$]);\n this.trackByOptionKey = (option) => this.getKey(option);\n this.allowMultiple$\n .pipe(tap(() => {\n if (this.allowMultiple)\n return;\n const [option] = this.selection;\n if (!option)\n return;\n this.setSelection([option]);\n }), takeUntilDestroyed())\n .subscribe();\n }\n setSelection(selection) {\n if (!Array.isArray(selection)) {\n selection = [selection];\n }\n this._selection$.next(selection);\n return this;\n }\n setSelectionFromValue(value) {\n if (Array.isArray(value)) {\n const selection = value.map((v) => this.getOptionByValue(v)).filter((v) => v !== undefined);\n this.setSelection(selection);\n }\n else {\n const selection = this.getOptionByValue(value);\n if (selection) {\n this.setSelection(selection);\n }\n else {\n this.clearSelectedOptions();\n }\n }\n }\n setSelectionFromValue$(value) {\n this._lastSelectionSetSubscription?.unsubscribe();\n this._lastSelectionSetSubscription = this.options$\n .pipe(takeUntil(this._destroy$), filter((o) => !!o.length), tap(() => this.setSelectionFromValue(value)), take(1))\n .subscribe();\n }\n setValueBinding(fnOrPropertyPath) {\n this._valueBinding$.next(fnOrPropertyPath);\n return this;\n }\n setKeyBinding(fnOrPropertyPath) {\n this._keyBinding$.next(fnOrPropertyPath);\n return this;\n }\n setLabelBinding(fnOrPropertyPath) {\n this._labelBinding$.next(fnOrPropertyPath);\n return this;\n }\n setDisabledBinding(fnOrPropertyPath) {\n this._disabledBinding$.next(fnOrPropertyPath);\n return this;\n }\n setOptions(options) {\n this._options$.next(options);\n return this;\n }\n setOptionsFromQueryList(queryList) {\n assertInInjectionContext(this.setOptionsFromQueryList);\n queryList.changes\n .pipe(startWith(queryList), tap((list) => this.setOptions(list.toArray())), takeUntilDestroyed())\n .subscribe();\n return this;\n }\n setOptionsFromQueryList$(queryList$) {\n assertInInjectionContext(this.setOptionsFromQueryList$);\n queryList$\n .pipe(switchQueryListChanges(), tap((list) => this.setOptions(list?.toArray() || [])), takeUntilDestroyed())\n .subscribe();\n return this;\n }\n setAllowMultiple(allowMultiple) {\n this._allowMultiple$.next(allowMultiple);\n return this;\n }\n setFilter(filter) {\n const sanitizedFilter = filter?.trim() || '';\n this._filter$.next(sanitizedFilter);\n }\n reset() {\n this._selection$.next([]);\n this._options$.next([]);\n this._valueBinding$.next(null);\n this._keyBinding$.next(null);\n this._disabledBinding$.next(null);\n this._labelBinding$.next(null);\n this._allowMultiple$.next(false);\n }\n getOptionByValue$(value) {\n return this._optionsAndSelection$.pipe(map(() => this.getOptionByValue(value)));\n }\n getOptionByLabel$(label) {\n return this._optionsAndSelection$.pipe(map(() => this.getOptionByLabel(label)));\n }\n getOptionByKey$(key) {\n return this._optionsAndSelection$.pipe(map(() => this.getOptionByKey(key)));\n }\n isSelected$(option) {\n return this._selection$.pipe(map(() => this.isSelected(option)));\n }\n isDisabled$(option) {\n return this._optionsAndSelection$.pipe(map(() => this.isDisabled(option)));\n }\n getLabel$(option) {\n return this.labelBinding$.pipe(map((labelBinding) => this.execFnOrGetOptionProperty(option, labelBinding)));\n }\n getValue$(option) {\n return this.valueBinding$.pipe(map((valueBinding) => this.execFnOrGetOptionProperty(option, valueBinding)));\n }\n getKey$(option) {\n return this.keyBinding$.pipe(map((keyBinding) => this.execFnOrGetOptionProperty(option, keyBinding)));\n }\n getOptionByValue(value) {\n return this.getOption(value, this.valueBinding);\n }\n getOptionByLabel(label) {\n return this.getOption(label, this.labelBinding);\n }\n getOptionByKey(key) {\n return this.getOption(key, this.keyBinding);\n }\n getOption(value, propertyPath = null, options = [...this.options, ...this.selection]) {\n if (!propertyPath) {\n return options.find((option) => option === value);\n }\n return options.find((option) => {\n if (!isObject(option))\n return false;\n return this.execFnOrGetOptionProperty(option, propertyPath) === value;\n });\n }\n getOptionByIndex(index, options = this.getFilteredOptions()) {\n return options[index] || null;\n }\n getOptionByOffset(offset, index, config = { clamp: true }) {\n const { loop, clamp, skipDisabled, options = this.getFilteredOptions() } = config;\n const newIndex = index + offset;\n const remainingOffset = newIndex * -1;\n let optionResult = null;\n if (newIndex < 0) {\n if (loop) {\n optionResult = this.getOptionByOffset(remainingOffset, options.length - 1, config);\n }\n else if (clamp) {\n optionResult = this.getFirstOption();\n }\n else {\n optionResult = null;\n }\n }\n else if (newIndex >= options.length) {\n if (loop) {\n optionResult = this.getOptionByOffset(remainingOffset, 0, config);\n }\n else if (clamp) {\n optionResult = this.getLastOption();\n }\n else {\n optionResult = null;\n }\n }\n else {\n optionResult = this.getOptionByIndex(newIndex);\n }\n if (optionResult && skipDisabled && this.isDisabled(optionResult)) {\n return this.getOptionByOffset(offset, newIndex, config);\n }\n return optionResult;\n }\n getFirstOption(options = this.getFilteredOptions()) {\n return this.getOptionByIndex(0, options);\n }\n getLastOption(options = this.getFilteredOptions()) {\n return this.getOptionByIndex(options.length - 1, options);\n }\n getOptionIndex(option, options = this.getFilteredOptions()) {\n const key = this.getKey(option);\n const index = options.findIndex((o) => this.getKey(o) === key);\n return index === -1 ? null : index;\n }\n getNonMultipleSelectedOption() {\n if (this.allowMultiple)\n return null;\n return this.selection[0] || null;\n }\n getNonMultipleSelectedOptionIndex() {\n if (this.allowMultiple)\n return null;\n const opt = this.getNonMultipleSelectedOption();\n if (!opt)\n return null;\n return this.getOptionIndex(opt);\n }\n getNonMultipleOptionByOffsetFromSelected(offset, config = { clamp: true }) {\n if (this.allowMultiple)\n return null;\n const index = this.getNonMultipleSelectedOptionIndex();\n if (index === null)\n return null;\n return this.getOptionByOffset(index, offset, config);\n }\n getLabel(option) {\n return this.execFnOrGetOptionProperty(option, this.labelBinding);\n }\n getValue(option) {\n return this.execFnOrGetOptionProperty(option, this.valueBinding);\n }\n getKey(option) {\n return this.execFnOrGetOptionProperty(option, this.keyBinding);\n }\n getDisabled(option) {\n return this.execFnOrGetOptionProperty(option, this.disabledBinding);\n }\n execFnOrGetOptionProperty(option, fnOrPropertyPath) {\n if (!fnOrPropertyPath || !isObject(option))\n return option;\n if (typeof fnOrPropertyPath === 'function') {\n return fnOrPropertyPath(option);\n }\n return getObjectProperty(option, fnOrPropertyPath);\n }\n execFnOrGetOptionPropertyNullable(option, fnOrPropertyPath) {\n if (!fnOrPropertyPath || !isObject(option))\n return null;\n return this.execFnOrGetOptionProperty(option, fnOrPropertyPath);\n }\n getOptionProperty(option, propertyPath) {\n if (!propertyPath || !isObject(option))\n return option;\n return getObjectProperty(option, propertyPath);\n }\n isSelected(option) {\n const optionKey = this.execFnOrGetOptionProperty(option, this.keyBinding);\n return this.getOption(optionKey, this.keyBinding, this.selection) !== undefined;\n }\n isDisabled(option) {\n return !!this.execFnOrGetOptionPropertyNullable(option, this.disabledBinding);\n }\n getFilteredOptions(filter = this.filter, options = this.options) {\n if (!filter)\n return options;\n const splitFilter = filter.split(' ').filter((f) => f);\n return options.filter((option) => {\n const label = this.getLabel(option);\n if (!label || typeof label !== 'string')\n return false;\n const splitLabel = label.split(' ').filter((l) => l);\n return splitFilter.every((f) => splitLabel.some((l) => l.toLowerCase().includes(f.toLowerCase())));\n });\n }\n addSelectedOption(option) {\n if (this.allowMultiple) {\n if (this.isSelected(option))\n return;\n this._selection$.next([...this.selection, option]);\n }\n else {\n this._selection$.next([option]);\n }\n }\n removeSelectedOption(option) {\n const optionKey = this.execFnOrGetOptionProperty(option, this.keyBinding);\n if (!this.isSelected(option))\n return;\n this._selection$.next(this.selection.filter((selectedOption) => {\n const key = this.execFnOrGetOptionProperty(selectedOption, this.keyBinding);\n return key !== optionKey;\n }));\n }\n clearSelectedOptions() {\n this._selection$.next([]);\n }\n toggleSelectedOption(option) {\n if (this.isSelected(option)) {\n this.removeSelectedOption(option);\n }\n else {\n this.addSelectedOption(option);\n }\n }\n // FIXME: Toggle should respect disabled binding if it exists\n toggleAllSelectedOptions() {\n const filteredOptions = this.getFilteredOptions();\n const unselectedOptions = filteredOptions.filter((option) => !this.isSelected(option));\n if (unselectedOptions.length) {\n const selection = unselectedOptions.filter((o) => !this.selection.some((s) => this.getKey(s) === this.getKey(o)));\n this._selection$.next([...this.selection, ...selection]);\n }\n else {\n const selection = this.selection.filter((s) => !filteredOptions.some((o) => this.getKey(o) === this.getKey(s)));\n this._selection$.next(selection);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLW1vZGVsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2VsZWN0aW9uLW1vZGVsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFHZixhQUFhLEVBQ2IsTUFBTSxFQUNOLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQXlCN0QsTUFBTSxPQUFPLGNBQWM7SUFJekIsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFHRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUlELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQ0Qs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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YnNjcmlwdGlvbixcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzdGFydFdpdGgsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFR5cGVkUXVlcnlMaXN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgc3dpdGNoUXVlcnlMaXN0Q2hhbmdlcyB9IGZyb20gJy4vYW5ndWxhci51dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95IH0gZnJvbSAnLi9kZXN0cm95LnV0aWxzJztcbmltcG9ydCB7IGdldE9iamVjdFByb3BlcnR5LCBpc09iamVjdCB9IGZyb20gJy4vb2JqZWN0LnV0aWxzJztcblxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uTW9kZWxUeXBlcyA9IHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bjtcbmV4cG9ydCB0eXBlIFNlbGVjdGlvbk1vZGVsUHJvcGVydHlQYXRoID0gc3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uTW9kZWxPcHRpb25WYWx1ZUZuPFQgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbFR5cGVzID0gYW55PiA9IChvcHRpb246IFQpID0+IHVua25vd247XG5cbi8qKlxuICogWW91IGNhbiB1c2UgYSBwcm9wZXJ0eSBwYXRoIG9yIGEgZnVuY3Rpb24gdG8gZ2V0IHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24uIFRoZSBmdW5jdGlvbiBzaG91bGQgYmUgYXMgKipsaWdodHdlaWdodCBhcyBwb3NzaWJsZSoqIGFzIGl0IHdpbGwgYmUgY2FsbGVkICoqYSBsb3QqKi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUHJvcGVydHkgcGF0aFxuICogXCJpZFwiIC8vIG9wdGlvbi5pZFxuICogXCJ1c2VyLm5hbWVcIiAvLyBvcHRpb24udXNlci5uYW1lXG4gKlxuICogLy8gRnVuY3Rpb25cbiAqIChvcHRpb24pID0+IG9wdGlvbi5pZCAvLyBvcHRpb24uaWRcbiAqIChvcHRpb24pID0+IG9wdGlvbi51c2VyLm5hbWUgLy8gb3B0aW9uLnVzZXIubmFtZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uTW9kZWxCaW5kaW5nPFQgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbFR5cGVzID0gYW55PiA9XG4gIHwgU2VsZWN0aW9uTW9kZWxQcm9wZXJ0eVBhdGhcbiAgfCBTZWxlY3Rpb25Nb2RlbE9wdGlvblZhbHVlRm48VD47XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25Nb2RlbDxUIGV4dGVuZHMgU2VsZWN0aW9uTW9kZWxUeXBlcyA9IHVua25vd24+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgX2xhc3RTZWxlY3Rpb25TZXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGdldCBzZWxlY3Rpb24kKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbiQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG5cbiAgZ2V0IG9wdGlvbnMkKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICByZWFkb25seSBvcHRpb25zU2lnbmFsID0gdG9TaWduYWwodGhpcy5vcHRpb25zJCk7XG5cbiAgZ2V0IHZhbHVlQmluZGluZyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlQmluZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IHZhbHVlQmluZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVCaW5kaW5nJC52YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF92YWx1ZUJpbmRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3Rpb25Nb2RlbEJpbmRpbmc8VD4gfCBudWxsPihudWxsKTtcblxuICBnZXQga2V5QmluZGluZyQoKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuX2tleUJpbmRpbmckLCB0aGlzLnZhbHVlQmluZGluZyRdKS5waXBlKFxuICAgICAgbWFwKChba2V5QmluZGluZywgdmFsdWVCaW5kaW5nXSkgPT4ga2V5QmluZGluZyB8fCB2YWx1ZUJpbmRpbmcpLFxuICAgICk7XG4gIH1cbiAgZ2V0IGtleUJpbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2tleUJpbmRpbmckLnZhbHVlIHx8IHRoaXMudmFsdWVCaW5kaW5nO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tleUJpbmRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3Rpb25Nb2RlbEJpbmRpbmc8VD4gfCBudWxsPihudWxsKTtcblxuICBnZXQgbGFiZWxCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxCaW5kaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgbGFiZWxCaW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbEJpbmRpbmckLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhYmVsQmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGlvbk1vZGVsQmluZGluZzxUPiB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBkaXNhYmxlZEJpbmRpbmckKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEJpbmRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBkaXNhYmxlZEJpbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkQmluZGluZyQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzYWJsZWRCaW5kaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW9uTW9kZWxCaW5kaW5nPFQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGFsbG93TXVsdGlwbGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd011bHRpcGxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgYWxsb3dNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dNdWx0aXBsZSQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsb3dNdWx0aXBsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBnZXQgZmlsdGVyJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgZmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHZhbHVlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0aW9uJCwgdGhpcy52YWx1ZUJpbmRpbmckLCB0aGlzLmFsbG93TXVsdGlwbGUkXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3Rpb24sIHZhbHVlQmluZGluZywgYWxsb3dNdWx0aXBsZV0pID0+IHtcbiAgICAgIGlmIChhbGxvd011bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChvcHRpb24pID0+IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHZhbHVlQmluZGluZykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHNlbGVjdGlvbjtcblxuICAgICAgaWYgKCFvcHRpb24pIHJldHVybiBudWxsO1xuXG4gICAgICByZXR1cm4gdGhpcy5leGVjRm5PckdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdmFsdWVCaW5kaW5nKTtcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBmaWx0ZXJlZE9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5maWx0ZXIkLCB0aGlzLmxhYmVsQmluZGluZyRdKS5waXBlKFxuICAgIG1hcCgoW29wdGlvbnMsIGZpbHRlcl0pID0+IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKGZpbHRlciwgb3B0aW9ucykpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uc0FuZFNlbGVjdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9vcHRpb25zJCwgdGhpcy5fc2VsZWN0aW9uJF0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYWxsb3dNdWx0aXBsZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5zZWxlY3Rpb247XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbikgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oW29wdGlvbl0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uOiBUIHwgVFtdKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlbGVjdGlvbikpIHtcbiAgICAgIHNlbGVjdGlvbiA9IFtzZWxlY3Rpb25dO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGlvbiQubmV4dChzZWxlY3Rpb24pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRTZWxlY3Rpb25Gcm9tVmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHZhbHVlLm1hcCgodikgPT4gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHYpKS5maWx0ZXIoKHYpOiB2IGlzIFQgPT4gdiAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGlvbkZyb21WYWx1ZSQodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9sYXN0U2VsZWN0aW9uU2V0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fbGFzdFNlbGVjdGlvblNldFN1YnNjcmlwdGlvbiA9IHRoaXMub3B0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICBmaWx0ZXIoKG8pID0+ICEhby5sZW5ndGgpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRTZWxlY3Rpb25Gcm9tVmFsdWUodmFsdWUpKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNldFZhbHVlQmluZGluZyhmbk9yUHJvcGVydHlQYXRoOiBTZWxlY3Rpb25Nb2RlbEJpbmRpbmc8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWVCaW5kaW5nJC5uZXh0KGZuT3JQcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRLZXlCaW5kaW5nKGZuT3JQcm9wZXJ0eVBhdGg6IFNlbGVjdGlvbk1vZGVsQmluZGluZzxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl9rZXlCaW5kaW5nJC5uZXh0KGZuT3JQcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRMYWJlbEJpbmRpbmcoZm5PclByb3BlcnR5UGF0aDogU2VsZWN0aW9uTW9kZWxCaW5kaW5nPFQ+IHwgbnVsbCkge1xuICAgIHRoaXMuX2xhYmVsQmluZGluZyQubmV4dChmbk9yUHJvcGVydHlQYXRoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRCaW5kaW5nKGZuT3JQcm9wZXJ0eVBhdGg6IFNlbGVjdGlvbk1vZGVsQmluZGluZzxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl9kaXNhYmxlZEJpbmRpbmckLm5leHQoZm5PclByb3BlcnR5UGF0aCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogVFtdKSB7XG4gICAgdGhpcy5fb3B0aW9ucyQubmV4dChvcHRpb25zKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0T3B0aW9uc0Zyb21RdWVyeUxpc3QocXVlcnlMaXN0OiBUeXBlZFF1ZXJ5TGlzdDxUPikge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh0aGlzLnNldE9wdGlvbnNGcm9tUXVlcnlMaXN0KTtcblxuICAgIHF1ZXJ5TGlzdC5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHF1ZXJ5TGlzdCksXG4gICAgICAgIHRhcCgobGlzdCkgPT4gdGhpcy5zZXRPcHRpb25zKGxpc3QudG9BcnJheSgpKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRPcHRpb25zRnJvbVF1ZXJ5TGlzdCQocXVlcnlMaXN0JDogT2JzZXJ2YWJsZTxUeXBlZFF1ZXJ5TGlzdDxUPiB8IG51bGwgfCB1bmRlZmluZWQ+KSB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHRoaXMuc2V0T3B0aW9uc0Zyb21RdWVyeUxpc3QkKTtcblxuICAgIHF1ZXJ5TGlzdCRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hRdWVyeUxpc3RDaGFuZ2VzKCksXG4gICAgICAgIHRhcCgobGlzdCkgPT4gdGhpcy5zZXRPcHRpb25zKGxpc3Q/LnRvQXJyYXkoKSB8fCBbXSkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0QWxsb3dNdWx0aXBsZShhbGxvd011bHRpcGxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYWxsb3dNdWx0aXBsZSQubmV4dChhbGxvd011bHRpcGxlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0RmlsdGVyKGZpbHRlcjogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IHNhbml0aXplZEZpbHRlciA9IGZpbHRlcj8udHJpbSgpIHx8ICcnO1xuXG4gICAgdGhpcy5fZmlsdGVyJC5uZXh0KHNhbml0aXplZEZpbHRlcik7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoW10pO1xuICAgIHRoaXMuX29wdGlvbnMkLm5leHQoW10pO1xuICAgIHRoaXMuX3ZhbHVlQmluZGluZyQubmV4dChudWxsKTtcbiAgICB0aGlzLl9rZXlCaW5kaW5nJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rpc2FibGVkQmluZGluZyQubmV4dChudWxsKTtcbiAgICB0aGlzLl9sYWJlbEJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fYWxsb3dNdWx0aXBsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICB0cmFja0J5T3B0aW9uS2V5ID0gKG9wdGlvbjogVCkgPT4gdGhpcy5nZXRLZXkob3B0aW9uKTtcblxuICBnZXRPcHRpb25CeVZhbHVlJCh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpKSk7XG4gIH1cblxuICBnZXRPcHRpb25CeUxhYmVsJChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNBbmRTZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0T3B0aW9uQnlMYWJlbChsYWJlbCkpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5S2V5JChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5S2V5KGtleSkpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSk7XG4gIH1cblxuICBpc0Rpc2FibGVkJChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc0FuZFNlbGVjdGlvbiQucGlwZShtYXAoKCkgPT4gdGhpcy5pc0Rpc2FibGVkKG9wdGlvbikpKTtcbiAgfVxuXG4gIGdldExhYmVsJChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbEJpbmRpbmckLnBpcGUobWFwKChsYWJlbEJpbmRpbmcpID0+IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIGxhYmVsQmluZGluZykpKTtcbiAgfVxuXG4gIGdldFZhbHVlJChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZUJpbmRpbmckLnBpcGUobWFwKCh2YWx1ZUJpbmRpbmcpID0+IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHZhbHVlQmluZGluZykpKTtcbiAgfVxuXG4gIGdldEtleSQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5QmluZGluZyQucGlwZShtYXAoKGtleUJpbmRpbmcpID0+IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIGtleUJpbmRpbmcpKSk7XG4gIH1cblxuICBnZXRPcHRpb25CeVZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKHZhbHVlLCB0aGlzLnZhbHVlQmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb25CeUxhYmVsKGxhYmVsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24obGFiZWwsIHRoaXMubGFiZWxCaW5kaW5nKTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5S2V5KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKGtleSwgdGhpcy5rZXlCaW5kaW5nKTtcbiAgfVxuXG4gIGdldE9wdGlvbihcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICBwcm9wZXJ0eVBhdGg6IFNlbGVjdGlvbk1vZGVsQmluZGluZzxUPiB8IG51bGwgPSBudWxsLFxuICAgIG9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCAuLi50aGlzLnNlbGVjdGlvbl0sXG4gICkge1xuICAgIGlmICghcHJvcGVydHlQYXRoKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbiA9PT0gdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKCFpc09iamVjdChvcHRpb24pKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLmV4ZWNGbk9yR2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5SW5kZXgoaW5kZXg6IG51bWJlciwgb3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCkpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIG9wdGlvbnNbaW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBnZXRPcHRpb25CeU9mZnNldChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuOyBza2lwRGlzYWJsZWQ/OiBib29sZWFuOyBvcHRpb25zPzogVFtdIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICk6IFQgfCBudWxsIHtcbiAgICBjb25zdCB7IGxvb3AsIGNsYW1wLCBza2lwRGlzYWJsZWQsIG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpIH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgIGNvbnN0IHJlbWFpbmluZ09mZnNldCA9IG5ld0luZGV4ICogLTE7XG5cbiAgICBsZXQgb3B0aW9uUmVzdWx0OiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBpZiAobG9vcCkge1xuICAgICAgICBvcHRpb25SZXN1bHQgPSB0aGlzLmdldE9wdGlvbkJ5T2Zmc2V0KHJlbWFpbmluZ09mZnNldCwgb3B0aW9ucy5sZW5ndGggLSAxLCBjb25maWcpO1xuICAgICAgfSBlbHNlIGlmIChjbGFtcCkge1xuICAgICAgICBvcHRpb25SZXN1bHQgPSB0aGlzLmdldEZpcnN0T3B0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25SZXN1bHQgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3SW5kZXggPj0gb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGlmIChsb29wKSB7XG4gICAgICAgIG9wdGlvblJlc3VsdCA9IHRoaXMuZ2V0T3B0aW9uQnlPZmZzZXQocmVtYWluaW5nT2Zmc2V0LCAwLCBjb25maWcpO1xuICAgICAgfSBlbHNlIGlmIChjbGFtcCkge1xuICAgICAgICBvcHRpb25SZXN1bHQgPSB0aGlzLmdldExhc3RPcHRpb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvblJlc3VsdCA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvblJlc3VsdCA9IHRoaXMuZ2V0T3B0aW9uQnlJbmRleChuZXdJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvblJlc3VsdCAmJiBza2lwRGlzYWJsZWQgJiYgdGhpcy5pc0Rpc2FibGVkKG9wdGlvblJlc3VsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5T2Zmc2V0KG9mZnNldCwgbmV3SW5kZXgsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvblJlc3VsdDtcbiAgfVxuXG4gIGdldEZpcnN0T3B0aW9uKG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5SW5kZXgoMCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRMYXN0T3B0aW9uKG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5SW5kZXgob3B0aW9ucy5sZW5ndGggLSAxLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldE9wdGlvbkluZGV4KG9wdGlvbjogVCwgb3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCkpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleShvcHRpb24pO1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IHRoaXMuZ2V0S2V5KG8pID09PSBrZXkpO1xuXG4gICAgcmV0dXJuIGluZGV4ID09PSAtMSA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uWzBdIHx8IG51bGw7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZVNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvcHQgPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTtcblxuICAgIGlmICghb3B0KSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkluZGV4KG9wdCk7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZU9wdGlvbkJ5T2Zmc2V0RnJvbVNlbGVjdGVkKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5T2Zmc2V0KGluZGV4LCBvZmZzZXQsIGNvbmZpZyk7XG4gIH1cblxuICBnZXRMYWJlbChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5leGVjRm5PckdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5sYWJlbEJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0VmFsdWUob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHRoaXMudmFsdWVCaW5kaW5nKTtcbiAgfVxuXG4gIGdldEtleShvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5leGVjRm5PckdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcbiAgfVxuXG4gIGdldERpc2FibGVkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmV4ZWNGbk9yR2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB0aGlzLmRpc2FibGVkQmluZGluZyk7XG4gIH1cblxuICBleGVjRm5PckdldE9wdGlvblByb3BlcnR5KG9wdGlvbjogVCwgZm5PclByb3BlcnR5UGF0aDogU2VsZWN0aW9uTW9kZWxCaW5kaW5nPFQ+IHwgbnVsbCkge1xuICAgIGlmICghZm5PclByb3BlcnR5UGF0aCB8fCAhaXNPYmplY3Qob3B0aW9uKSkgcmV0dXJuIG9wdGlvbjtcblxuICAgIGlmICh0eXBlb2YgZm5PclByb3BlcnR5UGF0aCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGZuT3JQcm9wZXJ0eVBhdGgob3B0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBmbk9yUHJvcGVydHlQYXRoKTtcbiAgfVxuXG4gIGV4ZWNGbk9yR2V0T3B0aW9uUHJvcGVydHlOdWxsYWJsZShvcHRpb246IFQsIGZuT3JQcm9wZXJ0eVBhdGg6IFNlbGVjdGlvbk1vZGVsQmluZGluZzxUPiB8IG51bGwpIHtcbiAgICBpZiAoIWZuT3JQcm9wZXJ0eVBhdGggfHwgIWlzT2JqZWN0KG9wdGlvbikpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIGZuT3JQcm9wZXJ0eVBhdGgpO1xuICB9XG5cbiAgZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uOiBULCBwcm9wZXJ0eVBhdGg6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAoIXByb3BlcnR5UGF0aCB8fCAhaXNPYmplY3Qob3B0aW9uKSkgcmV0dXJuIG9wdGlvbjtcblxuICAgIHJldHVybiBnZXRPYmplY3RQcm9wZXJ0eShvcHRpb24sIHByb3BlcnR5UGF0aCk7XG4gIH1cblxuICBpc1NlbGVjdGVkKG9wdGlvbjogVCkge1xuICAgIGNvbnN0IG9wdGlvbktleSA9IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHRoaXMua2V5QmluZGluZyk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24ob3B0aW9uS2V5LCB0aGlzLmtleUJpbmRpbmcsIHRoaXMuc2VsZWN0aW9uKSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNEaXNhYmxlZChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gISF0aGlzLmV4ZWNGbk9yR2V0T3B0aW9uUHJvcGVydHlOdWxsYWJsZShvcHRpb24sIHRoaXMuZGlzYWJsZWRCaW5kaW5nKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkT3B0aW9ucyhmaWx0ZXIgPSB0aGlzLmZpbHRlciwgb3B0aW9ucyA9IHRoaXMub3B0aW9ucykge1xuICAgIGlmICghZmlsdGVyKSByZXR1cm4gb3B0aW9ucztcblxuICAgIGNvbnN0IHNwbGl0RmlsdGVyID0gZmlsdGVyLnNwbGl0KCcgJykuZmlsdGVyKChmKSA9PiBmKTtcblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0TGFiZWwob3B0aW9uKTtcblxuICAgICAgaWYgKCFsYWJlbCB8fCB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHNwbGl0TGFiZWwgPSBsYWJlbC5zcGxpdCgnICcpLmZpbHRlcigobCkgPT4gbCk7XG5cbiAgICAgIHJldHVybiBzcGxpdEZpbHRlci5ldmVyeSgoZikgPT4gc3BsaXRMYWJlbC5zb21lKChsKSA9PiBsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZi50b0xvd2VyQ2FzZSgpKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VsZWN0ZWRPcHRpb24ob3B0aW9uOiBUKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZSkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSByZXR1cm47XG5cbiAgICAgIHRoaXMuX3NlbGVjdGlvbiQubmV4dChbLi4udGhpcy5zZWxlY3Rpb24sIG9wdGlvbl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoW29wdGlvbl0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGNvbnN0IG9wdGlvbktleSA9IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHRoaXMua2V5QmluZGluZyk7XG5cbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSByZXR1cm47XG5cbiAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoXG4gICAgICB0aGlzLnNlbGVjdGlvbi5maWx0ZXIoKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZXhlY0ZuT3JHZXRPcHRpb25Qcm9wZXJ0eShzZWxlY3RlZE9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgICAgICByZXR1cm4ga2V5ICE9PSBvcHRpb25LZXk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gRklYTUU6IFRvZ2dsZSBzaG91bGQgcmVzcGVjdCBkaXNhYmxlZCBiaW5kaW5nIGlmIGl0IGV4aXN0c1xuICB0b2dnbGVBbGxTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGhpcy5nZXRGaWx0ZXJlZE9wdGlvbnMoKTtcbiAgICBjb25zdCB1bnNlbGVjdGVkT3B0aW9ucyA9IGZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gIXRoaXMuaXNTZWxlY3RlZChvcHRpb24pKTtcblxuICAgIGlmICh1bnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHVuc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigobykgPT4gIXRoaXMuc2VsZWN0aW9uLnNvbWUoKHMpID0+IHRoaXMuZ2V0S2V5KHMpID09PSB0aGlzLmdldEtleShvKSkpO1xuXG4gICAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoWy4uLnRoaXMuc2VsZWN0aW9uLCAuLi5zZWxlY3Rpb25dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKChzKSA9PiAhZmlsdGVyZWRPcHRpb25zLnNvbWUoKG8pID0+IHRoaXMuZ2V0S2V5KG8pID09PSB0aGlzLmdldEtleShzKSkpO1xuXG4gICAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoc2VsZWN0aW9uKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { supportsScrollBehavior } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport { inject } from '@angular/core';\nimport { skip, startWith, take, tap } from 'rxjs';\nimport { RouterStateService } from '../services';\nimport { createResizeObservable } from './resize-observable.util';\nimport { elementCanScroll } from './scrollable.utils';\nconst scrollBehaviorSupported = supportsScrollBehavior();\nconst BLOCK_CLASS = 'cdk-global-scrollblock';\nconst OVERSCROLL_CLASS = 'et-global-no-overscroll';\n/**\n * @deprecated Will be removed in v5. Scroll blocking for overlays is build in by default.\n */\nexport class SmartBlockScrollStrategy {\n constructor() {\n this._previousHTMLStyles = { top: '', left: '' };\n this._previousScrollPosition = { top: 0, left: 0 };\n this._isEnabled = false;\n this._urlSubscription = null;\n this._resizeSubscription = null;\n this._didNavigate = false;\n this.#viewportRuler = inject(ViewportRuler);\n this.#routerState = inject(RouterStateService);\n this.#document = inject(DOCUMENT);\n }\n #viewportRuler;\n #routerState;\n #document;\n attach() {\n // noop\n }\n enable() {\n if (!this._canBeEnabled())\n return;\n const root = this.#document.documentElement;\n root.classList.add(OVERSCROLL_CLASS);\n this._resizeSubscription = createResizeObservable({ elements: root })\n .pipe(startWith(null), tap(() => {\n if (this._isEnabled || !elementCanScroll(root) || !this._canBeEnabled())\n return;\n this._isEnabled = true;\n this._previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();\n this._didNavigate = false;\n this._previousHTMLStyles.left = root.style.left || '';\n this._previousHTMLStyles.top = root.style.top || '';\n root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n root.classList.add(BLOCK_CLASS);\n this._urlSubscription = this.#routerState.route$\n .pipe(skip(1), take(1), tap(() => {\n this._didNavigate = true;\n }))\n .subscribe();\n }))\n .subscribe();\n }\n disable() {\n this._urlSubscription?.unsubscribe();\n this._resizeSubscription?.unsubscribe();\n const html = this.#document.documentElement;\n if (this._canBeEnabled()) {\n html.classList.remove(OVERSCROLL_CLASS);\n }\n if (this._isEnabled) {\n const body = this.#document.body;\n const htmlStyle = html.style;\n const bodyStyle = body.style;\n const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n this._isEnabled = false;\n htmlStyle.left = this._previousHTMLStyles.left;\n htmlStyle.top = this._previousHTMLStyles.top;\n html.classList.remove(BLOCK_CLASS);\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n }\n if (!this._didNavigate) {\n window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n }\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n }\n }\n _canBeEnabled() {\n const html = this.#document.documentElement;\n if (html.classList.contains(BLOCK_CLASS) || this._isEnabled) {\n return false;\n }\n return true;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtYmxvY2stc2Nyb2xsLXN0cmF0ZWd5LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc21hcnQtYmxvY2stc2Nyb2xsLXN0cmF0ZWd5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBZ0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsTUFBTSx1QkFBdUIsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0FBRXpELE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDO0FBQzdDLE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBQXJDO1FBQ1Usd0JBQW1CLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM1Qyw0QkFBdUIsR0FBa0MsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM3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QUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBzdXBwb3J0c1Njcm9sbEJlaGF2aW9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2tpcCwgc3RhcnRXaXRoLCBTdWJzY3JpcHRpb24sIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgY3JlYXRlUmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJy4vcmVzaXplLW9ic2VydmFibGUudXRpbCc7XG5pbXBvcnQgeyBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi9zY3JvbGxhYmxlLnV0aWxzJztcblxuY29uc3Qgc2Nyb2xsQmVoYXZpb3JTdXBwb3J0ZWQgPSBzdXBwb3J0c1Njcm9sbEJlaGF2aW9yKCk7XG5cbmNvbnN0IEJMT0NLX0NMQVNTID0gJ2Nkay1nbG9iYWwtc2Nyb2xsYmxvY2snO1xuY29uc3QgT1ZFUlNDUk9MTF9DTEFTUyA9ICdldC1nbG9iYWwtbm8tb3ZlcnNjcm9sbCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHY1LiBTY3JvbGwgYmxvY2tpbmcgZm9yIG92ZXJsYXlzIGlzIGJ1aWxkIGluIGJ5IGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTbWFydEJsb2NrU2Nyb2xsU3RyYXRlZ3kgaW1wbGVtZW50cyBTY3JvbGxTdHJhdGVneSB7XG4gIHByaXZhdGUgX3ByZXZpb3VzSFRNTFN0eWxlcyA9IHsgdG9wOiAnJywgbGVmdDogJycgfTtcbiAgcHJpdmF0ZSBfcHJldmlvdXNTY3JvbGxQb3NpdGlvbjogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0gPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICBwcml2YXRlIF9pc0VuYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdXJsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmVzaXplU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGlkTmF2aWdhdGUgPSBmYWxzZTtcblxuICAjdmlld3BvcnRSdWxlciA9IGluamVjdChWaWV3cG9ydFJ1bGVyKTtcbiAgI3JvdXRlclN0YXRlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgYXR0YWNoKCkge1xuICAgIC8vIG5vb3BcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NhbkJlRW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCByb290ID0gdGhpcy4jZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHJvb3QuY2xhc3NMaXN0LmFkZChPVkVSU0NST0xMX0NMQVNTKTtcblxuICAgIHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbiA9IGNyZWF0ZVJlc2l6ZU9ic2VydmFibGUoeyBlbGVtZW50czogcm9vdCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faXNFbmFibGVkIHx8ICFlbGVtZW50Q2FuU2Nyb2xsKHJvb3QpIHx8ICF0aGlzLl9jYW5CZUVuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgICB0aGlzLl9kaWROYXZpZ2F0ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQgPSByb290LnN0eWxlLmxlZnQgfHwgJyc7XG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcCA9IHJvb3Quc3R5bGUudG9wIHx8ICcnO1xuXG4gICAgICAgICAgcm9vdC5zdHlsZS5sZWZ0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KTtcbiAgICAgICAgICByb290LnN0eWxlLnRvcCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKTtcbiAgICAgICAgICByb290LmNsYXNzTGlzdC5hZGQoQkxPQ0tfQ0xBU1MpO1xuXG4gICAgICAgICAgdGhpcy5fdXJsU3Vic2NyaXB0aW9uID0gdGhpcy4jcm91dGVyU3RhdGUucm91dGUkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWROYXZpZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5fdXJsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBjb25zdCBodG1sID0gdGhpcy4jZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NhbkJlRW5hYmxlZCgpKSB7XG4gICAgICBodG1sLmNsYXNzTGlzdC5yZW1vdmUoT1ZFUlNDUk9MTF9DTEFTUyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgY29uc3QgYm9keSA9IHRoaXMuI2RvY3VtZW50LmJvZHk7XG4gICAgICBjb25zdCBodG1sU3R5bGUgPSBodG1sLnN0eWxlO1xuICAgICAgY29uc3QgYm9keVN0eWxlID0gYm9keS5zdHlsZTtcbiAgICAgIGNvbnN0IHByZXZpb3VzSHRtbFNjcm9sbEJlaGF2aW9yID0gaHRtbFN0eWxlLnNjcm9sbEJlaGF2aW9yIHx8ICcnO1xuICAgICAgY29uc3QgcHJldmlvdXNCb2R5U2Nyb2xsQmVoYXZpb3IgPSBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgfHwgJyc7XG5cbiAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICBodG1sU3R5bGUubGVmdCA9IHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0O1xuICAgICAgaHRtbFN0eWxlLnRvcCA9IHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A7XG4gICAgICBodG1sLmNsYXNzTGlzdC5yZW1vdmUoQkxPQ0tfQ0xBU1MpO1xuXG4gICAgICBpZiAoc2Nyb2xsQmVoYXZpb3JTdXBwb3J0ZWQpIHtcbiAgICAgICAgaHRtbFN0eWxlLnNjcm9sbEJlaGF2aW9yID0gYm9keVN0eWxlLnNjcm9sbEJlaGF2aW9yID0gJ2F1dG8nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2RpZE5hdmlnYXRlKSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LCB0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxCZWhhdmlvclN1cHBvcnRlZCkge1xuICAgICAgICBodG1sU3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBwcmV2aW91c0h0bWxTY3JvbGxCZWhhdmlvcjtcbiAgICAgICAgYm9keVN0eWxlLnNjcm9sbEJlaGF2aW9yID0gcHJldmlvdXNCb2R5U2Nyb2xsQmVoYXZpb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2FuQmVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLiNkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICBpZiAoaHRtbC5jbGFzc0xpc3QuY29udGFpbnMoQkxPQ0tfQ0xBU1MpIHx8IHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=","export const isPrimitiveArray = (value) => {\n if (!Array.isArray(value))\n return false;\n const first = value[0];\n const last = value[value.length - 1];\n if (!first || !last)\n return false;\n return typeof first !== 'object' && typeof last !== 'object';\n};\nexport const isObjectArray = (value) => {\n if (!Array.isArray(value))\n return false;\n const first = value[0];\n const last = value[value.length - 1];\n if (!first || !last)\n return false;\n return typeof first === 'object' && typeof last === 'object' && !Array.isArray(first) && !Array.isArray(last);\n};\nexport const isEmptyArray = (value) => {\n return Array.isArray(value) && value.length === 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy92YWx1ZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWMsRUFBNkIsRUFBRTtJQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFckMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUM7QUFDL0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBYyxFQUEyQyxFQUFFO0lBQ3ZGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVyQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWxDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWMsRUFBZSxFQUFFO0lBQzFELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZUFycmF5ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQXJyYXk8UHJpbWl0aXZlPiA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmaXJzdCA9IHZhbHVlWzBdO1xuICBjb25zdCBsYXN0ID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG5cbiAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0eXBlb2YgZmlyc3QgIT09ICdvYmplY3QnICYmIHR5cGVvZiBsYXN0ICE9PSAnb2JqZWN0Jztcbn07XG5cbmV4cG9ydCBjb25zdCBpc09iamVjdEFycmF5ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGZpcnN0ID0gdmFsdWVbMF07XG4gIGNvbnN0IGxhc3QgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcblxuICBpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIHR5cGVvZiBmaXJzdCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGxhc3QgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZpcnN0KSAmJiAhQXJyYXkuaXNBcnJheShsYXN0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5QXJyYXkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBbXSA9PiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDA7XG59O1xuIl19","import { VIEWPORT_CONFIG } from '../constants';\nexport const provideViewportConfig = (viewportConfig) => {\n return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3ZpZXdwb3J0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxjQUE4QixFQUN3QyxFQUFFO0lBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUNoRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWSUVXUE9SVF9DT05GSUcgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVmlld3BvcnRDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlVmlld3BvcnRDb25maWcgPSAoXG4gIHZpZXdwb3J0Q29uZmlnOiBWaWV3cG9ydENvbmZpZyxcbik6IHsgcHJvdmlkZTogdHlwZW9mIFZJRVdQT1JUX0NPTkZJRzsgdXNlVmFsdWU6IHR5cGVvZiB2aWV3cG9ydENvbmZpZyB9ID0+IHtcbiAgcmV0dXJuIHsgcHJvdmlkZTogVklFV1BPUlRfQ09ORklHLCB1c2VWYWx1ZTogdmlld3BvcnRDb25maWcgfTtcbn07XG4iXX0=","import { Directive, ElementRef, inject, InjectionToken, Input, isDevMode } from '@angular/core';\nimport { BehaviorSubject, debounceTime, filter, fromEvent, map, merge, skip, Subject, takeUntil, tap, } from 'rxjs';\nimport { createDestroy } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport const ANIMATABLE_TOKEN = new InjectionToken('ANIMATABLE_DIRECTIVE_TOKEN');\nexport class AnimatableDirective {\n constructor() {\n this._didEmitStart = false;\n this._parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });\n this._destroy$ = createDestroy();\n this._elementRef = inject(ElementRef);\n this._animationStart$ = new Subject();\n this._animationEnd$ = new Subject();\n this._animationCancelled$ = new Subject();\n this._animatedElement$ = new BehaviorSubject(this._elementRef.nativeElement);\n this.animationStart$ = this._animationStart$.asObservable().pipe(debounceTime(0));\n this.animationEnd$ = this._animationEnd$.asObservable().pipe(debounceTime(0));\n this.animationCancelled$ = this._animationCancelled$.asObservable().pipe(debounceTime(0));\n this._hostActiveAnimationCount$ = new BehaviorSubject(0);\n this._totalActiveAnimationCount$ = new BehaviorSubject(0);\n this.isAnimating$ = this._totalActiveAnimationCount$.pipe(map((count) => count > 0), debounceTime(0));\n }\n set animatedElement(value) {\n let newElement = null;\n if (value === null || value === undefined || value === '') {\n newElement = this._elementRef.nativeElement;\n }\n else if (typeof value === 'string') {\n const el = document.querySelector(value);\n if (el) {\n newElement = el;\n }\n else {\n if (isDevMode()) {\n console.warn(`Element with selector ${value} not found. Animatable directive will use host element.`);\n }\n newElement = this._elementRef.nativeElement;\n }\n }\n else {\n newElement = value;\n }\n if (this._animatedElement$.value !== newElement) {\n this._animatedElement$.next(newElement);\n }\n }\n ngOnInit() {\n this._animatedElement$\n .pipe(tap((el) => {\n this._totalActiveAnimationCount$.next(this._totalActiveAnimationCount$.value - this._hostActiveAnimationCount$.value);\n this._hostActiveAnimationCount$.next(0);\n merge(fromEvent(el, 'animationstart'), fromEvent(el, 'transitionstart'))\n .pipe(filter((e) => e.target === el), // skip events from children\n tap(() => {\n const count = this._hostActiveAnimationCount$.value + 1;\n this._hostActiveAnimationCount$.next(count);\n this._totalActiveAnimationCount$.next(count);\n }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))\n .subscribe();\n merge(fromEvent(el, 'animationend'), fromEvent(el, 'animationcancel'), fromEvent(el, 'transitionend'), fromEvent(el, 'transitioncancel'))\n .pipe(filter((e) => e.target === el), // skip events from children\n tap(() => {\n const count = this._hostActiveAnimationCount$.value - 1;\n this._hostActiveAnimationCount$.next(count);\n this._totalActiveAnimationCount$.next(count);\n }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))\n .subscribe();\n merge(fromEvent(el, 'animationcancel'), fromEvent(el, 'transitioncancel'))\n .pipe(filter((e) => e.target === el), // skip events from children\n tap(() => {\n this._animationCancelled$.next();\n }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))\n .subscribe();\n }), takeUntil(this._destroy$))\n .subscribe();\n this._totalActiveAnimationCount$\n .pipe(tap((count) => {\n if (count > 0 && !this._didEmitStart) {\n this._animationStart$.next();\n this._didEmitStart = true;\n }\n else if (count === 0) {\n this._animationEnd$.next();\n this._didEmitStart = false;\n }\n }), takeUntil(this._destroy$))\n .subscribe();\n if (this._parent) {\n this._parent._hostActiveAnimationCount$\n .pipe(takeUntil(this._destroy$), tap((count) => {\n this._totalActiveAnimationCount$.next(count + this._hostActiveAnimationCount$.value);\n }))\n .subscribe();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: AnimatableDirective, isStandalone: true, selector: \"[etAnimatable]\", inputs: { animatedElement: [\"etAnimatable\", \"animatedElement\"] }, providers: [\n {\n provide: ANIMATABLE_TOKEN,\n useExisting: AnimatableDirective,\n },\n ], exportAs: [\"etAnimatable\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etAnimatable]',\n exportAs: 'etAnimatable',\n standalone: true,\n providers: [\n {\n provide: ANIMATABLE_TOKEN,\n useExisting: AnimatableDirective,\n },\n ],\n }]\n }], propDecorators: { animatedElement: [{\n type: Input,\n args: ['etAnimatable']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2FuaW1hdGFibGUvYW5pbWF0YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFFTCxJQUFJLEVBQ0osT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUU1QyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsNEJBQTRCLENBQUMsQ0FBQztBQWF0RyxNQUFNLE9BQU8sbUJBQW1CO0lBWGhDO1FBWVUsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFYixZQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxjQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBRTFELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdkMsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUEyQnBELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxXQUFXLENBQUMs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TyxDQUFDLDBCQUEwQjtpQkFDcEMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNaLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQzs4R0FsSVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsK0hBUG5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsV0FBVyxFQUFFLG1CQUFtQjthQUNqQztTQUNGOzsyRkFFVSxtQkFBbUI7a0JBWC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGdCQUFnQjs0QkFDekIsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGO2lCQUNGOzhCQWFLLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIGlzRGV2TW9kZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZmlsdGVyLFxuICBmcm9tRXZlbnQsXG4gIG1hcCxcbiAgbWVyZ2UsXG4gIE9ic2VydmFibGUsXG4gIHNraXAsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3kgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBBTklNQVRBQkxFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEFuaW1hdGFibGVEaXJlY3RpdmU+KCdBTklNQVRBQkxFX0RJUkVDVElWRV9UT0tFTicpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRBbmltYXRhYmxlXScsXG4gIGV4cG9ydEFzOiAnZXRBbmltYXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQU5JTUFUQUJMRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBBbmltYXRhYmxlRGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFuaW1hdGFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9kaWRFbWl0U3RhcnQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnQgPSBpbmplY3QoQU5JTUFUQUJMRV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hbmltYXRpb25TdGFydCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbmltYXRpb25FbmQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYW5pbWF0aW9uQ2FuY2VsbGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCdldEFuaW1hdGFibGUnKVxuICBzZXQgYW5pbWF0ZWRFbGVtZW50KHZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBsZXQgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIG5ld0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodmFsdWUpIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgbmV3RWxlbWVudCA9IGVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBFbGVtZW50IHdpdGggc2VsZWN0b3IgJHt2YWx1ZX0gbm90IGZvdW5kLiBBbmltYXRhYmxlIGRpcmVjdGl2ZSB3aWxsIHVzZSBob3N0IGVsZW1lbnQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFbGVtZW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2FuaW1hdGVkRWxlbWVudCQudmFsdWUgIT09IG5ld0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2FuaW1hdGVkRWxlbWVudCQubmV4dChuZXdFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfYW5pbWF0ZWRFbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTEVsZW1lbnQ+KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgcmVhZG9ubHkgYW5pbWF0aW9uU3RhcnQkID0gdGhpcy5fYW5pbWF0aW9uU3RhcnQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDApKTtcbiAgcmVhZG9ubHkgYW5pbWF0aW9uRW5kJCA9IHRoaXMuX2FuaW1hdGlvbkVuZCQuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoMCkpO1xuICByZWFkb25seSBhbmltYXRpb25DYW5jZWxsZWQkID0gdGhpcy5fYW5pbWF0aW9uQ2FuY2VsbGVkJC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgwKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgcmVhZG9ubHkgaXNBbmltYXRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQucGlwZShcbiAgICBtYXAoKGNvdW50KSA9PiBjb3VudCA+IDApLFxuICAgIGRlYm91bmNlVGltZSgwKSxcbiAgKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbmltYXRlZEVsZW1lbnQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChlbCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoXG4gICAgICAgICAgICB0aGlzLl90b3RhbEFjdGl2ZUFuaW1hdGlvbkNvdW50JC52YWx1ZSAtIHRoaXMuX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQudmFsdWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoMCk7XG5cbiAgICAgICAgICBtZXJnZShmcm9tRXZlbnQ8QW5pbWF0aW9uRXZlbnQ+KGVsLCAnYW5pbWF0aW9uc3RhcnQnKSwgZnJvbUV2ZW50PFRyYW5zaXRpb25FdmVudD4oZWwsICd0cmFuc2l0aW9uc3RhcnQnKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudGFyZ2V0ID09PSBlbCksIC8vIHNraXAgZXZlbnRzIGZyb20gY2hpbGRyZW5cbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQudmFsdWUgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQubmV4dChjb3VudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQubmV4dChjb3VudCk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fYW5pbWF0ZWRFbGVtZW50JC5waXBlKHNraXAoMSkpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgZnJvbUV2ZW50PEFuaW1hdGlvbkV2ZW50PihlbCwgJ2FuaW1hdGlvbmVuZCcpLFxuICAgICAgICAgICAgZnJvbUV2ZW50PEFuaW1hdGlvbkV2ZW50PihlbCwgJ2FuaW1hdGlvbmNhbmNlbCcpLFxuICAgICAgICAgICAgZnJvbUV2ZW50PFRyYW5zaXRpb25FdmVudD4oZWwsICd0cmFuc2l0aW9uZW5kJyksXG4gICAgICAgICAgICBmcm9tRXZlbnQ8VHJhbnNpdGlvbkV2ZW50PihlbCwgJ3RyYW5zaXRpb25jYW5jZWwnKSxcbiAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKChlKSA9PiBlLnRhcmdldCA9PT0gZWwpLCAvLyBza2lwIGV2ZW50cyBmcm9tIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLnZhbHVlIC0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoY291bnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoY291bnQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2FuaW1hdGVkRWxlbWVudCQucGlwZShza2lwKDEpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICBtZXJnZShmcm9tRXZlbnQ8QW5pbWF0aW9uRXZlbnQ+KGVsLCAnYW5pbWF0aW9uY2FuY2VsJyksIGZyb21FdmVudDxUcmFuc2l0aW9uRXZlbnQ+KGVsLCAndHJhbnNpdGlvbmNhbmNlbCcpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoZSkgPT4gZS50YXJnZXQgPT09IGVsKSwgLy8gc2tpcCBldmVudHMgZnJvbSBjaGlsZHJlblxuICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkNhbmNlbGxlZCQubmV4dCgpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2FuaW1hdGVkRWxlbWVudCQucGlwZShza2lwKDEpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGNvdW50KSA9PiB7XG4gICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiAhdGhpcy5fZGlkRW1pdFN0YXJ0KSB7XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5fZGlkRW1pdFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRpb25FbmQkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RpZEVtaXRTdGFydCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICB0YXAoKGNvdW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b3RhbEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KGNvdW50ICsgdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC52YWx1ZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19","import { Directive, effect, ElementRef, inject, InjectionToken, model, Renderer2 } from '@angular/core';\nimport { outputFromObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { createDestroy, forceReflow, fromNextFrame } from '../../utils';\nimport { ANIMATABLE_TOKEN, AnimatableDirective } from '../animatable';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../animatable/animatable.directive\";\nexport const ANIMATED_LIFECYCLE_TOKEN = new InjectionToken('ANIMATED_LIFECYCLE_DIRECTIVE_TOKEN');\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 leaveFrom: 'et-animation-leave-from',\n leaveActive: 'et-animation-leave-active',\n leaveTo: 'et-animation-leave-to',\n leaveDone: 'et-animation-leave-done',\n};\nexport class AnimatedLifecycleDirective {\n get state() {\n return this._state$.value;\n }\n constructor() {\n this._destroy$ = createDestroy();\n this._elementRef = inject(ElementRef);\n this._animatable = inject(ANIMATABLE_TOKEN);\n this._classList = this._elementRef.nativeElement.classList;\n this._isConstructed = false;\n this._state$ = new BehaviorSubject('init');\n this.state$ = this._state$.asObservable();\n this.stateSignal = toSignal(this._state$, { initialValue: 'init' });\n this.stateChange = outputFromObservable(this._state$);\n this.skipNextEnter = model(false, ...(ngDevMode ? [{ debugName: \"skipNextEnter\" }] : []));\n const renderer = inject(Renderer2);\n effect(() => {\n const state = this.stateSignal();\n if (state !== 'init') {\n renderer.removeClass(this._elementRef.nativeElement, 'et-force-invisible');\n }\n else {\n renderer.addClass(this._elementRef.nativeElement, 'et-force-invisible');\n }\n });\n }\n ngAfterViewInit() {\n this._isConstructed = true;\n }\n enter() {\n if (this.state === 'entering')\n return;\n if ((this.state === 'init' && !this._isConstructed) || this.skipNextEnter()) {\n // Force the state to entered so that the element is not animated when it is first rendered.\n this._forceState('entered');\n this.skipNextEnter.set(false);\n this._classList.add(ANIMATION_CLASSES.enterDone);\n return;\n }\n if (this.state === 'leaving') {\n this._classList.remove(ANIMATION_CLASSES.leaveFrom);\n this._classList.remove(ANIMATION_CLASSES.leaveActive);\n this._classList.remove(ANIMATION_CLASSES.leaveTo);\n }\n this._state$.next('entering');\n this._classList.remove(ANIMATION_CLASSES.leaveDone);\n this._classList.add(ANIMATION_CLASSES.enterFrom);\n forceReflow();\n this._classList.add(ANIMATION_CLASSES.enterActive);\n fromNextFrame()\n .pipe(tap(() => {\n if (this.state === 'entering') {\n this._classList.remove(ANIMATION_CLASSES.enterFrom);\n this._classList.add(ANIMATION_CLASSES.enterTo);\n }\n }), switchMap(() => this._animatable.animationEnd$), tap(() => {\n if (this.state !== 'entering')\n return;\n this._state$.next('entered');\n this._classList.remove(ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n this._classList.add(ANIMATION_CLASSES.enterDone);\n }), takeUntil(this._destroy$), take(1))\n .subscribe();\n }\n leave() {\n if (this.state === 'leaving')\n return;\n if (this.state === 'init') {\n this._state$.next('left');\n this._classList.add(ANIMATION_CLASSES.leaveDone);\n return;\n }\n if (this.state === 'entering') {\n this._classList.remove(ANIMATION_CLASSES.enterFrom, ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n }\n this._state$.next('leaving');\n this._classList.remove(ANIMATION_CLASSES.enterDone);\n this._classList.add(ANIMATION_CLASSES.leaveFrom);\n forceReflow();\n this._classList.add(ANIMATION_CLASSES.leaveActive);\n fromNextFrame()\n .pipe(tap(() => {\n if (this.state === 'leaving') {\n this._classList.remove(ANIMATION_CLASSES.leaveFrom);\n this._classList.add(ANIMATION_CLASSES.leaveTo);\n }\n }), switchMap(() => this._animatable.animationEnd$), tap(() => {\n if (this.state !== 'leaving')\n return;\n this._state$.next('left');\n this._classList.remove(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this._classList.add(ANIMATION_CLASSES.leaveDone);\n }), takeUntil(this._destroy$), take(1))\n .subscribe();\n }\n _forceState(state) {\n this._state$.next(state);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatedLifecycleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.0\", type: AnimatedLifecycleDirective, isStandalone: true, selector: \"[etAnimatedLifecycle]\", inputs: { skipNextEnter: { classPropertyName: \"skipNextEnter\", publicName: \"skipNextEnter\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stateChange: \"stateChange\", skipNextEnter: \"skipNextEnterChange\" }, host: { classAttribute: \"et-force-invisible\" }, providers: [\n {\n provide: ANIMATED_LIFECYCLE_TOKEN,\n useExisting: AnimatedLifecycleDirective,\n },\n ], exportAs: [\"etAnimatedLifecycle\"], hostDirectives: [{ directive: i1.AnimatableDirective }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatedLifecycleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etAnimatedLifecycle]',\n exportAs: 'etAnimatedLifecycle',\n standalone: true,\n providers: [\n {\n provide: ANIMATED_LIFECYCLE_TOKEN,\n useExisting: AnimatedLifecycleDirective,\n },\n ],\n hostDirectives: [AnimatableDirective],\n host: {\n class: 'et-force-invisible',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtbGlmZWN5Y2xlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYW5pbWF0ZWQtbGlmZWN5Y2xlL2FuaW1hdGVkLWxpZmVjeWNsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUV0RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsb0NBQW9DLENBQ3JDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEMsV0FBVyxFQUFFLDJCQUEyQjtJQUN4QyxPQUFPLEVBQUUsdUJBQXVCO0lBQ2hDLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEMsU0FBUyxFQUFFLHlCQUF5QjtJQUNwQyxXQUFXLEVBQUUsMkJBQTJCO0lBQ3hDLE9BQU8sRUFBRSx1QkFBdUI7SUFDaEMsU0FBUyxFQUFFLHlCQUF5QjtDQUM1QixDQUFDO0FBbUJYLE1BQU0sT0FBTywwQkFBMEI7SUFXckMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBUUQ7UUFwQmlCLGNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUM1QixnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBRS9ELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBeUIsTUFBTSxDQUFDLENBQUM7UUFDN0QsV0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFNOUMsZ0JBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELGdCQUFXLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpELGtCQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUsseURBQUMsQ0FBQztRQUczQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVqQyxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzdFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVO1lBQUUsT0FBTztRQUV0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDNUUsNEZBQTRGO1lBQzVGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELFdBQVcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkQsYUFBYSxFQUFFO2FBQ1osSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPO1lBRXRDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTztRQUVyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFakQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakQsV0FBVyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxhQUFhLEVBQUU7YUFDWixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFDL0MsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTO2dCQUFFLE9BQU87WUFFckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBNkI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs4R0FwSVUsMEJBQTBCO2tHQUExQiwwQkFBMEIsK1ZBWDFCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHdCQUF3QjtnQkFDakMsV0FBVyxFQUFFLDBCQUEwQjthQUN4QztTQUNGOzsyRkFNVSwwQkFBMEI7a0JBZnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxXQUFXLDRCQUE0Qjt5QkFDeEM7cUJBQ0Y7b0JBQ0QsY0FBYyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsb0JBQW9CO3FCQUM1QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBtb2RlbCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRGcm9tT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIGZvcmNlUmVmbG93LCBmcm9tTmV4dEZyYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQU5JTUFUQUJMRV9UT0tFTiwgQW5pbWF0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2FuaW1hdGFibGUnO1xuXG5leHBvcnQgY29uc3QgQU5JTUFURURfTElGRUNZQ0xFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEFuaW1hdGVkTGlmZWN5Y2xlRGlyZWN0aXZlPihcbiAgJ0FOSU1BVEVEX0xJRkVDWUNMRV9ESVJFQ1RJVkVfVE9LRU4nLFxuKTtcblxuY29uc3QgQU5JTUFUSU9OX0NMQVNTRVMgPSB7XG4gIGVudGVyRnJvbTogJ2V0LWFuaW1hdGlvbi1lbnRlci1mcm9tJyxcbiAgZW50ZXJBY3RpdmU6ICdldC1hbmltYXRpb24tZW50ZXItYWN0aXZlJyxcbiAgZW50ZXJUbzogJ2V0LWFuaW1hdGlvbi1lbnRlci10bycsXG4gIGVudGVyRG9uZTogJ2V0LWFuaW1hdGlvbi1lbnRlci1kb25lJyxcbiAgbGVhdmVGcm9tOiAnZXQtYW5pbWF0aW9uLWxlYXZlLWZyb20nLFxuICBsZWF2ZUFjdGl2ZTogJ2V0LWFuaW1hdGlvbi1sZWF2ZS1hY3RpdmUnLFxuICBsZWF2ZVRvOiAnZXQtYW5pbWF0aW9uLWxlYXZlLXRvJyxcbiAgbGVhdmVEb25lOiAnZXQtYW5pbWF0aW9uLWxlYXZlLWRvbmUnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQW5pbWF0ZWRMaWZlY3ljbGVTdGF0ZSA9ICdlbnRlcmluZycgfCAnZW50ZXJlZCcgfCAnbGVhdmluZycgfCAnbGVmdCcgfCAnaW5pdCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldEFuaW1hdGVkTGlmZWN5Y2xlXScsXG4gIGV4cG9ydEFzOiAnZXRBbmltYXRlZExpZmVjeWNsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFOSU1BVEVEX0xJRkVDWUNMRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBBbmltYXRlZExpZmVjeWNsZURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW0FuaW1hdGFibGVEaXJlY3RpdmVdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1mb3JjZS1pbnZpc2libGUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBbmltYXRlZExpZmVjeWNsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGFibGUgPSBpbmplY3QoQU5JTUFUQUJMRV9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzTGlzdCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7XG5cbiAgcHJpdmF0ZSBfaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW5pbWF0ZWRMaWZlY3ljbGVTdGF0ZT4oJ2luaXQnKTtcbiAgcmVhZG9ubHkgc3RhdGUkID0gdGhpcy5fc3RhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgc3RhdGVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLl9zdGF0ZSQsIHsgaW5pdGlhbFZhbHVlOiAnaW5pdCcgfSk7XG5cbiAgc3RhdGVDaGFuZ2UgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLl9zdGF0ZSQpO1xuXG4gIHNraXBOZXh0RW50ZXIgPSBtb2RlbChmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVTaWduYWwoKTtcblxuICAgICAgaWYgKHN0YXRlICE9PSAnaW5pdCcpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZXQtZm9yY2UtaW52aXNpYmxlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdldC1mb3JjZS1pbnZpc2libGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0NvbnN0cnVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGVudGVyKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnZW50ZXJpbmcnKSByZXR1cm47XG5cbiAgICBpZiAoKHRoaXMuc3RhdGUgPT09ICdpbml0JyAmJiAhdGhpcy5faXNDb25zdHJ1Y3RlZCkgfHwgdGhpcy5za2lwTmV4dEVudGVyKCkpIHtcbiAgICAgIC8vIEZvcmNlIHRoZSBzdGF0ZSB0byBlbnRlcmVkIHNvIHRoYXQgdGhlIGVsZW1lbnQgaXMgbm90IGFuaW1hdGVkIHdoZW4gaXQgaXMgZmlyc3QgcmVuZGVyZWQuXG4gICAgICB0aGlzLl9mb3JjZVN0YXRlKCdlbnRlcmVkJyk7XG4gICAgICB0aGlzLnNraXBOZXh0RW50ZXIuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJEb25lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2xlYXZpbmcnKSB7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlRnJvbSk7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlQWN0aXZlKTtcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVUbyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUkLm5leHQoJ2VudGVyaW5nJyk7XG5cbiAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlRG9uZSk7XG4gICAgdGhpcy5fY2xhc3NMaXN0LmFkZChBTklNQVRJT05fQ0xBU1NFUy5lbnRlckZyb20pO1xuXG4gICAgZm9yY2VSZWZsb3coKTtcbiAgICB0aGlzLl9jbGFzc0xpc3QuYWRkKEFOSU1BVElPTl9DTEFTU0VTLmVudGVyQWN0aXZlKTtcblxuICAgIGZyb21OZXh0RnJhbWUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdlbnRlcmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2FuaW1hdGFibGUuYW5pbWF0aW9uRW5kJCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdlbnRlcmluZycpIHJldHVybjtcblxuICAgICAgICAgIHRoaXMuX3N0YXRlJC5uZXh0KCdlbnRlcmVkJyk7XG4gICAgICAgICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5lbnRlckFjdGl2ZSwgQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJUbyk7XG4gICAgICAgICAgdGhpcy5fY2xhc3NMaXN0LmFkZChBTklNQVRJT05fQ0xBU1NFUy5lbnRlckRvbmUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGxlYXZlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnbGVhdmluZycpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnN0YXRlID09PSAnaW5pdCcpIHtcbiAgICAgIHRoaXMuX3N0YXRlJC5uZXh0KCdsZWZ0Jyk7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QuYWRkKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlRG9uZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2VudGVyaW5nJykge1xuICAgICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5lbnRlckZyb20sIEFOSU1BVElPTl9DTEFTU0VTLmVudGVyQWN0aXZlLCBBTklNQVRJT05fQ0xBU1NFUy5lbnRlclRvKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSQubmV4dCgnbGVhdmluZycpO1xuXG4gICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5lbnRlckRvbmUpO1xuICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVGcm9tKTtcblxuICAgIGZvcmNlUmVmbG93KCk7XG4gICAgdGhpcy5fY2xhc3NMaXN0LmFkZChBTklNQVRJT05fQ0xBU1NFUy5sZWF2ZUFjdGl2ZSk7XG5cbiAgICBmcm9tTmV4dEZyYW1lKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnbGVhdmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2FuaW1hdGFibGUuYW5pbWF0aW9uRW5kJCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdsZWF2aW5nJykgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoJ2xlZnQnKTtcbiAgICAgICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlQWN0aXZlLCBBTklNQVRJT05fQ0xBU1NFUy5sZWF2ZVRvKTtcbiAgICAgICAgICB0aGlzLl9jbGFzc0xpc3QuYWRkKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlRG9uZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgX2ZvcmNlU3RhdGUoc3RhdGU6IEFuaW1hdGVkTGlmZWN5Y2xlU3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSQubmV4dChzdGF0ZSk7XG4gIH1cbn1cbiJdfQ==","import { NgIf } from '@angular/common';\nimport { Directive, InjectionToken, Input, inject } from '@angular/core';\nimport { filter, takeUntil, takeWhile, tap } from 'rxjs';\nimport { createDestroy } from '../../utils';\nimport { ANIMATED_LIFECYCLE_TOKEN } from '../animated-lifecycle';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nexport const ANIMATED_IF_TOKEN = new InjectionToken('ANIMATED_IF_TOKEN');\nexport class AnimatedIfDirective {\n constructor() {\n this._destroy$ = createDestroy();\n this._ngIf = inject(NgIf);\n this._animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);\n }\n set shouldRender(value) {\n if (value) {\n this._ngIf.ngIf = value;\n this._animatedLifecycle.enter();\n }\n else {\n this._animatedLifecycle.leave();\n this._animatedLifecycle.state$\n .pipe(takeUntil(this._destroy$), takeWhile((state) => state !== 'left', true), filter((state) => state === 'left'), tap(() => {\n this._ngIf.ngIf = value;\n }))\n .subscribe();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatedIfDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: AnimatedIfDirective, isStandalone: true, selector: \"[etAnimatedIf]\", inputs: { shouldRender: [\"etAnimatedIf\", \"shouldRender\"] }, providers: [\n {\n provide: ANIMATED_IF_TOKEN,\n useExisting: AnimatedIfDirective,\n },\n ], hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatedIfDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etAnimatedIf]',\n standalone: true,\n providers: [\n {\n provide: ANIMATED_IF_TOKEN,\n useExisting: AnimatedIfDirective,\n },\n ],\n hostDirectives: [NgIf],\n }]\n }], propDecorators: { shouldRender: [{\n type: Input,\n args: ['etAnimatedIf']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtaWYuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9hbmltYXRlZC1pZi9hbmltYXRlZC1pZi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFFakUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQXNCLG1CQUFtQixDQUFDLENBQUM7QUFhOUYsTUFBTSxPQUFPLG1CQUFtQjtJQVhoQztRQVltQixjQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDNUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQXVCeEU7SUFyQkMsSUFDSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBRXhCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtpQkFDM0IsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFDNUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQXpCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix5SEFSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1NBQ0Y7OzJGQUdVLG1CQUFtQjtrQkFYL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcscUJBQXFCO3lCQUNqQztxQkFDRjtvQkFDRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUM7aUJBQ3ZCOzhCQU9LLFlBQVk7c0JBRGYsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdGlvblRva2VuLCBJbnB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgdGFrZVdoaWxlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3kgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBTklNQVRFRF9MSUZFQ1lDTEVfVE9LRU4gfSBmcm9tICcuLi9hbmltYXRlZC1saWZlY3ljbGUnO1xuXG5leHBvcnQgY29uc3QgQU5JTUFURURfSUZfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48QW5pbWF0ZWRJZkRpcmVjdGl2ZT4oJ0FOSU1BVEVEX0lGX1RPS0VOJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldEFuaW1hdGVkSWZdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQU5JTUFURURfSUZfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogQW5pbWF0ZWRJZkRpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW05nSWZdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmltYXRlZElmRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25nSWYgPSBpbmplY3QoTmdJZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGVkTGlmZWN5Y2xlID0gaW5qZWN0KEFOSU1BVEVEX0xJRkVDWUNMRV9UT0tFTik7XG5cbiAgQElucHV0KCdldEFuaW1hdGVkSWYnKVxuICBzZXQgc2hvdWxkUmVuZGVyKHZhbHVlOiB1bmtub3duKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9uZ0lmLm5nSWYgPSB2YWx1ZTtcblxuICAgICAgdGhpcy5fYW5pbWF0ZWRMaWZlY3ljbGUuZW50ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYW5pbWF0ZWRMaWZlY3ljbGUubGVhdmUoKTtcblxuICAgICAgdGhpcy5fYW5pbWF0ZWRMaWZlY3ljbGUuc3RhdGUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgdGFrZVdoaWxlKChzdGF0ZSkgPT4gc3RhdGUgIT09ICdsZWZ0JywgdHJ1ZSksXG4gICAgICAgICAgZmlsdGVyKChzdGF0ZSkgPT4gc3RhdGUgPT09ICdsZWZ0JyksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX25nSWYubmdJZiA9IHZhbHVlO1xuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { Directive, ElementRef, InjectionToken, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const ROOT_BOUNDARY_TOKEN = new InjectionToken('ROOT_BOUNDARY_TOKEN');\nexport class RootBoundaryDirective {\n constructor() {\n this._elementRef = inject(ElementRef);\n this._boundaryElement = null;\n }\n get boundaryElement() {\n return this._boundaryElement ?? this._elementRef.nativeElement;\n }\n set boundaryElement(v) {\n this._boundaryElement = v;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RootBoundaryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: RootBoundaryDirective, isStandalone: true, selector: \"[etRootBoundary]\", providers: [\n {\n provide: ROOT_BOUNDARY_TOKEN,\n useExisting: RootBoundaryDirective,\n },\n ], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RootBoundaryDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etRootBoundary]',\n standalone: true,\n providers: [\n {\n provide: ROOT_BOUNDARY_TOKEN,\n useExisting: RootBoundaryDirective,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1ib3VuZGFyeS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Jvb3QtYm91bmRhcnkvcm9vdC1ib3VuZGFyeS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXdCLHFCQUFxQixDQUFDLENBQUM7QUFZcEcsTUFBTSxPQUFPLHFCQUFxQjtJQVZsQztRQVdtQixnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFRbkUscUJBQWdCLEdBQXVCLElBQUksQ0FBQztLQUNyRDtJQVBDLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxlQUFlLENBQUMsQ0FBcUI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQVJVLHFCQUFxQjtrR0FBckIscUJBQXFCLCtEQVByQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFdBQVcsRUFBRSxxQkFBcUI7YUFDbkM7U0FDRjs7MkZBRVUscUJBQXFCO2tCQVZqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsV0FBVyx1QkFBdUI7eUJBQ25DO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBST09UX0JPVU5EQVJZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPFJvb3RCb3VuZGFyeURpcmVjdGl2ZT4oJ1JPT1RfQk9VTkRBUllfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0Um9vdEJvdW5kYXJ5XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPT1RfQk9VTkRBUllfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFJvb3RCb3VuZGFyeURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIGdldCBib3VuZGFyeUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kYXJ5RWxlbWVudCA/PyB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgc2V0IGJvdW5kYXJ5RWxlbWVudCh2OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLl9ib3VuZGFyeUVsZW1lbnQgPSB2O1xuICB9XG4gIHByaXZhdGUgX2JvdW5kYXJ5RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbn1cbiJdfQ==","import { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Directive, ElementRef, Injector, Input, NgZone, ViewContainerRef, booleanAttribute, inject, isDevMode, } from '@angular/core';\nimport { arrow, autoUpdate, computePosition, flip, hide, limitShift, offset, shift, size, } from '@floating-ui/dom';\nimport { BehaviorSubject, Subject, filter, take, takeUntil, tap } from 'rxjs';\nimport { ResizeObserverService } from '../../services';\nimport { createDestroy, nextFrame } from '../../utils';\nimport { RootBoundaryDirective } from '../root-boundary';\nimport * as i0 from \"@angular/core\";\nexport class AnimatedOverlayDirective {\n constructor() {\n this._destroy$ = createDestroy();\n this._overlayService = inject(Overlay);\n this._injector = inject(Injector);\n this._viewContainerRef = inject(ViewContainerRef);\n this._zone = inject(NgZone);\n this._elementRef = inject(ElementRef);\n this._resizeObserverService = inject(ResizeObserverService);\n this._rootBoundary = inject(RootBoundaryDirective, { optional: true });\n this._portal = null;\n this._overlayRef = null;\n this._componentRef = null;\n this._floatingElCleanupFn = null;\n this._beforeOpened = null;\n this._afterOpened = null;\n this._beforeClosed = null;\n this._afterClosed = null;\n this._isMounted$ = new BehaviorSubject(false);\n this._isMounting$ = new BehaviorSubject(false);\n this._isUnmounting$ = new BehaviorSubject(false);\n this._isHidden$ = new BehaviorSubject(false);\n /**\n * The placement of the animated overlay.\n * @default undefined\n */\n this.placement = 'bottom';\n /**\n * The offset of the animated overlay.\n * @see https://floating-ui.com/docs/offset\n */\n this.offset = null;\n /**\n * The arrow padding.\n * @see https://floating-ui.com/docs/arrow#padding\n * @default 4\n */\n this.arrowPadding = 4;\n /**\n * The viewport padding.\n * @default 8\n */\n this.viewportPadding = 8;\n /**\n * Whether the animated overlay should auto resize to fit the available space.\n * Useful for things like selects where the list of options might be longer than the available space.\n * @default false\n */\n this.autoResize = false;\n /**\n * Whether the animated overlay should shift when it is near the viewport boundary.\n */\n this.shift = true;\n /**\n * Whether the animated overlay should auto hide when the reference element is hidden.\n * @default false\n */\n this.autoHide = false;\n /**\n * Whether the animated overlay should auto close if the reference element is hidden.\n * @default false\n */\n this.autoCloseIfReferenceHidden = false;\n /**\n * The reference element for the animated overlay.\n * @default this._elementRef.nativeElement\n */\n this.referenceElement = this._elementRef.nativeElement;\n }\n get isMounted() {\n return this._isMounted$.value;\n }\n get isMounted$() {\n return this._isMounted$.asObservable();\n }\n get isMounting() {\n return this._isMounting$.value;\n }\n get isMounting$() {\n return this._isMounting$.asObservable();\n }\n get isUnmounting() {\n return this._isUnmounting$.value;\n }\n get isHidden$() {\n return this._isHidden$.asObservable();\n }\n get isHidden() {\n return this._isHidden$.value;\n }\n get canMount() {\n return !this.isMounted && !this.isMounting;\n }\n get canUnmount() {\n return this.isMounted && !this.isUnmounting;\n }\n get portal() {\n return this._portal;\n }\n get overlayRef() {\n return this._overlayRef;\n }\n get componentRef() {\n return this._componentRef;\n }\n mount(config) {\n if (this.isMounted) {\n if (isDevMode()) {\n if (this.isMounted) {\n console.warn('AnimatedOverlayDirective: The component is currently mounted. Please unmount the component before mounting again.');\n }\n }\n return;\n }\n if (this.isMounting) {\n return;\n }\n this._isMounting$.next(true);\n const { component, providers, data, mirrorWidth, themeProvider } = config;\n this._beforeOpened?.next();\n const injector = Injector.create({\n parent: this._injector,\n providers: providers ?? [],\n });\n this._overlayRef = this._overlayService.create();\n this._portal = new ComponentPortal(component, this._viewContainerRef, injector);\n this._componentRef = this._overlayRef.attach(this._portal);\n if (data) {\n Object.assign(this._componentRef.instance, data);\n }\n this._componentRef.instance._markForCheck?.();\n if (themeProvider) {\n this._componentRef.instance._setThemeFromProvider?.(themeProvider);\n }\n if (mirrorWidth) {\n this._overlayRef.updateSize({\n width: this._elementRef.nativeElement.offsetWidth,\n });\n this._resizeObserverService\n .observe(this.referenceElement)\n .pipe(tap(() => {\n this._overlayRef?.updateSize({\n width: this._elementRef.nativeElement.offsetWidth,\n });\n }), takeUntil(this._destroy$), takeUntil(this.afterClosed()))\n .subscribe();\n }\n this._zone.runOutsideAngular(() => {\n if (!this._componentRef) {\n return;\n }\n const floatingEl = this._componentRef.location.nativeElement;\n const floatingElArrow = this._componentRef.instance._elementRef?.nativeElement.querySelector('[et-floating-arrow]');\n floatingEl.classList.add('et-floating-element');\n const refEl = this.referenceElement;\n const boundary = this._rootBoundary?.boundaryElement ?? undefined;\n this._floatingElCleanupFn = autoUpdate(refEl, floatingEl, () => {\n if (!this._componentRef)\n return;\n computePosition(refEl, floatingEl, {\n placement: this.placement,\n middleware: [\n ...(this.offset ? [offset(this.offset)] : []),\n flip({\n fallbackPlacements: this.fallbackPlacements ?? undefined,\n fallbackAxisSideDirection: 'start',\n boundary,\n }),\n ...(this.autoResize\n ? [\n size({\n padding: this.viewportPadding ?? undefined,\n apply({ availableHeight, availableWidth }) {\n floatingEl.style.setProperty('--et-floating-max-width', `${availableWidth}px`);\n floatingEl.style.setProperty('--et-floating-max-height', `${availableHeight}px`);\n },\n }),\n ]\n : []),\n ...(this.shift\n ? [shift({ limiter: limitShift(), padding: this.viewportPadding ?? undefined, boundary })]\n : []),\n ...(floatingElArrow ? [arrow({ element: floatingElArrow, padding: this.arrowPadding ?? undefined })] : []),\n ...(this.autoHide || this.autoCloseIfReferenceHidden\n ? [hide({ strategy: 'referenceHidden', boundary })]\n : []),\n ],\n }).then(({ x, y, placement, middlewareData }) => {\n floatingEl.style.setProperty('--et-floating-translate', `translate3d(${x}px, ${y}px, 0)`);\n floatingEl.setAttribute('et-floating-placement', placement);\n if (middlewareData.arrow && floatingElArrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n floatingEl.style.setProperty('--et-floating-arrow-translate', `translate3d(${arrowX ?? 0}px, ${arrowY ?? 0}px, 0)`);\n }\n if (middlewareData.hide?.referenceHidden) {\n if (this.autoCloseIfReferenceHidden) {\n this.unmount();\n }\n else {\n floatingEl.classList.add('et-floating-element--hidden');\n this._isHidden$.next(true);\n }\n }\n else {\n if (this.autoHide) {\n floatingEl.classList.remove('et-floating-element--hidden');\n this._isHidden$.next(false);\n }\n }\n });\n });\n // We need to wait for the content to be rendered\n nextFrame(() => {\n if (!this._componentRef) {\n return;\n }\n if (!this._componentRef.instance._animatedLifecycle) {\n console.error('AnimatedOverlayDirective: The component does not have an AnimatedLifecycleDirective. Please add one to the component.');\n }\n this._componentRef.instance._animatedLifecycle?.enter();\n this._componentRef.instance._animatedLifecycle?.state$\n .pipe(tap((s) => {\n if (s === 'entered') {\n this._afterOpened?.next();\n }\n }), take(1), takeUntil(this._destroy$))\n .subscribe();\n this._isMounted$.next(true);\n this._isMounting$.next(false);\n });\n });\n return this._componentRef.instance;\n }\n unmount() {\n if (!this.isMounted) {\n if (isDevMode()) {\n if (!this.isMounted) {\n console.warn(`AnimatedOverlayDirective: The component is currently not mounted. Please call \"mount\" before calling \"unmount\" again.`);\n }\n }\n return;\n }\n if (this.isUnmounting) {\n return;\n }\n if (!this._componentRef) {\n return;\n }\n if (this.isHidden) {\n return;\n }\n this._isUnmounting$.next(true);\n this._beforeClosed?.next();\n this._componentRef.instance._animatedLifecycle?.leave();\n this._componentRef.instance._animatedLifecycle?.state$\n .pipe(filter((s) => s === 'left'), take(1))\n .subscribe(() => this._destroy());\n }\n beforeOpened() {\n if (!this._beforeOpened) {\n this._beforeOpened = new Subject();\n }\n return this._beforeOpened;\n }\n afterOpened() {\n if (!this._afterOpened) {\n this._afterOpened = new Subject();\n }\n return this._afterOpened;\n }\n beforeClosed() {\n if (!this._beforeClosed) {\n this._beforeClosed = new Subject();\n }\n return this._beforeClosed;\n }\n afterClosed() {\n if (!this._afterClosed) {\n this._afterClosed = new Subject();\n }\n return this._afterClosed;\n }\n _destroy() {\n this._zone.runOutsideAngular(() => {\n this._floatingElCleanupFn?.();\n });\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n if (this._componentRef) {\n this._componentRef.destroy();\n this._componentRef = null;\n }\n this._isMounted$.next(false);\n this._isUnmounting$.next(false);\n this._afterClosed?.next();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatedOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: AnimatedOverlayDirective, isStandalone: true, inputs: { placement: \"placement\", fallbackPlacements: \"fallbackPlacements\", offset: \"offset\", arrowPadding: \"arrowPadding\", viewportPadding: \"viewportPadding\", autoResize: [\"autoResize\", \"autoResize\", booleanAttribute], shift: [\"shift\", \"shift\", booleanAttribute], autoHide: [\"autoHide\", \"autoHide\", booleanAttribute], autoCloseIfReferenceHidden: [\"autoCloseIfReferenceHidden\", \"autoCloseIfReferenceHidden\", booleanAttribute], referenceElement: \"referenceElement\" }, host: { classAttribute: \"et-animated-overlay\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: AnimatedOverlayDirective, decorators: [{\n type: Directive,\n args: [{\n standalone: true,\n host: {\n class: 'et-animated-overlay',\n },\n }]\n }], propDecorators: { placement: [{\n type: Input\n }], fallbackPlacements: [{\n type: Input\n }], offset: [{\n type: Input\n }], arrowPadding: [{\n type: Input\n }], viewportPadding: [{\n type: Input\n }], autoResize: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], shift: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], autoHide: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], autoCloseIfReferenceHidden: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], referenceElement: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtb3ZlcmxheS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2FuaW1hdGVkLW92ZXJsYXkvYW5pbWF0ZWQtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBRU4sZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLGVBQWUsRUFDZixJQUFJLEVBQ0osSUFBSSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFtQnpELE1BQU0sT0FBTyx3QkFBd0I7SUFOckM7UUFPbUIsY0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzVCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQUMs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RUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBT3RDLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFRdEMsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVF0QywwQkFBMEI7c0JBRHpCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUXRDLGdCQUFnQjtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBTdGF0aWNQcm92aWRlcixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2Zmc2V0T3B0aW9ucyxcbiAgUGFkZGluZyxcbiAgUGxhY2VtZW50LFxuICBhcnJvdyxcbiAgYXV0b1VwZGF0ZSxcbiAgY29tcHV0ZVBvc2l0aW9uLFxuICBmbGlwLFxuICBoaWRlLFxuICBsaW1pdFNoaWZ0LFxuICBvZmZzZXQsXG4gIHNoaWZ0LFxuICBzaXplLFxufSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSwgbmV4dEZyYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQW5pbWF0ZWRMaWZlY3ljbGVEaXJlY3RpdmUgfSBmcm9tICcuLi9hbmltYXRlZC1saWZlY3ljbGUnO1xuaW1wb3J0IHsgUm9vdEJvdW5kYXJ5RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm9vdC1ib3VuZGFyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZSB7XG4gIF9lbGVtZW50UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIF9hbmltYXRlZExpZmVjeWNsZT86IEFuaW1hdGVkTGlmZWN5Y2xlRGlyZWN0aXZlO1xuICBfbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcblxuICAvLyBUaGVtaW5nIGxpdmVzIGluc2lkZSB0aGUgY2RrIG5vdy4gV2UgY2FudCBpbXBvcnQgaXQgaW50byBjb3JlLlxuICAvLyBGSVhNRTogVHlwZSB0aGlzIHByb3Blcmx5IG9uY2UgY29yZSBpcyBtb3ZlZCB0byBjZGsuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIF9zZXRUaGVtZUZyb21Qcm92aWRlcj86IChwcm92aWRlcjogYW55KSA9PiB2b2lkO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtYW5pbWF0ZWQtb3ZlcmxheScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZTxUIGV4dGVuZHMgQW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KFJlc2l6ZU9ic2VydmVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jvb3RCb3VuZGFyeSA9IGluamVjdChSb290Qm91bmRhcnlEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSBfcG9ydGFsOiBDb21wb25lbnRQb3J0YWw8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9jb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9mbG9hdGluZ0VsQ2xlYW51cEZuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9iZWZvcmVPcGVuZWQ6IFN1YmplY3Q8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfYWZ0ZXJPcGVuZWQ6IFN1YmplY3Q8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfYmVmb3JlQ2xvc2VkOiBTdWJqZWN0PHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2FmdGVyQ2xvc2VkOiBTdWJqZWN0PHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaXNNb3VudGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc01vdW50aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1VubW91bnRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzSGlkZGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhY2VtZW50IG9mIHRoZSBhbmltYXRlZCBvdmVybGF5LlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBsYWNlbWVudD86IFBsYWNlbWVudCA9ICdib3R0b20nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWxsb3dlZCBhdXRvIHBsYWNlbWVudHMgb2YgdGhlIGFuaW1hdGVkIG92ZXJsYXkuXG4gICAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwI2ZhbGxiYWNrcGxhY2VtZW50c1xuICAgKi9cbiAgQElucHV0KClcbiAgZmFsbGJhY2tQbGFjZW1lbnRzPzogUGxhY2VtZW50W107XG5cbiAgLyoqXG4gICAqIFRoZSBvZmZzZXQgb2YgdGhlIGFuaW1hdGVkIG92ZXJsYXkuXG4gICAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG9mZnNldDogT2Zmc2V0T3B0aW9ucyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJyb3cgcGFkZGluZy5cbiAgICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93I3BhZGRpbmdcbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgQElucHV0KClcbiAgYXJyb3dQYWRkaW5nOiBQYWRkaW5nIHwgbnVsbCA9IDQ7XG5cbiAgLyoqXG4gICAqIFRoZSB2aWV3cG9ydCBwYWRkaW5nLlxuICAgKiBAZGVmYXVsdCA4XG4gICAqL1xuICBASW5wdXQoKVxuICB2aWV3cG9ydFBhZGRpbmc6IFBhZGRpbmcgfCBudWxsID0gODtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYW5pbWF0ZWQgb3ZlcmxheSBzaG91bGQgYXV0byByZXNpemUgdG8gZml0IHRoZSBhdmFpbGFibGUgc3BhY2UuXG4gICAqIFVzZWZ1bCBmb3IgdGhpbmdzIGxpa2Ugc2VsZWN0cyB3aGVyZSB0aGUgbGlzdCBvZiBvcHRpb25zIG1pZ2h0IGJlIGxvbmdlciB0aGFuIHRoZSBhdmFpbGFibGUgc3BhY2UuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhbmltYXRlZCBvdmVybGF5IHNob3VsZCBzaGlmdCB3aGVuIGl0IGlzIG5lYXIgdGhlIHZpZXdwb3J0IGJvdW5kYXJ5LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNoaWZ0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYW5pbWF0ZWQgb3ZlcmxheSBzaG91bGQgYXV0byBoaWRlIHdoZW4gdGhlIHJlZmVyZW5jZSBlbGVtZW50IGlzIGhpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBhdXRvSGlkZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhbmltYXRlZCBvdmVybGF5IHNob3VsZCBhdXRvIGNsb3NlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBoaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgYXV0b0Nsb3NlSWZSZWZlcmVuY2VIaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSBlbGVtZW50IGZvciB0aGUgYW5pbWF0ZWQgb3ZlcmxheS5cbiAgICogQGRlZmF1bHQgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAqL1xuICBASW5wdXQoKVxuICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gIGdldCBpc01vdW50ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTW91bnRlZCQudmFsdWU7XG4gIH1cblxuICBnZXQgaXNNb3VudGVkJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNNb3VudGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc01vdW50aW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9pc01vdW50aW5nJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc01vdW50aW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNNb3VudGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNVbm1vdW50aW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1VubW91bnRpbmckLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzSGlkZGVuJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNIaWRkZW4kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzSGlkZGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0hpZGRlbiQudmFsdWU7XG4gIH1cblxuICBnZXQgY2FuTW91bnQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTW91bnRlZCAmJiAhdGhpcy5pc01vdW50aW5nO1xuICB9XG5cbiAgZ2V0IGNhblVubW91bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmICF0aGlzLmlzVW5tb3VudGluZztcbiAgfVxuXG4gIGdldCBwb3J0YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BvcnRhbDtcbiAgfVxuXG4gIGdldCBvdmVybGF5UmVmKCkge1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuICB9XG5cbiAgZ2V0IGNvbXBvbmVudFJlZigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50UmVmO1xuICB9XG5cbiAgbW91bnQoY29uZmlnOiB7XG4gICAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+O1xuICAgIHByb3ZpZGVycz86IFN0YXRpY1Byb3ZpZGVyW107XG4gICAgZGF0YT86IFBhcnRpYWw8VD47XG4gICAgbWlycm9yV2lkdGg/OiBib29sZWFuO1xuXG4gICAgLy8gVGhlbWluZyBsaXZlcyBpbnNpZGUgdGhlIGNkayBub3cuIFdlIGNhbnQgaW1wb3J0IGl0IGludG8gY29yZS5cbiAgICAvLyBGSVhNRTogVHlwZSB0aGlzIHByb3Blcmx5IG9uY2UgY29yZSBpcyBtb3ZlZCB0byBjZGsuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0aGVtZVByb3ZpZGVyPzogYW55IHwgbnVsbDtcbiAgfSkge1xuICAgIGlmICh0aGlzLmlzTW91bnRlZCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTW91bnRlZCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmU6IFRoZSBjb21wb25lbnQgaXMgY3VycmVudGx5IG1vdW50ZWQuIFBsZWFzZSB1bm1vdW50IHRoZSBjb21wb25lbnQgYmVmb3JlIG1vdW50aW5nIGFnYWluLicsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNb3VudGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzTW91bnRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCB7IGNvbXBvbmVudCwgcHJvdmlkZXJzLCBkYXRhLCBtaXJyb3JXaWR0aCwgdGhlbWVQcm92aWRlciB9ID0gY29uZmlnO1xuXG4gICAgdGhpcy5fYmVmb3JlT3BlbmVkPy5uZXh0KCk7XG5cbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBwcm92aWRlcnMgPz8gW10sXG4gICAgfSk7XG5cbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheVNlcnZpY2UuY3JlYXRlKCk7XG5cbiAgICB0aGlzLl9wb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgdGhpcy5fdmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3IpO1xuICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3BvcnRhbCk7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UsIGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5fbWFya0ZvckNoZWNrPy4oKTtcblxuICAgIGlmICh0aGVtZVByb3ZpZGVyKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuX3NldFRoZW1lRnJvbVByb3ZpZGVyPy4odGhlbWVQcm92aWRlcik7XG4gICAgfVxuXG4gICAgaWYgKG1pcnJvcldpZHRoKSB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe1xuICAgICAgICB3aWR0aDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyU2VydmljZVxuICAgICAgICAub2JzZXJ2ZSh0aGlzLnJlZmVyZW5jZUVsZW1lbnQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmPy51cGRhdGVTaXplKHtcbiAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuYWZ0ZXJDbG9zZWQoKSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRSZWYpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmbG9hdGluZ0VsID0gdGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBmbG9hdGluZ0VsQXJyb3cgPSB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJ1tldC1mbG9hdGluZy1hcnJvd10nLFxuICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGZsb2F0aW5nRWwuY2xhc3NMaXN0LmFkZCgnZXQtZmxvYXRpbmctZWxlbWVudCcpO1xuXG4gICAgICBjb25zdCByZWZFbCA9IHRoaXMucmVmZXJlbmNlRWxlbWVudDtcbiAgICAgIGNvbnN0IGJvdW5kYXJ5ID0gdGhpcy5fcm9vdEJvdW5kYXJ5Py5ib3VuZGFyeUVsZW1lbnQgPz8gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLl9mbG9hdGluZ0VsQ2xlYW51cEZuID0gYXV0b1VwZGF0ZShyZWZFbCwgZmxvYXRpbmdFbCwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudFJlZikgcmV0dXJuO1xuXG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbihyZWZFbCwgZmxvYXRpbmdFbCwge1xuICAgICAgICAgIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG5cbiAgICAgICAgICBtaWRkbGV3YXJlOiBbXG4gICAgICAgICAgICAuLi4odGhpcy5vZmZzZXQgPyBbb2Zmc2V0KHRoaXMub2Zmc2V0KV0gOiBbXSksXG4gICAgICAgICAgICBmbGlwKHtcbiAgICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLmZhbGxiYWNrUGxhY2VtZW50cyA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246ICdzdGFydCcsXG4gICAgICAgICAgICAgIGJvdW5kYXJ5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4odGhpcy5hdXRvUmVzaXplXG4gICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgc2l6ZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMudmlld3BvcnRQYWRkaW5nID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgYXBwbHkoeyBhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZVdpZHRoIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZ0VsLnN0eWxlLnNldFByb3BlcnR5KCctLWV0LWZsb2F0aW5nLW1heC13aWR0aCcsIGAke2F2YWlsYWJsZVdpZHRofXB4YCk7XG4gICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmdFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ldC1mbG9hdGluZy1tYXgtaGVpZ2h0JywgYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgLi4uKHRoaXMuc2hpZnRcbiAgICAgICAgICAgICAgPyBbc2hpZnQoeyBsaW1pdGVyOiBsaW1pdFNoaWZ0KCksIHBhZGRpbmc6IHRoaXMudmlld3BvcnRQYWRkaW5nID8/IHVuZGVmaW5lZCwgYm91bmRhcnkgfSldXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgLi4uKGZsb2F0aW5nRWxBcnJvdyA/IFthcnJvdyh7IGVsZW1lbnQ6IGZsb2F0aW5nRWxBcnJvdywgcGFkZGluZzogdGhpcy5hcnJvd1BhZGRpbmcgPz8gdW5kZWZpbmVkIH0pXSA6IFtdKSxcbiAgICAgICAgICAgIC4uLih0aGlzLmF1dG9IaWRlIHx8IHRoaXMuYXV0b0Nsb3NlSWZSZWZlcmVuY2VIaWRkZW5cbiAgICAgICAgICAgICAgPyBbaGlkZSh7IHN0cmF0ZWd5OiAncmVmZXJlbmNlSGlkZGVuJywgYm91bmRhcnkgfSldXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLnRoZW4oKHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG4gICAgICAgICAgZmxvYXRpbmdFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ldC1mbG9hdGluZy10cmFuc2xhdGUnLCBgdHJhbnNsYXRlM2QoJHt4fXB4LCAke3l9cHgsIDApYCk7XG4gICAgICAgICAgZmxvYXRpbmdFbC5zZXRBdHRyaWJ1dGUoJ2V0LWZsb2F0aW5nLXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgICAgICAgICBpZiAobWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZmxvYXRpbmdFbEFycm93KSB7XG4gICAgICAgICAgICBjb25zdCB7IHg6IGFycm93WCwgeTogYXJyb3dZIH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuICAgICAgICAgICAgZmxvYXRpbmdFbC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgJy0tZXQtZmxvYXRpbmctYXJyb3ctdHJhbnNsYXRlJyxcbiAgICAgICAgICAgICAgYHRyYW5zbGF0ZTNkKCR7YXJyb3dYID8/IDB9cHgsICR7YXJyb3dZID8/IDB9cHgsIDApYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1pZGRsZXdhcmVEYXRhLmhpZGU/LnJlZmVyZW5jZUhpZGRlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0Nsb3NlSWZSZWZlcmVuY2VIaWRkZW4pIHtcbiAgICAgICAgICAgICAgdGhpcy51bm1vdW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmbG9hdGluZ0VsLmNsYXNzTGlzdC5hZGQoJ2V0LWZsb2F0aW5nLWVsZW1lbnQtLWhpZGRlbicpO1xuICAgICAgICAgICAgICB0aGlzLl9pc0hpZGRlbiQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0hpZGUpIHtcbiAgICAgICAgICAgICAgZmxvYXRpbmdFbC5jbGFzc0xpc3QucmVtb3ZlKCdldC1mbG9hdGluZy1lbGVtZW50LS1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgdGhpcy5faXNIaWRkZW4kLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgIGNvbnRlbnQgdG8gYmUgcmVuZGVyZWRcbiAgICAgIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuX2FuaW1hdGVkTGlmZWN5Y2xlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmU6IFRoZSBjb21wb25lbnQgZG9lcyBub3QgaGF2ZSBhbiBBbmltYXRlZExpZmVjeWNsZURpcmVjdGl2ZS4gUGxlYXNlIGFkZCBvbmUgdG8gdGhlIGNvbXBvbmVudC4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuX2FuaW1hdGVkTGlmZWN5Y2xlPy5lbnRlcigpO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5fYW5pbWF0ZWRMaWZlY3ljbGU/LnN0YXRlJFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKChzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzID09PSAnZW50ZXJlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZnRlck9wZW5lZD8ubmV4dCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5faXNNb3VudGVkJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9pc01vdW50aW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgfVxuXG4gIHVubW91bnQoKSB7XG4gICAgaWYgKCF0aGlzLmlzTW91bnRlZCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGlmICghdGhpcy5pc01vdW50ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlOiBUaGUgY29tcG9uZW50IGlzIGN1cnJlbnRseSBub3QgbW91bnRlZC4gUGxlYXNlIGNhbGwgXCJtb3VudFwiIGJlZm9yZSBjYWxsaW5nIFwidW5tb3VudFwiIGFnYWluLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVbm1vdW50aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0hpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVW5tb3VudGluZyQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMuX2JlZm9yZUNsb3NlZD8ubmV4dCgpO1xuXG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLl9hbmltYXRlZExpZmVjeWNsZT8ubGVhdmUoKTtcblxuICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5fYW5pbWF0ZWRMaWZlY3ljbGU/LnN0YXRlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigocykgPT4gcyA9PT0gJ2xlZnQnKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZGVzdHJveSgpKTtcbiAgfVxuXG4gIGJlZm9yZU9wZW5lZCgpIHtcbiAgICBpZiAoIXRoaXMuX2JlZm9yZU9wZW5lZCkge1xuICAgICAgdGhpcy5fYmVmb3JlT3BlbmVkID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYmVmb3JlT3BlbmVkO1xuICB9XG5cbiAgYWZ0ZXJPcGVuZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9hZnRlck9wZW5lZCkge1xuICAgICAgdGhpcy5fYWZ0ZXJPcGVuZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hZnRlck9wZW5lZDtcbiAgfVxuXG4gIGJlZm9yZUNsb3NlZCgpIHtcbiAgICBpZiAoIXRoaXMuX2JlZm9yZUNsb3NlZCkge1xuICAgICAgdGhpcy5fYmVmb3JlQ2xvc2VkID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkO1xuICB9XG5cbiAgYWZ0ZXJDbG9zZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9hZnRlckNsb3NlZCkge1xuICAgICAgdGhpcy5fYWZ0ZXJDbG9zZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hZnRlckNsb3NlZDtcbiAgfVxuXG4gIF9kZXN0cm95KCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5fZmxvYXRpbmdFbENsZWFudXBGbj8uKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9pc01vdW50ZWQkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuX2lzVW5tb3VudGluZyQubmV4dChmYWxzZSk7XG5cbiAgICB0aGlzLl9hZnRlckNsb3NlZD8ubmV4dCgpO1xuICB9XG59XG4iXX0=","import { Directive, ElementRef, EventEmitter, inject, Output } from '@angular/core';\nimport { ClickObserverService } from '../../services';\nimport * as i0 from \"@angular/core\";\nexport class ClickOutsideDirective {\n constructor() {\n this._elementRef = inject(ElementRef);\n this._clickObserverService = inject(ClickObserverService);\n this._subscription = null;\n this.etClickOutside = new EventEmitter();\n }\n ngOnInit() {\n setTimeout(() => {\n this._subscription = this._clickObserverService.observe(this._elementRef.nativeElement).subscribe((event) => {\n const activeElement = event.target;\n const isInside = this._elementRef.nativeElement.contains(activeElement);\n if (!isInside) {\n this.etClickOutside.emit(event);\n }\n });\n });\n }\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: ClickOutsideDirective, isStandalone: true, selector: \"[etClickOutside]\", outputs: { etClickOutside: \"etClickOutside\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ClickOutsideDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etClickOutside]',\n standalone: true,\n }]\n }], propDecorators: { etClickOutside: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUvY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU10RCxNQUFNLE9BQU8scUJBQXFCO0lBSmxDO1FBS1UsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsMEJBQXFCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFckQsa0JBQWEsR0FBd0IsSUFBSSxDQUFDO1FBR2xELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztLQWtCakQ7SUFoQkMsUUFBUTtRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUcsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFeEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzhHQXhCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBUUMsY0FBYztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDbGlja09ic2VydmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0Q2xpY2tPdXRzaWRlXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENsaWNrT3V0c2lkZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfY2xpY2tPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoQ2xpY2tPYnNlcnZlclNlcnZpY2UpO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpXG4gIGV0Q2xpY2tPdXRzaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fY2xpY2tPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNJbnNpZGUgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCFpc0luc2lkZSkge1xuICAgICAgICAgIHRoaXMuZXRDbGlja091dHNpZGUuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=","export const CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';\nexport const CURSOR_DRAG_SCROLLING_PREPARED_CLASS = 'et-cursor-drag-scroll--prepared';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLWRyYWctc2Nyb2xsLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvY3Vyc29yLWRyYWctc2Nyb2xsL2N1cnNvci1kcmFnLXNjcm9sbC5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsa0NBQWtDLENBQUM7QUFDOUUsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTID0gJ2V0LWN1cnNvci1kcmFnLXNjcm9sbC0tc2Nyb2xsaW5nJztcbmV4cG9ydCBjb25zdCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfUFJFUEFSRURfQ0xBU1MgPSAnZXQtY3Vyc29yLWRyYWctc2Nyb2xsLS1wcmVwYXJlZCc7XG4iXX0=","import { Directive, ElementRef, EventEmitter, Input, Output, booleanAttribute, inject, } from '@angular/core';\nimport { Subject, combineLatest, debounceTime, fromEvent, startWith, take, takeUntil, tap } from 'rxjs';\nimport { ContentObserverService, ResizeObserverService } from '../../services';\nimport { createDestroy, elementCanScroll } from '../../utils';\nimport { CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_SCROLLING_PREPARED_CLASS } from './cursor-drag-scroll.constants';\nimport * as i0 from \"@angular/core\";\nexport class CursorDragScrollDirective {\n constructor() {\n this._subscriptions = [];\n this._destroy$ = createDestroy();\n this._elementRef = inject(ElementRef);\n this._contentObserverService = inject(ContentObserverService);\n this._resizeObserverService = inject(ResizeObserverService);\n this._bufferUntilScroll = 5;\n this._mouseUp$ = new Subject();\n this._isScrolling = false;\n this._canScroll = false;\n this._currentScrollState = {\n top: 0,\n left: 0,\n x: 0,\n y: 0,\n };\n this._enabled = false;\n this.allowedDirection = 'both';\n this.cursorDragStart = new EventEmitter();\n this.cursorDragMove = new EventEmitter();\n this.cursorDragEnd = new EventEmitter();\n }\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n this._enabled = booleanAttribute(value);\n if (this._enabled) {\n this._enableCursorDragScroll();\n }\n else {\n this._disableCursorDragScroll();\n }\n }\n ngAfterViewInit() {\n if (this.enabled) {\n this._enableCursorDragScroll();\n }\n else {\n this._disableCursorDragScroll();\n }\n }\n _enableCursorDragScroll() {\n const contentResizeSub = combineLatest([\n this._contentObserverService.observe(this._elementRef.nativeElement).pipe(startWith(null)),\n this._resizeObserverService.observe(this._elementRef.nativeElement).pipe(startWith(null)),\n ])\n .pipe(debounceTime(25), tap(() => this._updateCanScrollState()), takeUntil(this._destroy$))\n .subscribe();\n const mousedownSub = fromEvent(this._elementRef.nativeElement, 'mousedown')\n .pipe(tap((e) => this._onMouseDown(e)), takeUntil(this._destroy$))\n .subscribe();\n this._subscriptions.push(contentResizeSub, mousedownSub);\n this._updateCanScrollState();\n }\n _disableCursorDragScroll() {\n this._subscriptions.forEach((sub) => sub.unsubscribe());\n this._subscriptions.length = 0;\n this._elementRef.nativeElement.style.cursor = 'default';\n }\n _onMouseDown(e) {\n if (!this._elementRef?.nativeElement || !this._canScroll) {\n return;\n }\n const element = this._elementRef.nativeElement;\n element.classList.add(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);\n this._elementRef.nativeElement.style.scrollSnapType = 'none';\n this._elementRef.nativeElement.style.scrollBehavior = 'unset';\n this._currentScrollState = {\n left: this._elementRef.nativeElement.scrollLeft,\n top: this._elementRef.nativeElement.scrollTop,\n x: e.clientX,\n y: e.clientY,\n };\n fromEvent(document, 'mousemove')\n .pipe(tap((e) => this._mouseMoveHandler(e)), takeUntil(this._mouseUp$), takeUntil(this._destroy$))\n .subscribe();\n fromEvent(document, 'mouseup')\n .pipe(tap(() => this._mouseUpHandler()), take(1), takeUntil(this._destroy$))\n .subscribe();\n }\n _mouseMoveHandler(e) {\n e.preventDefault();\n if (!this._elementRef?.nativeElement) {\n return;\n }\n const dx = e.clientX - this._currentScrollState.x;\n const dy = e.clientY - this._currentScrollState.y;\n const shouldScrollX = (this.allowedDirection === 'horizontal' || this.allowedDirection === 'both') &&\n Math.abs(dx) > this._bufferUntilScroll;\n const shouldScrollY = (this.allowedDirection === 'vertical' || this.allowedDirection === 'both') &&\n Math.abs(dy) > this._bufferUntilScroll;\n if (shouldScrollX || shouldScrollY) {\n const element = this._elementRef.nativeElement;\n if (!this._isScrolling) {\n this._isScrolling = true;\n this.cursorDragStart.emit();\n document.documentElement.style.cursor = 'grabbing';\n element.style.cursor = 'grabbing';\n element.classList.add(CURSOR_DRAG_SCROLLING_CLASS);\n element.scroll({\n top: shouldScrollY ? this._currentScrollState.top - dy : undefined,\n left: shouldScrollX ? this._currentScrollState.left - dx : undefined,\n behavior: 'smooth',\n });\n }\n else {\n if (shouldScrollY) {\n element.scrollTop = this._currentScrollState.top - dy;\n }\n if (shouldScrollX) {\n element.scrollLeft = this._currentScrollState.left - dx;\n }\n this.cursorDragMove.emit();\n }\n }\n }\n _mouseUpHandler() {\n this._mouseUp$.next(true);\n this._isScrolling = false;\n if (!this._elementRef?.nativeElement) {\n return;\n }\n this._elementRef.nativeElement.style.scrollSnapType = '';\n this._elementRef.nativeElement.style.scrollBehavior = '';\n document.documentElement.style.cursor = '';\n this._elementRef.nativeElement.style.cursor = 'grab';\n this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_CLASS);\n this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);\n this.cursorDragEnd.emit();\n }\n _updateCanScrollState() {\n this._canScroll = elementCanScroll(this._elementRef.nativeElement);\n if (this._canScroll) {\n this._elementRef.nativeElement.style.cursor = 'grab';\n }\n else {\n this._elementRef.nativeElement.style.cursor = 'default';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: CursorDragScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: CursorDragScrollDirective, isStandalone: true, selector: \"[etCursorDragScroll]\", inputs: { enabled: [\"etCursorDragScroll\", \"enabled\"], allowedDirection: \"allowedDirection\" }, outputs: { cursorDragStart: \"cursorDragStart\", cursorDragMove: \"cursorDragMove\", cursorDragEnd: \"cursorDragEnd\" }, exportAs: [\"etCursorDragScroll\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: CursorDragScrollDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etCursorDragScroll]',\n exportAs: 'etCursorDragScroll',\n standalone: true,\n }]\n }], propDecorators: { enabled: [{\n type: Input,\n args: ['etCursorDragScroll']\n }], allowedDirection: [{\n type: Input\n }], cursorDragStart: [{\n type: Output\n }], cursorDragMove: [{\n type: Output\n }], cursorDragEnd: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLWRyYWctc2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvY3Vyc29yLWRyYWctc2Nyb2xsL2N1cnNvci1kcmFnLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixhQUFhLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFPbkgsTUFBTSxPQUFPLHlCQUF5QjtJQUx0QztRQU1tQixtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzVCLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUMxRCw0QkFBdUIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RCwyQkFBc0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV2RCx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFFNUMsaUJBQVksR0FBRyxLQUFLLENB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dCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgc3RhcnRXaXRoLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGVudE9ic2VydmVyU2VydmljZSwgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSwgZWxlbWVudENhblNjcm9sbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUywgQ1VSU09SX0RSQUdfU0NST0xMSU5HX1BSRVBBUkVEX0NMQVNTIH0gZnJvbSAnLi9jdXJzb3ItZHJhZy1zY3JvbGwuY29uc3RhbnRzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0Q3Vyc29yRHJhZ1Njcm9sbF0nLFxuICBleHBvcnRBczogJ2V0Q3Vyc29yRHJhZ1Njcm9sbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEN1cnNvckRyYWdTY3JvbGxEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50T2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9idWZmZXJVbnRpbFNjcm9sbCA9IDU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdXNlVXAkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIF9pc1Njcm9sbGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF9jYW5TY3JvbGwgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jdXJyZW50U2Nyb2xsU3RhdGUgPSB7XG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgeDogMCxcbiAgICB5OiAwLFxuICB9O1xuXG4gIEBJbnB1dCgnZXRDdXJzb3JEcmFnU2Nyb2xsJylcbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gIH1cbiAgc2V0IGVuYWJsZWQodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9lbmFibGVkID0gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xuICAgICAgdGhpcy5fZW5hYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNhYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9lbmFibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWxsb3dlZERpcmVjdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8ICdib3RoJyA9ICdib3RoJztcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY3Vyc29yRHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjdXJzb3JEcmFnTW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY3Vyc29yRHJhZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5fZW5hYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNhYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VuYWJsZUN1cnNvckRyYWdTY3JvbGwoKSB7XG4gICAgY29uc3QgY29udGVudFJlc2l6ZVN1YiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5fY29udGVudE9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5waXBlKHN0YXJ0V2l0aChudWxsKSksXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fdXBkYXRlQ2FuU2Nyb2xsU3RhdGUoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBtb3VzZWRvd25TdWIgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2Vkb3duJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHRoaXMuX29uTW91c2VEb3duKGUpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChjb250ZW50UmVzaXplU3ViLCBtb3VzZWRvd25TdWIpO1xuXG4gICAgdGhpcy5fdXBkYXRlQ2FuU2Nyb2xsU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVDdXJzb3JEcmFnU2Nyb2xsKCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5sZW5ndGggPSAwO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XG4gIH1cblxuICBwcml2YXRlIF9vbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50IHx8ICF0aGlzLl9jYW5TY3JvbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENVUlNPUl9EUkFHX1NDUk9MTElOR19QUkVQQVJFRF9DTEFTUyk7XG5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2Nyb2xsU25hcFR5cGUgPSAnbm9uZSc7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gJ3Vuc2V0JztcblxuICAgIHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZSA9IHtcbiAgICAgIGxlZnQ6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgdG9wOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLFxuICAgICAgeDogZS5jbGllbnRYLFxuICAgICAgeTogZS5jbGllbnRZLFxuICAgIH07XG5cbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZSkgPT4gdGhpcy5fbW91c2VNb3ZlSGFuZGxlcihlKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9tb3VzZVVwJCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fbW91c2VVcEhhbmRsZXIoKSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9tb3VzZU1vdmVIYW5kbGVyKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IGUuY2xpZW50WCAtIHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS54O1xuICAgIGNvbnN0IGR5ID0gZS5jbGllbnRZIC0gdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLnk7XG5cbiAgICBjb25zdCBzaG91bGRTY3JvbGxYID1cbiAgICAgICh0aGlzLmFsbG93ZWREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCB0aGlzLmFsbG93ZWREaXJlY3Rpb24gPT09ICdib3RoJykgJiZcbiAgICAgIE1hdGguYWJzKGR4KSA+IHRoaXMuX2J1ZmZlclVudGlsU2Nyb2xsO1xuICAgIGNvbnN0IHNob3VsZFNjcm9sbFkgPVxuICAgICAgKHRoaXMuYWxsb3dlZERpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyB8fCB0aGlzLmFsbG93ZWREaXJlY3Rpb24gPT09ICdib3RoJykgJiZcbiAgICAgIE1hdGguYWJzKGR5KSA+IHRoaXMuX2J1ZmZlclVudGlsU2Nyb2xsO1xuXG4gICAgaWYgKHNob3VsZFNjcm9sbFggfHwgc2hvdWxkU2Nyb2xsWSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgaWYgKCF0aGlzLl9pc1Njcm9sbGluZykge1xuICAgICAgICB0aGlzLl9pc1Njcm9sbGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY3Vyc29yRHJhZ1N0YXJ0LmVtaXQoKTtcblxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJztcbiAgICAgICAgZWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTKTtcbiAgICAgICAgZWxlbWVudC5zY3JvbGwoe1xuICAgICAgICAgIHRvcDogc2hvdWxkU2Nyb2xsWSA/IHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS50b3AgLSBkeSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBsZWZ0OiBzaG91bGRTY3JvbGxYID8gdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLmxlZnQgLSBkeCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbFkpIHtcbiAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS50b3AgLSBkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRTY3JvbGxYKSB7XG4gICAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLmxlZnQgLSBkeDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3Vyc29yRHJhZ01vdmUuZW1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX21vdXNlVXBIYW5kbGVyKCkge1xuICAgIHRoaXMuX21vdXNlVXAkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5faXNTY3JvbGxpbmcgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICcnO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9ICcnO1xuXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9ICcnO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTKTtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDVVJTT1JfRFJBR19TQ1JPTExJTkdfUFJFUEFSRURfQ0xBU1MpO1xuXG4gICAgdGhpcy5jdXJzb3JEcmFnRW5kLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNhblNjcm9sbFN0YXRlKCkge1xuICAgIHRoaXMuX2NhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGlmICh0aGlzLl9jYW5TY3JvbGwpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XG4gICAgfVxuICB9XG59XG4iXX0=","import { Directive, InjectionToken, Input, booleanAttribute, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { filter, merge } from 'rxjs';\nimport { createDestroy } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport const DEBUG_TOKEN = new InjectionToken('DEBUG_DIRECTIVE_TOKEN');\nexport class DebugDirective {\n constructor() {\n this._destroy$ = createDestroy();\n this._debug = signal(true, ...(ngDevMode ? [{ debugName: \"_debug\" }] : []));\n this.debug = this._debug.asReadonly();\n this.debug$ = toObservable(this.debug);\n this.startDebug$ = this.debug$.pipe(filter((debug) => !!debug));\n this.stopDebug$ = merge(this._destroy$, this.debug$.pipe(filter((debug) => !debug)));\n }\n set sDebug(value) {\n this._debug.set(value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: DebugDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: DebugDirective, isStandalone: true, selector: \"[etDebug]\", inputs: { sDebug: [\"etDebug\", \"sDebug\", booleanAttribute] }, providers: [\n {\n provide: DEBUG_TOKEN,\n useExisting: DebugDirective,\n },\n ], exportAs: [\"etDebug\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: DebugDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etDebug]',\n exportAs: 'etDebug',\n standalone: true,\n providers: [\n {\n provide: DEBUG_TOKEN,\n useExisting: DebugDirective,\n },\n ],\n }]\n }], propDecorators: { sDebug: [{\n type: Input,\n args: [{ alias: 'etDebug', transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9kZWJ1Zy9kZWJ1Zy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFNUMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO0FBYXZGLE1BQU0sT0FBTyxjQUFjO0lBWDNCO1FBWW1CLGNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQU9yQyxXQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksa0RBQUMsQ0FBQztRQUNyQixVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxXQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsZUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUY7SUFYQyxJQUNZLE1BQU0sQ0FBQyxLQUFjO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OEdBTlUsY0FBYztrR0FBZCxjQUFjLHFGQUdhLGdCQUFnQixnQkFWM0M7WUFDVDtnQkFDRSxPQUFPLEVBQUUsV0FBVztnQkFDcEIsV0FBVyxFQUFFLGNBQWM7YUFDNUI7U0FDRjs7MkZBRVUsY0FBYztrQkFYMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLFdBQVc7NEJBQ3BCLFdBQVcsZ0JBQWdCO3lCQUM1QjtxQkFDRjtpQkFDRjs4QkFLYSxNQUFNO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdGlvblRva2VuLCBJbnB1dCwgYm9vbGVhbkF0dHJpYnV0ZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgREVCVUdfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48RGVidWdEaXJlY3RpdmU+KCdERUJVR19ESVJFQ1RJVkVfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0RGVidWddJyxcbiAgZXhwb3J0QXM6ICdldERlYnVnJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogREVCVUdfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogRGVidWdEaXJlY3RpdmUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGVidWdEaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2V0RGVidWcnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHJpdmF0ZSBzZXQgc0RlYnVnKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGVidWcuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlYnVnID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBkZWJ1ZyA9IHRoaXMuX2RlYnVnLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgZGVidWckID0gdG9PYnNlcnZhYmxlKHRoaXMuZGVidWcpO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGVidWckID0gdGhpcy5kZWJ1ZyQucGlwZShmaWx0ZXIoKGRlYnVnKSA9PiAhIWRlYnVnKSk7XG4gIHJlYWRvbmx5IHN0b3BEZWJ1ZyQgPSBtZXJnZSh0aGlzLl9kZXN0cm95JCwgdGhpcy5kZWJ1ZyQucGlwZShmaWx0ZXIoKGRlYnVnKSA9PiAhZGVidWcpKSk7XG59XG4iXX0=","import { Directive, InjectionToken } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport const DELAYABLE_TOKEN = new InjectionToken('DELAYABLE_DIRECTIVE_TOKEN');\nexport class DelayableDirective {\n constructor() {\n this._isDelayed$ = new BehaviorSubject(false);\n }\n get isDelayed$() {\n return this._isDelayed$.asObservable();\n }\n get isDelayed() {\n return this._isDelayed$.value;\n }\n enableDelayed() {\n if (this._isDelayed$.value) {\n return;\n }\n this._isDelayed$.next(true);\n }\n disableDelayed() {\n if (!this._isDelayed$.value) {\n return;\n }\n this._isDelayed$.next(false);\n }\n setDelayed(val) {\n if (this._isDelayed$.value === val) {\n return;\n }\n this._isDelayed$.next(val);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: DelayableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: DelayableDirective, isStandalone: true, selector: \"[etDelayable]\", providers: [\n {\n provide: DELAYABLE_TOKEN,\n useExisting: DelayableDirective,\n },\n ], exportAs: [\"etDelayable\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: DelayableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etDelayable]',\n exportAs: 'etDelayable',\n standalone: true,\n providers: [\n {\n provide: DELAYABLE_TOKEN,\n useExisting: DelayableDirective,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXlhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvZGVsYXlhYmxlL2RlbGF5YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFdkMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFxQiwyQkFBMkIsQ0FBQyxDQUFDO0FBYW5HLE1BQU0sT0FBTyxrQkFBa0I7SUFYL0I7UUFZbUIsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQWlDM0Q7SUEvQkMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBWTtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQzs4R0FqQ1Usa0JBQWtCO2tHQUFsQixrQkFBa0IsNERBUGxCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFdBQVcsRUFBRSxrQkFBa0I7YUFDaEM7U0FDRjs7MkZBRVUsa0JBQWtCO2tCQVg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsZUFBZTs0QkFDeEIsV0FBVyxvQkFBb0I7eUJBQ2hDO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBERUxBWUFCTEVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48RGVsYXlhYmxlRGlyZWN0aXZlPignREVMQVlBQkxFX0RJUkVDVElWRV9UT0tFTicpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXREZWxheWFibGVdJyxcbiAgZXhwb3J0QXM6ICdldERlbGF5YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IERFTEFZQUJMRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBEZWxheWFibGVEaXJlY3RpdmUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGVsYXlhYmxlRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNEZWxheWVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIGdldCBpc0RlbGF5ZWQkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0RlbGF5ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzRGVsYXllZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNEZWxheWVkJC52YWx1ZTtcbiAgfVxuXG4gIGVuYWJsZURlbGF5ZWQoKSB7XG4gICAgaWYgKHRoaXMuX2lzRGVsYXllZCQudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0RlbGF5ZWQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBkaXNhYmxlRGVsYXllZCgpIHtcbiAgICBpZiAoIXRoaXMuX2lzRGVsYXllZCQudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0RlbGF5ZWQkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgc2V0RGVsYXllZCh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5faXNEZWxheWVkJC52YWx1ZSA9PT0gdmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEZWxheWVkJC5uZXh0KHZhbCk7XG4gIH1cbn1cbiJdfQ==","import { Directive, ElementRef, InjectionToken, Input, booleanAttribute, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const IS_ACTIVE_ELEMENT = new InjectionToken('ET_IS_ACTIVE_ELEMENT');\nexport class IsActiveElementDirective {\n constructor() {\n this.elementRef = inject(ElementRef);\n this.isActiveElement = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IsActiveElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: IsActiveElementDirective, isStandalone: true, selector: \"[etIsActiveElement]\", inputs: { isActiveElement: [\"etIsActiveElement\", \"isActiveElement\", booleanAttribute] }, providers: [\n {\n provide: IS_ACTIVE_ELEMENT,\n useExisting: IsActiveElementDirective,\n },\n ], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IsActiveElementDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etIsActiveElement]',\n standalone: true,\n providers: [\n {\n provide: IS_ACTIVE_ELEMENT,\n useExisting: IsActiveElementDirective,\n },\n ],\n }]\n }], propDecorators: { isActiveElement: [{\n type: Input,\n args: [{ alias: 'etIsActiveElement', transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtYWN0aXZlLWVsZW1lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9pcy1hY3RpdmUtZWxlbWVudC9pcy1hY3RpdmUtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXZHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUEyQixzQkFBc0IsQ0FBQyxDQUFDO0FBWXRHLE1BQU0sT0FBTyx3QkFBd0I7SUFWckM7UUFXVyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUdsRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztLQUN6Qjs4R0FMWSx3QkFBd0I7a0dBQXhCLHdCQUF3QiwySEFHYSxnQkFBZ0IsZ0JBVnJEO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLHdCQUF3QjthQUN0QztTQUNGOzsyRkFFVSx3QkFBd0I7a0JBVnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLDBCQUEwQjt5QkFDdEM7cUJBQ0Y7aUJBQ0Y7OEJBS0MsZUFBZTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBib29sZWFuQXR0cmlidXRlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IElTX0FDVElWRV9FTEVNRU5UID0gbmV3IEluamVjdGlvblRva2VuPElzQWN0aXZlRWxlbWVudERpcmVjdGl2ZT4oJ0VUX0lTX0FDVElWRV9FTEVNRU5UJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldElzQWN0aXZlRWxlbWVudF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBJU19BQ1RJVkVfRUxFTUVOVCxcbiAgICAgIHVzZUV4aXN0aW5nOiBJc0FjdGl2ZUVsZW1lbnREaXJlY3RpdmUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSXNBY3RpdmVFbGVtZW50RGlyZWN0aXZlIHtcbiAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdldElzQWN0aXZlRWxlbWVudCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBpc0FjdGl2ZUVsZW1lbnQgPSBmYWxzZTtcbn1cbiJdfQ==","import { Directive, ElementRef, InjectionToken, Input, booleanAttribute, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const IS_ELEMENT = new InjectionToken('ET_IS_ELEMENT');\nexport class IsElementDirective {\n constructor() {\n this.elementRef = inject(ElementRef);\n this.isElement = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IsElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: IsElementDirective, isStandalone: true, selector: \"[etIsElement]\", inputs: { isElement: [\"etIsElement\", \"isElement\", booleanAttribute] }, providers: [\n {\n provide: IS_ELEMENT,\n useExisting: IsElementDirective,\n },\n ], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: IsElementDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etIsElement]',\n standalone: true,\n providers: [\n {\n provide: IS_ELEMENT,\n useExisting: IsElementDirective,\n },\n ],\n }]\n }], propDecorators: { isElement: [{\n type: Input,\n args: [{ alias: 'etIsElement', transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZWxlbWVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2lzLWVsZW1lbnQvaXMtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXZHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsZUFBZSxDQUFDLENBQUM7QUFZbEYsTUFBTSxPQUFPLGtCQUFrQjtJQVYvQjtRQVdXLGVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBR2xFLGNBQVMsR0FBRyxLQUFLLENBQUM7S0FDbkI7OEdBTFksa0JBQWtCO2tHQUFsQixrQkFBa0IsbUdBR2EsZ0JBQWdCLGdCQVYvQztZQUNUO2dCQUNFLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1NBQ0Y7OzJGQUVVLGtCQUFrQjtrQkFWOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsVUFBVTs0QkFDbkIsV0FBVyxvQkFBb0I7eUJBQ2hDO3FCQUNGO2lCQUNGOzhCQUtDLFNBQVM7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIGJvb2xlYW5BdHRyaWJ1dGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgSVNfRUxFTUVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJc0VsZW1lbnREaXJlY3RpdmU+KCdFVF9JU19FTEVNRU5UJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldElzRWxlbWVudF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBJU19FTEVNRU5ULFxuICAgICAgdXNlRXhpc3Rpbmc6IElzRWxlbWVudERpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJc0VsZW1lbnREaXJlY3RpdmUge1xuICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2V0SXNFbGVtZW50JywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGlzRWxlbWVudCA9IGZhbHNlO1xufVxuIl19","export class LetContext {\n constructor() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.$implicit = null;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.etLet = null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9sZXQvbGV0LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBQ0Usb0VBQW9FO1FBQzdELGNBQVMsR0FBTSxJQUFLLENBQUM7UUFDNUIsb0VBQW9FO1FBQzdELFVBQUssR0FBTSxJQUFLLENBQUM7SUFDMUIsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIExldENvbnRleHQ8VCA9IHVua25vd24+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgcHVibGljICRpbXBsaWNpdDogVCA9IG51bGwhO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICBwdWJsaWMgZXRMZXQ6IFQgPSBudWxsITtcbn1cbiJdfQ==","import { Directive, Input, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { LetContext } from './let.types';\nimport * as i0 from \"@angular/core\";\n/** @deprecated Use the let keyword provided by Angular instead. */\nexport class LetDirective {\n constructor() {\n this._viewContainer = inject(ViewContainerRef);\n this._context = new LetContext();\n this._templateRef = inject(TemplateRef);\n this._viewRef = null;\n }\n set etLet(value) {\n this._context.$implicit = this._context.etLet = value;\n this._updateView();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n _updateView() {\n if (!this._viewRef) {\n this._viewContainer.clear();\n if (this._templateRef) {\n this._viewRef = this._viewContainer.createEmbeddedView(this._templateRef, this._context);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: LetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: LetDirective, isStandalone: true, selector: \"[etLet]\", inputs: { etLet: \"etLet\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: LetDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etLet]',\n standalone: true,\n }]\n }], propDecorators: { etLet: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvbGV0L2xldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUIsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFekMsbUVBQW1FO0FBS25FLE1BQU0sT0FBTyxZQUFZO0lBSnpCO1FBS1UsbUJBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQVUxQyxhQUFRLEdBQWtCLElBQUksVUFBVSxFQUFLLENBQUM7UUFDOUMsaUJBQVksR0FBRyxNQUFNLENBQTZCLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELGFBQVEsR0FBMEMsSUFBSSxDQUFDO0tBZWhFO0lBekJDLElBQ0ksS0FBSyxDQUFDLEtBQVE7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBUUQsOERBQThEO0lBQzlELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBSSxHQUFvQixFQUFFLEdBQVE7UUFDN0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBM0JVLFlBQVk7a0dBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFKeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUtLLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRW1iZWRkZWRWaWV3UmVmLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGV0Q29udGV4dCB9IGZyb20gJy4vbGV0LnR5cGVzJztcblxuLyoqIEBkZXByZWNhdGVkIFVzZSB0aGUgbGV0IGtleXdvcmQgcHJvdmlkZWQgYnkgQW5ndWxhciBpbnN0ZWFkLiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0TGV0XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExldERpcmVjdGl2ZTxUID0gdW5rbm93bj4ge1xuICBwcml2YXRlIF92aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBldExldCh2YWx1ZTogVCkge1xuICAgIHRoaXMuX2NvbnRleHQuJGltcGxpY2l0ID0gdGhpcy5fY29udGV4dC5ldExldCA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlR3VhcmRfbmdMZXQ6ICdiaW5kaW5nJztcblxuICBwcml2YXRlIF9jb250ZXh0OiBMZXRDb250ZXh0PFQ+ID0gbmV3IExldENvbnRleHQ8VD4oKTtcbiAgcHJpdmF0ZSBfdGVtcGxhdGVSZWYgPSBpbmplY3Q8VGVtcGxhdGVSZWY8TGV0Q29udGV4dDxUPj4+KFRlbXBsYXRlUmVmKTtcbiAgcHJpdmF0ZSBfdmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPExldENvbnRleHQ8VD4+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oZGlyOiBMZXREaXJlY3RpdmU8VD4sIGN0eDogYW55KTogY3R4IGlzIExldENvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmlldygpIHtcbiAgICBpZiAoIXRoaXMuX3ZpZXdSZWYpIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLl92aWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYsIHRoaXMuX2NvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { Directive, ElementRef, EventEmitter, Input, NgZone, Output, booleanAttribute, inject, numberAttribute, } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\nimport { ContentObserverService } from '../../services';\nimport * as i0 from \"@angular/core\";\nexport class ObserveContentDirective {\n constructor() {\n this._contentObserver = inject(ContentObserverService);\n this._elementRef = inject(ElementRef);\n this._ngZone = inject(NgZone);\n this.valueChange = new EventEmitter();\n this._disabled = false;\n this._debounce = null;\n this._currentSubscription = null;\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = booleanAttribute(value);\n if (this._disabled) {\n this._unsubscribe();\n }\n else {\n this._subscribe();\n }\n }\n get debounce() {\n return this._debounce;\n }\n set debounce(value) {\n this._debounce = numberAttribute(value) ?? null;\n this._subscribe();\n }\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n ngOnDestroy() {\n this._unsubscribe();\n }\n _subscribe() {\n this._unsubscribe();\n const stream = this._contentObserver.observe(this._elementRef);\n this._ngZone.runOutsideAngular(() => {\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.valueChange);\n });\n }\n _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: ObserveContentDirective, isStandalone: true, selector: \"[etObserveContent]\", inputs: { disabled: [\"etObserveContentDisabled\", \"disabled\"], debounce: [\"etObserveContentDebounce\", \"debounce\"] }, outputs: { valueChange: \"etObserveContent\" }, exportAs: [\"etObserveContent\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveContentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etObserveContent]',\n exportAs: 'etObserveContent',\n standalone: true,\n }]\n }], propDecorators: { valueChange: [{\n type: Output,\n args: ['etObserveContent']\n }], disabled: [{\n type: Input,\n args: ['etObserveContentDisabled']\n }], debounce: [{\n type: Input,\n args: ['etObserveContentDebounce']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvb2JzZXJ2ZS1jb250ZW50L29ic2VydmUtY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBT3hELE1BQU0sT0FBTyx1QkFBdUI7SUFMcEM7UUFNVSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUd4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBZXBELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFaEMseUJBQW9CLEdBQXdCLElBQUksQ0FBQztLQTBCMUQ7SUFuREMsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBR0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQ3ZHLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzhHQTFEVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBT1UsV0FBVztzQkFEbkIsTUFBTTt1QkFBQyxrQkFBa0I7Z0JBSXRCLFFBQVE7c0JBRFgsS0FBSzt1QkFBQywwQkFBMEI7Z0JBZ0I3QixRQUFRO3NCQURYLEtBQUs7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG4gIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRlbnRPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldE9ic2VydmVDb250ZW50XScsXG4gIGV4cG9ydEFzOiAnZXRPYnNlcnZlQ29udGVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE9ic2VydmVDb250ZW50RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfY29udGVudE9ic2VydmVyID0gaW5qZWN0KENvbnRlbnRPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgQE91dHB1dCgnZXRPYnNlcnZlQ29udGVudCcpXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNdXRhdGlvblJlY29yZFtdPigpO1xuXG4gIEBJbnB1dCgnZXRPYnNlcnZlQ29udGVudERpc2FibGVkJylcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2V0T2JzZXJ2ZUNvbnRlbnREZWJvdW5jZScpXG4gIGdldCBkZWJvdW5jZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZGVib3VuY2U7XG4gIH1cbiAgc2V0IGRlYm91bmNlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGVib3VuY2UgPSBudW1iZXJBdHRyaWJ1dGUodmFsdWUpID8/IG51bGw7XG4gICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfZGVib3VuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24gJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jb250ZW50T2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uID0gKHRoaXMuZGVib3VuY2UgPyBzdHJlYW0ucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZSkpIDogc3RyZWFtKS5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UsXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19","import { booleanAttribute, Directive, ElementRef, EventEmitter, inject, Input, NgZone, numberAttribute, Output, } from '@angular/core';\nimport { debounceTime } from 'rxjs';\nimport { ResizeObserverService } from '../../services';\nimport * as i0 from \"@angular/core\";\nexport class ObserveResizeDirective {\n constructor() {\n this._resizeObserver = inject(ResizeObserverService);\n this._elementRef = inject(ElementRef);\n this._ngZone = inject(NgZone);\n this.valueChange = new EventEmitter();\n this._disabled = false;\n this._debounce = null;\n this._currentSubscription = null;\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = booleanAttribute(value);\n if (this._disabled) {\n this._unsubscribe();\n }\n else {\n this._subscribe();\n }\n }\n get debounce() {\n return this._debounce;\n }\n set debounce(value) {\n this._debounce = numberAttribute(value) ?? null;\n this._subscribe();\n }\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n ngOnDestroy() {\n this._unsubscribe();\n }\n _subscribe() {\n this._unsubscribe();\n const stream = this._resizeObserver.observe(this._elementRef);\n this._ngZone.runOutsideAngular(() => {\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.valueChange);\n });\n }\n _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: ObserveResizeDirective, isStandalone: true, selector: \"[etObserveResize]\", inputs: { disabled: [\"etObserveResizeDisabled\", \"disabled\"], debounce: [\"etObserveResizeDebounce\", \"debounce\"] }, outputs: { valueChange: \"etObserveResize\" }, exportAs: [\"etObserveResize\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveResizeDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etObserveResize]',\n exportAs: 'etObserveResize',\n standalone: true,\n }]\n }], propDecorators: { valueChange: [{\n type: Output,\n args: ['etObserveResize']\n }], disabled: [{\n type: Input,\n args: ['etObserveResizeDisabled']\n }], debounce: [{\n type: Input,\n args: ['etObserveResizeDebounce']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1yZXNpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXJlc2l6ZS9vYnNlcnZlLXJlc2l6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBRWYsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU92RCxNQUFNLE9BQU8sc0JBQXNCO0lBTG5DO1FBTVUsb0JBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUd4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBZXpELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFaEMseUJBQW9CLEdBQXdCLElBQUksQ0FBQztLQTBCMUQ7SUFuREMsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBR0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUN2RyxJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQzs4R0ExRFUsc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQU9VLFdBQVc7c0JBRG5CLE1BQU07dUJBQUMsaUJBQWlCO2dCQUlyQixRQUFRO3NCQURYLEtBQUs7dUJBQUMseUJBQXlCO2dCQWdCNUIsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0T2JzZXJ2ZVJlc2l6ZV0nLFxuICBleHBvcnRBczogJ2V0T2JzZXJ2ZVJlc2l6ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE9ic2VydmVSZXNpemVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlciA9IGluamVjdChSZXNpemVPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgQE91dHB1dCgnZXRPYnNlcnZlUmVzaXplJylcbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4oKTtcblxuICBASW5wdXQoJ2V0T2JzZXJ2ZVJlc2l6ZURpc2FibGVkJylcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2V0T2JzZXJ2ZVJlc2l6ZURlYm91bmNlJylcbiAgZ2V0IGRlYm91bmNlKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kZWJvdW5jZTtcbiAgfVxuICBzZXQgZGVib3VuY2UodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9kZWJvdW5jZSA9IG51bWJlckF0dHJpYnV0ZSh2YWx1ZSkgPz8gbnVsbDtcbiAgICB0aGlzLl9zdWJzY3JpYmUoKTtcbiAgfVxuICBwcml2YXRlIF9kZWJvdW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfY3VycmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICghdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZSgpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZik7XG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbiA9ICh0aGlzLmRlYm91bmNlID8gc3RyZWFtLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2UpKSA6IHN0cmVhbSkuc3Vic2NyaWJlKFxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlKCkge1xuICAgIHRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const OBSERVE_SCROLL_STATE = new InjectionToken('OBSERVE_SCROLL_STATE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1zY3JvbGwtc3RhdGUuY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXNjcm9sbC1zdGF0ZS9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsc0JBQXNCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUgfSBmcm9tICcuL29ic2VydmUtc2Nyb2xsLXN0YXRlLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBPQlNFUlZFX1NDUk9MTF9TVEFURSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmU+KCdPQlNFUlZFX1NDUk9MTF9TVEFURScpO1xuIl19","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const SCROLL_OBSERVER_FIRST_ELEMENT_CLASS = 'et-scroll-observer-first-element';\nexport class ScrollObserverFirstElementDirective {\n constructor() {\n this.isFirstElement = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ScrollObserverFirstElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: ScrollObserverFirstElementDirective, isStandalone: true, selector: \"[etScrollObserverFirstElement]\", inputs: { isFirstElement: [\"etScrollObserverFirstElement\", \"isFirstElement\", booleanAttribute] }, host: { properties: { \"class.et-scroll-observer-first-element\": \"this.isFirstElement\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ScrollObserverFirstElementDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etScrollObserverFirstElement]',\n standalone: true,\n }]\n }], propDecorators: { isFirstElement: [{\n type: Input,\n args: [{ alias: 'etScrollObserverFirstElement', transform: booleanAttribute }]\n }, {\n type: HostBinding,\n args: [`class.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVoRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxrQ0FBa0MsQ0FBQztBQU10RixNQUFNLE9BQU8sbUNBQW1DO0lBSmhEO1FBT0UsbUJBQWMsR0FBRyxLQUFLLENBQUM7S0FDeEI7OEdBSlksbUNBQW1DO2tHQUFuQyxtQ0FBbUMsK0lBQ2EsZ0JBQWdCOzsyRkFEaEUsbUNBQW1DO2tCQUovQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFJQyxjQUFjO3NCQUZiLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDNUUsV0FBVzt1QkFBQyxTQUFTLG1DQUFtQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIGJvb2xlYW5BdHRyaWJ1dGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IFNDUk9MTF9PQlNFUlZFUl9GSVJTVF9FTEVNRU5UX0NMQVNTID0gJ2V0LXNjcm9sbC1vYnNlcnZlci1maXJzdC1lbGVtZW50JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0U2Nyb2xsT2JzZXJ2ZXJGaXJzdEVsZW1lbnRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsT2JzZXJ2ZXJGaXJzdEVsZW1lbnREaXJlY3RpdmUge1xuICBASW5wdXQoeyBhbGlhczogJ2V0U2Nyb2xsT2JzZXJ2ZXJGaXJzdEVsZW1lbnQnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgQEhvc3RCaW5kaW5nKGBjbGFzcy4ke1NDUk9MTF9PQlNFUlZFUl9GSVJTVF9FTEVNRU5UX0NMQVNTfWApXG4gIGlzRmlyc3RFbGVtZW50ID0gZmFsc2U7XG59XG4iXX0=","import { Directive } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const SCROLL_OBSERVER_IGNORE_TARGET_CLASS = 'et-scroll-observer-ignore-target';\nexport class ScrollObserverIgnoreTargetDirective {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: ScrollObserverIgnoreTargetDirective, isStandalone: true, selector: \"[etScrollObserverIgnoreTarget]\", host: { classAttribute: \"et-scroll-observer-ignore-target\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etScrollObserverIgnoreTarget]',\n standalone: true,\n host: {\n class: SCROLL_OBSERVER_IGNORE_TARGET_CLASS,\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWlnbm9yZS10YXJnZXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zY3JvbGwtb2JzZXJ2ZXItaWdub3JlLXRhcmdldC9zY3JvbGwtb2JzZXJ2ZXItaWdub3JlLXRhcmdldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsa0NBQWtDLENBQUM7QUFTdEYsTUFBTSxPQUFPLG1DQUFtQzs4R0FBbkMsbUNBQW1DO2tHQUFuQyxtQ0FBbUM7OzJGQUFuQyxtQ0FBbUM7a0JBUC9DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsbUNBQW1DO3FCQUMzQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX0lHTk9SRV9UQVJHRVRfQ0xBU1MgPSAnZXQtc2Nyb2xsLW9ic2VydmVyLWlnbm9yZS10YXJnZXQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRTY3JvbGxPYnNlcnZlcklnbm9yZVRhcmdldF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgY2xhc3M6IFNDUk9MTF9PQlNFUlZFUl9JR05PUkVfVEFSR0VUX0NMQVNTLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxPYnNlcnZlcklnbm9yZVRhcmdldERpcmVjdGl2ZSB7fVxuIl19","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const SCROLL_OBSERVER_LAST_ELEMENT_CLASS = 'et-scroll-observer-last-element';\nexport class ScrollObserverLastElementDirective {\n constructor() {\n this.isLastElement = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ScrollObserverLastElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: ScrollObserverLastElementDirective, isStandalone: true, selector: \"[etScrollObserverLastElement]\", inputs: { isLastElement: [\"etScrollObserverLastElement\", \"isLastElement\", booleanAttribute] }, host: { properties: { \"class.et-scroll-observer-last-element\": \"this.isLastElement\" }, classAttribute: \"et-scroll-observer-last-element\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ScrollObserverLastElementDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etScrollObserverLastElement]',\n standalone: true,\n host: {\n class: SCROLL_OBSERVER_LAST_ELEMENT_CLASS,\n },\n }]\n }], propDecorators: { isLastElement: [{\n type: Input,\n args: [{ alias: 'etScrollObserverLastElement', transform: booleanAttribute }]\n }, {\n type: HostBinding,\n args: [`class.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQvc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVoRixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxpQ0FBaUMsQ0FBQztBQVNwRixNQUFNLE9BQU8sa0NBQWtDO0lBUC9DO1FBVUUsa0JBQWEsR0FBRyxLQUFLLENBQUM7S0FDdkI7OEdBSlksa0NBQWtDO2tHQUFsQyxrQ0FBa0MsMklBQ2EsZ0JBQWdCOzsyRkFEL0Qsa0NBQWtDO2tCQVA5QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwrQkFBK0I7b0JBQ3pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGtDQUFrQztxQkFDMUM7aUJBQ0Y7OEJBSUMsYUFBYTtzQkFGWixLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLDZCQUE2QixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTs7c0JBQzNFLFdBQVc7dUJBQUMsU0FBUyxrQ0FBa0MsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0LCBib29sZWFuQXR0cmlidXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfT0JTRVJWRVJfTEFTVF9FTEVNRU5UX0NMQVNTID0gJ2V0LXNjcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRTY3JvbGxPYnNlcnZlckxhc3RFbGVtZW50XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogU0NST0xMX09CU0VSVkVSX0xBU1RfRUxFTUVOVF9DTEFTUyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudERpcmVjdGl2ZSB7XG4gIEBJbnB1dCh7IGFsaWFzOiAnZXRTY3JvbGxPYnNlcnZlckxhc3RFbGVtZW50JywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIEBIb3N0QmluZGluZyhgY2xhc3MuJHtTQ1JPTExfT0JTRVJWRVJfTEFTVF9FTEVNRU5UX0NMQVNTfWApXG4gIGlzTGFzdEVsZW1lbnQgPSBmYWxzZTtcbn1cbiJdfQ==","import { Directive, ElementRef, EventEmitter, inject, Input, numberAttribute, Output, } from '@angular/core';\nimport { debounceTime, takeUntil, tap } from 'rxjs';\nimport { ContentObserverService, ResizeObserverService } from '../../services';\nimport { createDestroy, elementCanScroll } from '../../utils';\nimport { SCROLL_OBSERVER_FIRST_ELEMENT_CLASS } from '../scroll-observer-first-element';\nimport { SCROLL_OBSERVER_IGNORE_TARGET_CLASS } from '../scroll-observer-ignore-target';\nimport { SCROLL_OBSERVER_LAST_ELEMENT_CLASS } from '../scroll-observer-last-element';\nimport { OBSERVE_SCROLL_STATE } from './observe-scroll-state.constants';\nimport * as i0 from \"@angular/core\";\nexport const SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS = 'et-scroll-observer-observing-first-element';\nexport const SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS = 'et-scroll-observer-observing-last-element';\nexport class ObserveScrollStateDirective {\n constructor() {\n this._destroy$ = createDestroy();\n this._elementRef = inject(ElementRef);\n this._contentObserverService = inject(ContentObserverService);\n this._resizeObserverService = inject(ResizeObserverService);\n this.rootMargin = 0;\n this._threshold = [0.99, 0.99999, 0.9999, 0.999, 1];\n this._intersectionObserver = null;\n this.valueChange = new EventEmitter();\n }\n get _firstCurrentChild() {\n const explicitFirstElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`);\n if (explicitFirstElement) {\n return explicitFirstElement;\n }\n const element = this._elementRef.nativeElement.children[0];\n return this._getNonIgnoredChild(element, 'next');\n }\n get _lastCurrentChild() {\n const explicitLastElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`);\n if (explicitLastElement) {\n return explicitLastElement;\n }\n const element = this._elementRef.nativeElement.children[this._elementRef.nativeElement.children.length - 1];\n return this._getNonIgnoredChild(element, 'previous');\n }\n get observerThreshold() {\n return this._threshold;\n }\n set observerThreshold(value) {\n if (Array.isArray(value)) {\n this._threshold = value.map((threshold) => numberAttribute(threshold));\n return;\n }\n this._threshold = numberAttribute(value);\n }\n get _observerElements() {\n const firstEl = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`);\n const lastEl = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`);\n if (!firstEl || !lastEl)\n return null;\n return {\n first: firstEl,\n last: lastEl,\n };\n }\n ngOnInit() {\n this._contentObserverService\n .observe(this._elementRef.nativeElement)\n .pipe(debounceTime(25), tap(() => this._checkChildren()), takeUntil(this._destroy$))\n .subscribe();\n this._resizeObserverService\n .observe(this._elementRef.nativeElement)\n .pipe(debounceTime(25), tap(() => {\n const canScroll = elementCanScroll(this._elementRef.nativeElement);\n if ((!this._intersectionObserver && canScroll) || (this._intersectionObserver && !canScroll)) {\n this._checkChildren();\n }\n }), takeUntil(this._destroy$))\n .subscribe();\n this._checkChildren();\n }\n ngOnDestroy() {\n this._clearIntersectionObserver();\n }\n _checkChildren() {\n this._clearIntersectionObserver();\n if (this._firstCurrentChild === this._lastCurrentChild ||\n !this._firstCurrentChild ||\n !this._lastCurrentChild ||\n !elementCanScroll(this._elementRef.nativeElement)) {\n this._unobserve();\n this.valueChange.emit({\n isAtStart: true,\n isAtEnd: true,\n canScroll: false,\n });\n }\n else {\n this._intersectionObserver = this._initiateIntersectionObserver();\n this._observe();\n }\n }\n _initiateIntersectionObserver() {\n const observer = new IntersectionObserver((entries) => {\n const elements = this._observerElements;\n if (!elements)\n return;\n const isAtStart = entries.find((entry) => entry.target === elements.first)?.isIntersecting ?? false;\n const isAtEnd = entries.find((entry) => entry.target === elements.last)?.isIntersecting ?? false;\n this.valueChange.emit({\n isAtStart,\n isAtEnd,\n canScroll: !isAtStart || !isAtEnd,\n });\n }, {\n root: this._elementRef.nativeElement,\n rootMargin: this.rootMargin ? `${this.rootMargin}px` : undefined,\n threshold: this._threshold,\n });\n return observer;\n }\n _observe() {\n const elements = this._observerElements;\n if (!elements)\n return;\n this._intersectionObserver?.observe(elements.first);\n this._intersectionObserver?.observe(elements.last);\n elements.first.classList.add(SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS);\n elements.last.classList.add(SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS);\n }\n _unobserve() {\n const elements = this._observerElements;\n if (!elements)\n return;\n this._intersectionObserver?.unobserve(elements.first);\n this._intersectionObserver?.unobserve(elements.last);\n elements.first.classList.remove(SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS);\n elements.last.classList.remove(SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS);\n }\n _clearIntersectionObserver() {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = null;\n }\n _getNonIgnoredChild(element, direction) {\n if (!element) {\n return null;\n }\n if (element?.classList.contains(SCROLL_OBSERVER_IGNORE_TARGET_CLASS)) {\n const nextElement = element[`${direction}ElementSibling`];\n if (!nextElement) {\n return null;\n }\n return this._getNonIgnoredChild(nextElement, direction);\n }\n return element;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.0\", type: ObserveScrollStateDirective, isStandalone: true, selector: \"[etObserveScrollState]\", inputs: { rootMargin: [\"rootMargin\", \"rootMargin\", numberAttribute], observerThreshold: \"observerThreshold\" }, outputs: { valueChange: \"etObserveScrollState\" }, providers: [\n {\n provide: OBSERVE_SCROLL_STATE,\n useExisting: ObserveScrollStateDirective,\n },\n ], exportAs: [\"etObserveScrollState\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveScrollStateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etObserveScrollState]',\n exportAs: 'etObserveScrollState',\n standalone: true,\n providers: [\n {\n provide: OBSERVE_SCROLL_STATE,\n useExisting: ObserveScrollStateDirective,\n },\n ],\n }]\n }], propDecorators: { rootMargin: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], observerThreshold: [{\n type: Input\n }], valueChange: [{\n type: Output,\n args: ['etObserveScrollState']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1zY3JvbGwtc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXNjcm9sbC1zdGF0ZS9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUdmLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFHeEUsTUFBTSxDQUFDLE1BQU0sNkNBQTZDLEdBQUcsNENBQTRDLENBQUM7QUFDMUcsTUFBTSxDQUFDLE1BQU0sNENBQTRDLEdBQUcsMkNBQTJDLENBQUM7QUFheEcsTUFBTSxPQUFPLDJCQUEyQjtJQVh4QztRQVltQixjQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFFNUIsZ0JBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBQzFELDRCQUF1QixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxD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QUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBdUIsQ0FBQztZQUVoRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0FwTVUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsNkdBcUNsQixlQUFlLDBHQTVDeEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsMkJBQTJCO2FBQ3pDO1NBQ0Y7OzJGQUVVLDJCQUEyQjtrQkFYdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFdBQVcsNkJBQTZCO3lCQUN6QztxQkFDRjtpQkFDRjs4QkF1Q0MsVUFBVTtzQkFEVCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJakMsaUJBQWlCO3NCQURwQixLQUFLO2dCQTZCTixXQUFXO3NCQURWLE1BQU07dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50T2JzZXJ2ZXJTZXJ2aWNlLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudCc7XG5pbXBvcnQgeyBTQ1JPTExfT0JTRVJWRVJfSUdOT1JFX1RBUkdFVF9DTEFTUyB9IGZyb20gJy4uL3Njcm9sbC1vYnNlcnZlci1pZ25vcmUtdGFyZ2V0JztcbmltcG9ydCB7IFNDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50JztcbmltcG9ydCB7IE9CU0VSVkVfU0NST0xMX1NUQVRFIH0gZnJvbSAnLi9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5jb25zdGFudHMnO1xuaW1wb3J0IHsgU2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZSB9IGZyb20gJy4vb2JzZXJ2ZS1zY3JvbGwtc3RhdGUudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX09CU0VSVklOR19GSVJTVF9FTEVNRU5UX0NMQVNTID0gJ2V0LXNjcm9sbC1vYnNlcnZlci1vYnNlcnZpbmctZmlyc3QtZWxlbWVudCc7XG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX09CU0VSVklOR19MQVNUX0VMRU1FTlRfQ0xBU1MgPSAnZXQtc2Nyb2xsLW9ic2VydmVyLW9ic2VydmluZy1sYXN0LWVsZW1lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRPYnNlcnZlU2Nyb2xsU3RhdGVdJyxcbiAgZXhwb3J0QXM6ICdldE9ic2VydmVTY3JvbGxTdGF0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9CU0VSVkVfU0NST0xMX1NUQVRFLFxuICAgICAgdXNlRXhpc3Rpbmc6IE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50T2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIGdldCBfZmlyc3RDdXJyZW50Q2hpbGQoKSB7XG4gICAgY29uc3QgZXhwbGljaXRGaXJzdEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHtTQ1JPTExfT0JTRVJWRVJfRklSU1RfRUxFTUVOVF9DTEFTU31gLFxuICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKGV4cGxpY2l0Rmlyc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZXhwbGljaXRGaXJzdEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0Tm9uSWdub3JlZENoaWxkKGVsZW1lbnQsICduZXh0Jyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfbGFzdEN1cnJlbnRDaGlsZCgpIHtcbiAgICBjb25zdCBleHBsaWNpdExhc3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgLiR7U0NST0xMX09CU0VSVkVSX0xBU1RfRUxFTUVOVF9DTEFTU31gLFxuICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKGV4cGxpY2l0TGFzdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBleHBsaWNpdExhc3RFbGVtZW50O1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bXG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgIF0gYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldE5vbklnbm9yZWRDaGlsZChlbGVtZW50LCAncHJldmlvdXMnKTtcbiAgfVxuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHJvb3RNYXJnaW4gPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBvYnNlcnZlclRocmVzaG9sZCgpOiBudW1iZXIgfCBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuICBzZXQgb2JzZXJ2ZXJUaHJlc2hvbGQodmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZCA9IHZhbHVlLm1hcCgodGhyZXNob2xkKSA9PiBudW1iZXJBdHRyaWJ1dGUodGhyZXNob2xkKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGhyZXNob2xkID0gbnVtYmVyQXR0cmlidXRlKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF90aHJlc2hvbGQ6IG51bWJlciB8IG51bWJlcltdID0gWzAuOTksIDAuOTk5OTksIDAuOTk5OSwgMC45OTksIDFdO1xuXG4gIHByaXZhdGUgX2ludGVyc2VjdGlvbk9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZ2V0IF9vYnNlcnZlckVsZW1lbnRzKCkge1xuICAgIGNvbnN0IGZpcnN0RWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLiR7U0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1N9YCk7XG4gICAgY29uc3QgbGFzdEVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke1NDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1N9YCk7XG5cbiAgICBpZiAoIWZpcnN0RWwgfHwgIWxhc3RFbCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlyc3Q6IGZpcnN0RWwsXG4gICAgICBsYXN0OiBsYXN0RWwsXG4gICAgfTtcbiAgfVxuXG4gIEBPdXRwdXQoJ2V0T2JzZXJ2ZVNjcm9sbFN0YXRlJylcbiAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGU+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGVudE9ic2VydmVyU2VydmljZVxuICAgICAgLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgyNSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9jaGVja0NoaWxkcmVuKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlXG4gICAgICAub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgaWYgKCghdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgJiYgY2FuU2Nyb2xsKSB8fCAodGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgJiYgIWNhblNjcm9sbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2hpbGRyZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fY2hlY2tDaGlsZHJlbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tDaGlsZHJlbigpIHtcbiAgICB0aGlzLl9jbGVhckludGVyc2VjdGlvbk9ic2VydmVyKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9maXJzdEN1cnJlbnRDaGlsZCA9PT0gdGhpcy5fbGFzdEN1cnJlbnRDaGlsZCB8fFxuICAgICAgIXRoaXMuX2ZpcnN0Q3VycmVudENoaWxkIHx8XG4gICAgICAhdGhpcy5fbGFzdEN1cnJlbnRDaGlsZCB8fFxuICAgICAgIWVsZW1lbnRDYW5TY3JvbGwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgdGhpcy5fdW5vYnNlcnZlKCk7XG5cbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgIGlzQXRTdGFydDogdHJ1ZSxcbiAgICAgICAgaXNBdEVuZDogdHJ1ZSxcbiAgICAgICAgY2FuU2Nyb2xsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlciA9IHRoaXMuX2luaXRpYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcblxuICAgICAgdGhpcy5fb2JzZXJ2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuX29ic2VydmVyRWxlbWVudHM7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50cykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGlzQXRTdGFydCA9IGVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5LnRhcmdldCA9PT0gZWxlbWVudHMuZmlyc3QpPy5pc0ludGVyc2VjdGluZyA/PyBmYWxzZTtcbiAgICAgICAgY29uc3QgaXNBdEVuZCA9IGVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5LnRhcmdldCA9PT0gZWxlbWVudHMubGFzdCk/LmlzSW50ZXJzZWN0aW5nID8/IGZhbHNlO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgaXNBdFN0YXJ0LFxuICAgICAgICAgIGlzQXRFbmQsXG4gICAgICAgICAgY2FuU2Nyb2xsOiAhaXNBdFN0YXJ0IHx8ICFpc0F0RW5kLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJvb3Q6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgcm9vdE1hcmdpbjogdGhpcy5yb290TWFyZ2luID8gYCR7dGhpcy5yb290TWFyZ2lufXB4YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdGhyZXNob2xkOiB0aGlzLl90aHJlc2hvbGQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG4gIH1cblxuICBwcml2YXRlIF9vYnNlcnZlKCkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fb2JzZXJ2ZXJFbGVtZW50cztcblxuICAgIGlmICghZWxlbWVudHMpIHJldHVybjtcblxuICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyPy5vYnNlcnZlKGVsZW1lbnRzLmZpcnN0KTtcbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcj8ub2JzZXJ2ZShlbGVtZW50cy5sYXN0KTtcblxuICAgIGVsZW1lbnRzLmZpcnN0LmNsYXNzTGlzdC5hZGQoU0NST0xMX09CU0VSVkVSX09CU0VSVklOR19GSVJTVF9FTEVNRU5UX0NMQVNTKTtcbiAgICBlbGVtZW50cy5sYXN0LmNsYXNzTGlzdC5hZGQoU0NST0xMX09CU0VSVkVSX09CU0VSVklOR19MQVNUX0VMRU1FTlRfQ0xBU1MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5vYnNlcnZlKCkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fb2JzZXJ2ZXJFbGVtZW50cztcblxuICAgIGlmICghZWxlbWVudHMpIHJldHVybjtcblxuICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyPy51bm9ic2VydmUoZWxlbWVudHMuZmlyc3QpO1xuICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyPy51bm9ic2VydmUoZWxlbWVudHMubGFzdCk7XG5cbiAgICBlbGVtZW50cy5maXJzdC5jbGFzc0xpc3QucmVtb3ZlKFNDUk9MTF9PQlNFUlZFUl9PQlNFUlZJTkdfRklSU1RfRUxFTUVOVF9DTEFTUyk7XG4gICAgZWxlbWVudHMubGFzdC5jbGFzc0xpc3QucmVtb3ZlKFNDUk9MTF9PQlNFUlZFUl9PQlNFUlZJTkdfTEFTVF9FTEVNRU5UX0NMQVNTKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFySW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb25JZ25vcmVkQ2hpbGQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLCBkaXJlY3Rpb246ICdwcmV2aW91cycgfCAnbmV4dCcpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucyhTQ1JPTExfT0JTRVJWRVJfSUdOT1JFX1RBUkdFVF9DTEFTUykpIHtcbiAgICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudFtgJHtkaXJlY3Rpb259RWxlbWVudFNpYmxpbmdgXSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmICghbmV4dEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9nZXROb25JZ25vcmVkQ2hpbGQobmV4dEVsZW1lbnQsIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbiJdfQ==","import { Directive, ElementRef, EventEmitter, InjectionToken, Output, computed, inject, signal, } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { takeUntil, tap } from 'rxjs';\nimport { IntersectionObserverService } from '../../services';\nimport { createDestroy, signalHostClasses } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport const OBSERVE_VISIBILITY_TOKEN = new InjectionToken('OBSERVE_VISIBILITY_TOKEN');\nexport const signalVisibilityChangeClasses = (cfg) => ({\n [`${cfg.name}--is-left`]: computed(() => cfg.signal()?.isLeft),\n [`${cfg.name}--is-right`]: computed(() => cfg.signal()?.isRight),\n [`${cfg.name}--is-above`]: computed(() => cfg.signal()?.isAbove),\n [`${cfg.name}--is-below`]: computed(() => cfg.signal()?.isBelow),\n [`${cfg.name}--is-visible`]: computed(() => cfg.signal()?.visible),\n});\nexport class ObserveVisibilityDirective {\n constructor() {\n this._destroy$ = createDestroy();\n this._elementRef = inject(ElementRef);\n this._intersectionObserverService = inject(IntersectionObserverService);\n this.visibilityChange = signal(null, ...(ngDevMode ? [{ debugName: \"visibilityChange\" }] : []));\n this.currentVisibility = this.visibilityChange.asReadonly();\n this.currentVisibility$ = toObservable(this.currentVisibility);\n this.etObserveVisibility = new EventEmitter();\n signalHostClasses(signalVisibilityChangeClasses({\n name: 'et-observe-visibility',\n signal: this.visibilityChange,\n }));\n }\n ngAfterViewInit() {\n this._intersectionObserverService\n .observe(this._elementRef)\n .pipe(takeUntil(this._destroy$), tap((entries) => {\n const entry = entries[0];\n if (!entry) {\n return;\n }\n const isAbove = entry.boundingClientRect.top < 0 && entry.boundingClientRect.bottom < 0;\n const isBelow = entry.boundingClientRect.top > window.innerHeight && entry.boundingClientRect.bottom > window.innerHeight;\n const isLeft = entry.boundingClientRect.left < 0 && entry.boundingClientRect.right < 0;\n const isRight = entry.boundingClientRect.left > window.innerWidth && entry.boundingClientRect.right > window.innerWidth;\n const data = {\n visible: entry.isIntersecting,\n isAbove,\n isBelow,\n isLeft,\n isRight,\n entry,\n };\n this.etObserveVisibility.emit(data);\n this.visibilityChange.set(data);\n }))\n .subscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveVisibilityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: ObserveVisibilityDirective, isStandalone: true, selector: \"[etObserveVisibility]\", outputs: { etObserveVisibility: \"etObserveVisibility\" }, host: { classAttribute: \"et-observe-visibility\" }, providers: [\n {\n provide: OBSERVE_VISIBILITY_TOKEN,\n useExisting: ObserveVisibilityDirective,\n },\n ], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ObserveVisibilityDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etObserveVisibility]',\n standalone: true,\n providers: [\n {\n provide: OBSERVE_VISIBILITY_TOKEN,\n useExisting: ObserveVisibilityDirective,\n },\n ],\n host: {\n class: 'et-observe-visibility',\n },\n }]\n }], ctorParameters: () => [], propDecorators: { etObserveVisibility: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS12aXNpYmlsaXR5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvb2JzZXJ2ZS12aXNpYmlsaXR5L29ic2VydmUtdmlzaWJpbGl0eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRS9ELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUE2QiwwQkFBMEIsQ0FBQyxDQUFDO0FBV25ILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsR0FHN0MsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNMLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUM5RCxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDaEUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxFQUFFLFFB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VyxFQUFFLDBCQUEwQjthQUN4QztTQUNGOzsyRkFLVSwwQkFBMEI7a0JBYnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxXQUFXLDRCQUE0Qjt5QkFDeEM7cUJBQ0Y7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSx1QkFBdUI7cUJBQy9CO2lCQUNGO3dEQVlVLG1CQUFtQjtzQkFEM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgT3V0cHV0LFxuICBTaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSwgc2lnbmFsSG9zdENsYXNzZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBPQlNFUlZFX1ZJU0lCSUxJVFlfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48T2JzZXJ2ZVZpc2liaWxpdHlEaXJlY3RpdmU+KCdPQlNFUlZFX1ZJU0lCSUxJVFlfVE9LRU4nKTtcblxuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZlVmlzaWJpbGl0eUNoYW5nZSB7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIGlzQWJvdmU6IGJvb2xlYW47XG4gIGlzQmVsb3c6IGJvb2xlYW47XG4gIGlzTGVmdDogYm9vbGVhbjtcbiAgaXNSaWdodDogYm9vbGVhbjtcbiAgZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxWaXNpYmlsaXR5Q2hhbmdlQ2xhc3NlcyA9IChjZmc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBzaWduYWw6IFNpZ25hbDxPYnNlcnZlVmlzaWJpbGl0eUNoYW5nZSB8IG51bGwgfCB1bmRlZmluZWQ+O1xufSkgPT4gKHtcbiAgW2Ake2NmZy5uYW1lfS0taXMtbGVmdGBdOiBjb21wdXRlZCgoKSA9PiBjZmcuc2lnbmFsKCk/LmlzTGVmdCksXG4gIFtgJHtjZmcubmFtZX0tLWlzLXJpZ2h0YF06IGNvbXB1dGVkKCgpID0+IGNmZy5zaWduYWwoKT8uaXNSaWdodCksXG4gIFtgJHtjZmcubmFtZX0tLWlzLWFib3ZlYF06IGNvbXB1dGVkKCgpID0+IGNmZy5zaWduYWwoKT8uaXNBYm92ZSksXG4gIFtgJHtjZmcubmFtZX0tLWlzLWJlbG93YF06IGNvbXB1dGVkKCgpID0+IGNmZy5zaWduYWwoKT8uaXNCZWxvdyksXG4gIFtgJHtjZmcubmFtZX0tLWlzLXZpc2libGVgXTogY29tcHV0ZWQoKCkgPT4gY2ZnLnNpZ25hbCgpPy52aXNpYmxlKSxcbn0pO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRPYnNlcnZlVmlzaWJpbGl0eV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBPQlNFUlZFX1ZJU0lCSUxJVFlfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogT2JzZXJ2ZVZpc2liaWxpdHlEaXJlY3RpdmUsXG4gICAgfSxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtb2JzZXJ2ZS12aXNpYmlsaXR5JyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZVZpc2liaWxpdHlEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoSW50ZXJzZWN0aW9uT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlzaWJpbGl0eUNoYW5nZSA9IHNpZ25hbDxPYnNlcnZlVmlzaWJpbGl0eUNoYW5nZSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRWaXNpYmlsaXR5ID0gdGhpcy52aXNpYmlsaXR5Q2hhbmdlLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgY3VycmVudFZpc2liaWxpdHkkID0gdG9PYnNlcnZhYmxlKHRoaXMuY3VycmVudFZpc2liaWxpdHkpO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBldE9ic2VydmVWaXNpYmlsaXR5ID0gbmV3IEV2ZW50RW1pdHRlcjxPYnNlcnZlVmlzaWJpbGl0eUNoYW5nZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzaWduYWxIb3N0Q2xhc3NlcyhcbiAgICAgIHNpZ25hbFZpc2liaWxpdHlDaGFuZ2VDbGFzc2VzKHtcbiAgICAgICAgbmFtZTogJ2V0LW9ic2VydmUtdmlzaWJpbGl0eScsXG4gICAgICAgIHNpZ25hbDogdGhpcy52aXNpYmlsaXR5Q2hhbmdlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2VcbiAgICAgIC5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuXG4gICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGlzQWJvdmUgPSBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QudG9wIDwgMCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tIDwgMDtcbiAgICAgICAgICBjb25zdCBpc0JlbG93ID1cbiAgICAgICAgICAgIGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC50b3AgPiB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSA+IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgICBjb25zdCBpc0xlZnQgPSBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QubGVmdCA8IDAgJiYgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IDwgMDtcbiAgICAgICAgICBjb25zdCBpc1JpZ2h0ID1cbiAgICAgICAgICAgIGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ID4gd2luZG93LmlubmVyV2lkdGggJiYgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgICAgICBjb25zdCBkYXRhOiBPYnNlcnZlVmlzaWJpbGl0eUNoYW5nZSA9IHtcbiAgICAgICAgICAgIHZpc2libGU6IGVudHJ5LmlzSW50ZXJzZWN0aW5nLFxuICAgICAgICAgICAgaXNBYm92ZSxcbiAgICAgICAgICAgIGlzQmVsb3csXG4gICAgICAgICAgICBpc0xlZnQsXG4gICAgICAgICAgICBpc1JpZ2h0LFxuICAgICAgICAgICAgZW50cnksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZXRPYnNlcnZlVmlzaWJpbGl0eS5lbWl0KGRhdGEpO1xuICAgICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZS5zZXQoZGF0YSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=","import { Directive, Input, numberAttribute, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class RepeatDirective {\n constructor() {\n this._mainTemplateRef = inject(TemplateRef);\n this._viewContainerRef = inject(ViewContainerRef);\n this._repeatCount = 2;\n }\n get repeatCount() {\n return this._repeatCount;\n }\n set repeatCount(value) {\n this._repeatCount = numberAttribute(value);\n this._render();\n }\n _render() {\n this._viewContainerRef.clear();\n for (let i = 0; i < this.repeatCount; i++) {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RepeatDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: RepeatDirective, isStandalone: true, selector: \"[etRepeat]\", inputs: { repeatCount: [\"etRepeat\", \"repeatCount\"] }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: RepeatDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etRepeat]',\n standalone: true,\n }]\n }], propDecorators: { repeatCount: [{\n type: Input,\n args: ['etRepeat']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0L3JlcGVhdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpHLE1BQU0sT0FBTyxlQUFlO0lBSjVCO1FBS1UscUJBQWdCLEdBQUcsTUFBTSxDQUF1QixXQUFXLENBQUMsQ0FBQztRQUM3RCxzQkFBaUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQVU3QyxpQkFBWSxHQUFHLENBQUMsQ0FBQztLQVMxQjtJQWpCQyxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFHTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDOzhHQXBCVSxlQUFlO2tHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFNSyxXQUFXO3NCQURkLEtBQUs7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIG51bWJlckF0dHJpYnV0ZSwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRSZXBlYXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVwZWF0RGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBfbWFpblRlbXBsYXRlUmVmID0gaW5qZWN0PFRlbXBsYXRlUmVmPHVua25vd24+PihUZW1wbGF0ZVJlZik7XG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgQElucHV0KCdldFJlcGVhdCcpXG4gIGdldCByZXBlYXRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZXBlYXRDb3VudDtcbiAgfVxuICBzZXQgcmVwZWF0Q291bnQodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9yZXBlYXRDb3VudCA9IG51bWJlckF0dHJpYnV0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fcmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBfcmVwZWF0Q291bnQgPSAyO1xuXG4gIHByaXZhdGUgX3JlbmRlcigpIHtcbiAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVwZWF0Q291bnQ7IGkrKykge1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fbWFpblRlbXBsYXRlUmVmKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const SEO_DIRECTIVE_TOKEN = new InjectionToken('SEO_DIRECTIVE_TOKEN');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLmRpcmVjdGl2ZS5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Nlby9zZW8uZGlyZWN0aXZlLmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFlLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VvRGlyZWN0aXZlIH0gZnJvbSAnLi9zZW8uZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IFNFT19ESVJFQ1RJVkVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48U2VvRGlyZWN0aXZlPignU0VPX0RJUkVDVElWRV9UT0tFTicpO1xuIl19","export const mergeSeoConfig = (config, parentConfig) => {\n return {\n ...parentConfig,\n ...config,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLmRpcmVjdGl2ZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2VvL3Nlby5kaXJlY3RpdmUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBaUIsRUFBRSxZQUF1QixFQUFhLEVBQUU7SUFDdEYsT0FBTztRQUNMLEdBQUcsWUFBWTtRQUNmLEdBQUcsTUFBTTtLQUNWLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZW9Db25maWcgfSBmcm9tICcuL3Nlby5kaXJlY3RpdmUudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgbWVyZ2VTZW9Db25maWcgPSAoY29uZmlnOiBTZW9Db25maWcsIHBhcmVudENvbmZpZzogU2VvQ29uZmlnKTogU2VvQ29uZmlnID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wYXJlbnRDb25maWcsXG4gICAgLi4uY29uZmlnLFxuICB9O1xufTtcbiJdfQ==","import { Directive, inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { SEO_DIRECTIVE_TOKEN } from './seo.directive.constants';\nimport { mergeSeoConfig } from './seo.directive.utils';\nimport * as i0 from \"@angular/core\";\nexport class SeoDirective {\n constructor() {\n this._metaService = inject(Meta);\n this._titleService = inject(Title);\n this._onDeactivate$ = new Subject();\n this._isDeactivated = false;\n this.parent = inject(SEO_DIRECTIVE_TOKEN, { optional: true, skipSelf: true });\n this._config = {};\n }\n get config() {\n return this._config;\n }\n ngOnInit() {\n this.parent?._deactivate();\n }\n ngOnDestroy() {\n this._deactivate();\n this._cleanUp();\n this.parent?._activate();\n }\n // TODO(TRB): This should get split up into multiple methods to make it more readable\n // - updateTitle\n // - updateMeta\n // - updateLink\n updateConfig(config) {\n this._config = mergeSeoConfig(config, this.parent?.config || {});\n if (this._isDeactivated) {\n return;\n }\n this._deactivate();\n this._activate();\n }\n _activate() {\n this._onDeactivate$.next(false);\n this._isDeactivated = false;\n for (const [key, value] of Object.entries(this._config)) {\n if (value instanceof Observable) {\n value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));\n }\n else if (Array.isArray(value)) {\n value.forEach((value) => {\n if (value instanceof Observable) {\n value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));\n }\n else {\n this._update(key, value);\n }\n });\n }\n else if (typeof value === 'object' && value !== null) {\n for (const [subKey, subValue] of Object.entries(value)) {\n if (subValue instanceof Observable) {\n subValue.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(`${key}:${subKey}`, value));\n }\n else {\n this._update(`${key}:${subKey}`, subValue);\n }\n }\n }\n else {\n this._update(key, value);\n }\n }\n }\n _deactivate() {\n this._onDeactivate$.next(true);\n this._isDeactivated = true;\n }\n _update(key, value) {\n switch (key) {\n case 'title':\n if (value && typeof value === 'string') {\n this._titleService.setTitle(value);\n }\n break;\n case 'canonical':\n {\n const link = document.querySelector(`link[rel=\"${key}\"]`);\n if (link) {\n link.setAttribute('href', value);\n }\n else {\n const newLink = document.createElement('link');\n newLink.setAttribute('rel', key);\n newLink.setAttribute('href', value);\n document.head.appendChild(newLink);\n }\n }\n break;\n case 'alternate':\n {\n const link = document.querySelector(`link[rel=\"${key}\"][hreflang=\"${value.hreflang}\"]`);\n if (link) {\n link.setAttribute('href', value.href);\n }\n else {\n const newLink = document.createElement('link');\n newLink.setAttribute('rel', key);\n newLink.setAttribute('hreflang', value.hreflang);\n newLink.setAttribute('href', value.href);\n document.head.appendChild(newLink);\n }\n }\n break;\n default:\n if (value !== undefined && value !== null) {\n const val = Array.isArray(value) ? value.join(', ') : value;\n this._metaService.updateTag({ name: key, content: val });\n }\n else {\n this._metaService.removeTag(`name=\"${key}\"`);\n }\n break;\n }\n }\n _cleanUp() {\n for (const key in this._config) {\n if (key === 'alternate') {\n const links = document.querySelectorAll(`link[rel=\"${key}\"]`);\n links.forEach((link) => {\n link.remove();\n });\n continue;\n }\n if (key === 'canonical') {\n const link = document.querySelector(`link[rel=\"${key}\"]`);\n if (link) {\n link.remove();\n }\n continue;\n }\n if (typeof this._config[key] === 'object' &&\n this._config[key] !== null &&\n !(this._config[key] instanceof Observable)) {\n for (const subKey in this._config[key]) {\n const parentValue = this.parent?.config?.[key]?.[subKey];\n if (parentValue === undefined) {\n this._update(`${key}:${subKey}`, undefined);\n }\n }\n }\n else {\n const parentValue = this.parent?.config?.[key];\n if (parentValue === undefined) {\n this._update(key, null);\n }\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SeoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: SeoDirective, isStandalone: true, providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SeoDirective, decorators: [{\n type: Directive,\n args: [{\n standalone: true,\n providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2VvL3Nlby5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLFlBQVk7SUFKekI7UUFLbUIsaUJBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRWpELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXRCLFdBQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBSzFFLFlBQU8sR0FBYyxFQUFFLENBQUM7S0E4SmpDO0lBaktDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFB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LENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0F6S1UsWUFBWTtrR0FBWixZQUFZLGlDQUZaLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDOzsyRkFFN0QsWUFBWTtrQkFKeEIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxjQUFjLEVBQUUsQ0FBQztpQkFDekUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNFT19ESVJFQ1RJVkVfVE9LRU4gfSBmcm9tICcuL3Nlby5kaXJlY3RpdmUuY29uc3RhbnRzJztcbmltcG9ydCB7IEFsdGVybmF0ZUxpbmssIFNlb0NvbmZpZyB9IGZyb20gJy4vc2VvLmRpcmVjdGl2ZS50eXBlcyc7XG5pbXBvcnQgeyBtZXJnZVNlb0NvbmZpZyB9IGZyb20gJy4vc2VvLmRpcmVjdGl2ZS51dGlscyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFNFT19ESVJFQ1RJVkVfVE9LRU4sIHVzZUV4aXN0aW5nOiBTZW9EaXJlY3RpdmUgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFNlb0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0YVNlcnZpY2UgPSBpbmplY3QoTWV0YSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpdGxlU2VydmljZSA9IGluamVjdChUaXRsZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRGVhY3RpdmF0ZSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgX2lzRGVhY3RpdmF0ZWQgPSBmYWxzZTtcblxuICByZWFkb25seSBwYXJlbnQgPSBpbmplY3QoU0VPX0RJUkVDVElWRV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XG5cbiAgZ2V0IGNvbmZpZygpOiBTZW9Db25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cbiAgcHJpdmF0ZSBfY29uZmlnOiBTZW9Db25maWcgPSB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudD8uX2RlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgdGhpcy5wYXJlbnQ/Ll9hY3RpdmF0ZSgpO1xuICB9XG5cbiAgLy8gVE9ETyhUUkIpOiBUaGlzIHNob3VsZCBnZXQgc3BsaXQgdXAgaW50byBtdWx0aXBsZSBtZXRob2RzIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZVxuICAvLyAtIHVwZGF0ZVRpdGxlXG4gIC8vIC0gdXBkYXRlTWV0YVxuICAvLyAtIHVwZGF0ZUxpbmtcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZzogU2VvQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gbWVyZ2VTZW9Db25maWcoY29uZmlnLCB0aGlzLnBhcmVudD8uY29uZmlnIHx8IHt9KTtcblxuICAgIGlmICh0aGlzLl9pc0RlYWN0aXZhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2FjdGl2YXRlKCk7XG4gIH1cblxuICBfYWN0aXZhdGUoKSB7XG4gICAgdGhpcy5fb25EZWFjdGl2YXRlJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLl9pc0RlYWN0aXZhdGVkID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVhY3RpdmF0ZSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLl91cGRhdGUoa2V5LCB2YWx1ZSkpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVhY3RpdmF0ZSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLl91cGRhdGUoa2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHN1YlZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoc3ViVmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICBzdWJWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlYWN0aXZhdGUkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5fdXBkYXRlKGAke2tleX06JHtzdWJLZXl9YCwgdmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKGAke2tleX06JHtzdWJLZXl9YCwgc3ViVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9kZWFjdGl2YXRlKCkge1xuICAgIHRoaXMuX29uRGVhY3RpdmF0ZSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9pc0RlYWN0aXZhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuX3RpdGxlU2VydmljZS5zZXRUaXRsZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Nhbm9uaWNhbCc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tyZWw9XCIke2tleX1cIl1gKTtcblxuICAgICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgICAgICBuZXdMaW5rLnNldEF0dHJpYnV0ZSgncmVsJywga2V5KTtcbiAgICAgICAgICAgIG5ld0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobmV3TGluayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FsdGVybmF0ZSc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tyZWw9XCIke2tleX1cIl1baHJlZmxhbmc9XCIkeyh2YWx1ZSBhcyBBbHRlcm5hdGVMaW5rKS5ocmVmbGFuZ31cIl1gKTtcblxuICAgICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsICh2YWx1ZSBhcyBBbHRlcm5hdGVMaW5rKS5ocmVmKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICAgIG5ld0xpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCBrZXkpO1xuICAgICAgICAgICAgbmV3TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWZsYW5nJywgKHZhbHVlIGFzIEFsdGVybmF0ZUxpbmspLmhyZWZsYW5nKTtcbiAgICAgICAgICAgIG5ld0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgKHZhbHVlIGFzIEFsdGVybmF0ZUxpbmspLmhyZWYpO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdMaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiAodmFsdWUgYXMgc3RyaW5nKTtcblxuICAgICAgICAgIHRoaXMuX21ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6IGtleSwgY29udGVudDogdmFsIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX21ldGFTZXJ2aWNlLnJlbW92ZVRhZyhgbmFtZT1cIiR7a2V5fVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW5VcCgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9jb25maWcpIHtcbiAgICAgIGlmIChrZXkgPT09ICdhbHRlcm5hdGUnKSB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9XCIke2tleX1cIl1gKTtcblxuICAgICAgICBsaW5rcy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICAgICAgbGluay5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdjYW5vbmljYWwnKSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaW5rW3JlbD1cIiR7a2V5fVwiXWApO1xuXG4gICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgbGluay5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB0aGlzLl9jb25maWdba2V5XSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdGhpcy5fY29uZmlnW2tleV0gIT09IG51bGwgJiZcbiAgICAgICAgISh0aGlzLl9jb25maWdba2V5XSBpbnN0YW5jZW9mIE9ic2VydmFibGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBzdWJLZXkgaW4gdGhpcy5fY29uZmlnW2tleV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9XG4gICAgICAgICAgICB0aGlzLnBhcmVudD8uY29uZmlnPy5ba2V5IGFzIGtleW9mIFNlb0NvbmZpZ10/LltzdWJLZXkgYXMga2V5b2YgU2VvQ29uZmlnW2tleW9mIFNlb0NvbmZpZ11dO1xuXG4gICAgICAgICAgaWYgKHBhcmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZShgJHtrZXl9OiR7c3ViS2V5fWAsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMucGFyZW50Py5jb25maWc/LltrZXkgYXMga2V5b2YgU2VvQ29uZmlnXTtcblxuICAgICAgICBpZiAocGFyZW50VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZShrZXksIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","/**\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) => {\n if (!srcset)\n return null;\n const urls = srcset.split(',');\n const firstUrl = urls[0];\n if (!firstUrl)\n return null;\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 if (urlParts.length > 1 && !lastPart?.includes('/')) {\n urlParts.pop();\n }\n const cleanedUrl = urlParts.join(' ');\n const queryPart = cleanedUrl.split('?')[1] ?? '';\n const containsFm = queryPart.startsWith('fm=') || queryPart.includes('&fm=');\n let fileExtension = null;\n if (containsFm) {\n const fmIndex = queryPart.indexOf('fm=');\n const fmValue = queryPart\n .substring(fmIndex + 3)\n .split('&')[0]\n ?.toLowerCase();\n if (fmValue) {\n fileExtension = fmValue;\n }\n }\n if (!fileExtension) {\n const noQueryUrl = cleanedUrl.split('?')[0] || cleanedUrl;\n const lastDotIndex = noQueryUrl.lastIndexOf('.');\n if (lastDotIndex === -1)\n return null;\n fileExtension = noQueryUrl.substring(lastDotIndex + 1).toLowerCase();\n }\n if (fileExtension) {\n switch (fileExtension) {\n case 'avif':\n return 'image/avif';\n case 'bmp':\n return 'image/bmp';\n case 'gif':\n return 'image/gif';\n case 'ico':\n return 'image/vdn.microsoft.icon';\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'svg':\n return 'image/svg+xml';\n case 'tif':\n case 'tiff':\n return 'image/tiff';\n case 'webp':\n return 'image/webp';\n case 'aac':\n return 'audio/aac';\n case 'abw':\n return 'application/x-abiword';\n case 'arc':\n return 'application/x-freearc';\n case 'avi':\n return 'video/x-msvideo';\n case 'azw':\n return 'application/vnd.amazon.ebook';\n case 'bin':\n return 'application/octet-stream';\n case 'bz':\n return 'application/x-bzip';\n case 'bz2':\n return 'application/x-bzip2';\n case 'cda':\n return 'application/x-cdf';\n case 'csh':\n return 'application/x-csh';\n case 'css':\n return 'text/css';\n case 'csv':\n return 'text/csv';\n case 'doc':\n return 'application/msword';\n case 'docx':\n return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n case 'eot':\n return 'application/vnd.ms-fontobject';\n case 'epub':\n return 'application/epub+zip';\n case 'gz':\n return 'application/gzip';\n case 'htm':\n case 'html':\n return 'text/html';\n case 'ics':\n return 'text/calendar';\n case 'jar':\n return 'application/java-archive';\n case 'js':\n return 'text/javascript';\n case 'json':\n return 'application/json';\n case 'jsonld':\n return 'application/ld+json';\n case 'mid':\n case 'midi':\n return 'audio/midi';\n case 'mjs':\n return 'text/javascript';\n case 'mp3':\n return 'audio/mpeg';\n case 'mp4':\n return 'video/mp4';\n case 'mpeg':\n return 'video/mpeg';\n case 'mpkg':\n return 'tapplication/vnd.apple.installer+xml';\n case 'odp':\n return 'application/vnd.oasis.opendocument.presentation';\n case 'ods':\n return 'application/vnd.oasis.opendocument.spreadsheet';\n case 'odt':\n return 'application/vnd.oasis.opendocument.text';\n case 'oga':\n return 'audio/ogg';\n case 'ogv':\n return 'video/ogg';\n case 'ogx':\n return 'application/ogg';\n case 'opus':\n return 'audio/opus';\n case 'otf':\n return 'font/otf';\n case 'pdf':\n return 'application/pdf';\n case 'php':\n return 'application/x-httpd-php';\n case 'ppt':\n return 'application/vnd.ms-powerpoint';\n case 'pptx':\n return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n case 'rar':\n return 'application/vnd.rar';\n case 'rtf':\n return 'application/rtf';\n case 'sh':\n return 'application/x-sh';\n case 'tar':\n return 'application/x-tar';\n case 'ts':\n return 'video/mp2t';\n case 'ttf':\n return 'font/ttf';\n case 'txt':\n return 'text/plain';\n case 'vsd':\n return 'application/vnd.visio';\n case 'wav':\n return 'audio/wav';\n case 'weba':\n return 'audio/webm';\n case 'webm':\n return 'video/webm';\n case 'woff':\n return 'font/woff';\n case 'woff2':\n return 'font/woff2';\n case 'xhtml':\n return 'application/xhtml+xml';\n case 'xls':\n return 'application/vnd.ms-excel';\n case 'xlsx':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case 'xml':\n return 'application/xml';\n case 'xul':\n return 'application/vnd.mozilla.xul+xml';\n case 'zip':\n return 'application/zip';\n case '3gp':\n return 'video/3gpp';\n case '3g2':\n return 'video/3gpp2';\n case '7z':\n return 'application/x-7z-compressed';\n default:\n return null;\n }\n }\n return null;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXItbWltZS10eXBlLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9pbmZlci1taW1lLXR5cGUvaW5mZXItbWltZS10eXBlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQzlDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUzQiw2SUFBNkk7SUFDN0ksTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUUvQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV0QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFR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InNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5mZXJzIHRoZSBtaW1lIHR5cGUgb2YgYSBnaXZlbiB1cmwgb3Igc3Jjc2V0LlxuICogSWYgYSBzcmNzZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgaW5mZXIgdGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlyc3QgdXJsIGluIHRoZSBzcmNzZXQuXG4gKiBJZiB0aGUgc3Jjc2V0IGNvbnRhaW5zIGEgcXVlcnkgcGFyYW1ldGVyIGA/Zm09YCwgaXQgd2lsbCB1c2UgdGhlIHZhbHVlIG9mIHRoYXQgcGFyYW1ldGVyLCBzaW5jZSBpdCBpcyBvZnRlbiB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgZm9ybWF0IGluIGltYWdlIGFwaSdzIGxpa2UgY29udGVudGZ1bC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluZmVyTWltZVR5cGUgPSAoc3Jjc2V0OiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzcmNzZXQpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHVybHMgPSBzcmNzZXQuc3BsaXQoJywnKTtcbiAgY29uc3QgZmlyc3RVcmwgPSB1cmxzWzBdO1xuXG4gIGlmICghZmlyc3RVcmwpIHJldHVybiBudWxsO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGUgdXJsIGRvZXMgbm90IGVuZCB3aXRoIHNvbWV0aGluZyBsaWtlIHgxLCB4MiBvciA0MDB3LCA4MDB3Li4uIFdlIG5lZWQgdG8gcmVtb3ZlIHRoZXNlIHBhcnRzIHRvIGdldCB0aGUgY29ycmVjdCBmaWxlIGV4dGVuc2lvblxuICBjb25zdCB1cmxQYXJ0cyA9IGZpcnN0VXJsLnNwbGl0KCcgJyk7XG4gIGNvbnN0IGxhc3RQYXJ0ID0gdXJsUGFydHNbdXJsUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgaWYgKHVybFBhcnRzLmxlbmd0aCA+IDEgJiYgIWxhc3RQYXJ0Py5pbmNsdWRlcygnLycpKSB7XG4gICAgdXJsUGFydHMucG9wKCk7XG4gIH1cblxuICBjb25zdCBjbGVhbmVkVXJsID0gdXJsUGFydHMuam9pbignICcpO1xuXG4gIGNvbnN0IHF1ZXJ5UGFydCA9IGNsZWFuZWRVcmwuc3BsaXQoJz8nKVsxXSA/PyAnJztcbiAgY29uc3QgY29udGFpbnNGbSA9IHF1ZXJ5UGFydC5zdGFydHNXaXRoKCdmbT0nKSB8fCBxdWVyeVBhcnQuaW5jbHVkZXMoJyZmbT0nKTtcbiAgbGV0IGZpbGVFeHRlbnNpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChjb250YWluc0ZtKSB7XG4gICAgY29uc3QgZm1JbmRleCA9IHF1ZXJ5UGFydC5pbmRleE9mKCdmbT0nKTtcbiAgICBjb25zdCBmbVZhbHVlID0gcXVlcnlQYXJ0XG4gICAgICAuc3Vic3RyaW5nKGZtSW5kZXggKyAzKVxuICAgICAgLnNwbGl0KCcmJylbMF1cbiAgICAgID8udG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChmbVZhbHVlKSB7XG4gICAgICBmaWxlRXh0ZW5zaW9uID0gZm1WYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWZpbGVFeHRlbnNpb24pIHtcbiAgICBjb25zdCBub1F1ZXJ5VXJsID0gY2xlYW5lZFVybC5zcGxpdCgnPycpWzBdIHx8IGNsZWFuZWRVcmw7XG5cbiAgICBjb25zdCBsYXN0RG90SW5kZXggPSBub1F1ZXJ5VXJsLmxhc3RJbmRleE9mKCcuJyk7XG5cbiAgICBpZiAobGFzdERvdEluZGV4ID09PSAtMSkgcmV0dXJuIG51bGw7XG5cbiAgICBmaWxlRXh0ZW5zaW9uID0gbm9RdWVyeVVybC5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSkudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGlmIChmaWxlRXh0ZW5zaW9uKSB7XG4gICAgc3dpdGNoIChmaWxlRXh0ZW5zaW9uKSB7XG4gICAgICBjYXNlICdhdmlmJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS9hdmlmJztcbiAgICAgIGNhc2UgJ2JtcCc6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvYm1wJztcbiAgICAgIGNhc2UgJ2dpZic6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvZ2lmJztcbiAgICAgIGNhc2UgJ2ljbyc6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvdmRuLm1pY3Jvc29mdC5pY29uJztcbiAgICAgIGNhc2UgJ2pwZyc6XG4gICAgICBjYXNlICdqcGVnJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICAgIGNhc2UgJ3BuZyc6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICAgIGNhc2UgJ3N2Zyc6XG4gICAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCc7XG4gICAgICBjYXNlICd0aWYnOlxuICAgICAgY2FzZSAndGlmZic6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvdGlmZic7XG4gICAgICBjYXNlICd3ZWJwJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS93ZWJwJztcbiAgICAgIGNhc2UgJ2FhYyc6XG4gICAgICAgIHJldHVybiAnYXVkaW8vYWFjJztcbiAgICAgIGNhc2UgJ2Fidyc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1hYml3b3JkJztcbiAgICAgIGNhc2UgJ2FyYyc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1mcmVlYXJjJztcbiAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIHJldHVybiAndmlkZW8veC1tc3ZpZGVvJztcbiAgICAgIGNhc2UgJ2F6dyc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vdm5kLmFtYXpvbi5lYm9vayc7XG4gICAgICBjYXNlICdiaW4nOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICBjYXNlICdieic6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1iemlwJztcbiAgICAgIGNhc2UgJ2J6Mic6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1iemlwMic7XG4gICAgICBjYXNlICdjZGEnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtY2RmJztcbiAgICAgIGNhc2UgJ2NzaCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1jc2gnO1xuICAgICAgY2FzZSAnY3NzJzpcbiAgICAgICAgcmV0dXJuICd0ZXh0L2Nzcyc7XG4gICAgICBjYXNlICdjc3YnOlxuICAgICAgICByZXR1cm4gJ3RleHQvY3N2JztcbiAgICAgIGNhc2UgJ2RvYyc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vbXN3b3JkJztcbiAgICAgIGNhc2UgJ2RvY3gnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JztcbiAgICAgIGNhc2UgJ2VvdCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnO1xuICAgICAgY2FzZSAnZXB1Yic6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vZXB1Yit6aXAnO1xuICAgICAgY2FzZSAnZ3onOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2d6aXAnO1xuICAgICAgY2FzZSAnaHRtJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICByZXR1cm4gJ3RleHQvaHRtbCc7XG4gICAgICBjYXNlICdpY3MnOlxuICAgICAgICByZXR1cm4gJ3RleHQvY2FsZW5kYXInO1xuICAgICAgY2FzZSAnamFyJzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUnO1xuICAgICAgY2FzZSAnanMnOlxuICAgICAgICByZXR1cm4gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgIGNhc2UgJ2pzb25sZCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vbGQranNvbic7XG4gICAgICBjYXNlICdtaWQnOlxuICAgICAgY2FzZSAnbWlkaSc6XG4gICAgICAgIHJldHVybiAnYXVkaW8vbWlkaSc7XG4gICAgICBjYXNlICdtanMnOlxuICAgICAgICByZXR1cm4gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBjYXNlICdtcDMnOlxuICAgICAgICByZXR1cm4gJ2F1ZGlvL21wZWcnO1xuICAgICAgY2FzZSAnbXA0JzpcbiAgICAgICAgcmV0dXJuICd2aWRlby9tcDQnO1xuICAgICAgY2FzZSAnbXBlZyc6XG4gICAgICAgIHJldHVybiAndmlkZW8vbXBlZyc7XG4gICAgICBjYXNlICdtcGtnJzpcbiAgICAgICAgcmV0dXJuICd0YXBwbGljYXRpb24vdm5kLmFwcGxlLmluc3RhbGxlcit4bWwnO1xuICAgICAgY2FzZSAnb2RwJzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbic7XG4gICAgICBjYXNlICdvZHMnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnO1xuICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnO1xuICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgcmV0dXJuICdhdWRpby9vZ2cnO1xuICAgICAgY2FzZSAnb2d2JzpcbiAgICAgICAgcmV0dXJuICd2aWRlby9vZ2cnO1xuICAgICAgY2FzZSAnb2d4JzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vZ2cnO1xuICAgICAgY2FzZSAnb3B1cyc6XG4gICAgICAgIHJldHVybiAnYXVkaW8vb3B1cyc7XG4gICAgICBjYXNlICdvdGYnOlxuICAgICAgICByZXR1cm4gJ2ZvbnQvb3RmJztcbiAgICAgIGNhc2UgJ3BkZic6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vcGRmJztcbiAgICAgIGNhc2UgJ3BocCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnO1xuICAgICAgY2FzZSAncHB0JzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCc7XG4gICAgICBjYXNlICdwcHR4JzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcbiAgICAgIGNhc2UgJ3Jhcic6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vdm5kLnJhcic7XG4gICAgICBjYXNlICdydGYnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3J0Zic7XG4gICAgICBjYXNlICdzaCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1zaCc7XG4gICAgICBjYXNlICd0YXInOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtdGFyJztcbiAgICAgIGNhc2UgJ3RzJzpcbiAgICAgICAgcmV0dXJuICd2aWRlby9tcDJ0JztcbiAgICAgIGNhc2UgJ3R0Zic6XG4gICAgICAgIHJldHVybiAnZm9udC90dGYnO1xuICAgICAgY2FzZSAndHh0JzpcbiAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcbiAgICAgIGNhc2UgJ3ZzZCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vdm5kLnZpc2lvJztcbiAgICAgIGNhc2UgJ3dhdic6XG4gICAgICAgIHJldHVybiAnYXVkaW8vd2F2JztcbiAgICAgIGNhc2UgJ3dlYmEnOlxuICAgICAgICByZXR1cm4gJ2F1ZGlvL3dlYm0nO1xuICAgICAgY2FzZSAnd2VibSc6XG4gICAgICAgIHJldHVybiAndmlkZW8vd2VibSc7XG4gICAgICBjYXNlICd3b2ZmJzpcbiAgICAgICAgcmV0dXJuICdmb250L3dvZmYnO1xuICAgICAgY2FzZSAnd29mZjInOlxuICAgICAgICByZXR1cm4gJ2ZvbnQvd29mZjInO1xuICAgICAgY2FzZSAneGh0bWwnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCc7XG4gICAgICBjYXNlICd4bHMnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCc7XG4gICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCc7XG4gICAgICBjYXNlICd4bWwnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG4gICAgICBjYXNlICd4dWwnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWwnO1xuICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi96aXAnO1xuICAgICAgY2FzZSAnM2dwJzpcbiAgICAgICAgcmV0dXJuICd2aWRlby8zZ3BwJztcbiAgICAgIGNhc2UgJzNnMic6XG4gICAgICAgIHJldHVybiAndmlkZW8vM2dwcDInO1xuICAgICAgY2FzZSAnN3onOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCc7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbiJdfQ==","import { Pipe } from '@angular/core';\nimport { inferMimeType } from './infer-mime-type.util';\nimport * as i0 from \"@angular/core\";\nexport class InferMimeTypePipe {\n constructor() {\n this.transform = inferMimeType;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: InferMimeTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: InferMimeTypePipe, isStandalone: true, name: \"inferMimeType\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: InferMimeTypePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'inferMimeType',\n standalone: true,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXItbWltZS10eXBlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9pbmZlci1taW1lLXR5cGUvaW5mZXItbWltZS10eXBlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU12RCxNQUFNLE9BQU8saUJBQWlCO0lBSjlCO1FBS0UsY0FBUyxHQUFHLGFBQWEsQ0FBQztLQUMzQjs4R0FGWSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFKN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5mZXJNaW1lVHlwZSB9IGZyb20gJy4vaW5mZXItbWltZS10eXBlLnV0aWwnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdpbmZlck1pbWVUeXBlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW5mZXJNaW1lVHlwZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gaW5mZXJNaW1lVHlwZTtcbn1cbiJdfQ==","// TODO(TRB): Add correct type once provided by API\nexport const normalizeGameResultType = (type) => {\n if (!type) {\n return null;\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 case 'penalty':\n return {\n i18n: 'game-result-type.penalty',\n shortCode: 'PSO',\n text: 'Penalty shootout',\n };\n case 'golden_goal':\n return {\n i18n: 'game-result-type.golden-goal',\n shortCode: 'GG',\n text: 'Golden Goal',\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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWdhbWUtcmVzdWx0LXR5cGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsSUFBbUIsRUFBbUMsRUFBRTtJQUM5RixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxZQUFZO1lBQ2YsT0FBTztnQkFDTCxJQUFJLEVBQUUsNkJBQTZCO2dCQUNuQyxTQUFTLEVBQUUsS0FBSztnQkFDaEIsSUFBSSxFQUFFLGtCQUFrQjthQUN6QixDQUFDO1FBRUosS0FBSyxTQUFTO1lBQ1osT0FBTztnQkFDTCxJQUFJLEVBQUUsMEJBQTBCO2dCQUNoQyxTQUFTLEVBQUUsS0FBSztnQkFDaEIsSUFBSSxFQUFFLGtCQUFrQjthQUN6QixDQUFDO1FBRUosS0FBSyxhQUFhO1lBQ2hCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLDhCQUE4QjtnQkFDcEMsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLGFBQWE7YUFDcEIsQ0FBQztRQUVKLEtBQUssU0FBUyxDQUFDO1FBQ2Y7WUFDRSxPQUFPO2dCQUNMLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLFNBQVMsRUFBRSxJQUFJO2dCQUNmLElBQUksRUFBRSxXQUFXO2FBQ2xCLENBQUM7SUFDTixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9ybWFsaXplZEdhbWVSZXN1bHRUeXBlIH0gZnJvbSAnLi9ub3JtYWxpemUtZ2FtZS1yZXN1bHQtdHlwZS50eXBlcyc7XG5cbi8vIFRPRE8oVFJCKTogQWRkIGNvcnJlY3QgdHlwZSBvbmNlIHByb3ZpZGVkIGJ5IEFQSVxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUdhbWVSZXN1bHRUeXBlID0gKHR5cGU6IHN0cmluZyB8IG51bGwpOiBOb3JtYWxpemVkR2FtZVJlc3VsdFR5cGUgfCBudWxsID0+IHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdleHRyYV90aW1lJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGkxOG46ICdnYW1lLXJlc3VsdC10eXBlLmV4dHJhLXRpbWUnLFxuICAgICAgICBzaG9ydENvZGU6ICdBRVQnLFxuICAgICAgICB0ZXh0OiAnQWZ0ZXIgRXh0cmEgVGltZScsXG4gICAgICB9O1xuXG4gICAgY2FzZSAncGVuYWx0eSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpMThuOiAnZ2FtZS1yZXN1bHQtdHlwZS5wZW5hbHR5JyxcbiAgICAgICAgc2hvcnRDb2RlOiAnUFNPJyxcbiAgICAgICAgdGV4dDogJ1BlbmFsdHkgc2hvb3RvdXQnLFxuICAgICAgfTtcblxuICAgIGNhc2UgJ2dvbGRlbl9nb2FsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGkxOG46ICdnYW1lLXJlc3VsdC10eXBlLmdvbGRlbi1nb2FsJyxcbiAgICAgICAgc2hvcnRDb2RlOiAnR0cnLFxuICAgICAgICB0ZXh0OiAnR29sZGVuIEdvYWwnLFxuICAgICAgfTtcblxuICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpMThuOiAnZ2FtZS1yZXN1bHQtdHlwZS5mdWxsLXRpbWUnLFxuICAgICAgICBzaG9ydENvZGU6ICdGVCcsXG4gICAgICAgIHRleHQ6ICdGdWxsIFRpbWUnLFxuICAgICAgfTtcbiAgfVxufTtcbiJdfQ==","import { Pipe } from '@angular/core';\nimport { normalizeGameResultType } from './normalize-game-result-type.util';\nimport * as i0 from \"@angular/core\";\nexport class NormalizeGameResultTypePipe {\n constructor() {\n this.transform = normalizeGameResultType;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeGameResultTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeGameResultTypePipe, isStandalone: true, name: \"etNormalizeGameResultType\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeGameResultTypePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'etNormalizeGameResultType', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWdhbWUtcmVzdWx0LXR5cGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBRzVFLE1BQU0sT0FBTywyQkFBMkI7SUFEeEM7UUFFRSxjQUFTLEdBQUcsdUJBQXVCLENBQUM7S0FDckM7OEdBRlksMkJBQTJCOzRHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZUdhbWVSZXN1bHRUeXBlIH0gZnJvbSAnLi9ub3JtYWxpemUtZ2FtZS1yZXN1bHQtdHlwZS51dGlsJztcblxuQFBpcGUoeyBuYW1lOiAnZXROb3JtYWxpemVHYW1lUmVzdWx0VHlwZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOb3JtYWxpemVHYW1lUmVzdWx0VHlwZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gbm9ybWFsaXplR2FtZVJlc3VsdFR5cGU7XG59XG4iXX0=","export const normalizeMatchState = (match) => {\n if (match?.isCompletedByReferee) {\n return \"autoWin\" /* MatchStateType.AUTO_WIN */;\n }\n else if (match?.status === 'preparing') {\n return \"preMatch\" /* MatchStateType.PRE_MATCH */;\n }\n else if (match?.status === 'started') {\n return \"live\" /* MatchStateType.LIVE */;\n }\n else if (match?.status === 'published' || match?.status === 'finished') {\n return \"postMatch\" /* MatchStateType.POST_MATCH */;\n }\n else if (match?.round.state !== 'preparing') {\n return \"preparingRound\" /* MatchStateType.PREPARING_ROUND */;\n }\n return null;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXN0YXRlLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtc3RhdGUvbm9ybWFsaXplLW1hdGNoLXN0YXRlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUF1QyxFQUFFLEVBQUU7SUFDN0UsSUFBSSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztRQUNoQywrQ0FBK0I7SUFDakMsQ0FBQztTQUFNLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxpREFBZ0M7SUFDbEMsQ0FBQztTQUFNLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2Qyx3Q0FBMkI7SUFDN0IsQ0FBQztTQUFNLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxXQUFXLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN6RSxtREFBaUM7SUFDbkMsQ0FBQztTQUFNLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDOUMsNkRBQXNDO0lBQ3hDLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdGNoTGlzdFZpZXcgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBNYXRjaFN0YXRlVHlwZSB9IGZyb20gJy4vbm9ybWFsaXplLW1hdGNoLXN0YXRlLmNvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVNYXRjaFN0YXRlID0gKG1hdGNoOiBNYXRjaExpc3RWaWV3IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAobWF0Y2g/LmlzQ29tcGxldGVkQnlSZWZlcmVlKSB7XG4gICAgcmV0dXJuIE1hdGNoU3RhdGVUeXBlLkFVVE9fV0lOO1xuICB9IGVsc2UgaWYgKG1hdGNoPy5zdGF0dXMgPT09ICdwcmVwYXJpbmcnKSB7XG4gICAgcmV0dXJuIE1hdGNoU3RhdGVUeXBlLlBSRV9NQVRDSDtcbiAgfSBlbHNlIGlmIChtYXRjaD8uc3RhdHVzID09PSAnc3RhcnRlZCcpIHtcbiAgICByZXR1cm4gTWF0Y2hTdGF0ZVR5cGUuTElWRTtcbiAgfSBlbHNlIGlmIChtYXRjaD8uc3RhdHVzID09PSAncHVibGlzaGVkJyB8fCBtYXRjaD8uc3RhdHVzID09PSAnZmluaXNoZWQnKSB7XG4gICAgcmV0dXJuIE1hdGNoU3RhdGVUeXBlLlBPU1RfTUFUQ0g7XG4gIH0gZWxzZSBpZiAobWF0Y2g/LnJvdW5kLnN0YXRlICE9PSAncHJlcGFyaW5nJykge1xuICAgIHJldHVybiBNYXRjaFN0YXRlVHlwZS5QUkVQQVJJTkdfUk9VTkQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG4iXX0=","import { Pipe } from '@angular/core';\nimport { normalizeMatchState } from './normalize-match-state.util';\nimport * as i0 from \"@angular/core\";\nexport class NormalizeMatchStatePipe {\n constructor() {\n this.transform = normalizeMatchState;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchStatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchStatePipe, isStandalone: true, name: \"etNormalizeMatchState\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchStatePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'etNormalizeMatchState', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXN0YXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtc3RhdGUvbm9ybWFsaXplLW1hdGNoLXN0YXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR25FLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFRSxjQUFTLEdBQUcsbUJBQW1CLENBQUM7S0FDakM7OEdBRlksdUJBQXVCOzRHQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoU3RhdGUgfSBmcm9tICcuL25vcm1hbGl6ZS1tYXRjaC1zdGF0ZS51dGlsJztcblxuQFBpcGUoeyBuYW1lOiAnZXROb3JtYWxpemVNYXRjaFN0YXRlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoU3RhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSA9IG5vcm1hbGl6ZU1hdGNoU3RhdGU7XG59XG4iXX0=","import { normalizeMatchState } from '../normalize-match-state';\nexport const normalizeMatchParticipants = (match) => {\n const matchState = normalizeMatchState(match);\n if (!match || !matchState) {\n return null;\n }\n return {\n home: normalizeMatchParticipant(match, 'home'),\n away: normalizeMatchParticipant(match, 'away'),\n };\n};\nexport const normalizeMatchParticipant = (match, side) => {\n const matchState = normalizeMatchState(match);\n if (!match || !matchState) {\n return null;\n }\n const participant = match[side];\n const participantType = match.home?.type ?? match.away?.type ?? 'unknown';\n if (!participant) {\n if (matchState === \"postMatch\" /* MatchStateType.POST_MATCH */ || matchState === \"autoWin\" /* MatchStateType.AUTO_WIN */) {\n return {\n participantType,\n type: 'none',\n i18n: 'match-participant.none',\n text: 'No opponent',\n data: participant,\n };\n }\n else {\n return {\n participantType,\n type: 'tbd',\n i18n: 'match-participant.tbd',\n text: 'TBD',\n data: participant,\n };\n }\n }\n else {\n return {\n participantType,\n type: 'participant',\n data: participant,\n };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvbm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy9ub3JtYWxpemUtbWF0Y2gtcGFydGljaXBhbnRzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFrQixtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRy9FLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsS0FBMkIsRUFBc0MsRUFBRTtJQUM1RyxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQzlDLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO0tBQy9DLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxLQUEyQixFQUMzQixJQUFxQixFQUNjLEVBQUU7SUFDckMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7SUFFMUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLElBQUksVUFBVSxnREFBOEIsSUFBSSxVQUFVLDRDQUE0QixFQUFFLENBQUM7WUFDdkYsT0FBTztnQkFDTCxlQUFlO2dCQUNmLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsV0FBVzthQUNsQixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPO2dCQUNMLGVBQWU7Z0JBQ2YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsSUFBSSxFQUFFLFdBQVc7YUFDbEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU87WUFDTCxlQUFlO1lBQ2YsSUFBSSxFQUFFLGFBQWE7WUFDbkIsSUFBSSxFQUFFLFdBQVc7U0FDbEIsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXRjaExpc3RWaWV3IH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgTWF0Y2hTdGF0ZVR5cGUsIG5vcm1hbGl6ZU1hdGNoU3RhdGUgfSBmcm9tICcuLi9ub3JtYWxpemUtbWF0Y2gtc3RhdGUnO1xuaW1wb3J0IHsgTm9ybWFsaXplZE1hdGNoUGFydGljaXBhbnQsIE5vcm1hbGl6ZWRNYXRjaFBhcnRpY2lwYW50cyB9IGZyb20gJy4vbm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVNYXRjaFBhcnRpY2lwYW50cyA9IChtYXRjaDogTWF0Y2hMaXN0VmlldyB8IG51bGwpOiBOb3JtYWxpemVkTWF0Y2hQYXJ0aWNpcGFudHMgfCBudWxsID0+IHtcbiAgY29uc3QgbWF0Y2hTdGF0ZSA9IG5vcm1hbGl6ZU1hdGNoU3RhdGUobWF0Y2gpO1xuXG4gIGlmICghbWF0Y2ggfHwgIW1hdGNoU3RhdGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaG9tZTogbm9ybWFsaXplTWF0Y2hQYXJ0aWNpcGFudChtYXRjaCwgJ2hvbWUnKSxcbiAgICBhd2F5OiBub3JtYWxpemVNYXRjaFBhcnRpY2lwYW50KG1hdGNoLCAnYXdheScpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnQgPSAoXG4gIG1hdGNoOiBNYXRjaExpc3RWaWV3IHwgbnVsbCxcbiAgc2lkZTogJ2hvbWUnIHwgJ2F3YXknLFxuKTogTm9ybWFsaXplZE1hdGNoUGFydGljaXBhbnQgfCBudWxsID0+IHtcbiAgY29uc3QgbWF0Y2hTdGF0ZSA9IG5vcm1hbGl6ZU1hdGNoU3RhdGUobWF0Y2gpO1xuXG4gIGlmICghbWF0Y2ggfHwgIW1hdGNoU3RhdGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnRpY2lwYW50ID0gbWF0Y2hbc2lkZV07XG4gIGNvbnN0IHBhcnRpY2lwYW50VHlwZSA9IG1hdGNoLmhvbWU/LnR5cGUgPz8gbWF0Y2guYXdheT8udHlwZSA/PyAndW5rbm93bic7XG5cbiAgaWYgKCFwYXJ0aWNpcGFudCkge1xuICAgIGlmIChtYXRjaFN0YXRlID09PSBNYXRjaFN0YXRlVHlwZS5QT1NUX01BVENIIHx8IG1hdGNoU3RhdGUgPT09IE1hdGNoU3RhdGVUeXBlLkFVVE9fV0lOKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0aWNpcGFudFR5cGUsXG4gICAgICAgIHR5cGU6ICdub25lJyxcbiAgICAgICAgaTE4bjogJ21hdGNoLXBhcnRpY2lwYW50Lm5vbmUnLFxuICAgICAgICB0ZXh0OiAnTm8gb3Bwb25lbnQnLFxuICAgICAgICBkYXRhOiBwYXJ0aWNpcGFudCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcnRpY2lwYW50VHlwZSxcbiAgICAgICAgdHlwZTogJ3RiZCcsXG4gICAgICAgIGkxOG46ICdtYXRjaC1wYXJ0aWNpcGFudC50YmQnLFxuICAgICAgICB0ZXh0OiAnVEJEJyxcbiAgICAgICAgZGF0YTogcGFydGljaXBhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFydGljaXBhbnRUeXBlLFxuICAgICAgdHlwZTogJ3BhcnRpY2lwYW50JyxcbiAgICAgIGRhdGE6IHBhcnRpY2lwYW50LFxuICAgIH07XG4gIH1cbn07XG4iXX0=","import { Pipe } from '@angular/core';\nimport { normalizeMatchParticipants } from './normalize-match-participants.util';\nimport * as i0 from \"@angular/core\";\nexport class NormalizeMatchParticipantsPipe {\n constructor() {\n this.transform = normalizeMatchParticipants;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchParticipantsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchParticipantsPipe, isStandalone: true, name: \"etNormalizeMatchParticipants\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchParticipantsPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'etNormalizeMatchParticipants', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvbm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy9ub3JtYWxpemUtbWF0Y2gtcGFydGljaXBhbnRzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBR2pGLE1BQU0sT0FBTyw4QkFBOEI7SUFEM0M7UUFFRSxjQUFTLEdBQUcsMEJBQTBCLENBQUM7S0FDeEM7OEdBRlksOEJBQThCOzRHQUE5Qiw4QkFBOEI7OzJGQUE5Qiw4QkFBOEI7a0JBRDFDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnRzIH0gZnJvbSAnLi9ub3JtYWxpemUtbWF0Y2gtcGFydGljaXBhbnRzLnV0aWwnO1xuXG5AUGlwZSh7IG5hbWU6ICdldE5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnRzJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnRzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0gPSBub3JtYWxpemVNYXRjaFBhcnRpY2lwYW50cztcbn1cbiJdfQ==","import { normalizeMatchState } from '../normalize-match-state';\nconst EMPTY_SCORE = {\n home: { score: 'match-score.placeholder', isWinner: false },\n away: { score: 'match-score.placeholder', isWinner: false },\n isNumeric: false,\n subLine: null,\n};\nexport const normalizeMatchScore = (match) => {\n if (!match) {\n return null;\n }\n const matchState = normalizeMatchState(match);\n const subLine = getMatchScoreSubLine(match);\n if (!match.homeScore && !match.awayScore) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n if (isKnockoutMatch(match)) {\n if (matchState === \"preMatch\" /* MatchStateType.PRE_MATCH */ || matchState === \"live\" /* MatchStateType.LIVE */) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\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 }\n else if (isGroupMatch(match)) {\n if (match.games.length === 1) {\n // Return the score if only one game has been played\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n };\n }\n else {\n return {\n ...getGroupMatchPoints(match),\n subLine,\n isNumeric: true,\n };\n }\n }\n else {\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n };\n }\n};\nexport const isKnockoutMatch = (match) => {\n if (!match) {\n return false;\n }\n return (match.matchType === 'single_elimination' ||\n match.matchType === 'double_elimination' ||\n match.matchType === 'fifa_swiss');\n};\nexport const isGroupMatch = (match) => {\n if (!match) {\n return false;\n }\n return match.matchType === 'groups' || match.matchType === 'league';\n};\nexport const getKnockoutMatchScore = (score) => {\n if (score?.status === 'won') {\n return 'match-score.knockout.won';\n }\n else if (score?.status === 'lost') {\n return 'match-score.knockout.lost';\n }\n else if (score?.status === 'tie') {\n return 'match-score.knockout.tie';\n }\n return null;\n};\nexport const getMatchScoreSubLine = (match) => {\n if (isKnockoutMatch(match)) {\n return null;\n }\n else if (isGroupMatch(match)) {\n return 'match-score.groups.sub-line';\n }\n else {\n return null;\n }\n};\nexport const getGroupMatchScore = (match) => {\n if (!match) {\n return null;\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};\nexport const getGroupMatchPoints = (match) => {\n if (!match) {\n return null;\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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXNjb3JlLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtc2NvcmUvbm9ybWFsaXplLW1hdGNoLXNjb3JlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFrQixtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRy9FLE1BQU0sV0FBVyxHQUF5QjtJQUN4QyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtJQUMzRCxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtJQUMzRCxTQUFTLEVBQUUsS0FBSztJQUNoQixPQUFPLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQXVDLEVBQStCLEVBQUU7SUFDMUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekMsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0IsSUFBSSxVQUFVLDhDQUE2QixJQUFJLFVBQVUscUNBQXdCLEVBQUUsQ0FBQztZQUNsRixPQUFP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SUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBdUMsRUFBRSxFQUFFO0lBQzVFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLElBQUksQ0FBQztZQUN0QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEtBQUssS0FBSztTQUM1QztRQUNELElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsSUFBSSxDQUFDO1lBQ3RDLFFBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sS0FBSyxLQUFLO1NBQzVDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBdUMsRUFBRSxFQUFFO0lBQzdFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksQ0FBQztZQUNsQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEtBQUssS0FBSztTQUM1QztRQUNELElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sS0FBSyxLQUFLO1NBQzVDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdGNoTGlzdFZpZXcsIE1hdGNoUmFua2luZ1ZpZXcgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBNYXRjaFN0YXRlVHlwZSwgbm9ybWFsaXplTWF0Y2hTdGF0ZSB9IGZyb20gJy4uL25vcm1hbGl6ZS1tYXRjaC1zdGF0ZSc7XG5pbXBvcnQgeyBOb3JtYWxpemVkTWF0Y2hTY29yZSB9IGZyb20gJy4vbm9ybWFsaXplLW1hdGNoLXNjb3JlLnR5cGVzJztcblxuY29uc3QgRU1QVFlfU0NPUkU6IE5vcm1hbGl6ZWRNYXRjaFNjb3JlID0ge1xuICBob21lOiB7IHNjb3JlOiAnbWF0Y2gtc2NvcmUucGxhY2Vob2xkZXInLCBpc1dpbm5lcjogZmFsc2UgfSxcbiAgYXdheTogeyBzY29yZTogJ21hdGNoLXNjb3JlLnBsYWNlaG9sZGVyJywgaXNXaW5uZXI6IGZhbHNlIH0sXG4gIGlzTnVtZXJpYzogZmFsc2UsXG4gIHN1YkxpbmU6IG51bGwsXG59O1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplTWF0Y2hTY29yZSA9IChtYXRjaDogTWF0Y2hMaXN0VmlldyB8IG51bGwgfCB1bmRlZmluZWQpOiBOb3JtYWxpemVkTWF0Y2hTY29yZSB8IG51bGwgPT4ge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXRjaFN0YXRlID0gbm9ybWFsaXplTWF0Y2hTdGF0ZShtYXRjaCk7XG4gIGNvbnN0IHN1YkxpbmUgPSBnZXRNYXRjaFNjb3JlU3ViTGluZShtYXRjaCk7XG5cbiAgaWYgKCFtYXRjaC5ob21lU2NvcmUgJiYgIW1hdGNoLmF3YXlTY29yZSkge1xuICAgIHJldHVybiB7IC4uLkVNUFRZX1NDT1JFLCBzdWJMaW5lLCBpc051bWVyaWM6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNLbm9ja291dE1hdGNoKG1hdGNoKSkge1xuICAgIGlmIChtYXRjaFN0YXRlID09PSBNYXRjaFN0YXRlVHlwZS5QUkVfTUFUQ0ggfHwgbWF0Y2hTdGF0ZSA9PT0gTWF0Y2hTdGF0ZVR5cGUuTElWRSkge1xuICAgICAgcmV0dXJuIHsgLi4uRU1QVFlfU0NPUkUsIHN1YkxpbmUsIGlzTnVtZXJpYzogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaG9tZToge1xuICAgICAgICBzY29yZTogZ2V0S25vY2tvdXRNYXRjaFNjb3JlKG1hdGNoLmhvbWVTY29yZSksXG4gICAgICAgIGlzV2lubmVyOiBtYXRjaC5ob21lU2NvcmU/LnN0YXR1cyA9PT0gJ3dvbicsXG4gICAgICB9LFxuICAgICAgYXdheToge1xuICAgICAgICBzY29yZTogZ2V0S25vY2tvdXRNYXRjaFNjb3JlKG1hdGNoLmF3YXlTY29yZSksXG4gICAgICAgIGlzV2lubmVyOiBtYXRjaC5hd2F5U2NvcmU/LnN0YXR1cyA9PT0gJ3dvbicsXG4gICAgICB9LFxuICAgICAgc3ViTGluZSxcbiAgICAgIGlzTnVtZXJpYzogZmFsc2UsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc0dyb3VwTWF0Y2gobWF0Y2gpKSB7XG4gICAgaWYgKG1hdGNoLmdhbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gUmV0dXJuIHRoZSBzY29yZSBpZiBvbmx5IG9uZSBnYW1lIGhhcyBiZWVuIHBsYXllZFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ2V0R3JvdXBNYXRjaFNjb3JlKG1hdGNoKSxcbiAgICAgICAgc3ViTGluZSxcbiAgICAgICAgaXNOdW1lcmljOiB0cnVlLFxuICAgICAgfSBhcyBOb3JtYWxpemVkTWF0Y2hTY29yZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ2V0R3JvdXBNYXRjaFBvaW50cyhtYXRjaCksXG4gICAgICAgIHN1YkxpbmUsXG4gICAgICAgIGlzTnVtZXJpYzogdHJ1ZSxcbiAgICAgIH0gYXMgTm9ybWFsaXplZE1hdGNoU2NvcmU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5nZXRHcm91cE1hdGNoU2NvcmUobWF0Y2gpLFxuICAgICAgc3ViTGluZSxcbiAgICAgIGlzTnVtZXJpYzogdHJ1ZSxcbiAgICB9IGFzIE5vcm1hbGl6ZWRNYXRjaFNjb3JlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNLbm9ja291dE1hdGNoID0gKG1hdGNoOiBNYXRjaExpc3RWaWV3IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBtYXRjaC5tYXRjaFR5cGUgPT09ICdzaW5nbGVfZWxpbWluYXRpb24nIHx8XG4gICAgbWF0Y2gubWF0Y2hUeXBlID09PSAnZG91YmxlX2VsaW1pbmF0aW9uJyB8fFxuICAgIG1hdGNoLm1hdGNoVHlwZSA9PT0gJ2ZpZmFfc3dpc3MnXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcm91cE1hdGNoID0gKG1hdGNoOiBNYXRjaExpc3RWaWV3IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoLm1hdGNoVHlwZSA9PT0gJ2dyb3VwcycgfHwgbWF0Y2gubWF0Y2hUeXBlID09PSAnbGVhZ3VlJztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRLbm9ja291dE1hdGNoU2NvcmUgPSAoc2NvcmU6IE1hdGNoUmFua2luZ1ZpZXcgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmIChzY29yZT8uc3RhdHVzID09PSAnd29uJykge1xuICAgIHJldHVybiAnbWF0Y2gtc2NvcmUua25vY2tvdXQud29uJztcbiAgfSBlbHNlIGlmIChzY29yZT8uc3RhdHVzID09PSAnbG9zdCcpIHtcbiAgICByZXR1cm4gJ21hdGNoLXNjb3JlLmtub2Nrb3V0Lmxvc3QnO1xuICB9IGVsc2UgaWYgKHNjb3JlPy5zdGF0dXMgPT09ICd0aWUnKSB7XG4gICAgcmV0dXJuICdtYXRjaC1zY29yZS5rbm9ja291dC50aWUnO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWF0Y2hTY29yZVN1YkxpbmUgPSAobWF0Y2g6IE1hdGNoTGlzdFZpZXcgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmIChpc0tub2Nrb3V0TWF0Y2gobWF0Y2gpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoaXNHcm91cE1hdGNoKG1hdGNoKSkge1xuICAgIHJldHVybiAnbWF0Y2gtc2NvcmUuZ3JvdXBzLnN1Yi1saW5lJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTWF0Y2hTY29yZSA9IChtYXRjaDogTWF0Y2hMaXN0VmlldyB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBob21lOiB7XG4gICAgICBzY29yZTogbWF0Y2guaG9tZVNjb3JlPy5vd25Qb2ludHMgfHwgMCxcbiAgICAgIGlzV2lubmVyOiBtYXRjaC5ob21lU2NvcmU/LnN0YXR1cyA9PT0gJ3dvbicsXG4gICAgfSxcbiAgICBhd2F5OiB7XG4gICAgICBzY29yZTogbWF0Y2guYXdheVNjb3JlPy5vd25Qb2ludHMgfHwgMCxcbiAgICAgIGlzV2lubmVyOiBtYXRjaC5hd2F5U2NvcmU/LnN0YXR1cyA9PT0gJ3dvbicsXG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cE1hdGNoUG9pbnRzID0gKG1hdGNoOiBNYXRjaExpc3RWaWV3IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhvbWU6IHtcbiAgICAgIHNjb3JlOiBtYXRjaC5ob21lU2NvcmU/LnNjb3JlIHx8IDAsXG4gICAgICBpc1dpbm5lcjogbWF0Y2guaG9tZVNjb3JlPy5zdGF0dXMgPT09ICd3b24nLFxuICAgIH0sXG4gICAgYXdheToge1xuICAgICAgc2NvcmU6IG1hdGNoLmF3YXlTY29yZT8uc2NvcmUgfHwgMCxcbiAgICAgIGlzV2lubmVyOiBtYXRjaC5hd2F5U2NvcmU/LnN0YXR1cyA9PT0gJ3dvbicsXG4gICAgfSxcbiAgfTtcbn07XG4iXX0=","import { Pipe } from '@angular/core';\nimport { normalizeMatchScore } from './normalize-match-score.util';\nimport * as i0 from \"@angular/core\";\nexport class NormalizeMatchScorePipe {\n constructor() {\n this.transform = normalizeMatchScore;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchScorePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchScorePipe, isStandalone: true, name: \"etNormalizeMatchScore\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchScorePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'etNormalizeMatchScore', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXNjb3JlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtc2NvcmUvbm9ybWFsaXplLW1hdGNoLXNjb3JlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR25FLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFRSxjQUFTLEdBQUcsbUJBQW1CLENBQUM7S0FDakM7OEdBRlksdUJBQXVCOzRHQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoU2NvcmUgfSBmcm9tICcuL25vcm1hbGl6ZS1tYXRjaC1zY29yZS51dGlsJztcblxuQFBpcGUoeyBuYW1lOiAnZXROb3JtYWxpemVNYXRjaFNjb3JlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoU2NvcmVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSA9IG5vcm1hbGl6ZU1hdGNoU2NvcmU7XG59XG4iXX0=","export const normalizeMatchType = (matchType) => {\n if (!matchType) {\n return null;\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 }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXR5cGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL25vcm1hbGl6ZS1tYXRjaC10eXBlL25vcm1hbGl6ZS1tYXRjaC10eXBlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxTQUF1QyxFQUF1QixFQUFFO0lBQ2pHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsU0FBUyxFQUFFLENBQUM7UUFDbEIsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTztnQkFDTCxJQUFJLEVBQUUsK0JBQStCO2dCQUNyQyxJQUFJLEVBQUUsb0JBQW9CO2FBQzNCLENBQUM7UUFDSixLQUFLLG9CQUFvQjtZQUN2QixPQUFPO2dCQUNMLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLElBQUksRUFBRSxvQkFBb0I7YUFDM0IsQ0FBQztRQUNKLEtBQUssWUFBWTtZQUNmLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsSUFBSSxFQUFFLFlBQVk7YUFDbkIsQ0FBQztRQUNKLEtBQUssUUFBUTtZQUNYLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDO1FBQ0osS0FBSyxRQUFRO1lBQ1gsT0FBTztnQkFDTCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixJQUFJLEVBQUUsUUFBUTthQUNmLENBQUM7UUFDSixLQUFLLE9BQU87WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxPQUFPO2FBQ2QsQ0FBQztJQUNOLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFnZVR5cGUgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGFibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVNYXRjaFR5cGUgPSAobWF0Y2hUeXBlOiBTdGFnZVR5cGUgfCBudWxsIHwgdW5kZWZpbmVkKTogVHJhbnNsYXRhYmxlIHwgbnVsbCA9PiB7XG4gIGlmICghbWF0Y2hUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKG1hdGNoVHlwZSkge1xuICAgIGNhc2UgJ2RvdWJsZV9lbGltaW5hdGlvbic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpMThuOiAnbWF0Y2gtdHlwZS5kb3VibGUtZWxpbWluYXRpb24nLFxuICAgICAgICB0ZXh0OiAnRG91YmxlIEVsaW1pbmF0aW9uJyxcbiAgICAgIH07XG4gICAgY2FzZSAnc2luZ2xlX2VsaW1pbmF0aW9uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGkxOG46ICdtYXRjaC10eXBlLnNpbmdsZS1lbGltaW5hdGlvbicsXG4gICAgICAgIHRleHQ6ICdTaW5nbGUgRWxpbWluYXRpb24nLFxuICAgICAgfTtcbiAgICBjYXNlICdmaWZhX3N3aXNzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGkxOG46ICdtYXRjaC10eXBlLmZpZmEtc3dpc3MnLFxuICAgICAgICB0ZXh0OiAnRklGQSBTd2lzcycsXG4gICAgICB9O1xuICAgIGNhc2UgJ2dyb3Vwcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpMThuOiAnbWF0Y2gtdHlwZS5ncm91cHMnLFxuICAgICAgICB0ZXh0OiAnR3JvdXBzJyxcbiAgICAgIH07XG4gICAgY2FzZSAnbGVhZ3VlJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGkxOG46ICdtYXRjaC10eXBlLmxlYWd1ZScsXG4gICAgICAgIHRleHQ6ICdMZWFndWUnLFxuICAgICAgfTtcbiAgICBjYXNlICdwb29scyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpMThuOiAnbWF0Y2gtdHlwZS5wb29scycsXG4gICAgICAgIHRleHQ6ICdQb29scycsXG4gICAgICB9O1xuICB9XG59O1xuIl19","import { Pipe } from '@angular/core';\nimport { normalizeMatchType } from './normalize-match-type.util';\nimport * as i0 from \"@angular/core\";\nexport class NormalizeMatchTypePipe {\n constructor() {\n this.transform = normalizeMatchType;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchTypePipe, isStandalone: true, name: \"etNormalizeMatchType\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NormalizeMatchTypePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'etNormalizeMatchType', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXR5cGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL25vcm1hbGl6ZS1tYXRjaC10eXBlL25vcm1hbGl6ZS1tYXRjaC10eXBlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBR2pFLE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFFRSxjQUFTLEdBQUcsa0JBQWtCLENBQUM7S0FDaEM7OEdBRlksc0JBQXNCOzRHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRGxDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoVHlwZSB9IGZyb20gJy4vbm9ybWFsaXplLW1hdGNoLXR5cGUudXRpbCc7XG5cbkBQaXBlKHsgbmFtZTogJ2V0Tm9ybWFsaXplTWF0Y2hUeXBlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoVHlwZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gbm9ybWFsaXplTWF0Y2hUeXBlO1xufVxuIl19","export const toArray = (value) => {\n return Array.from({ length: value }, (_, i) => i);\n};\nexport const toArrayTrackByFn = (_, item) => item;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tYXJyYXkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL3RvLWFycmF5L3RvLWFycmF5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDdkMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTRCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhY2tCeUZ1bmN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCB0b0FycmF5ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlIH0sIChfLCBpKSA9PiBpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b0FycmF5VHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248bnVtYmVyPiA9IChfLCBpdGVtKSA9PiBpdGVtO1xuIl19","import { Pipe } from '@angular/core';\nimport { toArray } from './to-array.util';\nimport * as i0 from \"@angular/core\";\nexport class ToArrayPipe {\n constructor() {\n this.transform = toArray;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: \"toArray\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: ToArrayPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'toArray', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tYXJyYXkucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL3RvLWFycmF5L3RvLWFycmF5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUcxQyxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVFLGNBQVMsR0FBRyxPQUFPLENBQUM7S0FDckI7OEdBRlksV0FBVzs0R0FBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdG8tYXJyYXkudXRpbCc7XG5cbkBQaXBlKHsgbmFtZTogJ3RvQXJyYXknLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgVG9BcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gdG9BcnJheTtcbn1cbiJdfQ==","import { ElementRef, inject } from '@angular/core';\nimport { createComponentId, signalHostAttributes, signalHostClasses, signalHostStyles } from '../utils';\nexport const createPropHandlers = () => {\n const id = createComponentId('et-props');\n const elementRef = inject(ElementRef);\n const classes = signalHostClasses({});\n const attributes = signalHostAttributes({});\n const styles = signalHostStyles({});\n return {\n classes,\n attributes,\n styles,\n id,\n elementRef,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb3AtaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wcm9wcy9jcmVhdGUtcHJvcC1oYW5kbGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxFQUFFO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7SUFFL0QsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEMsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFcEMsT0FBTztRQUNMLE9BQU87UUFDUCxVQUFVO1FBQ1YsTUFBTTtRQUNOLEVBQUU7UUFDRixVQUFVO0tBQ1gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9uZW50SWQsIHNpZ25hbEhvc3RBdHRyaWJ1dGVzLCBzaWduYWxIb3N0Q2xhc3Nlcywgc2lnbmFsSG9zdFN0eWxlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb3BIYW5kbGVycyA9ICgpID0+IHtcbiAgY29uc3QgaWQgPSBjcmVhdGVDb21wb25lbnRJZCgnZXQtcHJvcHMnKTtcblxuICBjb25zdCBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBjb25zdCBjbGFzc2VzID0gc2lnbmFsSG9zdENsYXNzZXMoe30pO1xuICBjb25zdCBhdHRyaWJ1dGVzID0gc2lnbmFsSG9zdEF0dHJpYnV0ZXMoe30pO1xuICBjb25zdCBzdHlsZXMgPSBzaWduYWxIb3N0U3R5bGVzKHt9KTtcblxuICByZXR1cm4ge1xuICAgIGNsYXNzZXMsXG4gICAgYXR0cmlidXRlcyxcbiAgICBzdHlsZXMsXG4gICAgaWQsXG4gICAgZWxlbWVudFJlZixcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BIYW5kbGVycyA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVByb3BIYW5kbGVycz47XG4iXX0=","import { computed, signal } from '@angular/core';\nexport const createElementDictionary = () => {\n const dictionary = {\n ids: signal([]),\n elements: signal({}),\n };\n const firstElement = computed(() => {\n const id = dictionary.ids()[0];\n return id ? (dictionary.elements()[id] ?? null) : null;\n }, ...(ngDevMode ? [{ debugName: \"firstElement\" }] : []));\n const firstId = computed(() => {\n const id = dictionary.ids()[0];\n return id ?? null;\n }, ...(ngDevMode ? [{ debugName: \"firstId\" }] : []));\n const ids = computed(() => dictionary.ids(), ...(ngDevMode ? [{ debugName: \"ids\" }] : []));\n const elements = computed(() => ids().map((id) => dictionary.elements()[id]), ...(ngDevMode ? [{ debugName: \"elements\" }] : []));\n const isEmpty = computed(() => dictionary.ids().length === 0, ...(ngDevMode ? [{ debugName: \"isEmpty\" }] : []));\n const has = (id) => {\n return dictionary.ids().includes(id);\n };\n const push = (id, element) => {\n dictionary.ids.set([...dictionary.ids(), id]);\n dictionary.elements.set({ ...dictionary.elements(), [id]: element });\n };\n const remove = (id) => {\n dictionary.ids.set(dictionary.ids().filter((i) => i !== id));\n dictionary.elements.set(Object.fromEntries(Object.entries(dictionary.elements()).filter(([k]) => k !== id)));\n };\n const get = (id) => {\n return dictionary.elements()[id] ?? null;\n };\n return {\n ids,\n elements,\n has,\n get,\n push,\n remove,\n isEmpty,\n firstElement,\n firstId,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvcHMvZWxlbWVudC1kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtJQUMxQyxNQUFNLFVBQVUsR0FBRztRQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFXLEVBQUUsQ0FBQztRQUN6QixRQUFRLEVBQUUsTUFBTSxDQUE4QixFQUFFLENBQUM7S0FDbEQsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDakMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pELENBQUMsd0RBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQztJQUNwQixDQUFDLG1EQUFDLENBQUM7SUFFSCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSwrQ0FBQyxDQUFDO0lBQzdDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUUsQ0FBQyxvREFBQyxDQUFDO0lBRS9FLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsbURBQUMsQ0FBQztJQUU5RCxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFO1FBQ3pCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxDQUFDLEVBQVUsRUFBRSxPQUFvQixFQUFFLEVBQUU7UUFDaEQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUU7UUFDNUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRTtRQUN6QixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLEdBQUc7UUFDSCxRQUFRO1FBQ1IsR0FBRztRQUNILEdBQUc7UUFDSCxJQUFJO1FBQ0osTUFBTTtRQUNOLE9BQU87UUFDUCxZQUFZO1FBQ1osT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFbGVtZW50RGljdGlvbmFyeSA9ICgpID0+IHtcbiAgY29uc3QgZGljdGlvbmFyeSA9IHtcbiAgICBpZHM6IHNpZ25hbDxzdHJpbmdbXT4oW10pLFxuICAgIGVsZW1lbnRzOiBzaWduYWw8UmVjb3JkPHN0cmluZywgSFRNTEVsZW1lbnQ+Pih7fSksXG4gIH07XG5cbiAgY29uc3QgZmlyc3RFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZGljdGlvbmFyeS5pZHMoKVswXTtcbiAgICByZXR1cm4gaWQgPyAoZGljdGlvbmFyeS5lbGVtZW50cygpW2lkXSA/PyBudWxsKSA6IG51bGw7XG4gIH0pO1xuXG4gIGNvbnN0IGZpcnN0SWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaWQgPSBkaWN0aW9uYXJ5LmlkcygpWzBdO1xuICAgIHJldHVybiBpZCA/PyBudWxsO1xuICB9KTtcblxuICBjb25zdCBpZHMgPSBjb21wdXRlZCgoKSA9PiBkaWN0aW9uYXJ5LmlkcygpKTtcbiAgY29uc3QgZWxlbWVudHMgPSBjb21wdXRlZCgoKSA9PiBpZHMoKS5tYXAoKGlkKSA9PiBkaWN0aW9uYXJ5LmVsZW1lbnRzKClbaWRdISkpO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiBkaWN0aW9uYXJ5LmlkcygpLmxlbmd0aCA9PT0gMCk7XG5cbiAgY29uc3QgaGFzID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gZGljdGlvbmFyeS5pZHMoKS5pbmNsdWRlcyhpZCk7XG4gIH07XG5cbiAgY29uc3QgcHVzaCA9IChpZDogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGRpY3Rpb25hcnkuaWRzLnNldChbLi4uZGljdGlvbmFyeS5pZHMoKSwgaWRdKTtcbiAgICBkaWN0aW9uYXJ5LmVsZW1lbnRzLnNldCh7IC4uLmRpY3Rpb25hcnkuZWxlbWVudHMoKSwgW2lkXTogZWxlbWVudCB9KTtcbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIGRpY3Rpb25hcnkuaWRzLnNldChkaWN0aW9uYXJ5LmlkcygpLmZpbHRlcigoaSkgPT4gaSAhPT0gaWQpKTtcbiAgICBkaWN0aW9uYXJ5LmVsZW1lbnRzLnNldChPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZGljdGlvbmFyeS5lbGVtZW50cygpKS5maWx0ZXIoKFtrXSkgPT4gayAhPT0gaWQpKSk7XG4gIH07XG5cbiAgY29uc3QgZ2V0ID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gZGljdGlvbmFyeS5lbGVtZW50cygpW2lkXSA/PyBudWxsO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgaWRzLFxuICAgIGVsZW1lbnRzLFxuICAgIGhhcyxcbiAgICBnZXQsXG4gICAgcHVzaCxcbiAgICByZW1vdmUsXG4gICAgaXNFbXB0eSxcbiAgICBmaXJzdEVsZW1lbnQsXG4gICAgZmlyc3RJZCxcbiAgfTtcbn07XG4iXX0=","export const bindProps = (config) => {\n const props = config.props;\n const { attachEventListeners, classBindings, attributeBindings, styleBindings, staticAttributeBindings, staticClassBindings, staticStyleBindings, attached, single, name, bindId, attachedElements, } = props;\n const { attributes, classes, elementRef, id, styles } = config.handlers;\n const el = elementRef.nativeElement;\n if (attached()) {\n if (attachedElements.has(id)) {\n return;\n }\n else if (single) {\n const firstAttachedRefElement = attachedElements.first();\n console.error(`[${name}] These props can only be attached to a single element at a time.\\n\\n Already attached to \\n`, firstAttachedRefElement, '\\n Trying to attach to \\n', el);\n return;\n }\n }\n attachedElements.push(id, el);\n if (bindId) {\n el.id = id;\n }\n if (classBindings) {\n classes.pushMany(classBindings);\n }\n if (attributeBindings) {\n attributes.pushMany(attributeBindings);\n }\n if (styleBindings) {\n styles.pushMany(styleBindings);\n }\n if (staticAttributeBindings) {\n for (const key in staticAttributeBindings) {\n el.setAttribute(key, `${staticAttributeBindings[key]}`);\n }\n }\n if (staticClassBindings) {\n el.classList.add(...staticClassBindings);\n }\n if (staticStyleBindings) {\n for (const key in staticStyleBindings) {\n el.style.setProperty(key, `${staticStyleBindings[key]}`);\n }\n }\n if (attachEventListeners) {\n attachEventListeners({\n on: el.addEventListener.bind(el),\n element: el,\n });\n }\n};\nexport const unbindProps = (config) => {\n const props = config.props;\n props.attachedElements.remove(config.handlers.id);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcHMtYmluZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Byb3BzL3Byb3BzLWJpbmRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBd0IsRUFBRSxFQUFFO0lBQ3BELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFzQixDQUFDO0lBQzVDLE1BQU0sRUFDSixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osTUFBTSxFQUNOLGdCQUFnQixHQUNqQixHQUFHLEtBQUssQ0FBQztJQUVWLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUN4RSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBRXBDLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNmLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFekQsT0FBTyxDQUFDLEtBQUssQ0FDWCxJQUFJLElBQUksOEZBQThGLEVBQ3RHLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IsRUFBRSxDQUNILENBQUM7WUFFRixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTlCLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixVQUFVLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUMxQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN4QixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDdEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3pCLG9CQUFvQixDQUFDO1lBQ25CLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUM7QUFPRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7SUFDeEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQXNCLENBQUM7SUFFNUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BIYW5kbGVycyB9IGZyb20gJy4vY3JlYXRlLXByb3AtaGFuZGxlcnMnO1xuaW1wb3J0IHsgUHJvcHMsIFByb3BzSW50ZXJuYWwgfSBmcm9tICcuL2NyZWF0ZS1wcm9wcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluZFByb3BzT3B0aW9ucyB7XG4gIHByb3BzOiBQcm9wcyB8IFByb3BzSW50ZXJuYWw7XG4gIGhhbmRsZXJzOiBQcm9wSGFuZGxlcnM7XG59XG5cbmV4cG9ydCBjb25zdCBiaW5kUHJvcHMgPSAoY29uZmlnOiBCaW5kUHJvcHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHByb3BzID0gY29uZmlnLnByb3BzIGFzIFByb3BzSW50ZXJuYWw7XG4gIGNvbnN0IHtcbiAgICBhdHRhY2hFdmVudExpc3RlbmVycyxcbiAgICBjbGFzc0JpbmRpbmdzLFxuICAgIGF0dHJpYnV0ZUJpbmRpbmdzLFxuICAgIHN0eWxlQmluZGluZ3MsXG4gICAgc3RhdGljQXR0cmlidXRlQmluZGluZ3MsXG4gICAgc3RhdGljQ2xhc3NCaW5kaW5ncyxcbiAgICBzdGF0aWNTdHlsZUJpbmRpbmdzLFxuICAgIGF0dGFjaGVkLFxuICAgIHNpbmdsZSxcbiAgICBuYW1lLFxuICAgIGJpbmRJZCxcbiAgICBhdHRhY2hlZEVsZW1lbnRzLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjbGFzc2VzLCBlbGVtZW50UmVmLCBpZCwgc3R5bGVzIH0gPSBjb25maWcuaGFuZGxlcnM7XG4gIGNvbnN0IGVsID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gIGlmIChhdHRhY2hlZCgpKSB7XG4gICAgaWYgKGF0dGFjaGVkRWxlbWVudHMuaGFzKGlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoc2luZ2xlKSB7XG4gICAgICBjb25zdCBmaXJzdEF0dGFjaGVkUmVmRWxlbWVudCA9IGF0dGFjaGVkRWxlbWVudHMuZmlyc3QoKTtcblxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske25hbWV9XSBUaGVzZSBwcm9wcyBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBhIHNpbmdsZSBlbGVtZW50IGF0IGEgdGltZS5cXG5cXG4gQWxyZWFkeSBhdHRhY2hlZCB0byBcXG5gLFxuICAgICAgICBmaXJzdEF0dGFjaGVkUmVmRWxlbWVudCxcbiAgICAgICAgJ1xcbiBUcnlpbmcgdG8gYXR0YWNoIHRvIFxcbicsXG4gICAgICAgIGVsLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaGVkRWxlbWVudHMucHVzaChpZCwgZWwpO1xuXG4gIGlmIChiaW5kSWQpIHtcbiAgICBlbC5pZCA9IGlkO1xuICB9XG5cbiAgaWYgKGNsYXNzQmluZGluZ3MpIHtcbiAgICBjbGFzc2VzLnB1c2hNYW55KGNsYXNzQmluZGluZ3MpO1xuICB9XG5cbiAgaWYgKGF0dHJpYnV0ZUJpbmRpbmdzKSB7XG4gICAgYXR0cmlidXRlcy5wdXNoTWFueShhdHRyaWJ1dGVCaW5kaW5ncyk7XG4gIH1cblxuICBpZiAoc3R5bGVCaW5kaW5ncykge1xuICAgIHN0eWxlcy5wdXNoTWFueShzdHlsZUJpbmRpbmdzKTtcbiAgfVxuXG4gIGlmIChzdGF0aWNBdHRyaWJ1dGVCaW5kaW5ncykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0YXRpY0F0dHJpYnV0ZUJpbmRpbmdzKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBgJHtzdGF0aWNBdHRyaWJ1dGVCaW5kaW5nc1trZXldfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0aWNDbGFzc0JpbmRpbmdzKSB7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCguLi5zdGF0aWNDbGFzc0JpbmRpbmdzKTtcbiAgfVxuXG4gIGlmIChzdGF0aWNTdHlsZUJpbmRpbmdzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3RhdGljU3R5bGVCaW5kaW5ncykge1xuICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBgJHtzdGF0aWNTdHlsZUJpbmRpbmdzW2tleV19YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGF0dGFjaEV2ZW50TGlzdGVuZXJzKSB7XG4gICAgYXR0YWNoRXZlbnRMaXN0ZW5lcnMoe1xuICAgICAgb246IGVsLmFkZEV2ZW50TGlzdGVuZXIuYmluZChlbCksXG4gICAgICBlbGVtZW50OiBlbCxcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBVbmJpbmRQcm9wc09wdGlvbnMge1xuICBwcm9wczogUHJvcHMgfCBQcm9wc0ludGVybmFsO1xuICBoYW5kbGVyczogUHJvcEhhbmRsZXJzO1xufVxuXG5leHBvcnQgY29uc3QgdW5iaW5kUHJvcHMgPSAoY29uZmlnOiBVbmJpbmRQcm9wc09wdGlvbnMpID0+IHtcbiAgY29uc3QgcHJvcHMgPSBjb25maWcucHJvcHMgYXMgUHJvcHNJbnRlcm5hbDtcblxuICBwcm9wcy5hdHRhY2hlZEVsZW1lbnRzLnJlbW92ZShjb25maWcuaGFuZGxlcnMuaWQpO1xufTtcbiJdfQ==","import { DestroyRef, afterNextRender, computed, inject } from '@angular/core';\nimport { createPropHandlers } from './create-prop-handlers';\nimport { createElementDictionary } from './element-dictionary';\nimport { bindProps, unbindProps } from './props-binding';\nexport const createProps = (props) => {\n const { bindId = false, single = true, classes: classBindings, attributes: attributeBindings, styles: styleBindings, staticAttributes: staticAttributeBindings = null, staticClasses: staticClassBindings = null, staticStyles: staticStyleBindings = null, listeners, name, } = props;\n const dictionary = createElementDictionary();\n const attached = computed(() => !dictionary.isEmpty(), ...(ngDevMode ? [{ debugName: \"attached\" }] : []));\n const attachedElements = {\n first: dictionary.firstElement,\n firstId: dictionary.firstId,\n has: dictionary.has,\n push: dictionary.push,\n remove: dictionary.remove,\n get: dictionary.get,\n };\n const data = {\n name,\n single,\n bindId,\n attached,\n attachedElements,\n classBindings: classBindings ?? null,\n attributeBindings: attributeBindings ?? null,\n styleBindings: styleBindings ?? null,\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n attachEventListeners: listeners ?? null,\n };\n return data;\n};\nexport const createHostProps = (props) => {\n const data = createProps(props);\n const handlers = createPropHandlers();\n afterNextRender({\n write: () => {\n bindProps({\n handlers,\n props: data,\n });\n },\n });\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => {\n unbindProps({\n handlers,\n props: data,\n });\n });\n return { props: data, handlers };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvcHMvY3JlYXRlLXByb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFtRHpELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXlCLEVBQVMsRUFBRTtJQUM5RCxNQUFNLEVBQ0osTUFBTSxHQUFHLEtBQUssRUFDZCxNQUFNLEdBQUcsSUFBSSxFQUNiLE9BQU8sRUFBRSxhQUFhLEVBQ3RCLFVBQVUsRUFBRSxpQkFBaUIsRUFDN0IsTUFBTSxFQUFFLGFBQWEsRUFDckIsZ0JBQWdCLEVBQUUsdUJBQXVCLEdBQUcsSUFBSSxFQUNoRCxhQUFhLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxFQUN6QyxZQUFZLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxFQUN4QyxTQUFTLEVBQ1QsSUFBSSxHQUNMLEdBQUcsS0FBSyxDQUFDO0lBRVYsTUFBTSxVQUFVLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLG9EQUFDLENBQUM7SUFFdkQsTUFBTSxnQkFBZ0IsR0FBa0M7UUFDdEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxZQUFZO1FBQzlCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztRQUUzQixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUc7UUFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1FBQ3JCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUc7S0FDcEIsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFrQjtRQUMxQixJQUFJO1FBQ0osTUFBTTtRQUNOLE1BQU07UUFFTixRQUFRO1FBQ1IsZ0JBQWdCO1FBRWhCLGFBQWEsRUFBRSxhQUFhLElBQUksSUFBSTtRQUNwQyxpQkFBaUIsRUFBRSxpQkFBaUIsSUFBSSxJQUFJO1FBQzVDLGFBQWEsRUFBRSxhQUFhLElBQUksSUFBSTtRQUVwQyx1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUVuQixvQkFBb0IsRUFBRSxTQUFTLElBQUksSUFBSTtLQUN4QyxDQUFDO0lBRUYsT0FBTyxJQUFhLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBT0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBeUIsRUFBYSxFQUFFO0lBQ3RFLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBRXRDLGVBQWUsQ0FBQztRQUNkLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDVixTQUFTLENBQUM7Z0JBQ1IsUUFBUTtnQkFDUixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDeEIsV0FBVyxDQUFDO1lBQ1YsUUFBUTtZQUNSLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNuQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBTaWduYWwsIGFmdGVyTmV4dFJlbmRlciwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvcEhhbmRsZXJzLCBjcmVhdGVQcm9wSGFuZGxlcnMgfSBmcm9tICcuL2NyZWF0ZS1wcm9wLWhhbmRsZXJzJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnREaWN0aW9uYXJ5IH0gZnJvbSAnLi9lbGVtZW50LWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgYmluZFByb3BzLCB1bmJpbmRQcm9wcyB9IGZyb20gJy4vcHJvcHMtYmluZGluZyc7XG5cbmV4cG9ydCB0eXBlIFByb3BzID0gUmVhZG9ubHk8e1xuICBhdHRhY2hlZDogU2lnbmFsPGJvb2xlYW4+O1xuICBhdHRhY2hlZEVsZW1lbnRzOiBQcm9wc0F0dGFjaGVkRWxlbWVudHM7XG59PjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wc0F0dGFjaGVkRWxlbWVudHMge1xuICBmaXJzdDogU2lnbmFsPEhUTUxFbGVtZW50IHwgbnVsbD47XG4gIGZpcnN0SWQ6IFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgZ2V0KGlkOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcHNBdHRhY2hlZEVsZW1lbnRzSW50ZXJuYWwgZXh0ZW5kcyBQcm9wc0F0dGFjaGVkRWxlbWVudHMge1xuICBoYXM6IChpZDogc3RyaW5nKSA9PiBib29sZWFuO1xuICBwdXNoOiAoaWQ6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG4gIHJlbW92ZTogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcHNJbnRlcm5hbCB7XG4gIHNpbmdsZTogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICBiaW5kSWQ6IGJvb2xlYW47XG5cbiAgYXR0YWNoZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgYXR0YWNoZWRFbGVtZW50czogUHJvcHNBdHRhY2hlZEVsZW1lbnRzSW50ZXJuYWw7XG5cbiAgY2xhc3NCaW5kaW5nczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PiB8IG51bGw7XG4gIGF0dHJpYnV0ZUJpbmRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+IHwgbnVsbDtcbiAgc3R5bGVCaW5kaW5nczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PiB8IG51bGw7XG5cbiAgc3RhdGljQ2xhc3NCaW5kaW5nczogc3RyaW5nW10gfCBudWxsO1xuICBzdGF0aWNBdHRyaWJ1dGVCaW5kaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICBzdGF0aWNTdHlsZUJpbmRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG5cbiAgYXR0YWNoRXZlbnRMaXN0ZW5lcnM6ICgoY29udGV4dDogeyBvbjogSFRNTEVsZW1lbnRbJ2FkZEV2ZW50TGlzdGVuZXInXTsgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCkgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVByb3BzT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgYmluZElkPzogYm9vbGVhbjtcbiAgc2luZ2xlPzogYm9vbGVhbjtcbiAgY2xhc3Nlcz86IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj47XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+O1xuICBzdHlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+O1xuICBzdGF0aWNDbGFzc2VzPzogc3RyaW5nW107XG4gIHN0YXRpY0F0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3RhdGljU3R5bGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxpc3RlbmVycz86IChjb250ZXh0OiB7IG9uOiBIVE1MRWxlbWVudFsnYWRkRXZlbnRMaXN0ZW5lciddOyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUHJvcHMgPSAocHJvcHM6IENyZWF0ZVByb3BzT3B0aW9ucyk6IFByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGJpbmRJZCA9IGZhbHNlLFxuICAgIHNpbmdsZSA9IHRydWUsXG4gICAgY2xhc3NlczogY2xhc3NCaW5kaW5ncyxcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVCaW5kaW5ncyxcbiAgICBzdHlsZXM6IHN0eWxlQmluZGluZ3MsXG4gICAgc3RhdGljQXR0cmlidXRlczogc3RhdGljQXR0cmlidXRlQmluZGluZ3MgPSBudWxsLFxuICAgIHN0YXRpY0NsYXNzZXM6IHN0YXRpY0NsYXNzQmluZGluZ3MgPSBudWxsLFxuICAgIHN0YXRpY1N0eWxlczogc3RhdGljU3R5bGVCaW5kaW5ncyA9IG51bGwsXG4gICAgbGlzdGVuZXJzLFxuICAgIG5hbWUsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBkaWN0aW9uYXJ5ID0gY3JlYXRlRWxlbWVudERpY3Rpb25hcnkoKTtcbiAgY29uc3QgYXR0YWNoZWQgPSBjb21wdXRlZCgoKSA9PiAhZGljdGlvbmFyeS5pc0VtcHR5KCkpO1xuXG4gIGNvbnN0IGF0dGFjaGVkRWxlbWVudHM6IFByb3BzQXR0YWNoZWRFbGVtZW50c0ludGVybmFsID0ge1xuICAgIGZpcnN0OiBkaWN0aW9uYXJ5LmZpcnN0RWxlbWVudCxcbiAgICBmaXJzdElkOiBkaWN0aW9uYXJ5LmZpcnN0SWQsXG5cbiAgICBoYXM6IGRpY3Rpb25hcnkuaGFzLFxuICAgIHB1c2g6IGRpY3Rpb25hcnkucHVzaCxcbiAgICByZW1vdmU6IGRpY3Rpb25hcnkucmVtb3ZlLFxuICAgIGdldDogZGljdGlvbmFyeS5nZXQsXG4gIH07XG5cbiAgY29uc3QgZGF0YTogUHJvcHNJbnRlcm5hbCA9IHtcbiAgICBuYW1lLFxuICAgIHNpbmdsZSxcbiAgICBiaW5kSWQsXG5cbiAgICBhdHRhY2hlZCxcbiAgICBhdHRhY2hlZEVsZW1lbnRzLFxuXG4gICAgY2xhc3NCaW5kaW5nczogY2xhc3NCaW5kaW5ncyA/PyBudWxsLFxuICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBhdHRyaWJ1dGVCaW5kaW5ncyA/PyBudWxsLFxuICAgIHN0eWxlQmluZGluZ3M6IHN0eWxlQmluZGluZ3MgPz8gbnVsbCxcblxuICAgIHN0YXRpY0F0dHJpYnV0ZUJpbmRpbmdzLFxuICAgIHN0YXRpY0NsYXNzQmluZGluZ3MsXG4gICAgc3RhdGljU3R5bGVCaW5kaW5ncyxcblxuICAgIGF0dGFjaEV2ZW50TGlzdGVuZXJzOiBsaXN0ZW5lcnMgPz8gbnVsbCxcbiAgfTtcblxuICByZXR1cm4gZGF0YSBhcyBQcm9wcztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdFByb3BzIHtcbiAgcHJvcHM6IFByb3BzO1xuICBoYW5kbGVyczogUHJvcEhhbmRsZXJzO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlSG9zdFByb3BzID0gKHByb3BzOiBDcmVhdGVQcm9wc09wdGlvbnMpOiBIb3N0UHJvcHMgPT4ge1xuICBjb25zdCBkYXRhID0gY3JlYXRlUHJvcHMocHJvcHMpO1xuICBjb25zdCBoYW5kbGVycyA9IGNyZWF0ZVByb3BIYW5kbGVycygpO1xuXG4gIGFmdGVyTmV4dFJlbmRlcih7XG4gICAgd3JpdGU6ICgpID0+IHtcbiAgICAgIGJpbmRQcm9wcyh7XG4gICAgICAgIGhhbmRsZXJzLFxuICAgICAgICBwcm9wczogZGF0YSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIHVuYmluZFByb3BzKHtcbiAgICAgIGhhbmRsZXJzLFxuICAgICAgcHJvcHM6IGRhdGEsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IHByb3BzOiBkYXRhLCBoYW5kbGVycyB9O1xufTtcbiJdfQ==","import { afterNextRender } from '@angular/core';\nexport const createSetup = (config) => {\n let didCallSetup = false;\n afterNextRender(() => {\n if (!didCallSetup) {\n console.error('The setup() function was not called. Please call it inside your constructor.', config.this);\n return;\n }\n });\n return (params) => {\n if (didCallSetup) {\n console.error('The setup() function was already called. Please call it only once. \\n\\n', 'Instance containing the setup() call \\n', config.this, '\\n\\n Setup was called with\\n', params);\n return;\n }\n didCallSetup = true;\n config.setupFn(params);\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvcHMvY3JlYXRlLXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQW9DLE1BRzlELEVBQUUsRUFBRTtJQUNILElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUV6QixlQUFlLENBQUMsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLDhFQUE4RSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRyxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLE1BQVMsRUFBRSxFQUFFO1FBQ25CLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FDWCx5RUFBeUUsRUFDekUseUNBQXlDLEVBQ3pDLE1BQU0sQ0FBQyxJQUFJLEVBQ1gsOEJBQThCLEVBQzlCLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXR1cCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGNvbmZpZzoge1xuICBzZXR1cEZuOiAocGFyYW1zOiBUKSA9PiB2b2lkO1xuICB0aGlzOiBUaGlzVHlwZTx1bmtub3duPjtcbn0pID0+IHtcbiAgbGV0IGRpZENhbGxTZXR1cCA9IGZhbHNlO1xuXG4gIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgaWYgKCFkaWRDYWxsU2V0dXApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBzZXR1cCgpIGZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkLiBQbGVhc2UgY2FsbCBpdCBpbnNpZGUgeW91ciBjb25zdHJ1Y3Rvci4nLCBjb25maWcudGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gKHBhcmFtczogVCkgPT4ge1xuICAgIGlmIChkaWRDYWxsU2V0dXApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdUaGUgc2V0dXAoKSBmdW5jdGlvbiB3YXMgYWxyZWFkeSBjYWxsZWQuIFBsZWFzZSBjYWxsIGl0IG9ubHkgb25jZS4gXFxuXFxuJyxcbiAgICAgICAgJ0luc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHNldHVwKCkgY2FsbCBcXG4nLFxuICAgICAgICBjb25maWcudGhpcyxcbiAgICAgICAgJ1xcblxcbiBTZXR1cCB3YXMgY2FsbGVkIHdpdGhcXG4nLFxuICAgICAgICBwYXJhbXMsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZENhbGxTZXR1cCA9IHRydWU7XG4gICAgY29uZmlnLnNldHVwRm4ocGFyYW1zKTtcbiAgfTtcbn07XG4iXX0=","import { Injector, effect, inject, runInInjectionContext } from '@angular/core';\nexport const createDependencyStash = (stash) => {\n const injector = inject(Injector);\n const provideSignal = (data) => {\n runInInjectionContext(injector, () => {\n effect(() => {\n stash[data.for].set(data.signal());\n });\n });\n };\n const provideValue = (data) => {\n stash[data.for].set(data.value);\n };\n return {\n ...stash,\n provideSignal,\n provideValue,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1zdGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Byb3BzL2RlcGVuZGVuY3ktc3Rhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFvRCxLQUFRLEVBQUUsRUFBRTtJQUNuRyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEMsTUFBTSxhQUFhLEdBQUcsQ0FBb0IsSUFBa0QsRUFBRSxFQUFFO1FBQzlGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDbkMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBb0IsSUFBeUMsRUFBRSxFQUFFO1FBQ3BGLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsR0FBRyxLQUFLO1FBQ1IsYUFBYTtRQUNiLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIFNpZ25hbCwgV3JpdGFibGVTaWduYWwsIGVmZmVjdCwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlcGVuZGVuY3lTdGFzaCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgV3JpdGFibGVTaWduYWw8dW5rbm93bj4+PihzdGFzaDogVCkgPT4ge1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgY29uc3QgcHJvdmlkZVNpZ25hbCA9IDxLIGV4dGVuZHMga2V5b2YgVD4oZGF0YTogeyBzaWduYWw6IFNpZ25hbDxSZXR1cm5UeXBlPFRbS10+PjsgZm9yOiBLIH0pID0+IHtcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHN0YXNoW2RhdGEuZm9yXSEuc2V0KGRhdGEuc2lnbmFsKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcHJvdmlkZVZhbHVlID0gPEsgZXh0ZW5kcyBrZXlvZiBUPihkYXRhOiB7IHZhbHVlOiBSZXR1cm5UeXBlPFRbS10+OyBmb3I6IEsgfSkgPT4ge1xuICAgIHN0YXNoW2RhdGEuZm9yXSEuc2V0KGRhdGEudmFsdWUpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3Rhc2gsXG4gICAgcHJvdmlkZVNpZ25hbCxcbiAgICBwcm92aWRlVmFsdWUsXG4gIH07XG59O1xuIl19","import { DestroyRef, Directive, afterNextRender, inject, input } from '@angular/core';\nimport { createPropHandlers } from './create-prop-handlers';\nimport { bindProps, unbindProps } from './props-binding';\nimport * as i0 from \"@angular/core\";\nexport class PropsDirective {\n constructor() {\n this.destroyRef = inject(DestroyRef);\n this.props = input.required(...(ngDevMode ? [{ debugName: \"props\", alias: 'etProps', transform: (d) => d }] : [{ alias: 'etProps', transform: (d) => d }]));\n this.propHandlers = createPropHandlers();\n afterNextRender({\n write: () => {\n bindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n },\n });\n this.destroyRef.onDestroy(() => {\n unbindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: PropsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.0\", type: PropsDirective, isStandalone: true, selector: \"[etProps]\", inputs: { props: { classPropertyName: \"props\", publicName: \"etProps\", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: PropsDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etProps]',\n standalone: true,\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcHMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvcHMvcHJvcHMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBTXpELE1BQU0sT0FBTyxjQUFjO0lBT3pCO1FBTkEsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsd0NBQXlCLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFrQixPQUF4RCxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFrQixFQUFFLEdBQUMsQ0FBQztRQUV6RyxpQkFBWSxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFHbEMsZUFBZSxDQUFDO1lBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixTQUFTLENBQUM7b0JBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO29CQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtpQkFDcEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QixXQUFXLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdkJVLGNBQWM7a0dBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFKMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBhZnRlck5leHRSZW5kZXIsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVByb3BIYW5kbGVycyB9IGZyb20gJy4vY3JlYXRlLXByb3AtaGFuZGxlcnMnO1xuaW1wb3J0IHsgUHJvcHMsIFByb3BzSW50ZXJuYWwgfSBmcm9tICcuL2NyZWF0ZS1wcm9wcyc7XG5pbXBvcnQgeyBiaW5kUHJvcHMsIHVuYmluZFByb3BzIH0gZnJvbSAnLi9wcm9wcy1iaW5kaW5nJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0UHJvcHNdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvcHNEaXJlY3RpdmUge1xuICBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHByb3BzID0gaW5wdXQucmVxdWlyZWQ8UHJvcHNJbnRlcm5hbCwgUHJvcHM+KHsgYWxpYXM6ICdldFByb3BzJywgdHJhbnNmb3JtOiAoZCkgPT4gZCBhcyBQcm9wc0ludGVybmFsIH0pO1xuXG4gIHByb3BIYW5kbGVycyA9IGNyZWF0ZVByb3BIYW5kbGVycygpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcih7XG4gICAgICB3cml0ZTogKCkgPT4ge1xuICAgICAgICBiaW5kUHJvcHMoe1xuICAgICAgICAgIGhhbmRsZXJzOiB0aGlzLnByb3BIYW5kbGVycyxcbiAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcygpLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHVuYmluZFByb3BzKHtcbiAgICAgICAgaGFuZGxlcnM6IHRoaXMucHJvcEhhbmRsZXJzLFxuICAgICAgICBwcm9wczogdGhpcy5wcm9wcygpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","import { TemplateRef, computed } from '@angular/core';\nexport const templateComputed = (templateSignal) => computed(() => {\n const content = templateSignal();\n if (!content)\n return null;\n if (typeof content === 'string') {\n return {\n type: 'string',\n value: content,\n };\n }\n if (content instanceof TemplateRef) {\n return {\n type: 'template',\n value: content,\n injector: null,\n };\n }\n if ('component' in content) {\n return {\n type: 'component',\n value: content.component,\n inputs: content.inputs,\n injector: content.injector ?? null,\n };\n }\n if ('template' in content) {\n return {\n type: 'template',\n value: content.template,\n context: content.context,\n injector: content.injector ?? null,\n };\n }\n return {\n type: 'component',\n value: content,\n injector: null,\n };\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wcm9wcy90ZW1wbGF0ZS1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUF3Q3hFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsY0FBOEMsRUFBRSxFQUFFLENBQ2pGLFFBQVEsQ0FBQyxHQUFtRSxFQUFFO0lBQzVFLE1BQU0sT0FBTyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRWpDLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFMUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsT0FBTztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDbkMsT0FBTztZQUNMLElBQUksRUFBRSxVQUFVO1lBQ2hCLEtBQUssRUFBRSxPQUFPO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksV0FBVyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzNCLE9BQU87WUFDTCxJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDeEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUk7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSxXQUFXO1FBQ2pCLEtBQUssRUFBRSxPQUFPO1FBQ2QsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBJbmplY3RvciwgU2lnbmFsLCBUZW1wbGF0ZVJlZiwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgQW55VGVtcGxhdGVUeXBlID1cbiAgfCBzdHJpbmdcbiAgfCBUZW1wbGF0ZVJlZjx1bmtub3duPlxuICB8IENvbXBvbmVudFR5cGU8dW5rbm93bj5cbiAgfCBUZW1wbGF0ZVJlZldpdGhDb250ZXh0XG4gIHwgQ29tcG9uZW50VHlwZVdpdGhJbnB1dHM7XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUmVmV2l0aENvbnRleHQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLCBKID0gdW5rbm93bj4gPSB7XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxKPjtcbiAgY29udGV4dD86IFQ7XG4gIGluamVjdG9yPzogSW5qZWN0b3I7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnRUeXBlV2l0aElucHV0czxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsIEogPSB1bmtub3duPiA9IHtcbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEo+O1xuICBpbnB1dHM/OiBUO1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufTtcblxuZXhwb3J0IHR5cGUgU3RyaW5nVGVtcGxhdGUgPSB7XG4gIHR5cGU6ICdzdHJpbmcnO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTmdUZW1wbGF0ZVRlbXBsYXRlID0ge1xuICB0eXBlOiAndGVtcGxhdGUnO1xuICB2YWx1ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaW5qZWN0b3I6IEluamVjdG9yIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudFRlbXBsYXRlID0ge1xuICB0eXBlOiAnY29tcG9uZW50JztcbiAgdmFsdWU6IENvbXBvbmVudFR5cGU8dW5rbm93bj47XG4gIGlucHV0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpbmplY3RvcjogSW5qZWN0b3IgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRlbXBsYXRlQ29tcHV0ZWQgPSAodGVtcGxhdGVTaWduYWw6IFNpZ25hbDxBbnlUZW1wbGF0ZVR5cGUgfCBudWxsPikgPT5cbiAgY29tcHV0ZWQoKCk6IFN0cmluZ1RlbXBsYXRlIHwgTmdUZW1wbGF0ZVRlbXBsYXRlIHwgQ29tcG9uZW50VGVtcGxhdGUgfCBudWxsID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gdGVtcGxhdGVTaWduYWwoKTtcblxuICAgIGlmICghY29udGVudCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IGNvbnRlbnQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICd0ZW1wbGF0ZScsXG4gICAgICAgIHZhbHVlOiBjb250ZW50LFxuICAgICAgICBpbmplY3RvcjogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCdjb21wb25lbnQnIGluIGNvbnRlbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICB2YWx1ZTogY29udGVudC5jb21wb25lbnQsXG4gICAgICAgIGlucHV0czogY29udGVudC5pbnB1dHMsXG4gICAgICAgIGluamVjdG9yOiBjb250ZW50LmluamVjdG9yID8/IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgndGVtcGxhdGUnIGluIGNvbnRlbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICd0ZW1wbGF0ZScsXG4gICAgICAgIHZhbHVlOiBjb250ZW50LnRlbXBsYXRlLFxuICAgICAgICBjb250ZXh0OiBjb250ZW50LmNvbnRleHQsXG4gICAgICAgIGluamVjdG9yOiBjb250ZW50LmluamVjdG9yID8/IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgIHZhbHVlOiBjb250ZW50LFxuICAgICAgaW5qZWN0b3I6IG51bGwsXG4gICAgfTtcbiAgfSk7XG4iXX0=","import { QueryList } from '@angular/core';\nexport class TypedQueryList extends QueryList {\n get changes() {\n return super.changes;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3R5cGVzL2FuZ3VsYXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQXNCaEQsTUFBTSxPQUFPLGNBQWtCLFNBQVEsU0FBWTtJQUNqRCxJQUFhLE9BQU87UUFDbEIsT0FBTyxLQUFLLENBQUMsT0FBd0MsQ0FBQztJQUN4RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeUxpc3QsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgTmdDbGFzc1R5cGUgPVxuICB8IHN0cmluZ1xuICB8IHN0cmluZ1tdXG4gIHwgU2V0PHN0cmluZz5cbiAgfCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgW2tsYXNzOiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICB8IG51bGxcbiAgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIEhvc3REaXJlY3RpdmUgPVxuICB8IFR5cGU8dW5rbm93bj5cbiAgfCB7XG4gICAgICBkaXJlY3RpdmU6IFR5cGU8dW5rbm93bj47XG4gICAgICBpbnB1dHM/OiBzdHJpbmdbXTtcbiAgICAgIG91dHB1dHM/OiBzdHJpbmdbXTtcbiAgICB9O1xuXG5leHBvcnQgY2xhc3MgVHlwZWRRdWVyeUxpc3Q8VD4gZXh0ZW5kcyBRdWVyeUxpc3Q8VD4ge1xuICBvdmVycmlkZSBnZXQgY2hhbmdlcygpOiBPYnNlcnZhYmxlPFR5cGVkUXVlcnlMaXN0PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLmNoYW5nZXMgYXMgT2JzZXJ2YWJsZTxUeXBlZFF1ZXJ5TGlzdDxUPj47XG4gIH1cbn1cbiJdfQ==","export const AT_LEAST_ONE_REQUIRED = 'atLeastOneRequired';\nexport const ValidateAtLeastOneRequired = (config) => {\n return (formGroup) => {\n const { keys, checkFalse } = config;\n if (!formGroup) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n const controlValues = keys.map((key) => formGroup.get(key)?.value);\n const areAllFalsy = controlValues.every((value) => value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (checkFalse && value === false));\n if (areAllFalsy) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n return null;\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXQtbGVhc3Qtb25lLXJlcXVpcmVkLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3ZhbGlkYXRvcnMvYXQtbGVhc3Qtb25lLXJlcXVpcmVkLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztBQWUxRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLE1BQXdDLEVBQWUsRUFBRTtJQUNsRyxPQUFPLENBQUMsU0FBMEIsRUFBMkIsRUFBRTtRQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVwQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRW5FLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ3JDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLEtBQUssSUFBSTtZQUNkLEtBQUssS0FBSyxTQUFTO1lBQ25CLEtBQUssS0FBSyxFQUFFO1lBQ1osQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQzVDLENBQUMsVUFBVSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FDbEMsQ0FBQztRQUVGLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY29uc3QgQVRfTEVBU1RfT05FX1JFUVVJUkVEID0gJ2F0TGVhc3RPbmVSZXF1aXJlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVBdExlYXN0T25lUmVxdWlyZWRDb25maWcge1xuICAvKipcbiAgICogS2V5cyBvZiBmb3JtIGNvbnRyb2xzIHRvIHZhbGlkYXRlIGluIHRoZSBzdXBwbGllZCBmb3JtIGdyb3VwXG4gICAqL1xuICBrZXlzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIHZhbHVlIGBmYWxzZWAgd2lsbCByZXN1bHQgaW4gYSB2YWxpZGF0aW9uIGVycm9yXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjaGVja0ZhbHNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFZhbGlkYXRlQXRMZWFzdE9uZVJlcXVpcmVkID0gKGNvbmZpZzogVmFsaWRhdGVBdExlYXN0T25lUmVxdWlyZWRDb25maWcpOiBWYWxpZGF0b3JGbiA9PiB7XG4gIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgeyBrZXlzLCBjaGVja0ZhbHNlIH0gPSBjb25maWc7XG5cbiAgICBpZiAoIWZvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuIHsgW0FUX0xFQVNUX09ORV9SRVFVSVJFRF06IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sVmFsdWVzID0ga2V5cy5tYXAoKGtleSkgPT4gZm9ybUdyb3VwLmdldChrZXkpPy52YWx1ZSk7XG5cbiAgICBjb25zdCBhcmVBbGxGYWxzeSA9IGNvbnRyb2xWYWx1ZXMuZXZlcnkoXG4gICAgICAodmFsdWUpID0+XG4gICAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChjaGVja0ZhbHNlICYmIHZhbHVlID09PSBmYWxzZSksXG4gICAgKTtcblxuICAgIGlmIChhcmVBbGxGYWxzeSkge1xuICAgICAgcmV0dXJuIHsgW0FUX0xFQVNUX09ORV9SRVFVSVJFRF06IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn07XG4iXX0=","export const IS_ARRAY_NOT_EMPTY = 'isArrayNotEmpty';\nexport const IsArrayNotEmpty = (control) => {\n const value = control.value;\n if (!value) {\n return null;\n }\n return value.length > 0 ? null : { [IS_ARRAY_NOT_EMPTY]: true };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtYXJyYXktbm90LWVtcHR5LnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3ZhbGlkYXRvcnMvaXMtYXJyYXktbm90LWVtcHR5LnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUF3QixFQUEyQixFQUFFO0lBQ25GLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNsRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBJU19BUlJBWV9OT1RfRU1QVFkgPSAnaXNBcnJheU5vdEVtcHR5JztcblxuZXhwb3J0IGNvbnN0IElzQXJyYXlOb3RFbXB0eSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDAgPyBudWxsIDogeyBbSVNfQVJSQVlfTk9UX0VNUFRZXTogdHJ1ZSB9O1xufTtcbiJdfQ==","export const IS_EMAIL = 'isEmail';\nexport const IsEmail = (control) => {\n const value = control.value;\n if (!value) {\n return null;\n }\n const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/;\n return regex.test(value) ? null : { [IS_EMAIL]: true };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZW1haWwudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdmFsaWRhdG9ycy9pcy1lbWFpbC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUF3QixFQUEyQixFQUFFO0lBQzNFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcseUNBQXlDLENBQUM7SUFDeEQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBJU19FTUFJTCA9ICdpc0VtYWlsJztcblxuZXhwb3J0IGNvbnN0IElzRW1haWwgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHJlZ2V4ID0gL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsfSQvO1xuICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZSkgPyBudWxsIDogeyBbSVNfRU1BSUxdOiB0cnVlIH07XG59O1xuIl19","export const MUST_MATCH = 'mustMatch';\nexport const MustMatch = (controlName, matchingControlName) => {\n return (formGroup) => {\n const control = formGroup.get(controlName);\n const matchingControl = formGroup.get(matchingControlName);\n if (matchingControl?.errors && !matchingControl.errors[MUST_MATCH]) {\n return null;\n }\n if (control?.value !== matchingControl?.value) {\n matchingControl?.setErrors({ [MUST_MATCH]: true });\n return { [MUST_MATCH]: true };\n }\n else {\n matchingControl?.setErrors(null);\n return null;\n }\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVzdC1tYXRjaC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi92YWxpZGF0b3JzL211c3QtbWF0Y2gudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsV0FBbUIsRUFBRSxtQkFBMkIsRUFBRSxFQUFFO0lBQzVFLE9BQU8sQ0FBQyxTQUEwQixFQUFFLEVBQUU7UUFDcEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFM0QsSUFBSSxlQUFlLEVBQUUsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25FLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLEtBQUssS0FBSyxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDOUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY29uc3QgTVVTVF9NQVRDSCA9ICdtdXN0TWF0Y2gnO1xuXG5leHBvcnQgY29uc3QgTXVzdE1hdGNoID0gKGNvbnRyb2xOYW1lOiBzdHJpbmcsIG1hdGNoaW5nQ29udHJvbE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xuICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQobWF0Y2hpbmdDb250cm9sTmFtZSk7XG5cbiAgICBpZiAobWF0Y2hpbmdDb250cm9sPy5lcnJvcnMgJiYgIW1hdGNoaW5nQ29udHJvbC5lcnJvcnNbTVVTVF9NQVRDSF0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sPy52YWx1ZSAhPT0gbWF0Y2hpbmdDb250cm9sPy52YWx1ZSkge1xuICAgICAgbWF0Y2hpbmdDb250cm9sPy5zZXRFcnJvcnMoeyBbTVVTVF9NQVRDSF06IHRydWUgfSk7XG4gICAgICByZXR1cm4geyBbTVVTVF9NQVRDSF06IHRydWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hpbmdDb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG59O1xuIl19","import { ValidateAtLeastOneRequired } from './at-least-one-required.validator';\nimport { IsArrayNotEmpty } from './is-array-not-empty.validator';\nimport { IsEmail } from './is-email.validator';\nimport { MustMatch } from './must-match.validator';\nexport * from './at-least-one-required.validator';\nexport * from './is-array-not-empty.validator';\nexport * from './is-email.validator';\nexport * from './must-match.validator';\nexport const Validators = {\n MustMatch,\n IsEmail,\n IsArrayNotEmpty,\n ValidateAtLeastOneRequired,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi92YWxpZGF0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5ELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLFNBQVM7SUFDVCxPQUFPO0lBQ1AsZUFBZTtJQUNmLDBCQUEwQjtDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdGVBdExlYXN0T25lUmVxdWlyZWQgfSBmcm9tICcuL2F0LWxlYXN0LW9uZS1yZXF1aXJlZC52YWxpZGF0b3InO1xuaW1wb3J0IHsgSXNBcnJheU5vdEVtcHR5IH0gZnJvbSAnLi9pcy1hcnJheS1ub3QtZW1wdHkudmFsaWRhdG9yJztcbmltcG9ydCB7IElzRW1haWwgfSBmcm9tICcuL2lzLWVtYWlsLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBNdXN0TWF0Y2ggfSBmcm9tICcuL211c3QtbWF0Y2gudmFsaWRhdG9yJztcblxuZXhwb3J0ICogZnJvbSAnLi9hdC1sZWFzdC1vbmUtcmVxdWlyZWQudmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtYXJyYXktbm90LWVtcHR5LnZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2lzLWVtYWlsLnZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL211c3QtbWF0Y2gudmFsaWRhdG9yJztcblxuZXhwb3J0IGNvbnN0IFZhbGlkYXRvcnMgPSB7XG4gIE11c3RNYXRjaCxcbiAgSXNFbWFpbCxcbiAgSXNBcnJheU5vdEVtcHR5LFxuICBWYWxpZGF0ZUF0TGVhc3RPbmVSZXF1aXJlZCxcbn0gYXMgY29uc3Q7XG4iXX0=","export * from './lib/components/structured-data';\nexport * from './lib/constants';\nexport * from './lib/decorators/memo';\nexport * from './lib/directives/animatable';\nexport * from './lib/directives/animated-if';\nexport * from './lib/directives/animated-lifecycle';\nexport * from './lib/directives/animated-overlay';\nexport * from './lib/directives/click-outside';\nexport * from './lib/directives/cursor-drag-scroll';\nexport * from './lib/directives/debug';\nexport * from './lib/directives/delayable';\nexport * from './lib/directives/is-active-element';\nexport * from './lib/directives/is-element';\nexport * from './lib/directives/let';\nexport * from './lib/directives/observe-content';\nexport * from './lib/directives/observe-resize';\nexport * from './lib/directives/observe-scroll-state';\nexport * from './lib/directives/observe-visibility';\nexport * from './lib/directives/repeat';\nexport * from './lib/directives/root-boundary';\nexport * from './lib/directives/scroll-observer-first-element';\nexport * from './lib/directives/scroll-observer-ignore-target';\nexport * from './lib/directives/scroll-observer-last-element';\nexport * from './lib/directives/seo';\nexport * from './lib/pipes/infer-mime-type';\nexport * from './lib/pipes/normalize-game-result-type';\nexport * from './lib/pipes/normalize-match-participants';\nexport * from './lib/pipes/normalize-match-score';\nexport * from './lib/pipes/normalize-match-state';\nexport * from './lib/pipes/normalize-match-type';\nexport * from './lib/pipes/to-array';\nexport * from './lib/props';\nexport * from './lib/services';\nexport * from './lib/types';\nexport * from './lib/utils';\nexport * from './lib/validators';\n// Burst cache\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3N0cnVjdHVyZWQtZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVjb3JhdG9ycy9tZW1vJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYW5pbWF0YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2FuaW1hdGVkLWlmJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYW5pbWF0ZWQtbGlmZWN5Y2xlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYW5pbWF0ZWQtb3ZlcmxheSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jdXJzb3ItZHJhZy1zY3JvbGwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9kZWJ1Zyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2RlbGF5YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2lzLWFjdGl2ZS1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvaXMtZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2xldCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL29ic2VydmUtY29udGVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL29ic2VydmUtcmVzaXplJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvb2JzZXJ2ZS1zY3JvbGwtc3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXZpc2liaWxpdHknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yZXBlYXQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yb290LWJvdW5kYXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvc2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9zY3JvbGwtb2JzZXJ2ZXItaWdub3JlLXRhcmdldCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9zZW8nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvaW5mZXItbWltZS10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL25vcm1hbGl6ZS1tYXRjaC1wYXJ0aWNpcGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvbm9ybWFsaXplLW1hdGNoLXNjb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL25vcm1hbGl6ZS1tYXRjaC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy90by1hcnJheSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9wcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuLy8gQnVyc3QgY2FjaGVcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRobGV0ZS1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9ldGhsZXRlLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["CURSOR_DRAG_SCROLLING_CLASS","i1.AnimatableDirective","debounceTime"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ethlete-core.mjs","sources":["../../../../libs/core/src/lib/animations/animatable.directive.ts","../../../../libs/core/src/lib/utils/angular/component-id.ts","../../../../libs/core/src/lib/utils/angular/destroy.ts","../../../../libs/core/src/lib/utils/angular/di.ts","../../../../libs/core/src/lib/utils/angular/form.ts","../../../../libs/core/src/lib/utils/angular/host-listener.ts","../../../../libs/core/src/lib/utils/angular/query-list-changes.ts","../../../../libs/core/src/lib/utils/angular/set-input-signal.ts","../../../../libs/core/src/lib/utils/angular/validators.ts","../../../../libs/core/src/lib/utils/comparison.ts","../../../../libs/core/src/lib/utils/cookie.ts","../../../../libs/core/src/lib/utils/key-press-manager.ts","../../../../libs/core/src/lib/signals/animated-number.ts","../../../../libs/core/src/lib/signals/control-value.ts","../../../../libs/core/src/lib/signals/element.ts","../../../../libs/core/src/lib/signals/render-utils.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/signals/element-dimensions.ts","../../../../libs/core/src/lib/signals/element-intersection.ts","../../../../libs/core/src/lib/signals/element-scroll-direction.ts","../../../../libs/core/src/lib/signals/element-scroll-state.ts","../../../../libs/core/src/lib/signals/signal-data-utils.ts","../../../../libs/core/src/lib/signals/media-queries.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/math.ts","../../../../libs/core/src/lib/utils/object.ts","../../../../libs/core/src/lib/utils/runtime-error.ts","../../../../libs/core/src/lib/utils/scrollable.ts","../../../../libs/core/src/lib/providers/angular-root-element.ts","../../../../libs/core/src/lib/providers/boundary-element.ts","../../../../libs/core/src/lib/providers/breakpoint-observer.ts","../../../../libs/core/src/lib/providers/focus-visible-tracker.ts","../../../../libs/core/src/lib/providers/locale.ts","../../../../libs/core/src/lib/providers/renderer.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/animated-overlay.directive.ts","../../../../libs/core/src/lib/animations/flip-animation.ts","../../../../libs/core/src/lib/directives/click-outside.directive.ts","../../../../libs/core/src/lib/directives/repeat.directive.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-game-result-type.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-state.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-participants.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-score.pipe.ts","../../../../libs/core/src/lib/pipes/ethlete/normalize-match-type.pipe.ts","../../../../libs/core/src/lib/pipes/infer-mime-type.pipe.ts","../../../../libs/core/src/lib/pipes/to-array.pipe.ts","../../../../libs/core/src/lib/props/create-prop-handlers.ts","../../../../libs/core/src/lib/props/element-dictionary.ts","../../../../libs/core/src/lib/props/props-binding.ts","../../../../libs/core/src/lib/props/create-props.ts","../../../../libs/core/src/lib/props/create-setup.ts","../../../../libs/core/src/lib/props/dependency-stash.ts","../../../../libs/core/src/lib/props/props.directive.ts","../../../../libs/core/src/lib/props/template-input.ts","../../../../libs/core/src/lib/seo/head-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/seo.directive.ts","../../../../libs/core/src/lib/seo/structured-data-binding.ts","../../../../libs/core/src/lib/seo/structured-data.component.ts","../../../../libs/core/src/lib/theming/theme.util.ts","../../../../libs/core/src/lib/theming/legacy-theming.ts","../../../../libs/core/src/lib/theming/provide-theme.directive.ts","../../../../libs/core/src/ethlete-core.ts"],"sourcesContent":["import { Directive, ElementRef, inject, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n Subject,\n tap,\n} from 'rxjs';\n\nexport const ANIMATABLE_TOKEN = new InjectionToken<AnimatableDirective>('ANIMATABLE_DIRECTIVE_TOKEN');\n\nexport type AnimationEndEvent = {\n cancelled: boolean;\n transitionId?: string;\n};\n\n@Directive({\n selector: '[etAnimatable]',\n exportAs: 'etAnimatable',\n providers: [\n {\n provide: ANIMATABLE_TOKEN,\n useExisting: AnimatableDirective,\n },\n ],\n})\nexport class AnimatableDirective {\n private parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private animationStartSubject$ = new Subject<void>();\n private animationEndSubject$ = new Subject<AnimationEndEvent>();\n\n private activeAnimationCount = 0;\n private hostActiveAnimationCount$ = new BehaviorSubject<number>(0);\n\n private pendingTransitionIds: string[] = [];\n private activeBatchTransitionId: string | undefined;\n\n animationStart$ = this.animationStartSubject$.asObservable().pipe(debounceTime(0));\n animationEnd$ = this.animationEndSubject$.asObservable().pipe(debounceTime(0));\n\n totalActiveAnimationCount$: Observable<number> = this.parent\n ? combineLatest([this.parent.totalActiveAnimationCount$, this.hostActiveAnimationCount$]).pipe(\n map(([parentCount, hostCount]) => Math.max(0, parentCount + hostCount)),\n )\n : this.hostActiveAnimationCount$.pipe(map((count) => Math.max(0, count)));\n\n isAnimating$ = this.totalActiveAnimationCount$.pipe(map((count) => count > 0));\n\n constructor() {\n let didEmitStart = false;\n const el = this.elementRef.nativeElement;\n\n merge(\n merge(fromEvent<AnimationEvent>(el, 'animationstart'), fromEvent<TransitionEvent>(el, 'transitionstart')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'start' as const),\n ),\n merge(fromEvent<AnimationEvent>(el, 'animationend'), fromEvent<TransitionEvent>(el, 'transitionend')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'end' as const),\n ),\n merge(fromEvent<AnimationEvent>(el, 'animationcancel'), fromEvent<TransitionEvent>(el, 'transitioncancel')).pipe(\n filter((e) => e.target === el && !e.pseudoElement),\n map(() => 'cancel' as const),\n ),\n )\n .pipe(\n tap((eventType) => {\n switch (eventType) {\n case 'start': {\n const startingNewBatch = this.activeAnimationCount === 0;\n this.updateActiveAnimationCount(1);\n\n if (startingNewBatch) {\n this.activeBatchTransitionId = this.pendingTransitionIds.shift();\n }\n\n 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 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 console.warn(\n `${el.tagName} received animation end/cancel event but activeAnimationCount is already 0. Start was ${didEmitStart ? '' : 'not '}emitted.`,\n );\n }\n break;\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n setTransitionId(id: string) {\n this.pendingTransitionIds.push(id);\n }\n\n private updateActiveAnimationCount(delta: number) {\n const newVal = this.activeAnimationCount + delta;\n const clampedVal = Math.max(0, newVal);\n\n this.activeAnimationCount = clampedVal;\n this.hostActiveAnimationCount$.next(clampedVal);\n }\n}\n","const componentIds = 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","import { DestroyRef, assertInInjectionContext, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport const createDestroy = () => {\n assertInInjectionContext(createDestroy);\n\n const destroy$ = new Subject<boolean>();\n\n const ref = inject(DestroyRef);\n\n ref.onDestroy(() => {\n destroy$.next(true);\n destroy$.complete();\n });\n\n return destroy$.asObservable();\n};\n","import { ElementRef, inject, InjectionToken, InjectOptions, Provider, TemplateRef } from '@angular/core';\nimport { createComponentId } from './component-id';\n\nexport const injectHostElement = <T = HTMLElement>() => inject<ElementRef<T>>(ElementRef).nativeElement;\n\nexport const injectTemplateRef = <C = unknown>() => inject<TemplateRef<C>>(TemplateRef);\n\nexport type CreateProviderOptions = {\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\nexport type ProviderResult<T> = readonly [\n provide: () => Provider[],\n inject: {\n (): T;\n (options: InjectOptions & { optional?: false }): T;\n (options: InjectOptions): T | null;\n },\n token: InjectionToken<T>,\n];\n\nexport type StaticProviderResult<T> = readonly [\n provide: (valueOverride?: Partial<T>) => Provider[],\n inject: {\n (): T;\n (options: InjectOptions & { optional?: false }): T;\n (options: InjectOptions): T | null;\n },\n token: InjectionToken<T>,\n];\n\nexport type RootProviderResult<T> = readonly [\n inject: {\n (): T;\n (options: InjectOptions & { optional?: false }): T;\n (options: InjectOptions): T | null;\n },\n token: InjectionToken<T>,\n];\n\nconst createInjectFunction = <T>(token: InjectionToken<T>) => {\n function injectFn(): T;\n function injectFn(options: InjectOptions & { optional?: false }): T;\n function injectFn(options: InjectOptions): T | null;\n function injectFn(options?: InjectOptions): T | null {\n return options ? inject(token, options) : inject(token);\n }\n return injectFn;\n};\n\nconst createProviders = <T>(\n token: InjectionToken<T>,\n factory: () => T,\n extraToken?: InjectionToken<unknown>,\n): Provider[] => [\n { provide: token, useFactory: factory },\n ...(extraToken ? [{ provide: extraToken, useExisting: token }] : []),\n];\n\nexport const createProvider = <T>(factory: () => T, options?: CreateProviderOptions): ProviderResult<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('provider'));\n const provide = () => createProviders(token, factory, options?.extraInjectionToken);\n const injectFn = createInjectFunction(token);\n\n return [provide, injectFn, token] as const;\n};\n\nexport const createRootProvider = <T>(factory: () => T, options?: CreateProviderOptions): ProviderResult<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('provider'), {\n providedIn: 'root',\n factory,\n });\n\n const provide = () => createProviders(token, factory, options?.extraInjectionToken);\n const injectFn = createInjectFunction(token);\n\n return [provide, injectFn, token] as const;\n};\n\nexport const createStaticProvider = <T>(defaultValue?: T, options?: CreateProviderOptions): StaticProviderResult<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('static-provider'));\n\n const provide = (valueOverride?: Partial<T>) => [\n { provide: token, useValue: maybeMergeValues(defaultValue, valueOverride) },\n ...(options?.extraInjectionToken ? [{ provide: options.extraInjectionToken, useExisting: token }] : []),\n ];\n\n const injectFn = createInjectFunction(token);\n\n return [provide, injectFn, token] as const;\n};\n\nexport const createStaticRootProvider = <T>(\n defaultValue?: T,\n options?: CreateProviderOptions,\n): StaticProviderResult<T> => {\n const token = new InjectionToken<T>(options?.name ?? createComponentId('static-provider'), {\n providedIn: 'root',\n factory: () => defaultValue as T,\n });\n\n const provide = (valueOverride?: Partial<T>) => [\n { provide: token, useValue: maybeMergeValues(defaultValue, valueOverride) },\n ...(options?.extraInjectionToken ? [{ provide: options.extraInjectionToken, useExisting: token }] : []),\n ];\n\n const injectFn = createInjectFunction(token);\n\n return [provide, injectFn, token] as const;\n};\n\nconst maybeMergeValues = <T>(defaultValue: T | undefined, valueOverride?: Partial<T>) => {\n if (valueOverride && defaultValue && typeof defaultValue === 'object') {\n return { ...defaultValue, ...valueOverride };\n }\n\n return valueOverride ?? defaultValue;\n};\n","import { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const cloneFormGroup = <T extends FormGroup<any>>(formGroup: T) => {\n const cloneLevel = (group: FormGroup, cloneGroup: FormGroup) => {\n Object.keys(group.controls).forEach((key) => {\n const control = group.controls[key]!;\n\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n\n cloneGroup.addControl(key, cloneControl);\n\n cloneLevel(control, cloneControl);\n } else if (control instanceof FormArray) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cloneArrayControl = new FormArray<any>([], control.validator, control.asyncValidator);\n\n control.controls.forEach((control) => {\n if (control instanceof FormGroup) {\n const cloneControl = new FormGroup({}, control.validator, control.asyncValidator);\n const innerClone = cloneLevel(control, cloneControl);\n cloneArrayControl.push(innerClone);\n } else {\n const cloneControlItem = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n cloneArrayControl.push(cloneControlItem);\n }\n });\n\n cloneGroup.addControl(key, cloneArrayControl);\n } else {\n const cloneControl = new FormControl(\n { value: control.value, disabled: control.disabled },\n control.validator,\n control.asyncValidator,\n );\n\n cloneGroup.addControl(key, cloneControl);\n }\n });\n\n return cloneGroup;\n };\n\n const clonedForm = cloneLevel(formGroup, new FormGroup({}));\n clonedForm.setValue(formGroup.value);\n clonedForm.updateValueAndValidity();\n\n return clonedForm as T;\n};\n\nexport const getFormGroupValue = <T extends FormGroup>(formGroup: T) => {\n const value: Record<string, unknown> = {};\n\n Object.keys(formGroup.controls).forEach((key) => {\n const control = formGroup.controls[key]!;\n\n if (control instanceof FormGroup) {\n value[key] = getFormGroupValue(control);\n } else if (control instanceof FormArray) {\n value[key] = control.controls.map((control) => {\n if (control instanceof FormGroup) {\n return getFormGroupValue(control);\n } else {\n return control.value ?? null;\n }\n });\n } else {\n value[key] = control.value ?? null;\n }\n });\n\n return value;\n};\n","import { ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\n\nexport const createRxHostListener = <K extends keyof HTMLElementEventMap>(\n eventName: K,\n options?: EventListenerOptions,\n) => {\n const element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement as EventTarget;\n\n const observable = options\n ? fromEvent<HTMLElementEventMap[K]>(element, eventName, options)\n : fromEvent<HTMLElementEventMap[K]>(element, eventName);\n\n return observable.pipe(takeUntilDestroyed());\n};\n\nexport const applyHostListener = <K extends keyof HTMLElementEventMap>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: EventListenerOptions,\n) => createRxHostListener(eventName, options).subscribe(handler);\n\nexport const applyHostListeners = (\n listeners: Partial<{\n [K in keyof HTMLElementEventMap]: (event: HTMLElementEventMap[K]) => void;\n }>,\n options?: EventListenerOptions,\n) => {\n for (const eventName in listeners) {\n const handler = listeners[eventName as keyof HTMLElementEventMap];\n\n if (handler) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n applyHostListener(eventName as keyof HTMLElementEventMap, handler as any, options);\n }\n }\n};\n","import { QueryList } from '@angular/core';\nimport { Observable, of, startWith, switchMap } from 'rxjs';\n\nexport class TypedQueryList<T> extends QueryList<T> {\n override get changes(): Observable<TypedQueryList<T>> {\n return super.changes as Observable<TypedQueryList<T>>;\n }\n}\n\nexport function switchQueryListChanges() {\n return function <T extends TypedQueryList<unknown> | null | undefined>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.changes.pipe(startWith(value)) ?? of(null))) as Observable<T>;\n };\n}\n","import { InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';\n\n/**\n * Sets the value of an input signal.\n * See issue: https://github.com/angular/angular/issues/54782\n */\nexport const setInputSignal = <T>(input: InputSignal<T> | InputSignalWithTransform<T, unknown>, value: T) => {\n const node = input[SIGNAL];\n\n signalSetFn(node, value);\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const AT_LEAST_ONE_REQUIRED = 'atLeastOneRequired';\n\nexport type ValidateAtLeastOneRequiredConfig = {\n /**\n * Keys of form controls to validate in the supplied form group\n */\n keys: string[];\n\n /**\n * If true, the value `false` will result in a validation error\n * @default false\n */\n checkFalse?: boolean;\n};\n\nexport const ValidateAtLeastOneRequired = (config: ValidateAtLeastOneRequiredConfig): ValidatorFn => {\n return (formGroup: AbstractControl): ValidationErrors | null => {\n const { keys, checkFalse } = config;\n\n if (!formGroup) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n\n const controlValues = keys.map((key) => formGroup.get(key)?.value);\n\n const areAllFalsy = controlValues.every(\n (value) =>\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (checkFalse && value === false),\n );\n\n if (areAllFalsy) {\n return { [AT_LEAST_ONE_REQUIRED]: true };\n }\n\n return null;\n };\n};\n\nexport const IS_ARRAY_NOT_EMPTY = 'isArrayNotEmpty';\n\nexport const IsArrayNotEmpty = (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) {\n return null;\n }\n\n return value.length > 0 ? null : { [IS_ARRAY_NOT_EMPTY]: true };\n};\n\nexport const IS_EMAIL = 'isEmail';\n\nexport const IsEmail = (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/;\n return regex.test(value) ? null : { [IS_EMAIL]: true };\n};\n\nexport const MUST_MATCH = 'mustMatch';\n\nexport const MustMatch = (controlName: string, matchingControlName: string) => {\n return (formGroup: AbstractControl) => {\n const control = formGroup.get(controlName);\n const matchingControl = formGroup.get(matchingControlName);\n\n if (matchingControl?.errors && !matchingControl.errors[MUST_MATCH]) {\n return null;\n }\n\n if (control?.value !== matchingControl?.value) {\n matchingControl?.setErrors({ [MUST_MATCH]: true });\n return { [MUST_MATCH]: true };\n } else {\n matchingControl?.setErrors(null);\n return null;\n }\n };\n};\n\nexport const Validators = {\n MustMatch,\n IsEmail,\n IsArrayNotEmpty,\n ValidateAtLeastOneRequired,\n} as const;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-var */\n\n/**\n * Stolen from klona to avoid adding a dependency\n * https://github.com/lukeed/klona\n *\n * MIT License\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nconst set = (obj: any, key: any, val: any) => {\n if (typeof val.value === 'object') val.value = clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n};\n\nexport const clone = <T>(original: T): T => {\n if (typeof original !== 'object') return original;\n\n var _og = original as any;\n\n var i = 0,\n k,\n list,\n tmp: any,\n str = Object.prototype.toString.call(_og);\n\n if (str === '[object Object]') {\n tmp = Object.create(_og.__proto__ || null);\n } else if (str === '[object Array]') {\n tmp = Array(_og.length);\n } else if (str === '[object Set]') {\n tmp = new Set();\n _og.forEach(function (val: any) {\n tmp.add(clone(val));\n });\n } else if (str === '[object Map]') {\n tmp = new Map();\n _og.forEach(function (val: any, key: any) {\n tmp.set(clone(key), clone(val));\n });\n } else if (str === '[object Date]') {\n tmp = new Date(+_og);\n } else if (str === '[object RegExp]') {\n tmp = new RegExp(_og.source, _og.flags);\n } else if (str === '[object DataView]') {\n tmp = new _og.constructor(clone(_og.buffer));\n } else if (str === '[object ArrayBuffer]') {\n tmp = _og.slice(0);\n } else if (str.slice(-6) === 'Array]') {\n // ArrayBuffer.isView(x)\n // ~> `new` bcuz `Buffer.slice` => ref\n tmp = new _og.constructor(_og);\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]!));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(_og); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i]!)) && tmp[k] === _og[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(_og, k));\n }\n }\n\n return tmp || _og;\n};\n\n/**\n * Stolen from dequal to avoid adding a dependency\n * https://github.com/lukeed/dequal\n *\n * The MIT License (MIT)\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst has = Object.prototype.hasOwnProperty;\n\nfunction find(iter: any, tar: any, key?: any) {\n for (key of iter.keys()) {\n if (equal(key, tar)) return key;\n }\n}\n\nexport const equal = (foo: any, bar: any) => {\n var ctor: any, len: any, tmp: any;\n if (foo === bar) return true;\n\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date) return foo.getTime() === bar.getTime();\n if (ctor === RegExp) return foo.toString() === bar.toString();\n\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && equal(foo[len], bar[len]));\n }\n 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 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 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 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 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 return Object.keys(bar).length === len;\n }\n }\n\n return foo !== foo && bar !== bar;\n};\n","export const hasCookie = (name: string) => {\n if (typeof document === 'undefined') {\n return false;\n }\n\n return document.cookie.split(';').some((c) => {\n return c.trim().startsWith(name + '=');\n });\n};\n\nexport const getCookie = (name: string) => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n // From https://stackoverflow.com/questions/10730362/get-cookie-by-name\n return ('; ' + document.cookie).split(`; ${name}=`).pop()?.split(';')[0];\n};\n\nexport const setCookie = (\n name: string,\n data: string,\n expiresInDays?: number | null,\n domain = getDomain(),\n path = '/',\n sameSite: 'strict' | 'none' | 'lax' = 'lax',\n) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const sameSiteUpper = sameSite.toUpperCase();\n\n const expires = expiresInDays ?? 30;\n\n let cookieString = `${name}=${data}; path=${path}`;\n\n if (expiresInDays !== null) {\n const date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n cookieString += `; expires=${date.toUTCString()}`;\n }\n\n cookieString += `; domain=${domain}; SameSite=${sameSiteUpper};`;\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, path = '/', domain = getDomain()) => {\n if (hasCookie(name)) {\n document.cookie =\n name +\n '=' +\n (path ? ';path=' + path : '') +\n (domain ? ';domain=' + domain : '') +\n ';expires=Thu, 01 Jan 1970 00:00:01 GMT';\n }\n};\n\nexport const getDomain = () => {\n if (typeof navigator === 'undefined') {\n return null;\n }\n\n const hostname = window.location.hostname;\n\n if (hostname.includes('localhost')) {\n return 'localhost';\n }\n\n const hostIsIP = hostname.match(/^(\\d{1,3}\\.){3}\\d{1,3}$/);\n\n if (hostIsIP) {\n return hostname;\n }\n\n const splitHost = hostname.split('.');\n\n if (splitHost.length > 2) {\n return `${splitHost[splitHost.length - 2]}.${splitHost[splitHost.length - 1]}`;\n }\n\n return hostname;\n};\n","import { BehaviorSubject, Subject, takeUntil, timer } from 'rxjs';\n\nexport class KeyPressManager {\n private readonly _isKeyPressed$ = new BehaviorSubject(false);\n private readonly _keyPressCount$ = new BehaviorSubject(0);\n\n private readonly _stopTimeout$ = new Subject<void>();\n\n constructor(public readonly key: number) {}\n\n isPressed(event: KeyboardEvent) {\n const key = event.keyCode;\n\n if (key === this.key) {\n this._isKeyPressed$.next(this._keyPressCount$.value > 1);\n this._keyPressCount$.next(this._keyPressCount$.value + 1);\n\n this._stopTimeout$.next();\n\n timer(100)\n .pipe(takeUntil(this._stopTimeout$))\n .subscribe(() => this.clear());\n } else {\n this.clear();\n }\n\n return this._isKeyPressed$.value;\n }\n\n clear() {\n this._isKeyPressed$.next(false);\n this._keyPressCount$.next(0);\n this._stopTimeout$.next();\n }\n}\n","import { inject, isSignal, NgZone, signal, Signal, untracked } from '@angular/core';\nimport { MaybeSignal } from './signal-data-utils';\n\nexport type SignalAnimatedNumberOptions = {\n /**\n * The initial value to start animating from.\n * If not provided, the animation will start from 0\n */\n initialValue?: number;\n\n /**\n * Duration of the animation in milliseconds.\n * @default 1000\n */\n duration?: number;\n\n /**\n * Easing function that takes a progress value (0 to 1) and returns an eased value (0 to 1).\n * Options:\n * - `easeLinear()`\n * - `easeIn()`\n * - `easeOut()`\n * - `easeInOut()`\n * - `easeElastic()`\n * - `easeOutBack()`\n * - `easeOutBackStrong()`\n * @default easeOut()\n */\n easing?: (t: number) => number;\n\n /**\n * Function to round the animated value.\n * @default (v: number) => Math.round(v)\n */\n round?: (value: number) => number;\n\n /**\n * Callback invoked when the animation starts.\n */\n onAnimationStart?: () => void;\n\n /**\n * Callback invoked when the animation ends.\n */\n onAnimationEnd?: () => void;\n};\n\nexport type AnimatedNumberSignal = Signal<number> & {\n /**\n * Starts the animation from the current value to the target value.\n * @returns The animated signal for chaining\n */\n play: () => AnimatedNumberSignal;\n\n /**\n * Resets the animation to the initial value and stops any ongoing animation.\n * @returns The animated signal for chaining\n */\n reset: () => AnimatedNumberSignal;\n\n /**\n * Stops the current animation at its current position.\n * @returns The animated signal for chaining\n */\n stop: () => AnimatedNumberSignal;\n};\n\n/**\n * Creates a signal that animates the transition of a numeric signal's value over time.\n */\nexport const signalAnimatedNumber = (\n source: MaybeSignal<number>,\n options: SignalAnimatedNumberOptions = {},\n): AnimatedNumberSignal => {\n const ngZone = inject(NgZone);\n const duration = options.duration ?? 1000;\n const easing = options.easing ?? easeOut;\n const round = options.round ?? ((v: number) => Math.round(v));\n\n const initialValue = options.initialValue ?? 0;\n const animatedValue = signal(initialValue);\n\n let rafId: number | null = null;\n let currentAnimatedValue = initialValue;\n\n const cancelAnimation = () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n };\n\n const readonlySignal = animatedValue.asReadonly() as AnimatedNumberSignal;\n\n const play = () => {\n const targetValue = isSignal(source) ? source() : source;\n\n cancelAnimation();\n\n const startValue = currentAnimatedValue;\n const startTime = performance.now();\n const delta = targetValue - startValue;\n\n // Skip animation if no change\n if (delta === 0) {\n options.onAnimationEnd?.();\n return readonlySignal;\n }\n\n options.onAnimationStart?.();\n\n ngZone.runOutsideAngular(() => {\n const animate = (timestamp: number) => {\n const elapsed = timestamp - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n\n const value = startValue + delta * easedProgress;\n currentAnimatedValue = value;\n\n untracked(() => {\n animatedValue.set(round(value));\n });\n\n if (progress < 1) {\n rafId = requestAnimationFrame(animate);\n } else {\n rafId = null;\n\n ngZone.run(() => {\n options.onAnimationEnd?.();\n });\n }\n };\n\n rafId = requestAnimationFrame(animate);\n });\n\n return readonlySignal;\n };\n\n const reset = () => {\n cancelAnimation();\n currentAnimatedValue = initialValue;\n animatedValue.set(initialValue);\n return readonlySignal;\n };\n\n const stop = () => {\n cancelAnimation();\n return readonlySignal;\n };\n\n readonlySignal.play = play;\n readonlySignal.reset = reset;\n readonlySignal.stop = stop;\n\n return readonlySignal;\n};\n\n/* Linear easing function */\nexport const easeLinear = (t: number) => t;\n\n/* Ease in (slow start) */\nexport const easeIn = (t: number) => t * t;\n\n/* Ease out (slow end) */\nexport const easeOut = (t: number) => t * (2 - t);\n\n/* Ease in-out (slow start and end) */\nexport const easeInOut = (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t);\n\n/** Elastic easing function (overshoots) */\nexport const easeElastic = (t: number) => {\n const c4 = (2 * Math.PI) / 3;\n return t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\n};\n\n/** Back easing function (overshoots slightly then settles) */\nexport const easeOutBack = (t: number) => {\n const c1 = 1.70158;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n};\n\n/** Back easing function with more overshoot */\nexport const easeOutBackStrong = (t: number) => {\n const c1 = 2.5;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n};\n","import { Signal, isSignal, linkedSignal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl } from '@angular/forms';\nimport { Observable, debounceTime, distinctUntilChanged, map, merge, of, startWith, switchMap } from 'rxjs';\nimport { equal } from '../utils';\n\nexport type ControlValueSignalOptions = {\n debounceTime?: number;\n\n /**\n * @default false\n */\n debounceFirst?: boolean;\n};\n\nexport const controlValueSignal = <\n TControlInput extends Signal<AbstractControl | null> | AbstractControl,\n TControl extends TControlInput extends Signal<infer TSignalControl> ? TSignalControl : TControlInput,\n>(\n control: TControlInput,\n options?: ControlValueSignalOptions,\n) => {\n type TValue = ReturnType<NonNullable<TControl>['getRawValue']>;\n\n const getRawValueSafe = (ctrl: Signal<AbstractControl | null> | AbstractControl | null): TValue | null => {\n try {\n return isSignal(ctrl) ? (ctrl()?.getRawValue() ?? null) : (ctrl?.getRawValue() ?? null);\n } catch {\n // Ignore errors. This can happen if the passed control is a required input and is not yet initialized.\n return null;\n }\n };\n\n const initialValue = getRawValueSafe(control);\n\n const controlStream = isSignal(control)\n ? toObservable<AbstractControl | null>(control)\n : of<AbstractControl | null>(control);\n\n const controlObs = controlStream.pipe(\n switchMap((ctrl) => {\n if (!ctrl) return of(null);\n\n const vcsObs = options?.debounceTime\n ? ctrl.valueChanges.pipe(debounceTime(options.debounceTime))\n : ctrl.valueChanges;\n\n return vcsObs.pipe(\n startWith(ctrl.getRawValue()),\n map(() => ctrl.getRawValue()),\n );\n }),\n );\n\n const obs: Observable<TValue | null> = !options?.debounceFirst ? merge(of(initialValue), controlObs) : controlObs;\n\n return toSignal(obs.pipe(distinctUntilChanged((a, b) => equal(a, b))), {\n initialValue,\n });\n};\n\n/**\n * The first item in the pair is the previous value and the second item is the current value.\n */\nexport const controlValueSignalWithPrevious = <T extends AbstractControl>(\n control: T,\n options?: ControlValueSignalOptions,\n) => {\n type TValue = ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>['getRawValue']>;\n\n const data = linkedSignal<TValue | null, [TValue | null, TValue | null]>({\n source: controlValueSignal(control, options),\n computation: (curr, prev) => [prev?.source ?? null, curr],\n });\n\n return data.asReadonly();\n};\n","import { coerceElement } from '@angular/cdk/coercion';\nimport {\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\nexport type SignalElementBindingComplexType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | Array<ElementRef<HTMLElement> | HTMLElement>\n | null\n | undefined;\n\nexport type SignalElementBindingType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | Observable<SignalElementBindingComplexType>\n | Signal<SignalElementBindingComplexType>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | ElementSignal;\n\nexport type ElementSignal = Signal<{\n currentElements: HTMLElement[];\n previousElements: HTMLElement[];\n}>;\n\nexport type ElementSignalValue = ReturnType<ElementSignal>;\n\nexport const isElementSignal = (el: unknown): el is ElementSignal => {\n if (!isSignal(el)) return false;\n\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElements' in val && 'previousElements' in val;\n};\n\nexport const createDocumentElementSignal = (): ElementSignal => {\n const documentElement = inject(DOCUMENT).documentElement;\n return signal({\n currentElements: [documentElement],\n previousElements: [],\n });\n};\n\nexport const createEmptyElementSignal = (): ElementSignal =>\n signal({\n currentElements: [],\n previousElements: [],\n });\n\nconst areElementArraysEqual = (a: HTMLElement[], b: HTMLElement[]): boolean => {\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): boolean =>\n areElementArraysEqual(a.currentElements, b.currentElements) &&\n areElementArraysEqual(a.previousElements, b.previousElements);\n\nexport const buildElementSignal = (el: SignalElementBindingType | null | undefined): ElementSignal => {\n if (el === null || el === undefined) return createEmptyElementSignal();\n if (isElementSignal(el)) return el;\n\n if (el instanceof HTMLElement || el instanceof ElementRef) {\n const element = coerceElement(el);\n if (!element) return createEmptyElementSignal();\n\n return signal({\n currentElements: [element],\n previousElements: [],\n });\n }\n\n if (isSignal(el)) return createElementSignalFromSignal(el);\n\n return createElementSignalFromObservable(createElementsObservable(el));\n};\n\nconst createElementSignalFromSignal = (input: Signal<SignalElementBindingComplexType>): ElementSignal => {\n return linkedSignal({\n source: input,\n computation: (source, previous) => {\n const currentElements = coerceValueToElementArray(source);\n const previousElements = previous?.value.currentElements ?? [];\n\n return {\n currentElements,\n previousElements,\n };\n },\n equal: areElementSignalValuesEqual,\n });\n};\n\nconst createElementSignalFromObservable = (elements$: Observable<HTMLElement[]>): ElementSignal => {\n return toSignal(\n elements$.pipe(\n startWith([]),\n pairwise(),\n map(([previousElements, currentElements]) => {\n if (isDevMode()) {\n const invalidElement = currentElements.find((el) => el && !(el instanceof HTMLElement));\n if (invalidElement) {\n console.error(\n 'Received an element that is not an HTMLElement. You are probably using viewChild or contentChild on a component without the read option set to ElementRef.',\n invalidElement,\n );\n }\n }\n\n return {\n previousElements,\n currentElements,\n };\n }),\n ),\n {\n initialValue: {\n previousElements: [],\n currentElements: [],\n },\n equal: areElementSignalValuesEqual,\n },\n ) as ElementSignal;\n};\n\nconst coerceValueToElementArray = (value: SignalElementBindingComplexType): HTMLElement[] => {\n if (value === null || value === undefined) return [];\n\n const items = value instanceof QueryList ? value.toArray() : Array.isArray(value) ? value : [value];\n\n const result: HTMLElement[] = [];\n for (const item of items) {\n const el = coerceElement(item);\n if (el) result.push(el);\n }\n return result;\n};\n\nconst createElementsObservable = (\n input: Observable<SignalElementBindingComplexType> | QueryList<ElementRef<HTMLElement> | HTMLElement>,\n): Observable<HTMLElement[]> => {\n if (input instanceof QueryList) {\n return input.changes.pipe(\n startWith(input),\n map(() => coerceValueToElementArray(input)),\n );\n }\n\n return input.pipe(map(coerceValueToElementArray));\n};\n\nexport const firstElementSignal = (el: ElementSignal) =>\n computed(\n () => {\n const { currentElements, previousElements } = el();\n\n if (isDevMode() && currentElements.length > 1) {\n console.warn(\n 'More than one element is bound to the signal. Only the first element will be used.',\n currentElements,\n );\n }\n\n return {\n currentElement: currentElements[0] ?? null,\n previousElement: previousElements[0] ?? null,\n };\n },\n {\n equal: (a, b) => a.currentElement === b.currentElement && a.previousElement === b.previousElement,\n },\n );\n","import { afterNextRender, effect, signal } from '@angular/core';\nimport { nextFrame } from '../animations';\n\nexport const signalIsRendered = () => {\n const isRendered = signal(false);\n\n afterNextRender(() => isRendered.set(true));\n\n return isRendered.asReadonly();\n};\n\nexport const createIsRenderedSignal = () => {\n const value = signal(false);\n\n nextFrame(() => {\n if (!value()) {\n console.error(\n 'Render signal was not set to true. This can cause unexpected behavior. Make sure to .bind() the render signal at the end of the constructor.',\n );\n }\n });\n\n return {\n state: value,\n bind: () => effect(() => value.set(true)),\n };\n};\n\nexport const createCanAnimateSignal = () => {\n const value = signal(false);\n\n nextFrame(() => {\n value.set(true);\n });\n\n return {\n state: value.asReadonly(),\n };\n};\n","import { DestroyRef, effect, ElementRef, inject, NgZone, signal } from '@angular/core';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport const signalElementMutations = (el: SignalElementBindingType, options?: MutationObserverInit) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const elementMutationsSignal = signal<MutationRecord | null>(null);\n\n const observer = new MutationObserver((e) => {\n if (!isRendered()) return;\n\n const entry = e[0];\n\n if (entry) {\n zone.run(() => elementMutationsSignal.set(entry));\n }\n });\n\n effect(() => {\n const els = firstEl();\n\n elementMutationsSignal.set(null);\n\n if (els.previousElement) {\n observer.disconnect();\n }\n\n if (els.currentElement) {\n observer.observe(els.currentElement, options);\n }\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return elementMutationsSignal.asReadonly();\n};\n\nexport const signalHostElementMutations = (options?: MutationObserverInit) =>\n signalElementMutations(inject(ElementRef), 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 const signalElementChildren = (el: SignalElementBindingType) => {\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const isRendered = signalIsRendered();\n const elementMutations = signalElementMutations(elements, { childList: true, subtree: true, attributes: true });\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), 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), 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), styleMap);\n","import { computed, DestroyRef, effect, ElementRef, inject, isDevMode, NgZone, signal, untracked } from '@angular/core';\nimport { equal } from '../utils';\nimport { buildElementSignal, firstElementSignal, SignalElementBindingType } from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport type LogicalSize = {\n inlineSize: number;\n blockSize: number;\n};\n\nexport type ElementRect = {\n bottom: number;\n height: number;\n left: number;\n right: number;\n top: number;\n width: number;\n x: number;\n y: number;\n};\n\nexport type ElementSize = {\n width: number;\n height: number;\n};\n\nexport const boundingClientRectToElementRect = (rect: DOMRectReadOnly): ElementRect => ({\n bottom: rect.bottom,\n height: rect.height,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n width: rect.width,\n x: rect.x,\n y: rect.y,\n});\n\nexport const createElementDimensions = (el: HTMLElement | null, rect?: DOMRect): NullableElementDimensions => {\n if (!el) {\n return {\n rect: null,\n client: null,\n scroll: null,\n offset: null,\n };\n }\n\n const cachedNormalizedRect = rect ? boundingClientRectToElementRect(rect) : null;\n const rectFn = () =>\n cachedNormalizedRect ? cachedNormalizedRect : boundingClientRectToElementRect(el.getBoundingClientRect());\n\n return {\n rect: rectFn,\n client: { width: el.clientWidth, height: el.clientHeight },\n scroll: { width: el.scrollWidth, height: el.scrollHeight },\n offset: { width: el.offsetWidth, height: el.offsetHeight },\n };\n};\n\nexport type ElementDimensions = {\n rect: () => ElementRect;\n client: ElementSize;\n scroll: ElementSize;\n offset: ElementSize;\n};\n\nexport type NullableElementDimensions = {\n [K in keyof ElementDimensions]: ElementDimensions[K] | null;\n};\n\nexport const signalElementDimensions = (el: SignalElementBindingType) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const firstEl = firstElementSignal(elements);\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const initialValue = () => createElementDimensions(firstEl().currentElement);\n\n const elementDimensionsSignal = signal<NullableElementDimensions>(initialValue());\n\n const observer = new ResizeObserver((e) => {\n if (!isRendered()) return;\n\n const entry = e[0];\n\n if (entry) {\n const target = entry.target as HTMLElement;\n const newDimensions = createElementDimensions(target);\n\n zone.run(() => elementDimensionsSignal.set(newDimensions));\n }\n });\n\n effect(() => {\n const els = firstEl();\n\n untracked(() => {\n elementDimensionsSignal.set(initialValue());\n\n if (els.previousElement) {\n observer.disconnect();\n }\n\n if (els.currentElement) {\n const computedDisplay = getComputedStyle(els.currentElement).display;\n const currentElIsAngularComponent = els.currentElement?.tagName.toLowerCase().includes('-');\n\n if (computedDisplay === 'inline' && isDevMode() && currentElIsAngularComponent) {\n console.error(\n `Element <${els.currentElement?.tagName.toLowerCase()}> is an Angular component and has a display of 'inline'. Inline elements cannot be observed for dimensions. Please change it to 'block' or something else.`,\n );\n }\n\n observer.observe(els.currentElement);\n }\n });\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return computed(() => elementDimensionsSignal(), {\n equal: (a, b) => equal(a, b),\n });\n};\n\nexport const signalHostElementDimensions = () => signalElementDimensions(inject(ElementRef));\n","import { DestroyRef, ElementRef, NgZone, Signal, effect, inject, signal, untracked } from '@angular/core';\nimport { isElementVisible } from '../utils';\nimport {\n ElementSignalValue,\n SignalElementBindingType,\n buildElementSignal,\n createEmptyElementSignal,\n firstElementSignal,\n} from './element';\nimport { signalIsRendered } from './render-utils';\n\nexport type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {\n root?: SignalElementBindingType;\n enabled?: Signal<boolean>;\n};\n\nexport type IntersectionObserverEntryWithDetails = IntersectionObserverEntry & {\n isAbove: boolean;\n isBelow: boolean;\n isLeft: boolean;\n isRight: boolean;\n isVisible: boolean;\n};\n\nconst createPositionObject = (entry: IntersectionObserverEntry) => {\n const boundingRect = entry.boundingClientRect;\n const rootBounds = entry.rootBounds;\n\n let isAbove = false;\n let isBelow = false;\n let isLeft = false;\n let isRight = false;\n\n if (rootBounds) {\n isAbove = boundingRect.bottom < rootBounds.top;\n isBelow = boundingRect.top > rootBounds.bottom;\n isLeft = boundingRect.right < rootBounds.left;\n isRight = boundingRect.left > rootBounds.right;\n }\n\n // We cant use entry.isIntersecting to determine actual visibility since we are using a big threshold array to get more intersection events.\n const isVisible = !isAbove && !isBelow && !isLeft && !isRight && entry.intersectionRatio > 0;\n\n return {\n isAbove,\n isBelow,\n isLeft,\n isRight,\n isVisible,\n };\n};\n\nexport const signalElementIntersection = (el: SignalElementBindingType, options?: SignalElementIntersectionOptions) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\n const root = firstElementSignal(options?.root ? buildElementSignal(options?.root) : createEmptyElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = options?.enabled ?? signal(true);\n\n const elementIntersectionSignal = signal<IntersectionObserverEntryWithDetails[]>([]);\n const observer = signal<IntersectionObserver | null>(null);\n\n const currentlyObservedElements = new Set<HTMLElement>();\n\n const updateIntersections = (entries: IntersectionObserverEntry[]) => {\n let currentValues = [...elementIntersectionSignal()];\n\n for (const entry of entries) {\n const existingEntryIndex = currentValues.findIndex((v) => v.target === entry.target);\n\n // Round the intersection ratio to the nearest 0.01 to avoid floating point errors and system scaling issues.\n const roundedIntersectionRatio = Math.round(entry.intersectionRatio * 100) / 100;\n\n const intersectionEntry: IntersectionObserverEntryWithDetails = {\n boundingClientRect: entry.boundingClientRect,\n intersectionRatio: roundedIntersectionRatio,\n intersectionRect: entry.intersectionRect,\n isIntersecting: entry.isIntersecting,\n rootBounds: entry.rootBounds,\n target: entry.target,\n time: entry.time,\n ...createPositionObject(entry),\n };\n\n if (existingEntryIndex !== -1) {\n currentValues = [\n ...currentValues.slice(0, existingEntryIndex),\n intersectionEntry,\n ...currentValues.slice(existingEntryIndex + 1),\n ];\n } else {\n currentValues = [...currentValues, intersectionEntry];\n }\n }\n\n zone.run(() => elementIntersectionSignal.set(currentValues));\n };\n\n const updateIntersectionObserver = (rendered: boolean, enabled: boolean, rootEl: HTMLElement | null) => {\n observer()?.disconnect();\n currentlyObservedElements.clear();\n\n if (!rendered || !enabled) {\n observer.set(null);\n return;\n }\n\n const newObserver = new IntersectionObserver((entries) => updateIntersections(entries), {\n ...options,\n root: rootEl,\n });\n\n observer.set(newObserver);\n };\n\n const updateObservedElements = (observer: IntersectionObserver | null, elements: ElementSignalValue) => {\n const rootEl = root().currentElement;\n\n if (!observer) return;\n\n const currIntersectionValue = elementIntersectionSignal();\n const newIntersectionValue: IntersectionObserverEntryWithDetails[] = [];\n\n for (const el of elements.currentElements) {\n if (currentlyObservedElements.has(el)) {\n const existingEntryIndex = currIntersectionValue.findIndex((v) => v.target === el);\n const existingEntry = currIntersectionValue[existingEntryIndex];\n\n if (!existingEntry) {\n console.warn('Could not find existing entry for element. The intersection observer might be broken now.', el);\n continue;\n }\n\n newIntersectionValue.push(existingEntry);\n continue;\n }\n\n const initialElementVisibility = isElementVisible({\n container: rootEl,\n element: el,\n });\n\n if (!initialElementVisibility) {\n console.error('No visibility data found for element.', {\n element: el,\n container: rootEl,\n });\n\n continue;\n }\n\n const intersectionEntry: IntersectionObserverEntry = {\n boundingClientRect: initialElementVisibility.elementRect,\n intersectionRatio: initialElementVisibility.intersectionRatio,\n intersectionRect: initialElementVisibility.elementRect,\n isIntersecting: initialElementVisibility.isIntersecting,\n rootBounds: initialElementVisibility.containerRect,\n target: el,\n time: performance.now(),\n };\n\n newIntersectionValue.push({\n ...intersectionEntry,\n ...createPositionObject(intersectionEntry),\n });\n\n currentlyObservedElements.add(el);\n observer.observe(el);\n }\n\n for (const el of elements.previousElements) {\n if (elements.currentElements.includes(el)) continue;\n\n observer.unobserve(el);\n currentlyObservedElements.delete(el);\n }\n\n elementIntersectionSignal.set(newIntersectionValue);\n };\n\n effect(() => {\n const rootEl = root().currentElement;\n const rendered = isRendered();\n const enabled = isEnabled();\n\n untracked(() => updateIntersectionObserver(rendered, enabled, rootEl));\n });\n\n effect(() => {\n const els = elements();\n const obs = observer();\n\n untracked(() => updateObservedElements(obs, els));\n });\n\n destroyRef.onDestroy(() => observer()?.disconnect());\n\n return elementIntersectionSignal.asReadonly();\n};\n\nexport const signalHostElementIntersection = (options?: SignalElementIntersectionOptions) =>\n signalElementIntersection(inject(ElementRef), 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 = () => signalElementLastScrollDirection(inject(ElementRef));\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\nexport type ElementScrollState = {\n canScroll: boolean;\n canScrollHorizontally: boolean;\n canScrollVertically: boolean;\n elementDimensions: NullableElementDimensions;\n};\n\nexport const areScrollStatesEqual = (a: ElementScrollState, b: ElementScrollState) => {\n return (\n a.canScroll === b.canScroll &&\n a.canScrollHorizontally === b.canScrollHorizontally &&\n a.canScrollVertically === b.canScrollVertically &&\n equal(a.elementDimensions, b.elementDimensions)\n );\n};\n\nexport const signalElementScrollState = (el: SignalElementBindingType, options?: SignalElementScrollStateOptions) => {\n const elements = buildElementSignal(el);\n const observedEl = firstElementSignal(elements);\n const elementDimensions = signalElementDimensions(elements);\n const elementMutations = signalElementMutations(elements, { childList: true, subtree: true, attributes: true });\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));\n","import { Signal, WritableSignal, afterNextRender, effect, isDevMode, isSignal, signal, untracked } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { map, pairwise } from 'rxjs';\n\nexport const previousSignalValue = <T>(signal: Signal<T>) => {\n const obs = toObservable(signal).pipe(\n pairwise(),\n map(([prev]) => prev),\n );\n\n return toSignal(obs);\n};\n\nexport type SyncSignalOptions = {\n /**\n * If true, the target signal will not be updated with the source signal's value in a sync operation.\n * This should be set to true for signals that need to be initialized first before syncing (eg. required inputs)\n * @default false\n */\n skipSyncRead?: boolean;\n\n /**\n * If true, the first time the effect will be triggered will be skipped.\n * @default false\n */\n skipFirstRun?: boolean;\n};\n\nexport const syncSignal = <T>(from: Signal<T>, to: WritableSignal<T>, options?: SyncSignalOptions) => {\n let isFirstRun = options?.skipSyncRead ? false : true;\n\n if (!options?.skipSyncRead) {\n try {\n // this might throw if the signal is not yet initialized (eg. a required signal input inside the constructor)\n // in that case we just skip the initial sync\n to.set(from());\n } catch {\n isFirstRun = false;\n\n if (isDevMode()) {\n console.warn('Failed to sync signals. The target signal is not yet initialized.', { from, to });\n }\n }\n }\n\n const ref = effect(() => {\n const formVal = from();\n\n if (options?.skipFirstRun && isFirstRun) {\n isFirstRun = false;\n 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 let cached: Signal<T> | null = null;\n return () => {\n if (!cached) cached = factory();\n return cached;\n };\n};\n","import { computed, DOCUMENT, inject } from '@angular/core';\nimport { BuildMediaQueryOptions, injectBreakpointObserver, injectRenderer } 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 = memoizeSignal(() => injectObserveBreakpoint({ max: 'xs' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is sm */\nexport const injectIsSm = memoizeSignal(() => injectObserveBreakpoint({ min: 'sm', max: 'sm' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is md */\nexport const injectIsMd = memoizeSignal(() => injectObserveBreakpoint({ min: 'md', max: 'md' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is lg */\nexport const injectIsLg = memoizeSignal(() => injectObserveBreakpoint({ min: 'lg', max: 'lg' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is xl */\nexport const injectIsXl = memoizeSignal(() => injectObserveBreakpoint({ min: 'xl', max: 'xl' }));\n\n/** Inject a signal containing a boolean value indicating if the viewport is 2xl */\nexport const injectIs2Xl = 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 = memoizeSignal(() => {\n const isXs = injectIsXs();\n const isSm = injectIsSm();\n const isMd = injectIsMd();\n const isLg = injectIsLg();\n const isXl = injectIsXl();\n const is2Xl = injectIs2Xl();\n\n return computed(() => {\n switch (true) {\n case is2Xl():\n return '2xl';\n case isXl():\n return 'xl';\n case isLg():\n return 'lg';\n case isMd():\n return 'md';\n case isSm():\n return 'sm';\n case isXs():\n default:\n return 'xs';\n }\n });\n});\n\n/** Inject a signal that indicates if the user is using a portrait display */\nexport const injectIsPortrait = memoizeSignal(() => injectObserveMediaQuery('(orientation: portrait)'));\n\n/** Inject a signal that indicates if the user is using a landscape display */\nexport const injectIsLandscape = memoizeSignal(() => injectObserveMediaQuery('(orientation: landscape)'));\n\n/** Inject a signal containing the current display orientation */\nexport const injectDisplayOrientation = 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 = memoizeSignal(() => injectObserveMediaQuery('(pointer: coarse)'));\n\n/** Inject a signal that indicates if the device has a fine input (mouse or stylus) */\nexport const injectHasPrecisionInput = memoizeSignal(() => injectObserveMediaQuery('(pointer: fine)'));\n\n/** Inject a signal containing the current device input type */\nexport const injectDeviceInputType = memoizeSignal(() => {\n const isTouch = injectHasTouchInput();\n\n return computed(() => {\n if (isTouch()) return 'touch';\n return 'mouse';\n });\n});\n\n/** Inject a signal containing a boolean value indicating if the user can hover (eg. using a mouse) */\nexport const injectCanHover = memoizeSignal(() => injectObserveMediaQuery('(hover: hover)'));\n\n/** Inject a signal containing the viewport dimensions */\nexport const injectViewportDimensions = memoizeSignal(() => signalElementDimensions(createDocumentElementSignal()));\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 = memoizeSignal(() => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n\n const scrollbarRuler = renderer.createElement('div');\n scrollbarRuler.style.width = '100px';\n scrollbarRuler.style.height = '100px';\n scrollbarRuler.style.overflow = 'scroll';\n scrollbarRuler.style.position = 'absolute';\n scrollbarRuler.style.top = '-9999px';\n renderer.appendChild(document.body, scrollbarRuler);\n\n const scrollContainerDimensions = signalElementDimensions(scrollbarRuler);\n\n return scrollContainerDimensions;\n});\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, effect, inject, PLATFORM_ID } from '@angular/core';\nimport { injectRenderer } from '../../providers';\nimport { injectScrollbarDimensions, injectViewportDimensions } from '../media-queries';\n\nlet hasWrittenScrollbarSizes = false;\n\n/**\n * Applies scrollbar size CSS variables to the documentElement (html tag) in pixels.\n * - `--et-sw`: scrollbar width\n * - `--et-sh`: scrollbar height\n */\nexport const writeScrollbarSizeToCssVariables = () => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n if (hasWrittenScrollbarSizes) {\n return;\n }\n hasWrittenScrollbarSizes = true;\n\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const scrollbarDimensions = injectScrollbarDimensions();\n\n effect(() => {\n const dimensions = scrollbarDimensions().rect?.();\n\n if (!dimensions) return;\n\n renderer.setCssProperties(document.documentElement, {\n '--et-sw': `${dimensions.width}px`,\n '--et-sh': `${dimensions.height}px`,\n });\n });\n};\n\nlet hasWrittenViewportSizes = false;\n\n/**\n * Applies viewport size CSS variables to the documentElement (html tag) in pixels.\n * - `--et-vw`: viewport width excluding scrollbar width\n * - `--et-vh`: viewport height excluding scrollbar height\n */\nexport const writeViewportSizeToCssVariables = () => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n if (hasWrittenViewportSizes) {\n return;\n }\n hasWrittenViewportSizes = true;\n\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const htmlElementDimensions = injectViewportDimensions();\n\n effect(() => {\n const dimensions = htmlElementDimensions().rect?.();\n\n if (!dimensions) return;\n\n renderer.setCssProperties(document.documentElement, {\n '--et-vw': `${dimensions.width}px`,\n '--et-vh': `${dimensions.height}px`,\n });\n });\n};\n","import { DOCUMENT, DestroyRef, Signal, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, map, 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/** The deadzone in pixels after which the cursor drag scroll will take effect. */\nconst CURSOR_DRAG_SCROLL_DEADZONE = 5;\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 scrollState = signalElementScrollState(elements);\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 const canScroll = computed(() => {\n const currentScrollState = scrollState();\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 // 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.removeStyle(el, 'cursor', 'scrollSnapType', 'scrollBehavior');\n renderer.removeStyle(document.documentElement, 'cursor');\n renderer.removeClass(el, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_INIT_CLASS);\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.removeStyle(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 const mouseUp = fromEvent<MouseEvent>(document, 'mouseup');\n const mouseMove = fromEvent<MouseEvent>(document, 'mousemove');\n const el = element().currentElement;\n\n if (!el) return;\n\n mouseMove\n .pipe(\n takeUntilDestroyed(destroyRef),\n takeUntil(mouseUp),\n tap((e) => updateDragging(e)),\n )\n .subscribe();\n\n mouseUp\n .pipe(\n take(1),\n takeUntilDestroyed(destroyRef),\n tap(() => updateDraggingEnd()),\n )\n .subscribe();\n\n initialDragPosition.set({ x: e.clientX, y: e.clientY });\n initialScrollPosition.set({ x: el.scrollLeft, y: el.scrollTop });\n isInitDragging.set(true);\n };\n\n toObservable(element)\n .pipe(\n map((e) => e?.currentElement),\n switchMap((el) => (el ? fromEvent<MouseEvent>(el, 'mousedown') : of(null))),\n filter((e): e is MouseEvent => !!e),\n filter(() => 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 {\n Injector,\n PLATFORM_ID,\n Signal,\n computed,\n effect,\n inject,\n linkedSignal,\n signal,\n untracked,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Data, Event, 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 = 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 = memoizeSignal(() => {\n const router = inject(Router);\n\n const initialRoute = createInitialRoute();\n\n return toSignal(router.events, {\n initialValue: new NavigationEnd(-1, initialRoute, initialRoute),\n });\n});\n\n/**\n * Signal that indicates whether the router has been initialized.\n * The router is considered initialized once the first NavigationEnd event with an id different than -1 has been emitted.\n */\nexport const injectIsRouterInitialized = memoizeSignal(() => {\n const event = injectRouterEvent();\n\n return computed(() => {\n const e = event();\n\n return (e instanceof NavigationEnd && e.id !== -1) || e instanceof NavigationSkipped;\n });\n});\n\n/**\n * Inject the current url.\n * The url includes query params as well as the fragment. Use `injectRoute` instead if you are not intrusted in those.\n * @example \"/my-page?query=1¶m=true#fragment\"\n */\nexport const injectUrl = memoizeSignal(() => {\n const event = injectRouterEvent();\n\n return linkedSignal<Event | null, string>({\n source: event,\n computation: (curr, prev) => {\n if (curr instanceof NavigationEnd) {\n return curr.urlAfterRedirects;\n } else if (curr instanceof NavigationSkipped) {\n return curr.url;\n } else if (prev?.value) {\n return prev.value;\n }\n\n return createInitialRoute();\n },\n }).asReadonly();\n});\n\n/**\n * Inject the current route\n * @example \"/my-page\"\n */\nexport const injectRoute = 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\nconst createRouterState = (router: Router) => {\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 * Inject the complete router state. This includes the current route data, path params, query params, title and fragment.\n */\nexport const injectRouterState = memoizeSignal(() => {\n const event = injectRouterEvent();\n const router = inject(Router);\n\n const routerState = signal<RouterState>(createRouterState(router));\n\n effect(() => {\n const e = event();\n\n untracked(() => {\n if (e instanceof NavigationEnd && e.id === -1) {\n return;\n } else {\n routerState.set(createRouterState(router));\n }\n });\n });\n\n return computed(() => routerState(), { equal });\n});\n\n/** Inject a signal containing the current route fragment (the part after the # inside the url if present) */\nexport const injectFragment = <T = string | null>(\n config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>,\n) => {\n const routerState = injectRouterState();\n const fragment = computed(() => routerState().fragment);\n\n return transformOrReturn(fragment, config);\n};\n\n/** Inject all currently available query parameters as a signal */\nexport const injectQueryParams = () => {\n const routerState = injectRouterState();\n\n const queryParams = computed(() => routerState().queryParams);\n\n return queryParams;\n};\n\n/** Inject all currently available route data as a signal */\nexport const injectRouteData = () => {\n const routerState = injectRouterState();\n\n const data = computed(() => routerState().data);\n\n return data;\n};\n\n/** Inject the current route title as a signal */\nexport const injectRouteTitle = <T = string | null>(config?: InjectUtilTransformConfig<string | null, T>) => {\n const routerState = injectRouterState();\n const title = computed(() => routerState().title);\n\n return transformOrReturn(title, config);\n};\n\n/** Inject all currently available path parameters as a signal */\nexport const injectPathParams = () => {\n const routerState = injectRouterState();\n\n const pathParams = computed(() => routerState().pathParams);\n\n return pathParams;\n};\n\nexport type InjectQueryParamConfig<T> = InjectUtilTransformConfig<string | null, T> & {\n /**\n * If true, the initial value will be read from the browser's url.\n * Note that this will not work with arrays or complex objects.\n */\n requireSync?: boolean;\n};\n\nconst getQueryParamFromUrl = (key: string): string | null => {\n if (typeof window === 'undefined') return null;\n\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(key);\n};\n\n/** Inject a specific query parameter as a signal */\nexport const injectQueryParam = <T = string | null>(key: string, config?: InjectQueryParamConfig<T>) => {\n const queryParams = injectQueryParams();\n const src = computed(() => queryParams()[key] ?? (config?.requireSync ? getQueryParamFromUrl(key) : null)) as Signal<\n string | null\n >;\n\n return transformOrReturn(src, config);\n};\n\n/** Inject a specific route data item as a signal */\nexport const injectRouteDataItem = <T = unknown>(key: string, config?: InjectUtilTransformConfig<unknown, T>) => {\n const data = injectRouteData();\n const src = computed(() => data()[key] ?? null) as Signal<T>;\n\n return transformOrReturn(src, config);\n};\n\n/** Inject a specific path parameter as a signal */\nexport const injectPathParam = <T = string | null>(\n key: string,\n config?: InjectUtilTransformConfig<string | null, T>,\n) => {\n const pathParams = injectPathParams();\n const src = computed(() => pathParams()[key] ?? null) as Signal<string | null>;\n\n return transformOrReturn(src, config);\n};\n\n/**\n * Inject query params that changed during navigation. Unchanged query params will be ignored.\n * Removed query params will be represented by the symbol `ET_PROPERTY_REMOVED`.\n */\nexport const injectQueryParamChanges = 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 = 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","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, inject, PLATFORM_ID } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { combineLatest, debounceTime, pairwise } from 'rxjs';\nimport { injectRoute, injectRouterState } from '../router';\n\nexport type SetupScrollRestorationConfig = {\n /**\n * The scrollable container.\n * @default document.documentElement\n */\n scrollElement?: HTMLElement;\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\nexport const ET_DISABLE_SCROLL_TOP = Symbol('ET_DISABLE_SCROLL_TOP');\nexport const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE = Symbol('ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE');\nexport const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE = Symbol('ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE');\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 setupScrollRestoration = (config: SetupScrollRestorationConfig = {}) => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return;\n }\n\n const state = injectRouterState();\n const route = injectRoute();\n const document = inject(DOCUMENT);\n\n combineLatest([toObservable(state).pipe(pairwise()), toObservable(route).pipe(pairwise())])\n .pipe(debounceTime(1))\n .subscribe(([[prevState, currState], [prevRoute, currRoute]]) => {\n const sameUrlNavigation = prevRoute === currRoute;\n const didFragmentChange = prevState.fragment !== currState.fragment;\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 (config.scrollElement ?? document.documentElement).scrollTop = 0;\n } else if (caseFragment) {\n const fragmentElement = document.getElementById(currState.fragment ?? '');\n\n if (fragmentElement) {\n fragmentElement.scrollIntoView({ behavior: config.fragment?.smooth ? 'smooth' : 'auto' });\n }\n }\n } else {\n const viaReturnRoute =\n currState.data[ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE] && prevState.data[ET_DISABLE_SCROLL_TOP];\n const explicitly = currState.data[ET_DISABLE_SCROLL_TOP];\n const pathParamsChange = currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE];\n\n if (viaReturnRoute || explicitly || pathParamsChange) {\n return;\n }\n\n const el = config.scrollElement ?? document.documentElement;\n el.scrollTop = 0;\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 const writeLog = (...args: unknown[]) => {\n if (disableLogging()) {\n return;\n }\n console.log(...args);\n };\n\n return {\n log: (...args: unknown[]) => writeLog(`\\x1B[32;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n warn: (...args: unknown[]) => writeLog(`\\x1B[93;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n error: (...args: unknown[]) => writeLog(`\\x1B[31;40;24m[${scope} ${feature}]\\x1B[m`, ...args),\n };\n};\n","export const clamp = (value: number, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n\nexport const round = (value: number, precision = 0) => {\n const multiplier = Math.pow(10, precision);\n return Math.round(value * multiplier) / multiplier;\n};\n","export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value);\n};\n\nexport const getObjectProperty = (obj: Record<string, unknown>, prop: string) => {\n const hasDotNotation = prop.includes('.');\n const hasBracketNotation = prop.includes('[');\n\n if (!hasDotNotation && !hasBracketNotation) return obj[prop];\n\n const props = prop.split('.');\n\n let value: unknown = obj;\n\n for (const prop of props) {\n if (!isObject(value)) return undefined;\n\n if (prop.includes('[')) {\n const [key, index] = prop.split('[').map((part) => part.replace(']', '')) as [string, string];\n const arr = value[key];\n if (!Array.isArray(arr)) return undefined;\n\n value = arr[+index];\n } else {\n value = value[prop];\n }\n }\n\n return value;\n};\n","import { clone } from './comparison';\n\nexport 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 devOnly = false,\n public data: unknown = RUNTIME_ERROR_NO_DATA,\n ) {\n super(formatRuntimeError<T>(code, message, devOnly));\n\n if (data !== RUNTIME_ERROR_NO_DATA) {\n try {\n const _data = clone(data);\n\n setTimeout(() => {\n console.error(_data);\n }, 1);\n } catch {\n setTimeout(() => {\n console.error(data);\n }, 1);\n }\n }\n }\n}\n\nexport function formatRuntimeError<T extends number>(\n code: T,\n message: null | false | string,\n devOnly: boolean,\n): string {\n // prefix code with zeros if it's less than 100\n const codeWithZeros = code < 10 ? `00${code}` : code < 100 ? `0${code}` : code;\n\n const fullCode = `ET${codeWithZeros}`;\n const devOnlyText = devOnly ? ' [DEV ONLY] ' : '';\n return `${devOnlyText}${fullCode}${message ? ': ' + message : ''}`;\n}\n","import { clamp } from './math';\n\n/**\n * Checks if an element or the viewport can scroll in a given direction.\n * @param element The element to check. If null/undefined, checks if the viewport can scroll.\n * @param direction The direction to check. If not provided, checks both directions.\n * @returns true if the element or viewport can scroll in the given direction.\n */\nexport const elementCanScroll = (element?: HTMLElement | null, direction?: 'x' | 'y') => {\n const el = element || document.documentElement;\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 ({\n left: 0,\n top: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n width: window.innerWidth,\n height: window.innerHeight,\n x: 0,\n y: 0,\n toJSON: () => ({}),\n }) as DOMRect;\n\nexport type IsElementVisibleOptions = {\n /**\n * The element to check if it is visible inside a container.\n */\n element?: HTMLElement | null;\n\n /**\n * The container to check if the element is visible inside.\n * If null or undefined, uses the viewport as the container.\n * @default null (viewport)\n */\n container?: HTMLElement | null;\n\n /**\n * The container's rect to check if the element is visible inside. Can be supplied to reduce the amount of DOM reads.\n * Only used when container is provided and not null.\n * @default container.getBoundingClientRect()\n */\n containerRect?: DOMRect | null;\n\n /**\n * The element's rect. Can be supplied to reduce the amount of DOM reads.\n * @default element.getBoundingClientRect()\n */\n elementRect?: DOMRect | null;\n};\n\nexport type CurrentElementVisibility = {\n /**\n * Whether the element is visible in the inline direction.\n */\n inline: boolean;\n\n /**\n * Whether the element is visible in the block direction.\n */\n block: boolean;\n\n /**\n * The percentage of the element that is visible in the inline direction.\n */\n inlineIntersection: number;\n\n /**\n * The percentage of the element that is visible in the block direction.\n */\n blockIntersection: number;\n\n /**\n * Whether the element is intersecting the container.\n */\n isIntersecting: boolean;\n\n /**\n * The ratio of the element that is intersecting the container.\n */\n intersectionRatio: number;\n\n /**\n * The element that is being checked for visibility.\n */\n element: HTMLElement;\n\n /**\n * The container's rect used for the calculation.\n */\n containerRect: DOMRect;\n\n /**\n * The element's rect used for the calculation.\n */\n elementRect: DOMRect;\n};\n\nexport const isElementVisible = (options: IsElementVisibleOptions): CurrentElementVisibility | null => {\n const { container, element } = options;\n\n if (!element) {\n return null;\n }\n\n const elementRect = options.elementRect || element.getBoundingClientRect();\n const containerRect = container ? options.containerRect || container.getBoundingClientRect() : createViewportRect();\n\n const canScroll = elementCanScroll(container);\n\n if (!canScroll) {\n return {\n inline: true,\n block: true,\n blockIntersection: 1,\n inlineIntersection: 1,\n intersectionRatio: 1,\n isIntersecting: true,\n element,\n containerRect,\n elementRect,\n };\n }\n\n const elLeft = elementRect.left;\n const elTop = elementRect.top;\n const elWidth = elementRect.width || 1;\n const elHeight = elementRect.height || 1;\n const elRight = elLeft + elWidth;\n const elBottom = elTop + elHeight;\n\n const conLeft = containerRect.left;\n const conTop = containerRect.top;\n const conRight = conLeft + containerRect.width;\n const conBottom = conTop + containerRect.height;\n\n const isElementInlineVisible = elLeft >= conLeft && elRight <= conRight;\n const isElementBlockVisible = elTop >= conTop && elBottom <= conBottom;\n\n const inlineIntersection = Math.min(elRight, conRight) - Math.max(elLeft, conLeft);\n const blockIntersection = Math.min(elBottom, conBottom) - Math.max(elTop, conTop);\n\n const inlineIntersectionPercentage = clamp(inlineIntersection / elWidth, 0, 1);\n const blockIntersectionPercentage = clamp(blockIntersection / elHeight, 0, 1);\n\n return {\n inline: isElementInlineVisible,\n block: isElementBlockVisible,\n inlineIntersection: inlineIntersectionPercentage,\n blockIntersection: blockIntersectionPercentage,\n isIntersecting: isElementInlineVisible && isElementBlockVisible,\n element,\n containerRect,\n elementRect,\n\n // Round the intersection ratio to the nearest 0.01 to avoid floating point errors and system scaling issues.\n intersectionRatio: Math.round(Math.min(inlineIntersectionPercentage, blockIntersectionPercentage) * 100) / 100,\n };\n};\n\nexport const getElementScrollCoordinates = (options: ScrollToElementOptions): ScrollToOptions => {\n const {\n container,\n element,\n direction,\n behavior = 'smooth',\n origin = 'nearest',\n scrollBlockMargin = 0,\n scrollInlineMargin = 0,\n } = options;\n\n if (!element || !container || !elementCanScroll(container)) {\n return {\n behavior,\n left: undefined,\n top: undefined,\n };\n }\n\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const { scrollLeft, scrollTop } = container;\n const elWidth = elementRect.width;\n const elHeight = elementRect.height;\n const elLeft = elementRect.left;\n const elTop = elementRect.top;\n const elRight = elementRect.right;\n const elBottom = elementRect.bottom;\n\n const conWidth = containerRect.width;\n const conHeight = containerRect.height;\n const conLeft = containerRect.left;\n const conTop = containerRect.top;\n const conRight = containerRect.right;\n const conBottom = containerRect.bottom;\n\n const shouldScrollLeft = direction === 'inline' || direction === 'both' || !direction;\n const shouldScrollTop = direction === 'block' || direction === 'both' || !direction;\n\n let scrollLeftTo = scrollLeft;\n let scrollTopTo = scrollTop;\n\n const relativeTop = elTop - conTop;\n const relativeLeft = elLeft - conLeft;\n\n const calculateScrollToStart = () => {\n scrollLeftTo = scrollLeft + relativeLeft - scrollInlineMargin;\n scrollTopTo = scrollTop + relativeTop - scrollBlockMargin;\n };\n\n const calculateScrollToEnd = () => {\n scrollLeftTo = scrollLeft + relativeLeft - conWidth + elWidth + scrollInlineMargin;\n scrollTopTo = scrollTop + relativeTop - conHeight + elHeight + scrollBlockMargin;\n };\n\n const calculateScrollToCenter = () => {\n scrollLeftTo = scrollLeft + relativeLeft - conWidth / 2 + elWidth / 2;\n scrollTopTo = scrollTop + relativeTop - conHeight / 2 + elHeight / 2;\n };\n\n const calculateScrollToNearest = () => {\n const isAbove = elBottom < conTop;\n const isPartialAbove = elTop < conTop && elBottom > conTop;\n const isBelow = elTop > conBottom;\n const isPartialBelow = elTop < conBottom && elBottom > conBottom;\n\n const isLeft = elRight < conLeft;\n const isPartialLeft = elLeft < conLeft && elRight > conLeft;\n const isRight = elLeft > conRight;\n const isPartialRight = elLeft < conRight && elRight > conRight;\n\n if (isAbove || isPartialAbove || isLeft || isPartialLeft) {\n calculateScrollToStart();\n } else if (isBelow || isPartialBelow || isRight || isPartialRight) {\n calculateScrollToEnd();\n }\n };\n\n switch (origin) {\n case 'start':\n calculateScrollToStart();\n break;\n case 'end':\n calculateScrollToEnd();\n break;\n case 'center':\n calculateScrollToCenter();\n break;\n case 'nearest':\n calculateScrollToNearest();\n break;\n }\n\n return {\n behavior,\n left: shouldScrollLeft ? scrollLeftTo : undefined,\n top: shouldScrollTop ? scrollTopTo : undefined,\n };\n};\n\nexport type ScrollToElementOptions = {\n /**\n * The element to scroll to.\n */\n element?: HTMLElement | null;\n\n /**\n * The scroll container to scroll to the element in.\n * Must be provided - cannot scroll the viewport programmatically with this function.\n */\n container?: HTMLElement | null;\n\n /**\n * The direction to scroll in.\n * @default 'both'\n */\n direction?: 'inline' | 'block' | 'both';\n\n /**\n * The origin of the element to scroll to.\n * @default 'nearest'\n */\n origin?: 'start' | 'end' | 'center' | 'nearest';\n\n /**\n * The scroll behavior.\n * @default 'smooth'\n */\n behavior?: ScrollBehavior;\n\n /**\n * The scroll inline-margin\n * @default 0\n */\n scrollInlineMargin?: number;\n\n /**\n * The scroll block-margin\n * @default 0\n */\n scrollBlockMargin?: number;\n};\n\nexport const scrollToElement = (options: ScrollToElementOptions) => {\n options.container?.scrollTo(getElementScrollCoordinates(options));\n};\n","import { ApplicationRef, inject, signal } from '@angular/core';\nimport { createRootProvider } from '../utils';\n\nexport const [, injectAngularRootElement] = createRootProvider(() => {\n const appRef = inject(ApplicationRef);\n\n const rootElement = signal<HTMLElement | null>(null);\n\n setTimeout(() => {\n const appComponents = appRef.components;\n if (appComponents.length > 0) {\n rootElement.set(appComponents[0]?.location.nativeElement);\n }\n });\n\n return rootElement;\n});\n","import { computed, DOCUMENT, ElementRef, inject, signal } from '@angular/core';\nimport { createProvider } from '../utils';\n\nexport const [provideBoundaryElement, injectBoundaryElement, BOUNDARY_ELEMENT_TOKEN] = createProvider(\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","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map, startWith } from 'rxjs';\nimport { createRootProvider, createStaticRootProvider } 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\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\nexport const [provideViewportConfig, injectViewportConfig] = createStaticRootProvider<ViewportConfig>(\n DEFAULT_VIEWPORT_CONFIG,\n {\n name: 'Viewport Config',\n },\n);\n\nexport type BuildMediaQueryOptions = {\n min?: number | Breakpoint;\n max?: number | Breakpoint;\n};\n\nexport const [provideBreakpointObserver, injectBreakpointObserver] = createRootProvider(\n () => {\n const breakpointObserver = inject(BreakpointObserver);\n const viewportConfig = injectViewportConfig();\n\n const isMediaQueryMatched = (mediaQuery: string) => breakpointObserver.isMatched(mediaQuery);\n\n const observeMediaQuery = (mediaQuery: string) => {\n return toSignal(\n breakpointObserver.observe(mediaQuery).pipe(\n map((x) => x.matches),\n startWith(isMediaQueryMatched(mediaQuery)),\n ),\n { requireSync: true },\n );\n };\n\n const observeBreakpoint = (options: BuildMediaQueryOptions) => observeMediaQuery(buildMediaQueryString(options));\n\n const isBreakpointMatched = (options: BuildMediaQueryOptions) =>\n isMediaQueryMatched(buildMediaQueryString(options));\n\n const getBreakpointSize = (type: Breakpoint, option: 'min' | 'max') => {\n const index = option === 'min' ? 0 : 1;\n const size = viewportConfig.breakpoints[type][index];\n\n if (size === Infinity || size === 0) {\n return size;\n }\n\n if (option === 'min') {\n return size;\n }\n\n // Due to scaling, the actual size of the viewport may be a decimal number.\n // Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px\n // and thus not matching any of the default breakpoints.\n return size + 0.9;\n };\n\n const buildMediaQueryString = (options: BuildMediaQueryOptions) => {\n if (!options.min && !options.max) {\n throw new Error('At least one of min or max must be defined');\n }\n\n const mediaQueryParts: string[] = [];\n\n if (options.min) {\n if (typeof options.min === 'number') {\n mediaQueryParts.push(`(min-width: ${options.min}px)`);\n } else {\n mediaQueryParts.push(`(min-width: ${getBreakpointSize(options.min, 'min')}px)`);\n }\n }\n\n if (options.min && options.max) {\n mediaQueryParts.push('and');\n }\n\n if (options.max) {\n if (typeof options.max === 'number') {\n mediaQueryParts.push(`(max-width: ${options.max}px)`);\n } else {\n mediaQueryParts.push(`(max-width: ${getBreakpointSize(options.max, 'max')}px)`);\n }\n }\n\n return mediaQueryParts.join(' ');\n };\n\n return {\n observeBreakpoint,\n isBreakpointMatched,\n getBreakpointSize,\n buildMediaQueryString,\n observeMediaQuery,\n isMediaQueryMatched,\n };\n },\n { name: 'Breakpoint Observer' },\n);\n","import { DestroyRef, DOCUMENT, inject, signal } from '@angular/core';\nimport { createRootProvider } from '../utils/angular/di';\n\nexport const [provideFocusVisibleTracker, injectFocusVisibleTracker, FOCUS_VISIBLE_TRACKER_TOKEN] = createRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const destroyRef = inject(DestroyRef);\n\n const isFocusVisible = signal(false);\n let hadKeyboardEvent = false;\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Tab' || e.key === 'Shift' || e.key === 'Meta' || e.key === 'Alt' || e.key === 'Control') {\n hadKeyboardEvent = true;\n isFocusVisible.set(true);\n }\n };\n\n const onPointerDown = () => {\n hadKeyboardEvent = false;\n isFocusVisible.set(false);\n };\n\n const onFocus = () => {\n if (hadKeyboardEvent) {\n isFocusVisible.set(true);\n }\n };\n\n const onBlur = () => {\n 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","import { signal } from '@angular/core';\nimport { createRootProvider } from '../utils';\n\nexport const [provideLocale, injectLocale] = createRootProvider(\n () => {\n const currentLocale = signal('en');\n\n return {\n currentLocale,\n };\n },\n {\n name: 'Locale',\n },\n);\n","import { inject, RendererFactory2, RendererStyleFlags2 } from '@angular/core';\nimport { createRootProvider } from '../utils';\n\nexport const [provideRenderer, injectRenderer] = createRootProvider(\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 (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 = (element: HTMLElement, ...styles: (keyof CSSStyleDeclaration)[]) => {\n styles.forEach((style) => renderer.removeStyle(element, style as string));\n };\n\n const setCssProperty = (element: HTMLElement, name: string, value: string | null) => {\n if (value !== null && value !== undefined) {\n renderer.setStyle(element, name, value, RendererStyleFlags2.DashCase);\n } else {\n renderer.removeStyle(element, name, RendererStyleFlags2.DashCase);\n }\n };\n\n const setCssProperties = (element: HTMLElement, properties: Record<string, string | null>) => {\n Object.entries(properties).forEach(([name, value]) => {\n setCssProperty(element, name, value);\n });\n };\n\n const setAttribute = (element: HTMLElement, name: string, value: string | null, namespace?: string | null) => {\n if (value !== null && value !== undefined) {\n renderer.setAttribute(element, name, value, namespace);\n } else {\n renderer.removeAttribute(element, name, namespace);\n }\n };\n\n const removeAttribute = (element: HTMLElement, ...names: string[]) => {\n names.forEach((name) => renderer.removeAttribute(element, name));\n };\n\n const setProperty = (element: HTMLElement, name: string, value: unknown) => {\n renderer.setProperty(element, name, value);\n };\n\n const setProperties = (element: HTMLElement, properties: Record<string, unknown>) => {\n Object.entries(properties).forEach(([name, value]) => {\n renderer.setProperty(element, name, value);\n });\n };\n\n const createElement = <K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n namespace?: string | null,\n ): HTMLElementTagNameMap[K] => {\n return renderer.createElement(tagName, namespace);\n };\n\n const createText = (value: string): Text => {\n return renderer.createText(value);\n };\n\n const createComment = (value: string): Comment => {\n return renderer.createComment(value);\n };\n\n const appendChild = (parent: HTMLElement, newChild: Node) => {\n renderer.appendChild(parent, newChild);\n };\n\n const insertBefore = (parent: Node, newChild: Node, refChild: Node | null) => {\n renderer.insertBefore(parent, newChild, refChild);\n };\n\n const removeChild = (parent: Node, oldChild: Node, isHostElement?: boolean) => {\n renderer.removeChild(parent, oldChild, isHostElement);\n };\n\n const selectRootElement = (selectorOrNode: string | HTMLElement, preserveContent?: boolean): HTMLElement => {\n return renderer.selectRootElement(selectorOrNode, preserveContent);\n };\n\n const parentNode = (node: Node): Node | null => {\n return renderer.parentNode(node);\n };\n\n const nextSibling = (node: Node): Node | null => {\n return renderer.nextSibling(node);\n };\n\n const setValue = (node: Node, value: string) => {\n renderer.setValue(node, value);\n };\n\n const listen = (\n target: HTMLElement | Window | Document | 'window' | 'document' | 'body',\n eventName: string,\n callback: (event: Event) => boolean | void,\n ): (() => void) => {\n return renderer.listen(target, eventName, callback);\n };\n\n const destroyNode = (node: Node) => {\n if (renderer.destroyNode) {\n renderer.destroyNode(node);\n }\n };\n\n const replaceChild = (parent: Node, newChild: Node, oldChild: Node) => {\n renderer.insertBefore(parent, newChild, oldChild);\n renderer.removeChild(parent, oldChild);\n };\n\n const empty = (element: HTMLElement) => {\n while (element.firstChild) {\n renderer.removeChild(element, element.firstChild);\n }\n };\n\n const setTextContent = (element: HTMLElement, text: string) => {\n renderer.setProperty(element, 'textContent', text);\n };\n\n const setInnerHTML = (element: HTMLElement, html: string) => {\n renderer.setProperty(element, 'innerHTML', html);\n };\n\n const setAttributes = (\n element: HTMLElement,\n attributes: Record<string, string | null>,\n namespace?: string | null,\n ) => {\n Object.entries(attributes).forEach(([name, value]) => {\n setAttribute(element, name, value, namespace);\n });\n };\n\n const setDataAttributes = (element: HTMLElement, data: Record<string, string | null>) => {\n Object.entries(data).forEach(([key, value]) => {\n setAttribute(element, `data-${key}`, value);\n });\n };\n\n return {\n addClass,\n removeClass,\n toggleClass,\n setStyle,\n removeStyle,\n setAttribute,\n removeAttribute,\n setProperty,\n setProperties,\n createElement,\n createText,\n createComment,\n appendChild,\n insertBefore,\n removeChild,\n selectRootElement,\n parentNode,\n nextSibling,\n setValue,\n listen,\n destroyNode,\n\n replaceChild,\n empty,\n setTextContent,\n setInnerHTML,\n setAttributes,\n setDataAttributes,\n setCssProperty,\n setCssProperties,\n\n renderer,\n };\n },\n { name: 'Angular Renderer' },\n);\n\nexport type AngularRenderer = NonNullable<ReturnType<typeof injectRenderer>>;\n","import { Observable } from 'rxjs';\n\nexport const nextFrame = (cb: () => void) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n};\n\nexport const fromNextFrame = () => {\n return new Observable<void>((observer) => {\n nextFrame(() => {\n observer.next();\n observer.complete();\n });\n });\n};\n\nexport const forceReflow = (element: HTMLElement = document.body) => {\n return element.offsetHeight;\n};\n","import { AfterViewInit, DestroyRef, Directive, ElementRef, inject, InjectionToken, model } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, filter, of, Subject, switchMap, take, takeUntil, tap, timer } from 'rxjs';\nimport { injectRenderer } from '../providers';\nimport { ANIMATABLE_TOKEN, AnimatableDirective, AnimationEndEvent } from './animatable.directive';\nimport { forceReflow, fromNextFrame } from './animation-utils';\n\nexport const ANIMATED_LIFECYCLE_TOKEN = new InjectionToken<AnimatedLifecycleDirective>(\n 'ANIMATED_LIFECYCLE_DIRECTIVE_TOKEN',\n);\n\nconst ANIMATION_CLASSES = {\n enterFrom: 'et-animation-enter-from',\n enterActive: 'et-animation-enter-active',\n enterTo: 'et-animation-enter-to',\n enterDone: 'et-animation-enter-done',\n enterInterrupt: 'et-animation-enter-interrupt',\n leaveFrom: 'et-animation-leave-from',\n leaveActive: 'et-animation-leave-active',\n leaveTo: 'et-animation-leave-to',\n leaveDone: 'et-animation-leave-done',\n leaveInterrupt: 'et-animation-leave-interrupt',\n} as const;\n\nconst FORCE_INVISIBLE_CLASS = 'et-force-invisible';\n\nexport type AnimatedLifecycleState = 'entering' | 'entered' | 'leaving' | 'left' | 'init';\n\n@Directive({\n selector: '[etAnimatedLifecycle]',\n exportAs: 'etAnimatedLifecycle',\n providers: [\n {\n provide: ANIMATED_LIFECYCLE_TOKEN,\n useExisting: AnimatedLifecycleDirective,\n },\n ],\n hostDirectives: [AnimatableDirective],\n host: {\n class: FORCE_INVISIBLE_CLASS,\n },\n})\nexport class AnimatedLifecycleDirective implements AfterViewInit {\n private destroyRef = inject(DestroyRef);\n private cancelCurrentAnimation$ = new Subject<void>();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private animatable = inject(ANIMATABLE_TOKEN);\n private renderer = injectRenderer();\n private element = this.elementRef.nativeElement;\n\n private isConstructed = false;\n private transitionIdCounter = 0;\n\n private forcedAtFrameId: number | null = null;\n private currentFrameId = 0;\n\n state$ = new BehaviorSubject<AnimatedLifecycleState>('init');\n\n stateChange = outputFromObservable(this.state$);\n\n skipNextEnter = model(false);\n\n constructor() {\n this.state$\n .pipe(\n tap((state) => {\n if (state !== 'init') {\n this.removeClass(FORCE_INVISIBLE_CLASS);\n } else {\n this.addClass(FORCE_INVISIBLE_CLASS);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.trackFrameId();\n }\n\n private trackFrameId() {\n const updateFrameId = () => {\n this.currentFrameId = requestAnimationFrame(updateFrameId);\n };\n this.currentFrameId = requestAnimationFrame(updateFrameId);\n\n this.destroyRef.onDestroy(() => {\n cancelAnimationFrame(this.currentFrameId);\n });\n }\n\n ngAfterViewInit(): void {\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.updateState('entered');\n this.skipNextEnter.set(false);\n this.addClass(ANIMATION_CLASSES.enterDone);\n this.forcedAtFrameId = null;\n return;\n }\n\n const isInterrupting = currentState === 'leaving';\n\n this.updateState('entering');\n this.removeClass(ANIMATION_CLASSES.leaveDone);\n\n const previousCancel$ = this.cancelCurrentAnimation$;\n this.cancelCurrentAnimation$ = new Subject<void>();\n\n const transitionId = `enter-${++this.transitionIdCounter}`;\n this.animatable.setTransitionId(transitionId);\n\n const skipAnimation = this.forcedAtFrameId !== null && this.forcedAtFrameId === this.currentFrameId;\n this.forcedAtFrameId = null;\n\n 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 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.updateState('left');\n this.addClass(ANIMATION_CLASSES.leaveDone);\n this.forcedAtFrameId = null;\n return;\n }\n\n const isInterrupting = currentState === 'entering';\n\n this.updateState('leaving');\n this.removeClass(ANIMATION_CLASSES.enterDone);\n\n const previousCancel$ = this.cancelCurrentAnimation$;\n this.cancelCurrentAnimation$ = new Subject<void>();\n\n const transitionId = `leave-${++this.transitionIdCounter}`;\n this.animatable.setTransitionId(transitionId);\n\n const skipAnimation = this.forcedAtFrameId !== null && this.forcedAtFrameId === this.currentFrameId;\n this.forcedAtFrameId = null;\n\n 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 return;\n }\n\n if (isInterrupting) {\n this.handleInterruptedTransition({\n removeClasses: [\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.enterInterrupt,\n ],\n addClasses: [ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo, ANIMATION_CLASSES.leaveInterrupt],\n expectedState: 'leaving',\n transitionId,\n onComplete: () => {\n this.updateState('left');\n this.removeClasses(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this.addClass(ANIMATION_CLASSES.leaveDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n } else {\n this.handleNormalTransition({\n fromClass: ANIMATION_CLASSES.leaveFrom,\n activeClass: ANIMATION_CLASSES.leaveActive,\n toClass: ANIMATION_CLASSES.leaveTo,\n expectedState: 'leaving',\n transitionId,\n onComplete: () => {\n this.updateState('left');\n this.removeClasses(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this.addClass(ANIMATION_CLASSES.leaveDone);\n },\n cancelSignal: this.cancelCurrentAnimation$,\n });\n }\n\n previousCancel$.next();\n previousCancel$.complete();\n }\n\n forceEnteredState() {\n this.cancelCurrentAnimation$.next();\n\n this.updateState('entered');\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n );\n this.addClass(ANIMATION_CLASSES.enterDone);\n this.forcedAtFrameId = this.currentFrameId;\n }\n\n forceLeftState() {\n this.cancelCurrentAnimation$.next();\n\n this.updateState('left');\n this.removeClasses(\n ANIMATION_CLASSES.enterFrom,\n ANIMATION_CLASSES.enterActive,\n ANIMATION_CLASSES.enterTo,\n ANIMATION_CLASSES.leaveFrom,\n ANIMATION_CLASSES.leaveActive,\n ANIMATION_CLASSES.leaveTo,\n );\n this.addClass(ANIMATION_CLASSES.leaveDone);\n this.forcedAtFrameId = this.currentFrameId;\n }\n\n private handleNormalTransition(config: {\n fromClass: string;\n activeClass: string;\n toClass: string;\n expectedState: 'entering' | 'leaving';\n transitionId: string;\n onComplete: () => void;\n cancelSignal: Subject<void>;\n }) {\n const { fromClass, activeClass, toClass, expectedState, transitionId, onComplete, cancelSignal } = config;\n\n this.removeClasses(ANIMATION_CLASSES.enterInterrupt, ANIMATION_CLASSES.leaveInterrupt);\n\n this.addClass(fromClass);\n forceReflow();\n this.addClass(activeClass);\n\n fromNextFrame()\n .pipe(\n tap(() => {\n if (this.state$.value === expectedState) {\n this.removeClass(fromClass);\n this.addClass(toClass);\n }\n }),\n switchMap(() => this.animatable.animationEnd$),\n filter((e) => this.state$.value === expectedState && !e.cancelled && e.transitionId === transitionId),\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 timer(0)\n .pipe(\n switchMap(() => this.animatable.isAnimating$),\n take(1),\n switchMap((isAnimating) => {\n if (!isAnimating && this.state$.value === expectedState) {\n return of({ cancelled: false, transitionId } as AnimationEndEvent);\n }\n\n return this.animatable.animationEnd$.pipe(\n switchMap((e) => {\n if (e.transitionId === transitionId) {\n return of(e);\n }\n\n return this.animatable.isAnimating$.pipe(\n take(1),\n switchMap((stillAnimating) => {\n if (!stillAnimating && this.state$.value === expectedState) {\n return of({ cancelled: false, transitionId } as AnimationEndEvent);\n }\n\n return of(null);\n }),\n );\n }),\n filter((e): e is AnimationEndEvent => e !== null && e.transitionId === transitionId),\n );\n }),\n filter((e) => this.state$.value === expectedState && !e.cancelled),\n tap(() => onComplete()),\n take(1),\n takeUntil(cancelSignal),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private addClass(className: string) {\n this.renderer.addClass(this.element, className);\n }\n\n private removeClass(className: string) {\n this.renderer.removeClass(this.element, className);\n }\n\n private removeClasses(...classNames: string[]) {\n this.renderer.removeClass(this.element, ...classNames);\n }\n\n private updateState(newState: AnimatedLifecycleState) {\n this.state$.next(newState);\n }\n}\n","import { Directive, InjectionToken, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap } from 'rxjs';\nimport { ANIMATED_LIFECYCLE_TOKEN } from './animated-lifecycle.directive';\n\nexport const ANIMATED_IF_TOKEN = new InjectionToken<AnimatedIfDirective>('ANIMATED_IF_TOKEN');\n\n@Directive({\n selector: '[etAnimatedIf]',\n providers: [\n {\n provide: ANIMATED_IF_TOKEN,\n useExisting: AnimatedIfDirective,\n },\n ],\n})\nexport class AnimatedIfDirective {\n private templateRef = inject(TemplateRef);\n private viewContainerRef = inject(ViewContainerRef);\n private animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);\n\n private hasView = false;\n\n ifValue = input<unknown>(null, { alias: 'etAnimatedIf' });\n\n constructor() {\n toObservable(this.ifValue)\n .pipe(\n switchMap((value) => {\n if (value) {\n if (!this.hasView) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n this.hasView = true;\n }\n\n this.animatedLifecycle.enter();\n\n return of(null);\n }\n\n if (!this.hasView) {\n return of(null);\n }\n\n this.animatedLifecycle.leave();\n\n return this.animatedLifecycle.state$.pipe(\n filter((state) => state === 'left'),\n tap(() => {\n this.viewContainerRef.clear();\n this.hasView = false;\n }),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n NgZone,\n Signal,\n StaticProvider,\n ViewContainerRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n MiddlewareData,\n OffsetOptions,\n Padding,\n Placement,\n arrow,\n autoUpdate,\n computePosition,\n flip,\n hide,\n limitShift,\n offset,\n shift,\n size,\n} from '@floating-ui/dom';\nimport { Subject, Subscription, filter, take, tap } from 'rxjs';\nimport { injectBoundaryElement } from '../providers';\nimport { signalElementDimensions } from '../signals';\nimport { ProvideThemeDirective } from '../theming';\nimport { AnimatedLifecycleDirective } from './animated-lifecycle.directive';\nimport { nextFrame } from './animation-utils';\n\nexport type AnimatedOverlayComponentBase = {\n animatedLifecycle: Signal<AnimatedLifecycleDirective | undefined>;\n setThemeFromProvider: (provider: ProvideThemeDirective) => void;\n};\n\nexport type AnimatedOverlayMountConfig<T> = {\n component: ComponentType<T>;\n providers?: StaticProvider[];\n data?: Partial<T>;\n themeProvider?: ProvideThemeDirective | null;\n};\n\nexport type AnimatedOverlayState = 'init' | 'mounting' | 'mounted' | 'unmounting' | 'unmounted';\n\n@Directive({\n selector: '[etAnimatedOverlay]',\n exportAs: 'etAnimatedOverlay',\n host: {\n class: 'et-animated-overlay',\n },\n standalone: true,\n})\nexport class AnimatedOverlayDirective<T extends AnimatedOverlayComponentBase> {\n private overlayService = inject(Overlay);\n private injector = inject(Injector);\n private viewContainerRef = inject(ViewContainerRef);\n private zone = inject(NgZone);\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private rootBoundary = injectBoundaryElement({ optional: true });\n private destroyRef = inject(DestroyRef);\n\n private floatingElCleanupFn: (() => void) | null = null;\n private unmountSubscription: Subscription | null = null;\n\n placement = input<Placement | undefined>('bottom');\n fallbackPlacements = input<Placement[]>();\n offset = input<OffsetOptions | null>(null);\n arrowPadding = input<Padding | null>(4);\n viewportPadding = input<Padding | null>(8);\n autoResize = input(false, { transform: booleanAttribute });\n shift = input(true, { transform: booleanAttribute });\n autoHide = input(false, { transform: booleanAttribute });\n autoCloseIfReferenceHidden = input(false, { transform: booleanAttribute });\n referenceElement = input(this.elementRef.nativeElement);\n mirrorWidth = input(false, { transform: booleanAttribute });\n\n portal: ComponentPortal<T> | null = null;\n overlayRef: OverlayRef | null = null;\n componentRef: ComponentRef<T> | null = null;\n\n beforeOpened$ = new Subject<void>();\n afterOpened$ = new Subject<void>();\n beforeClosed$ = new Subject<void>();\n afterClosed$ = new Subject<void>();\n\n state = signal<AnimatedOverlayState>('init');\n\n isMounted = computed(() => this.state() === 'mounted');\n isMounting = computed(() => this.state() === 'mounting');\n isUnmounted = computed(() => this.state() === 'unmounted');\n isUnmounting = computed(() => this.state() === 'unmounting');\n\n canMount = computed(() => !this.isMounted() && !this.isMounting());\n canUnmount = computed(() => (this.isMounted() || this.isMounting()) && !this.isUnmounting());\n\n isHidden = signal(false);\n\n isMounted$ = toObservable(this.isMounted);\n isMounting$ = toObservable(this.isMounting);\n isUnmounted$ = toObservable(this.isUnmounted);\n isUnmounting$ = toObservable(this.isUnmounting);\n\n canMount$ = toObservable(this.canMount);\n canUnmount$ = toObservable(this.canUnmount);\n\n isHidden$ = toObservable(this.isHidden);\n\n referenceElementDimensions = signalElementDimensions(\n computed(() => (this.mirrorWidth() ? this.referenceElement() : null)),\n );\n\n constructor() {\n effect(() => {\n const dimensions = this.referenceElementDimensions();\n\n if (!dimensions || !this.mirrorWidth()) return;\n\n this.overlayRef?.updateSize({\n width: this.elementRef.nativeElement.offsetWidth,\n });\n });\n\n this.destroyRef.onDestroy(() => this.destroy());\n }\n\n mount(config: AnimatedOverlayMountConfig<T>): T | undefined {\n if (this.isUnmounting()) {\n if (!this.componentRef) {\n if (isDevMode()) {\n console.warn('AnimatedOverlayDirective: Cannot remount. Component ref is not available.');\n }\n return;\n }\n\n this.unmountSubscription?.unsubscribe();\n this.unmountSubscription = null;\n\n this.applyComponentData(config.data);\n this.applyThemeProvider(config.themeProvider);\n\n const lifecycle = this.componentRef.instance.animatedLifecycle();\n if (lifecycle) {\n this.state.set('mounting');\n this.beforeOpened$.next();\n\n lifecycle.enter();\n\n lifecycle.state$\n .pipe(\n filter((s) => s === 'entered'),\n tap(() => {\n if (this.state() === 'mounting') {\n this.state.set('mounted');\n this.afterOpened$.next();\n }\n }),\n take(1),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n return this.componentRef.instance;\n }\n\n if (!this.canMount()) {\n if (isDevMode()) {\n console.warn('AnimatedOverlayDirective: Cannot mount. Component is already mounted or currently mounting.');\n }\n return;\n }\n\n const { component, providers, data, themeProvider } = config;\n\n this.state.set('mounting');\n this.beforeOpened$.next();\n\n const injector = Injector.create({\n parent: this.injector,\n providers: providers ?? [],\n });\n\n this.overlayRef = this.overlayService.create();\n this.portal = new ComponentPortal(component, this.viewContainerRef, injector);\n this.componentRef = this.overlayRef.attach(this.portal);\n\n this.applyComponentData(data);\n this.applyThemeProvider(themeProvider);\n this.updateOverlaySize();\n this.setupFloatingUI();\n\n return this.componentRef.instance;\n }\n\n unmount() {\n if (!this.isMounted() && !this.isMounting() && !this.isUnmounting()) {\n if (isDevMode()) {\n console.warn(`AnimatedOverlayDirective: Cannot unmount. Component is currently ${this.state()}`);\n }\n return;\n }\n\n if (this.isUnmounting()) {\n return;\n }\n\n if (!this.componentRef) {\n if (isDevMode()) {\n console.warn('AnimatedOverlayDirective: Cannot unmount. Component ref is not available.');\n }\n return;\n }\n\n this.state.set('unmounting');\n this.beforeClosed$.next();\n\n if (this.isHidden()) {\n this.destroy();\n return;\n }\n\n const lifecycle = this.componentRef.instance.animatedLifecycle();\n\n if (!lifecycle) {\n this.destroy();\n return;\n }\n\n lifecycle.leave();\n this.unmountSubscription = lifecycle.state$\n .pipe(\n filter((s) => s === 'left'),\n take(1),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.unmountSubscription = null;\n this.destroy();\n });\n }\n\n private applyComponentData(data?: Partial<T>) {\n if (!this.componentRef || !data) return;\n\n Object.assign(this.componentRef.instance, data);\n this.componentRef.changeDetectorRef.markForCheck();\n }\n\n private applyThemeProvider(themeProvider?: ProvideThemeDirective | null) {\n if (!this.componentRef || !themeProvider) return;\n\n this.componentRef.instance.setThemeFromProvider(themeProvider);\n }\n\n private updateOverlaySize() {\n if (!this.overlayRef || !this.mirrorWidth()) return;\n\n this.overlayRef.updateSize({\n width: this.elementRef.nativeElement.offsetWidth,\n });\n }\n\n private setupFloatingUI() {\n this.zone.runOutsideAngular(() => {\n if (!this.componentRef) return;\n\n const floatingEl = this.componentRef.location.nativeElement as HTMLElement;\n const floatingElArrow = this.getFloatingArrow();\n\n floatingEl.classList.add('et-floating-element');\n\n const refEl = this.referenceElement();\n const boundary = this.rootBoundary?.value();\n\n this.floatingElCleanupFn = autoUpdate(refEl, floatingEl, () => {\n this.updateFloatingPosition(floatingEl, refEl, boundary, floatingElArrow);\n });\n\n this.waitForRenderAndAnimate();\n });\n }\n\n private getFloatingArrow(): HTMLElement | null {\n if (!this.componentRef) return null;\n\n return this.componentRef.location.nativeElement.querySelector('[et-floating-arrow]') as HTMLElement | null;\n }\n\n private updateFloatingPosition(\n floatingEl: HTMLElement,\n refEl: HTMLElement,\n boundary: HTMLElement | undefined,\n floatingElArrow: HTMLElement | null,\n ) {\n if (!this.componentRef) return;\n\n const middleware = this.buildFloatingMiddleware(floatingEl, boundary, floatingElArrow);\n\n computePosition(refEl, floatingEl, {\n placement: this.placement(),\n middleware,\n }).then(({ x, y, placement, middlewareData }) => {\n this.applyFloatingStyles(floatingEl, x, y, placement);\n this.applyArrowStyles(floatingEl, middlewareData, floatingElArrow);\n this.handleReferenceHidden(floatingEl, middlewareData);\n });\n }\n\n private buildFloatingMiddleware(\n floatingEl: HTMLElement,\n boundary: HTMLElement | undefined,\n floatingElArrow: HTMLElement | null,\n ) {\n const middleware = [];\n\n const offsetValue = this.offset();\n if (offsetValue !== null) {\n middleware.push(offset(offsetValue));\n }\n\n middleware.push(\n flip({\n fallbackPlacements: this.fallbackPlacements() ?? undefined,\n fallbackAxisSideDirection: 'start',\n boundary,\n }),\n );\n\n if (this.autoResize()) {\n middleware.push(\n size({\n padding: this.viewportPadding() ?? undefined,\n apply({ availableHeight, availableWidth }) {\n floatingEl.style.setProperty('--et-floating-max-width', `${availableWidth}px`);\n floatingEl.style.setProperty('--et-floating-max-height', `${availableHeight}px`);\n },\n }),\n );\n }\n\n if (this.shift()) {\n middleware.push(\n shift({\n limiter: limitShift(),\n padding: this.viewportPadding() ?? undefined,\n boundary,\n }),\n );\n }\n\n if (floatingElArrow) {\n middleware.push(arrow({ element: floatingElArrow, padding: this.arrowPadding() ?? undefined }));\n }\n\n if (this.autoHide() || this.autoCloseIfReferenceHidden()) {\n middleware.push(hide({ strategy: 'referenceHidden', boundary }));\n }\n\n return middleware;\n }\n\n private applyFloatingStyles(floatingEl: HTMLElement, x: number, y: number, placement: Placement) {\n floatingEl.style.setProperty('--et-floating-translate', `translate3d(${x}px, ${y}px, 0)`);\n floatingEl.setAttribute('et-floating-placement', placement);\n }\n\n private applyArrowStyles(\n floatingEl: HTMLElement,\n middlewareData: MiddlewareData,\n floatingElArrow: HTMLElement | null,\n ) {\n if (!middlewareData.arrow || !floatingElArrow) return;\n\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n floatingEl.style.setProperty('--et-floating-arrow-translate', `translate3d(${arrowX ?? 0}px, ${arrowY ?? 0}px, 0)`);\n }\n\n private handleReferenceHidden(floatingEl: HTMLElement, middlewareData: MiddlewareData) {\n if (middlewareData.hide?.referenceHidden) {\n if (this.autoCloseIfReferenceHidden()) {\n this.unmount();\n } else {\n floatingEl.classList.add('et-floating-element--hidden');\n this.isHidden.set(true);\n }\n } else if (this.autoHide()) {\n floatingEl.classList.remove('et-floating-element--hidden');\n this.isHidden.set(false);\n }\n }\n\n private waitForRenderAndAnimate() {\n nextFrame(() => {\n if (!this.componentRef || this.state() !== 'mounting') {\n return;\n }\n\n const lifecycle = this.componentRef.instance.animatedLifecycle?.();\n\n if (!lifecycle) {\n console.error(\n 'AnimatedOverlayDirective: The component does not have an AnimatedLifecycleDirective. Please add one to the component.',\n );\n return;\n }\n\n lifecycle.enter();\n\n lifecycle.state$\n .pipe(\n filter((s) => s === 'entered'),\n tap(() => {\n if (this.state() === 'mounting') {\n this.state.set('mounted');\n this.afterOpened$.next();\n }\n }),\n take(1),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n });\n }\n\n private destroy() {\n this.zone.runOutsideAngular(() => {\n this.floatingElCleanupFn?.();\n });\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n\n this.state.set('unmounted');\n this.afterClosed$.next();\n }\n}\n","import { combineLatest, Subject } from 'rxjs';\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\nexport const createFlipAnimationGroup = (config: FlipAnimationGroupConfig) => {\n const { elements, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)' } = 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 });\n });\n\n const onStart$ = combineLatest(flips.map((animation) => animation.onStart$));\n const onFinish$ = combineLatest(flips.map((animation) => animation.onFinish$));\n const onCancel$ = combineLatest(flips.map((animation) => animation.onCancel$));\n\n const updateInit = () => {\n flips.forEach((animation) => animation.updateInit());\n };\n\n const play = () => {\n flips.forEach((animation) => animation.play());\n };\n\n const cancel = () => {\n flips.forEach((animation) => animation.cancel());\n };\n\n return {\n updateInit,\n play,\n cancel,\n onStart$,\n onFinish$,\n onCancel$,\n };\n};\n\nexport type FlipAnimationConfig = {\n /**\n * The element to animate\n */\n element: HTMLElement;\n\n /**\n * The element to use as the origin for the animation\n * @default element\n */\n originElement?: HTMLElement;\n\n /**\n * The duration of the animation in milliseconds\n * @default 250\n */\n duration?: number;\n\n /**\n * The easing function to use for the animation\n * @default 'cubic-bezier(0.4, 0, 0.2, 1)'\n */\n easing?: string;\n};\n\nexport const createFlipAnimation = (config: FlipAnimationConfig) => {\n const { element: el, originElement = el, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)' } = config;\n\n let initialRect = originElement.getBoundingClientRect();\n let animation: Animation | null = null;\n\n const onStart$ = new Subject<void>();\n const onFinish$ = new Subject<void>();\n const onCancel$ = new Subject<void>();\n\n const onAnimationFinish = () => {\n cleanup();\n onFinish$.next();\n };\n\n const onAnimationCancel = () => {\n cleanup();\n onCancel$.next();\n };\n\n const cleanup = () => {\n if (!animation) {\n return;\n }\n\n animation.removeEventListener('finish', onAnimationFinish);\n animation.removeEventListener('cancel', onAnimationCancel);\n };\n\n const updateInit = () => {\n initialRect = originElement.getBoundingClientRect();\n };\n\n const play = () => {\n const lastRect = el.getBoundingClientRect();\n\n const delta = {\n x: initialRect.left - lastRect.left,\n y: initialRect.top - lastRect.top,\n scaleX: initialRect.width / lastRect.width,\n scaleY: initialRect.height / lastRect.height,\n };\n\n 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,\n easing,\n fill: 'both',\n },\n );\n\n animation.addEventListener('finish', onAnimationFinish);\n animation.addEventListener('cancel', onAnimationCancel);\n\n onStart$.next();\n };\n\n const cancel = () => {\n animation?.cancel();\n\n cleanup();\n };\n\n return {\n updateInit,\n play,\n cancel,\n onStart$: onStart$.asObservable(),\n onFinish$: onFinish$.asObservable(),\n onCancel$: onCancel$.asObservable(),\n };\n};\n","import { Directive, DOCUMENT, ElementRef, inject, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, tap } from 'rxjs';\n\n@Directive({\n selector: '[etClickOutside]',\n})\nexport class ClickOutsideDirective {\n private elementRef = inject(ElementRef);\n private document = inject(DOCUMENT);\n\n didClickOutside = output<MouseEvent>({ alias: 'etClickOutside' });\n\n constructor() {\n fromEvent<MouseEvent>(this.document.documentElement, 'click')\n .pipe(\n tap((event) => {\n const activeElement = event.target as HTMLElement;\n const isInside = this.elementRef.nativeElement.contains(activeElement);\n\n if (isInside) return;\n\n this.didClickOutside.emit(event);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import {\n Directive,\n effect,\n EmbeddedViewRef,\n inject,\n input,\n linkedSignal,\n numberAttribute,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\n@Directive({\n selector: '[etRepeat]',\n})\nexport class RepeatDirective {\n private mainTemplateRef = inject<TemplateRef<unknown>>(TemplateRef);\n private viewContainerRef = inject(ViewContainerRef);\n\n repeatCount = input(2, { alias: 'etRepeat', transform: numberAttribute });\n\n views = linkedSignal<number, EmbeddedViewRef<unknown>[]>({\n source: this.repeatCount,\n computation: (count, previous) => {\n const prevCount = previous?.source ?? 0;\n const views: EmbeddedViewRef<unknown>[] = previous?.value ?? [];\n\n if (count === prevCount && previous?.value) {\n return previous.value;\n }\n\n const viewsToCreate = count - prevCount;\n\n if (viewsToCreate > 0) {\n for (let i = 0; i < viewsToCreate; i++) {\n views.push(this.viewContainerRef.createEmbeddedView(this.mainTemplateRef));\n }\n } else if (viewsToCreate < 0) {\n for (let i = 0; i < -viewsToCreate; i++) {\n this.viewContainerRef.remove(this.viewContainerRef.length - 1);\n }\n\n views.splice(viewsToCreate);\n }\n\n return views;\n },\n });\n\n constructor() {\n // Ugly but needed to trigger the linked signal.\n // Otherwise it has no consumers and won't run.\n effect(() => this.views());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Translatable } from '../../utils';\n\n@Pipe({ name: 'etNormalizeGameResultType' })\nexport class NormalizeGameResultTypePipe implements PipeTransform {\n transform = normalizeGameResultType;\n}\n\nexport type NormalizedGameResultType = Translatable & {\n shortCode: string;\n};\n\n// TODO(TRB): Add correct type once provided by API\nexport const normalizeGameResultType = (type: string | null): NormalizedGameResultType | null => {\n if (!type) {\n return null;\n }\n\n switch (type) {\n case 'extra_time':\n return {\n i18n: 'game-result-type.extra-time',\n shortCode: 'AET',\n text: 'After Extra Time',\n };\n\n case 'penalty':\n return {\n i18n: 'game-result-type.penalty',\n shortCode: 'PSO',\n text: 'Penalty shootout',\n };\n\n case 'golden_goal':\n return {\n i18n: 'game-result-type.golden-goal',\n shortCode: 'GG',\n text: 'Golden Goal',\n };\n\n case 'default':\n default:\n return {\n i18n: 'game-result-type.full-time',\n shortCode: 'FT',\n text: 'Full Time',\n };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView } from '@ethlete/types';\nimport { MatchStateType } from './normalize-match-score.pipe';\n\n@Pipe({ name: 'etNormalizeMatchState' })\nexport class NormalizeMatchStatePipe implements PipeTransform {\n transform = normalizeMatchState;\n}\n\nexport const normalizeMatchState = (match: MatchListView | null | undefined) => {\n if (match?.isCompletedByReferee) {\n return MatchStateType.AUTO_WIN;\n } else if (match?.status === 'preparing') {\n return MatchStateType.PRE_MATCH;\n } else if (match?.status === 'started') {\n return MatchStateType.LIVE;\n } else if (match?.status === 'published' || match?.status === 'finished') {\n return MatchStateType.POST_MATCH;\n } else if (match?.round.state !== 'preparing') {\n return MatchStateType.PREPARING_ROUND;\n }\n\n return null;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView, ParticipantViewUnion } from '@ethlete/types';\nimport { Translatable } from '../../utils';\nimport { MatchStateType } from './normalize-match-score.pipe';\nimport { normalizeMatchState } from './normalize-match-state.pipe';\n\n@Pipe({ name: 'etNormalizeMatchParticipants' })\nexport class NormalizeMatchParticipantsPipe implements PipeTransform {\n transform = normalizeMatchParticipants;\n}\n\nexport type NormalizedMatchParticipants = {\n home: NormalizedMatchParticipant | null;\n away: NormalizedMatchParticipant | null;\n};\n\ntype NormalizedParticipantType = 'team' | 'player' | 'unknown';\n\nexport type NormalizedMatchParticipant =\n | ({\n type: 'tbd';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion | null;\n } & Translatable)\n | {\n type: 'participant';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion;\n }\n | ({\n type: 'none';\n participantType: NormalizedParticipantType;\n data: ParticipantViewUnion | null;\n } & Translatable);\n\nexport const normalizeMatchParticipants = (match: MatchListView | null): NormalizedMatchParticipants | null => {\n const matchState = normalizeMatchState(match);\n\n if (!match || !matchState) {\n return null;\n }\n\n return {\n home: normalizeMatchParticipant(match, 'home'),\n away: normalizeMatchParticipant(match, 'away'),\n };\n};\n\nexport const normalizeMatchParticipant = (\n match: MatchListView | null,\n side: 'home' | 'away',\n): NormalizedMatchParticipant | null => {\n const matchState = normalizeMatchState(match);\n\n if (!match || !matchState) {\n return null;\n }\n\n const participant = match[side];\n const participantType = match.home?.type ?? match.away?.type ?? 'unknown';\n\n if (!participant) {\n if (matchState === MatchStateType.POST_MATCH || matchState === MatchStateType.AUTO_WIN) {\n return {\n participantType,\n type: 'none',\n i18n: 'match-participant.none',\n text: 'No opponent',\n data: participant,\n };\n } else {\n return {\n participantType,\n type: 'tbd',\n i18n: 'match-participant.tbd',\n text: 'TBD',\n data: participant,\n };\n }\n } else {\n return {\n participantType,\n type: 'participant',\n data: participant,\n };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MatchListView, MatchRankingView } from '@ethlete/types';\nimport { normalizeMatchState } from './normalize-match-state.pipe';\n\n@Pipe({ name: 'etNormalizeMatchScore' })\nexport class NormalizeMatchScorePipe implements PipeTransform {\n transform = normalizeMatchScore;\n}\n\nexport const enum MatchStateType {\n PREPARING_ROUND = 'preparingRound',\n PRE_MATCH = 'preMatch',\n LIVE = 'live',\n POST_MATCH = 'postMatch',\n AUTO_WIN = 'autoWin',\n}\n\nexport type NormalizedMatchScore = {\n home: {\n score: string | number | null;\n isWinner: boolean;\n };\n away: {\n score: string | number | null;\n isWinner: boolean;\n };\n subLine: string | null;\n isNumeric: boolean;\n};\n\nconst EMPTY_SCORE: NormalizedMatchScore = {\n home: { score: 'match-score.placeholder', isWinner: false },\n away: { score: 'match-score.placeholder', isWinner: false },\n isNumeric: false,\n subLine: null,\n};\n\nexport const normalizeMatchScore = (match: MatchListView | null | undefined): NormalizedMatchScore | null => {\n if (!match) {\n return null;\n }\n\n const matchState = normalizeMatchState(match);\n const subLine = getMatchScoreSubLine(match);\n\n if (!match.homeScore && !match.awayScore) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n\n if (isKnockoutMatch(match)) {\n if (matchState === MatchStateType.PRE_MATCH || matchState === MatchStateType.LIVE) {\n return { ...EMPTY_SCORE, subLine, isNumeric: false };\n }\n\n return {\n home: {\n score: getKnockoutMatchScore(match.homeScore),\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: getKnockoutMatchScore(match.awayScore),\n isWinner: match.awayScore?.status === 'won',\n },\n subLine,\n isNumeric: false,\n };\n } else if (isGroupMatch(match)) {\n if (match.games.length === 1) {\n // Return the score if only one game has been played\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n } else {\n return {\n ...getGroupMatchPoints(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n }\n } else {\n return {\n ...getGroupMatchScore(match),\n subLine,\n isNumeric: true,\n } as NormalizedMatchScore;\n }\n};\n\nexport const isKnockoutMatch = (match: MatchListView | null | undefined) => {\n if (!match) {\n return false;\n }\n\n return (\n match.matchType === 'single_elimination' ||\n match.matchType === 'double_elimination' ||\n match.matchType === 'fifa_swiss'\n );\n};\n\nexport const isGroupMatch = (match: MatchListView | null | undefined) => {\n if (!match) {\n return false;\n }\n\n return match.matchType === 'groups' || match.matchType === 'league';\n};\n\nexport const getKnockoutMatchScore = (score: MatchRankingView | null | undefined) => {\n if (score?.status === 'won') {\n return 'match-score.knockout.won';\n } else if (score?.status === 'lost') {\n return 'match-score.knockout.lost';\n } else if (score?.status === 'tie') {\n return 'match-score.knockout.tie';\n }\n\n return null;\n};\n\nexport const getMatchScoreSubLine = (match: MatchListView | null | undefined) => {\n if (isKnockoutMatch(match)) {\n return null;\n } else if (isGroupMatch(match)) {\n return 'match-score.groups.sub-line';\n } else {\n return null;\n }\n};\n\nexport const getGroupMatchScore = (match: MatchListView | null | undefined) => {\n if (!match) {\n return null;\n }\n\n return {\n home: {\n score: match.homeScore?.ownPoints || 0,\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: match.awayScore?.ownPoints || 0,\n isWinner: match.awayScore?.status === 'won',\n },\n };\n};\n\nexport const getGroupMatchPoints = (match: MatchListView | null | undefined) => {\n if (!match) {\n return null;\n }\n\n return {\n home: {\n score: match.homeScore?.score || 0,\n isWinner: match.homeScore?.status === 'won',\n },\n away: {\n score: match.awayScore?.score || 0,\n isWinner: match.awayScore?.status === 'won',\n },\n };\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StageType } from '@ethlete/types';\nimport { Translatable } from '../../utils';\n\n@Pipe({ name: 'etNormalizeMatchType' })\nexport class NormalizeMatchTypePipe implements PipeTransform {\n transform = normalizeMatchType;\n}\n\nexport const normalizeMatchType = (matchType: StageType | null | undefined): Translatable | null => {\n if (!matchType) {\n return null;\n }\n\n switch (matchType) {\n case 'double_elimination':\n return {\n i18n: 'match-type.double-elimination',\n text: 'Double Elimination',\n };\n case 'single_elimination':\n return {\n i18n: 'match-type.single-elimination',\n text: 'Single Elimination',\n };\n case 'fifa_swiss':\n return {\n i18n: 'match-type.fifa-swiss',\n text: 'FIFA Swiss',\n };\n case 'groups':\n return {\n i18n: 'match-type.groups',\n text: 'Groups',\n };\n case 'league':\n return {\n i18n: 'match-type.league',\n text: 'League',\n };\n case 'pools':\n return {\n i18n: 'match-type.pools',\n text: 'Pools',\n };\n }\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 const urls = srcset.split(',');\n const firstUrl = urls[0];\n\n if (!firstUrl) return null;\n\n // make sure the url does not end with something like x1, x2 or 400w, 800w... We need to remove these parts to get the correct file extension\n const urlParts = firstUrl.split(' ');\n const lastPart = urlParts[urlParts.length - 1];\n\n if (urlParts.length > 1 && !lastPart?.includes('/')) {\n urlParts.pop();\n }\n\n const cleanedUrl = urlParts.join(' ');\n\n const queryPart = cleanedUrl.split('?')[1] ?? '';\n const containsFm = queryPart.startsWith('fm=') || queryPart.includes('&fm=');\n let fileExtension: string | null = null;\n\n if (containsFm) {\n const fmIndex = queryPart.indexOf('fm=');\n const fmValue = queryPart\n .substring(fmIndex + 3)\n .split('&')[0]\n ?.toLowerCase();\n\n if (fmValue) {\n fileExtension = fmValue;\n }\n }\n\n if (!fileExtension) {\n const noQueryUrl = cleanedUrl.split('?')[0] || cleanedUrl;\n\n const lastDotIndex = noQueryUrl.lastIndexOf('.');\n\n if (lastDotIndex === -1) return null;\n\n fileExtension = noQueryUrl.substring(lastDotIndex + 1).toLowerCase();\n }\n\n if (fileExtension) {\n switch (fileExtension) {\n case 'avif':\n return 'image/avif';\n case 'bmp':\n return 'image/bmp';\n case 'gif':\n return 'image/gif';\n case 'ico':\n return 'image/vdn.microsoft.icon';\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'svg':\n return 'image/svg+xml';\n case 'tif':\n case 'tiff':\n return 'image/tiff';\n case 'webp':\n return 'image/webp';\n case 'aac':\n return 'audio/aac';\n case 'abw':\n return 'application/x-abiword';\n case 'arc':\n return 'application/x-freearc';\n case 'avi':\n return 'video/x-msvideo';\n case 'azw':\n return 'application/vnd.amazon.ebook';\n case 'bin':\n return 'application/octet-stream';\n case 'bz':\n return 'application/x-bzip';\n case 'bz2':\n return 'application/x-bzip2';\n case 'cda':\n return 'application/x-cdf';\n case 'csh':\n return 'application/x-csh';\n case 'css':\n return 'text/css';\n case 'csv':\n return 'text/csv';\n case 'doc':\n return 'application/msword';\n case 'docx':\n return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n case 'eot':\n return 'application/vnd.ms-fontobject';\n case 'epub':\n return 'application/epub+zip';\n case 'gz':\n return 'application/gzip';\n case 'htm':\n case 'html':\n return 'text/html';\n case 'ics':\n return 'text/calendar';\n case 'jar':\n return 'application/java-archive';\n case 'js':\n return 'text/javascript';\n case 'json':\n return 'application/json';\n case 'jsonld':\n return 'application/ld+json';\n case 'mid':\n case 'midi':\n return 'audio/midi';\n case 'mjs':\n return 'text/javascript';\n case 'mp3':\n return 'audio/mpeg';\n case 'mp4':\n return 'video/mp4';\n case 'mpeg':\n return 'video/mpeg';\n case 'mpkg':\n return 'tapplication/vnd.apple.installer+xml';\n case 'odp':\n return 'application/vnd.oasis.opendocument.presentation';\n case 'ods':\n return 'application/vnd.oasis.opendocument.spreadsheet';\n case 'odt':\n return 'application/vnd.oasis.opendocument.text';\n case 'oga':\n return 'audio/ogg';\n case 'ogv':\n return 'video/ogg';\n case 'ogx':\n return 'application/ogg';\n case 'opus':\n return 'audio/opus';\n case 'otf':\n return 'font/otf';\n case 'pdf':\n return 'application/pdf';\n case 'php':\n return 'application/x-httpd-php';\n case 'ppt':\n return 'application/vnd.ms-powerpoint';\n case 'pptx':\n return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n case 'rar':\n return 'application/vnd.rar';\n case 'rtf':\n return 'application/rtf';\n case 'sh':\n return 'application/x-sh';\n case 'tar':\n return 'application/x-tar';\n case 'ts':\n return 'video/mp2t';\n case 'ttf':\n return 'font/ttf';\n case 'txt':\n return 'text/plain';\n case 'vsd':\n return 'application/vnd.visio';\n case 'wav':\n return 'audio/wav';\n case 'weba':\n return 'audio/webm';\n case 'webm':\n return 'video/webm';\n case 'woff':\n return 'font/woff';\n case 'woff2':\n return 'font/woff2';\n case 'xhtml':\n return 'application/xhtml+xml';\n case 'xls':\n return 'application/vnd.ms-excel';\n case 'xlsx':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case 'xml':\n return 'application/xml';\n case 'xul':\n return 'application/vnd.mozilla.xul+xml';\n case 'zip':\n return 'application/zip';\n case '3gp':\n return 'video/3gpp';\n case '3g2':\n return 'video/3gpp2';\n case '7z':\n return 'application/x-7z-compressed';\n\n default:\n return null;\n }\n }\n\n return null;\n};\n","import { Pipe, PipeTransform, TrackByFunction } from '@angular/core';\n\n@Pipe({ name: 'toArray' })\nexport class ToArrayPipe implements PipeTransform {\n transform = toArray;\n}\n\nexport const toArray = (value: number) => {\n return Array.from({ length: value }, (_, i) => i);\n};\n\nexport const toArrayTrackByFn: TrackByFunction<number> = (_, item) => item;\n","import { ElementRef, inject } from '@angular/core';\nimport { signalHostAttributes, signalHostClasses, signalHostStyles } from '../signals';\nimport { createComponentId } from '../utils';\n\nexport const createPropHandlers = () => {\n const id = createComponentId('et-props');\n\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n const classes = signalHostClasses({});\n const attributes = signalHostAttributes({});\n const styles = signalHostStyles({});\n\n return {\n classes,\n attributes,\n styles,\n id,\n elementRef,\n };\n};\n\nexport type PropHandlers = ReturnType<typeof createPropHandlers>;\n","import { computed, signal } from '@angular/core';\n\nexport const createElementDictionary = () => {\n const dictionary = {\n ids: signal<string[]>([]),\n elements: signal<Record<string, HTMLElement>>({}),\n };\n\n const firstElement = computed(() => {\n const id = dictionary.ids()[0];\n return id ? (dictionary.elements()[id] ?? null) : null;\n });\n\n const firstId = computed(() => {\n const id = dictionary.ids()[0];\n return id ?? null;\n });\n\n const ids = computed(() => dictionary.ids());\n const elements = computed(() => ids().map((id) => dictionary.elements()[id]!));\n\n const isEmpty = computed(() => dictionary.ids().length === 0);\n\n const has = (id: string) => {\n return dictionary.ids().includes(id);\n };\n\n const push = (id: string, element: HTMLElement) => {\n dictionary.ids.set([...dictionary.ids(), id]);\n dictionary.elements.set({ ...dictionary.elements(), [id]: element });\n };\n\n const remove = (id: string) => {\n dictionary.ids.set(dictionary.ids().filter((i) => i !== id));\n dictionary.elements.set(Object.fromEntries(Object.entries(dictionary.elements()).filter(([k]) => k !== id)));\n };\n\n const get = (id: string) => {\n return dictionary.elements()[id] ?? null;\n };\n\n return {\n ids,\n elements,\n has,\n get,\n push,\n remove,\n isEmpty,\n firstElement,\n firstId,\n };\n};\n","import { PropHandlers } from './create-prop-handlers';\nimport { Props, PropsInternal } from './create-props';\n\nexport type BindPropsOptions = {\n props: Props | PropsInternal;\n handlers: PropHandlers;\n};\n\nexport const bindProps = (config: BindPropsOptions) => {\n const props = config.props as PropsInternal;\n const {\n attachEventListeners,\n classBindings,\n attributeBindings,\n styleBindings,\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n attached,\n single,\n name,\n bindId,\n attachedElements,\n } = props;\n\n const { attributes, classes, elementRef, id, styles } = config.handlers;\n const el = elementRef.nativeElement;\n\n if (attached()) {\n if (attachedElements.has(id)) {\n return;\n } else if (single) {\n const firstAttachedRefElement = attachedElements.first();\n\n console.error(\n `[${name}] These props can only be attached to a single element at a time.\\n\\n Already attached to \\n`,\n firstAttachedRefElement,\n '\\n Trying to attach to \\n',\n el,\n );\n\n return;\n }\n }\n\n attachedElements.push(id, el);\n\n if (bindId) {\n el.id = id;\n }\n\n if (classBindings) {\n classes.pushMany(classBindings);\n }\n\n if (attributeBindings) {\n attributes.pushMany(attributeBindings);\n }\n\n if (styleBindings) {\n styles.pushMany(styleBindings);\n }\n\n if (staticAttributeBindings) {\n for (const key in staticAttributeBindings) {\n el.setAttribute(key, `${staticAttributeBindings[key]}`);\n }\n }\n\n if (staticClassBindings) {\n el.classList.add(...staticClassBindings);\n }\n\n if (staticStyleBindings) {\n for (const key in staticStyleBindings) {\n el.style.setProperty(key, `${staticStyleBindings[key]}`);\n }\n }\n\n if (attachEventListeners) {\n attachEventListeners({\n on: el.addEventListener.bind(el),\n element: el,\n });\n }\n};\n\nexport type UnbindPropsOptions = {\n props: Props | PropsInternal;\n handlers: PropHandlers;\n};\n\nexport const unbindProps = (config: UnbindPropsOptions) => {\n const props = config.props as PropsInternal;\n\n props.attachedElements.remove(config.handlers.id);\n};\n","import { DestroyRef, Signal, afterNextRender, computed, inject } from '@angular/core';\nimport { PropHandlers, createPropHandlers } from './create-prop-handlers';\nimport { createElementDictionary } from './element-dictionary';\nimport { bindProps, unbindProps } from './props-binding';\n\nexport type Props = Readonly<{\n attached: Signal<boolean>;\n attachedElements: PropsAttachedElements;\n}>;\n\nexport type PropsAttachedElements = {\n first: Signal<HTMLElement | null>;\n firstId: Signal<string | null>;\n get(id: string): HTMLElement | null;\n};\n\nexport type PropsAttachedElementsInternal = PropsAttachedElements & {\n has: (id: string) => boolean;\n push: (id: string, element: HTMLElement) => void;\n remove: (id: string) => void;\n};\n\nexport type PropsInternal = {\n single: boolean;\n name: string;\n bindId: boolean;\n\n attached: Signal<boolean>;\n attachedElements: PropsAttachedElementsInternal;\n\n classBindings: Record<string, Signal<unknown>> | null;\n attributeBindings: Record<string, Signal<unknown>> | null;\n styleBindings: Record<string, Signal<unknown>> | null;\n\n staticClassBindings: string[] | null;\n staticAttributeBindings: Record<string, unknown> | null;\n staticStyleBindings: Record<string, unknown> | null;\n\n attachEventListeners: ((context: { on: HTMLElement['addEventListener']; element: HTMLElement }) => void) | null;\n};\n\nexport type CreatePropsOptions = {\n name: string;\n bindId?: boolean;\n single?: boolean;\n classes?: Record<string, Signal<unknown>>;\n attributes?: Record<string, Signal<unknown>>;\n styles?: Record<string, Signal<unknown>>;\n staticClasses?: string[];\n staticAttributes?: Record<string, unknown>;\n staticStyles?: Record<string, unknown>;\n listeners?: (context: { on: HTMLElement['addEventListener']; element: HTMLElement }) => void;\n};\n\nexport const createProps = (props: CreatePropsOptions): Props => {\n const {\n bindId = false,\n single = true,\n classes: classBindings,\n attributes: attributeBindings,\n styles: styleBindings,\n staticAttributes: staticAttributeBindings = null,\n staticClasses: staticClassBindings = null,\n staticStyles: staticStyleBindings = null,\n listeners,\n name,\n } = props;\n\n const dictionary = createElementDictionary();\n const attached = computed(() => !dictionary.isEmpty());\n\n const attachedElements: PropsAttachedElementsInternal = {\n first: dictionary.firstElement,\n firstId: dictionary.firstId,\n\n has: dictionary.has,\n push: dictionary.push,\n remove: dictionary.remove,\n get: dictionary.get,\n };\n\n const data: PropsInternal = {\n name,\n single,\n bindId,\n\n attached,\n attachedElements,\n\n classBindings: classBindings ?? null,\n attributeBindings: attributeBindings ?? null,\n styleBindings: styleBindings ?? null,\n\n staticAttributeBindings,\n staticClassBindings,\n staticStyleBindings,\n\n attachEventListeners: listeners ?? null,\n };\n\n return data as Props;\n};\n\nexport type HostProps = {\n props: Props;\n handlers: PropHandlers;\n};\n\nexport const createHostProps = (props: CreatePropsOptions): HostProps => {\n const data = createProps(props);\n const handlers = createPropHandlers();\n\n afterNextRender({\n write: () => {\n bindProps({\n handlers,\n props: data,\n });\n },\n });\n\n const destroyRef = inject(DestroyRef);\n\n destroyRef.onDestroy(() => {\n unbindProps({\n handlers,\n props: data,\n });\n });\n\n return { props: data, handlers };\n};\n","import { afterNextRender } from '@angular/core';\n\nexport const createSetup = <T extends Record<string, unknown>>(config: {\n setupFn: (params: T) => void;\n this: ThisType<unknown>;\n}) => {\n let didCallSetup = false;\n\n afterNextRender(() => {\n if (!didCallSetup) {\n console.error('The setup() function was not called. Please call it inside your constructor.', config.this);\n return;\n }\n });\n\n return (params: T) => {\n if (didCallSetup) {\n console.error(\n 'The setup() function was already called. Please call it only once. \\n\\n',\n 'Instance containing the setup() call \\n',\n config.this,\n '\\n\\n Setup was called with\\n',\n params,\n );\n return;\n }\n\n didCallSetup = true;\n config.setupFn(params);\n };\n};\n","import { Injector, Signal, WritableSignal, effect, inject, runInInjectionContext } from '@angular/core';\n\nexport const createDependencyStash = <T extends Record<string, WritableSignal<unknown>>>(stash: T) => {\n const injector = inject(Injector);\n\n const provideSignal = <K extends keyof T>(data: { signal: Signal<ReturnType<T[K]>>; for: K }) => {\n runInInjectionContext(injector, () => {\n effect(() => {\n stash[data.for]!.set(data.signal());\n });\n });\n };\n\n const provideValue = <K extends keyof T>(data: { value: ReturnType<T[K]>; for: K }) => {\n stash[data.for]!.set(data.value);\n };\n\n return {\n ...stash,\n provideSignal,\n provideValue,\n };\n};\n","import { DestroyRef, Directive, afterNextRender, inject, input } from '@angular/core';\nimport { createPropHandlers } from './create-prop-handlers';\nimport { Props, PropsInternal } from './create-props';\nimport { bindProps, unbindProps } from './props-binding';\n\n@Directive({\n selector: '[etProps]',\n})\nexport class PropsDirective {\n destroyRef = inject(DestroyRef);\n\n props = input.required<PropsInternal, Props>({ alias: 'etProps', transform: (d) => d as PropsInternal });\n\n propHandlers = createPropHandlers();\n\n constructor() {\n afterNextRender({\n write: () => {\n bindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n },\n });\n\n this.destroyRef.onDestroy(() => {\n unbindProps({\n handlers: this.propHandlers,\n props: this.props(),\n });\n });\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Injector, Signal, TemplateRef, computed } from '@angular/core';\n\nexport type AnyTemplateType =\n | string\n | TemplateRef<unknown>\n | ComponentType<unknown>\n | TemplateRefWithContext\n | ComponentTypeWithInputs;\n\nexport type TemplateRefWithContext<T = Record<string, unknown> | undefined, J = unknown> = {\n template: TemplateRef<J>;\n context?: T;\n injector?: Injector;\n};\n\nexport type ComponentTypeWithInputs<T = Record<string, unknown> | undefined, J = unknown> = {\n component: ComponentType<J>;\n inputs?: T;\n injector?: Injector;\n};\n\nexport type StringTemplate = {\n type: 'string';\n value: string;\n};\n\nexport type NgTemplateTemplate = {\n type: 'template';\n value: TemplateRef<unknown>;\n context?: Record<string, unknown>;\n injector: Injector | null;\n};\n\nexport type ComponentTemplate = {\n type: 'component';\n value: ComponentType<unknown>;\n inputs?: Record<string, unknown>;\n injector: Injector | null;\n};\n\nexport const templateComputed = (templateSignal: Signal<AnyTemplateType | null>) =>\n computed((): StringTemplate | NgTemplateTemplate | ComponentTemplate | null => {\n const content = templateSignal();\n\n if (!content) return null;\n\n if (typeof content === 'string') {\n return {\n type: 'string',\n value: content,\n };\n }\n\n if (content instanceof TemplateRef) {\n return {\n type: 'template',\n value: content,\n injector: null,\n };\n }\n\n if ('component' in content) {\n return {\n type: 'component',\n value: content.component,\n inputs: content.inputs,\n injector: content.injector ?? null,\n };\n }\n\n if ('template' in content) {\n return {\n type: 'template',\n value: content.template,\n context: content.context,\n injector: content.injector ?? null,\n };\n }\n\n return {\n type: 'component',\n value: content,\n injector: null,\n };\n });\n","import { computed, DestroyRef, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport { MaybeSignal } from '../signals';\n\nexport type HeadBinding<T> = {\n id: symbol;\n value: T;\n priority?: number;\n};\n\nexport const applyHeadBinding = <T>(\n binding: MaybeSignal<T | null | undefined>,\n applyFn: (value: T) => void,\n removeFn: () => void,\n isValid?: (value: T | null | undefined) => value is T,\n) => {\n const destroyRef = inject(DestroyRef);\n const signalBinding = isSignal(binding) ? binding : signal(binding);\n\n const defaultIsValid = (value: T | null | undefined): value is T => value !== null && value !== undefined;\n\n const validator = isValid ?? defaultIsValid;\n\n const initialValue = untracked(() => signalBinding());\n if (validator(initialValue)) {\n applyFn(initialValue);\n }\n\n effect(() => {\n const value = signalBinding();\n if (validator(value)) {\n applyFn(value);\n } else {\n removeFn();\n }\n });\n\n destroyRef.onDestroy(() => {\n removeFn();\n });\n};\n\nexport const createPropertyBinding = <TConfig>(\n configBuilder: (value: string) => TConfig,\n applyConfigFn: (config: MaybeSignal<TConfig | null | undefined>) => void,\n) => {\n return (binding: MaybeSignal<string | null | undefined>) => {\n applyConfigFn(\n computed(() => {\n const value = untracked(() => (isSignal(binding) ? binding() : binding));\n return value ? configBuilder(value) : null;\n }),\n );\n };\n};\n\nexport const createArrayPropertyBinding = <TConfig>(\n configBuilder: (value: string, index: number) => TConfig,\n applyConfigFn: (config: MaybeSignal<TConfig | null | undefined>) => void,\n) => {\n return (binding: MaybeSignal<string[] | null | undefined>) => {\n const valuesSignal = isSignal(binding) ? binding : signal(binding);\n const valuesList = computed(() => untracked(() => valuesSignal()) ?? []);\n\n valuesList().forEach((value, index) => {\n applyConfigFn(computed(() => configBuilder(value, index)));\n });\n };\n};\n\nexport const toStringBinding = (\n binding: MaybeSignal<string | number | null | undefined>,\n): MaybeSignal<string | null | undefined> => {\n return computed(() => {\n const value = untracked(() => (isSignal(binding) ? binding() : binding));\n return value !== null && value !== undefined ? String(value) : null;\n });\n};\n\nexport const createBulkPropertyBinding = <TConfig extends Record<string, unknown>>(\n propertyPrefix: string,\n applyConfigFn: (property: string, binding: MaybeSignal<string | null | undefined>) => void,\n) => {\n return (config: TConfig) => {\n Object.entries(config).forEach(([key, value]) => {\n if (value !== undefined) {\n applyConfigFn(key, value as MaybeSignal<string | null | undefined>);\n }\n });\n };\n};\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, isSignal, signal, untracked } from '@angular/core';\nimport { MaybeSignal } from '../signals';\nimport { createRootProvider, createStaticRootProvider } 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 = 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\nexport const [provideLinkStoreConfig, injectLinkStoreConfig] = createStaticRootProvider<LinkStoreConfig>(\n {\n multiInstanceRels: DEFAULT_MULTI_INSTANCE_RELS,\n },\n { name: 'Link Store Config' },\n);\n\nexport const [provideLinkStore, injectLinkStore] = createRootProvider(\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): string => {\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): boolean => {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 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 applyLinkBinding = (binding: MaybeSignal<LinkConfig | null | undefined>) => {\n const linkStore = injectLinkStore();\n const linkId = Symbol('link-tag');\n let currentKey: string | undefined;\n\n applyHeadBinding(\n binding,\n (config) => {\n currentKey = linkStore.getLinkKey(config);\n linkStore.addLink(linkId, config);\n },\n () => linkStore.removeLink(linkId, currentKey),\n );\n};\n\nexport const applyCanonicalBinding = createPropertyBinding((href) => ({ rel: 'canonical', href }), applyLinkBinding);\n\nexport const applyAlternateBinding = (hreflang: string, binding: MaybeSignal<string | null | undefined>) => {\n applyLinkBinding(\n computed(() => {\n const url = untracked(() => (isSignal(binding) ? binding() : binding));\n return url ? { rel: 'alternate', hreflang, href: url } : null;\n }),\n );\n};\n\nexport type AlternateLanguagesConfig = {\n [hreflang: string]: MaybeSignal<string | null | undefined>;\n};\n\nexport const applyAlternateLanguagesBindings = (config: AlternateLanguagesConfig) => {\n Object.entries(config).forEach(([hreflang, binding]) => {\n applyAlternateBinding(hreflang, binding);\n });\n};\n\nexport const applyPrevBinding = createPropertyBinding((href) => ({ rel: 'prev', href }), applyLinkBinding);\n\nexport const applyNextBinding = createPropertyBinding((href) => ({ rel: 'next', href }), applyLinkBinding);\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 { createRootProvider, createStaticRootProvider } 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\nexport const [provideTitleConfig, injectTitleConfig] = createStaticRootProvider<TitleConfig>(\n {\n divider: '|',\n defaultTitle: '',\n transformer: (title: string) => title,\n },\n { name: 'Title Config' },\n);\n\nexport const [provideTitleStore, injectTitleStore] = createRootProvider(\n () => {\n const config = injectTitleConfig();\n const titleParts = signal<Map<symbol, TitlePart>>(new Map());\n const { currentLocale } = injectLocale();\n const titleService = inject(Title);\n const isRouterInitialized = injectIsRouterInitialized();\n\n const defaultTitle = config.defaultTitle ?? titleService.getTitle();\n\n const title = 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 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 effect(() => {\n const titleText = title();\n titleService.setTitle(titleText);\n });\n\n return { title, addPart, removePart };\n },\n { name: 'Title Store' },\n);\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","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 { createRootProvider, createStaticRootProvider } 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 = 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\nexport const [provideMetaConfig, injectMetaConfig] = createStaticRootProvider<MetaConfig>(\n {\n transformer: (content: string) => content,\n multiInstanceTags: DEFAULT_MULTI_INSTANCE_TAGS,\n },\n { name: 'Meta Config' },\n);\n\nexport const [provideMetaStore, injectMetaStore] = createRootProvider(\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): string => {\n if (config.name) return `name=\"${config.name}\"`;\n if (config.property) return `property=\"${config.property}\"`;\n if (config.httpEquiv) return `http-equiv=\"${config.httpEquiv}\"`;\n if (config.itemprop) return `itemprop=\"${config.itemprop}\"`;\n return config.key ?? '';\n };\n\n const isMultiInstanceTag = (selector: string): boolean => {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 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 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 applyMetaBinding = (binding: MaybeSignal<MetaTagConfig | null | undefined>) => {\n const metaStore = injectMetaStore();\n const tagId = Symbol('meta-tag');\n let currentSelector: string | undefined;\n\n applyHeadBinding(\n binding,\n (config) => {\n currentSelector = metaStore.getSelector(config);\n metaStore.addTag(tagId, config);\n },\n () => metaStore.removeTag(tagId, currentSelector),\n );\n};\n\nexport const applyDescriptionBinding = createPropertyBinding(\n (content) => ({ name: 'description', content }),\n applyMetaBinding,\n);\n\nexport const applyKeywordsBinding = (binding: MaybeSignal<string[] | null | undefined>) => {\n applyMetaBinding(\n computed(() => {\n const keywords = untracked(() => (isSignal(binding) ? binding() : binding));\n return keywords && keywords.length > 0 ? { name: 'keywords', content: keywords.join(', ') } : null;\n }),\n );\n};\n\nexport const applyAuthorBinding = createPropertyBinding((content) => ({ name: 'author', content }), applyMetaBinding);\n\nexport type RobotsConfig = {\n index?: boolean;\n follow?: boolean;\n noarchive?: boolean;\n nosnippet?: boolean;\n noimageindex?: boolean;\n maxSnippet?: number;\n maxImagePreview?: 'none' | 'standard' | 'large';\n maxVideoPreview?: number;\n};\n\nexport const applyRobotsBinding = (binding: MaybeSignal<RobotsConfig | null | undefined>) => {\n applyMetaBinding(\n computed(() => {\n const config = untracked(() => (isSignal(binding) ? binding() : binding));\n if (!config) return null;\n\n const directives: string[] = [];\n\n if (config.index === false) directives.push('noindex');\n if (config.follow === false) directives.push('nofollow');\n if (config.noarchive) directives.push('noarchive');\n if (config.nosnippet) directives.push('nosnippet');\n if (config.noimageindex) directives.push('noimageindex');\n if (config.maxSnippet !== undefined) directives.push(`max-snippet:${config.maxSnippet}`);\n if (config.maxImagePreview) directives.push(`max-image-preview:${config.maxImagePreview}`);\n if (config.maxVideoPreview !== undefined) directives.push(`max-video-preview:${config.maxVideoPreview}`);\n\n return directives.length > 0 ? { name: 'robots', content: directives.join(', ') } : null;\n }),\n );\n};\n\nexport const applyOgBinding = (property: string, binding: MaybeSignal<string | null | undefined>) => {\n createPropertyBinding((content) => ({ property: `og:${property}`, content }), applyMetaBinding)(binding);\n};\n\nconst createOgArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n property: `og:${property}`,\n content: value,\n allowMultiple: true,\n key: `og:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport type OpenGraphConfig = {\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n url?: MaybeSignal<string | null | undefined>;\n type?: MaybeSignal<string | null | undefined>;\n siteName?: MaybeSignal<string | null | undefined>;\n locale?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n images?: MaybeSignal<string[] | null | undefined>;\n imageUrl?: MaybeSignal<string | null | undefined>;\n imageSecureUrl?: MaybeSignal<string | null | undefined>;\n imageType?: MaybeSignal<string | null | undefined>;\n imageWidth?: MaybeSignal<string | number | null | undefined>;\n imageHeight?: MaybeSignal<string | number | null | undefined>;\n imageAlt?: MaybeSignal<string | null | undefined>;\n video?: MaybeSignal<string | null | undefined>;\n videos?: MaybeSignal<string[] | null | undefined>;\n videoUrl?: MaybeSignal<string | null | undefined>;\n videoSecureUrl?: MaybeSignal<string | null | undefined>;\n videoType?: MaybeSignal<string | null | undefined>;\n videoWidth?: MaybeSignal<string | number | null | undefined>;\n videoHeight?: MaybeSignal<string | number | null | undefined>;\n audio?: MaybeSignal<string | null | undefined>;\n audios?: MaybeSignal<string[] | null | undefined>;\n};\n\nexport const applyOpenGraphBindings = (config: OpenGraphConfig) => {\n const applyOg = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (binding) applyOgBinding(property, binding);\n };\n\n applyOg('title', config.title);\n applyOg('description', config.description);\n applyOg('url', config.url);\n applyOg('type', config.type);\n applyOg('site_name', config.siteName);\n applyOg('locale', config.locale);\n applyOg('image', config.image);\n applyOg('image:url', config.imageUrl);\n applyOg('image:secure_url', config.imageSecureUrl);\n applyOg('image:type', config.imageType);\n applyOg('image:alt', config.imageAlt);\n applyOg('video', config.video);\n applyOg('video:url', config.videoUrl);\n applyOg('video:secure_url', config.videoSecureUrl);\n applyOg('video:type', config.videoType);\n applyOg('audio', config.audio);\n\n if (config.imageWidth) applyOg('image:width', toStringBinding(config.imageWidth));\n if (config.imageHeight) applyOg('image:height', toStringBinding(config.imageHeight));\n if (config.videoWidth) applyOg('video:width', toStringBinding(config.videoWidth));\n if (config.videoHeight) applyOg('video:height', toStringBinding(config.videoHeight));\n\n if (config.images) createOgArrayBinding('image')(config.images);\n if (config.videos) createOgArrayBinding('video')(config.videos);\n if (config.audios) createOgArrayBinding('audio')(config.audios);\n};\n\nexport type TwitterCardConfig = {\n card?: MaybeSignal<'summary' | 'summary_large_image' | 'app' | 'player' | null | undefined>;\n site?: MaybeSignal<string | null | undefined>;\n siteId?: MaybeSignal<string | null | undefined>;\n creator?: MaybeSignal<string | null | undefined>;\n creatorId?: MaybeSignal<string | null | undefined>;\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n images?: MaybeSignal<string[] | null | undefined>;\n imageAlt?: MaybeSignal<string | null | undefined>;\n player?: MaybeSignal<string | null | undefined>;\n playerWidth?: MaybeSignal<string | number | null | undefined>;\n playerHeight?: MaybeSignal<string | number | null | undefined>;\n playerStream?: MaybeSignal<string | null | undefined>;\n};\n\nconst createTwitterArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n name: `twitter:${property}`,\n content: value,\n allowMultiple: true,\n key: `twitter:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport const applyTwitterCardBindings = (config: TwitterCardConfig) => {\n const applyTwitter = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (!binding) return;\n createPropertyBinding((content) => ({ name: `twitter:${property}`, content }), applyMetaBinding)(binding);\n };\n\n applyTwitter('card', config.card);\n applyTwitter('site', config.site);\n applyTwitter('site:id', config.siteId);\n applyTwitter('creator', config.creator);\n applyTwitter('creator:id', config.creatorId);\n applyTwitter('title', config.title);\n applyTwitter('description', config.description);\n applyTwitter('image', config.image);\n applyTwitter('image:alt', config.imageAlt);\n applyTwitter('player', config.player);\n applyTwitter('player:stream', config.playerStream);\n\n if (config.playerWidth) applyTwitter('player:width', toStringBinding(config.playerWidth));\n if (config.playerHeight) applyTwitter('player:height', toStringBinding(config.playerHeight));\n\n if (config.images) createTwitterArrayBinding('image')(config.images);\n};\n\nexport type ArticleConfig = {\n publishedTime?: MaybeSignal<string | null | undefined>;\n modifiedTime?: MaybeSignal<string | null | undefined>;\n expirationTime?: MaybeSignal<string | null | undefined>;\n author?: MaybeSignal<string | null | undefined>;\n authors?: MaybeSignal<string[] | null | undefined>;\n section?: MaybeSignal<string | null | undefined>;\n tag?: MaybeSignal<string | null | undefined>;\n tags?: MaybeSignal<string[] | null | undefined>;\n};\n\nconst createArticleArrayBinding = (property: string) =>\n createArrayPropertyBinding(\n (value, index) => ({\n property: `article:${property}`,\n content: value,\n allowMultiple: true,\n key: `article:${property}:${index}`,\n }),\n applyMetaBinding,\n );\n\nexport const applyArticleBindings = (config: ArticleConfig) => {\n const applyArticle = (property: string, binding?: MaybeSignal<string | null | undefined>) => {\n if (!binding) return;\n createPropertyBinding((content) => ({ property: `article:${property}`, content }), applyMetaBinding)(binding);\n };\n\n applyArticle('published_time', config.publishedTime);\n applyArticle('modified_time', config.modifiedTime);\n applyArticle('expiration_time', config.expirationTime);\n applyArticle('author', config.author);\n applyArticle('section', config.section);\n applyArticle('tag', config.tag);\n\n if (config.authors) createArticleArrayBinding('author')(config.authors);\n if (config.tags) createArticleArrayBinding('tag')(config.tags);\n};\n\nexport type SocialMediaConfig = {\n title?: MaybeSignal<string | null | undefined>;\n description?: MaybeSignal<string | null | undefined>;\n image?: MaybeSignal<string | null | undefined>;\n url?: MaybeSignal<string | null | undefined>;\n openGraph?: Partial<OpenGraphConfig>;\n twitter?: Partial<TwitterCardConfig>;\n article?: Partial<ArticleConfig>;\n};\n\nexport const applySocialMediaBindings = (config: SocialMediaConfig) => {\n if (config.title) applyHeadTitleBinding(config.title);\n if (config.description) applyDescriptionBinding(config.description);\n\n if (config.openGraph || config.title || config.description || config.image || config.url) {\n applyOpenGraphBindings({\n title: config.openGraph?.title ?? config.title,\n description: config.openGraph?.description ?? config.description,\n image: config.openGraph?.image ?? config.image,\n url: config.openGraph?.url ?? config.url,\n ...config.openGraph,\n });\n }\n\n if (config.twitter || config.title || config.description || config.image) {\n applyTwitterCardBindings({\n title: config.twitter?.title ?? config.title,\n description: config.twitter?.description ?? config.description,\n image: config.twitter?.image ?? config.image,\n ...config.twitter,\n });\n }\n\n if (config.article) applyArticleBindings(config.article);\n};\n","import { Directive, inject, InjectionToken, OnDestroy, OnInit } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { AlternateLink, SeoConfig } from './seo.directive.types';\n\nconst mergeSeoConfig = (config: SeoConfig, parentConfig: SeoConfig): SeoConfig => {\n return {\n ...parentConfig,\n ...config,\n };\n};\n\nexport const SEO_DIRECTIVE_TOKEN = new InjectionToken<SeoDirective>('SEO_DIRECTIVE_TOKEN');\n\n/** @deprecated use binding utils instead */\n@Directive({\n providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }],\n})\nexport class SeoDirective implements OnInit, OnDestroy {\n private readonly _metaService = inject(Meta);\n private readonly _titleService = inject(Title);\n private readonly _onDeactivate$ = new Subject<boolean>();\n\n private _isDeactivated = false;\n\n readonly parent = inject(SEO_DIRECTIVE_TOKEN, { optional: true, skipSelf: true });\n\n get config(): SeoConfig {\n return this._config;\n }\n private _config: SeoConfig = {};\n\n ngOnInit(): void {\n this.parent?._deactivate();\n }\n\n ngOnDestroy(): void {\n this._deactivate();\n this._cleanUp();\n this.parent?._activate();\n }\n\n updateConfig(config: SeoConfig) {\n this._config = mergeSeoConfig(config, this.parent?.config || {});\n\n if (this._isDeactivated) {\n return;\n }\n\n this._deactivate();\n this._activate();\n }\n\n _activate() {\n this._onDeactivate$.next(false);\n this._isDeactivated = false;\n\n for (const [key, value] of Object.entries(this._config)) {\n if (value instanceof Observable) {\n value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));\n } else if (Array.isArray(value)) {\n value.forEach((value) => {\n if (value instanceof Observable) {\n value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));\n } else {\n this._update(key, value);\n }\n });\n } else if (typeof value === 'object' && value !== null) {\n for (const [subKey, subValue] of Object.entries(value)) {\n if (subValue instanceof Observable) {\n subValue.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(`${key}:${subKey}`, value));\n } else {\n this._update(`${key}:${subKey}`, subValue);\n }\n }\n } else {\n this._update(key, value);\n }\n }\n }\n\n _deactivate() {\n this._onDeactivate$.next(true);\n this._isDeactivated = true;\n }\n\n private _update(key: string, value: unknown) {\n switch (key) {\n case 'title':\n if (value && typeof value === 'string') {\n this._titleService.setTitle(value);\n }\n break;\n\n case 'canonical':\n {\n const link = document.querySelector(`link[rel=\"${key}\"]`);\n\n if (link) {\n link.setAttribute('href', value as string);\n } else {\n const newLink = document.createElement('link');\n newLink.setAttribute('rel', key);\n newLink.setAttribute('href', value as string);\n document.head.appendChild(newLink);\n }\n }\n\n break;\n\n case 'alternate':\n {\n const link = document.querySelector(`link[rel=\"${key}\"][hreflang=\"${(value as AlternateLink).hreflang}\"]`);\n\n if (link) {\n link.setAttribute('href', (value as AlternateLink).href);\n } else {\n const newLink = document.createElement('link');\n newLink.setAttribute('rel', key);\n newLink.setAttribute('hreflang', (value as AlternateLink).hreflang);\n newLink.setAttribute('href', (value as AlternateLink).href);\n document.head.appendChild(newLink);\n }\n }\n\n break;\n\n default:\n if (value !== undefined && value !== null) {\n const val = Array.isArray(value) ? value.join(', ') : (value as string);\n\n this._metaService.updateTag({ name: key, content: val });\n } else {\n this._metaService.removeTag(`name=\"${key}\"`);\n }\n break;\n }\n }\n\n private _cleanUp() {\n for (const key in this._config) {\n if (key === 'alternate') {\n const links = document.querySelectorAll(`link[rel=\"${key}\"]`);\n\n links.forEach((link) => {\n link.remove();\n });\n\n continue;\n }\n\n if (key === 'canonical') {\n const link = document.querySelector(`link[rel=\"${key}\"]`);\n\n if (link) {\n link.remove();\n }\n\n continue;\n }\n\n if (\n typeof this._config[key] === 'object' &&\n this._config[key] !== null &&\n !(this._config[key] instanceof Observable)\n ) {\n for (const subKey in this._config[key] as Record<string, unknown>) {\n const parentValue =\n this.parent?.config?.[key as keyof SeoConfig]?.[subKey as keyof SeoConfig[keyof SeoConfig]];\n\n if (parentValue === undefined) {\n this._update(`${key}:${subKey}`, undefined);\n }\n }\n } else {\n const parentValue = this.parent?.config?.[key as keyof SeoConfig];\n\n if (parentValue === undefined) {\n this._update(key, null);\n }\n }\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, signal } from '@angular/core';\nimport { injectRenderer } from '../providers';\nimport { MaybeSignal } from '../signals';\nimport { createRootProvider, createStaticRootProvider } 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\nexport const [provideStructuredDataConfig, injectStructuredDataConfig] = createStaticRootProvider<StructuredDataConfig>(\n {\n placement: 'body',\n },\n { name: 'Structured Data Config' },\n);\n\nexport const [provideStructuredDataStore, injectStructuredDataStore] = createRootProvider(\n () => {\n const document = inject(DOCUMENT);\n const renderer = injectRenderer();\n const config = injectStructuredDataConfig();\n const scripts = signal<Map<symbol, HTMLScriptElement>>(new Map());\n\n const getTargetElement = (): HTMLElement => {\n return config.placement === 'head' ? document.head : document.body;\n };\n\n const addStructuredData = (id: symbol, data: JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph) => {\n scripts.update((scriptMap) => {\n const newScripts = new Map(scriptMap);\n\n const oldScript = newScripts.get(id);\n if (oldScript && oldScript.parentNode) {\n renderer.removeChild(oldScript.parentNode, oldScript);\n }\n\n const script = renderer.createElement('script');\n\n renderer.setAttributes(script, { type: 'application/ld+json', text: 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 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 { ChangeDetectionStrategy, 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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n style: 'display: none',\n '[innerHTML]': 'jsonLD()',\n },\n})\nexport class StructuredDataComponent {\n private sanitizer = inject(DomSanitizer);\n\n data = input<JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined>(null);\n\n jsonLD = computed(() => {\n const data = this.data();\n\n if (!data) {\n return null;\n }\n\n const json = data ? JSON.stringify(data, null, 2).replace(/<\\/script>/g, '<\\\\/script>') : '';\n const html = `<script type=\"application/ld+json\">${json}</script>`;\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n}\n","import { createStaticProvider } 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 ThemeSwatch = {\n color: ThemeColorMap;\n onColor: OnThemeColorMap;\n};\n\nexport type Theme = {\n name: string;\n isDefault?: boolean;\n isDefaultAlt?: boolean;\n primary: ThemeSwatch;\n secondary?: ThemeSwatch;\n tertiary?: ThemeSwatch;\n};\n\nexport const createCssThemeName = (name: string) => name.replace(/([A-Z])/g, (g) => `-${g[0]!.toLowerCase()}`);\n\nexport const [ɵProvideColorThemes, injectColorThemes] = createStaticProvider<string[]>(undefined, {\n name: 'Color Themes',\n});\nexport const [ɵProvideThemesPrefix, injectThemesPrefix] = createStaticProvider('et', { name: 'Themes Prefix' });\n\nexport const provideColorThemesWithTailwind4 = (themes: Theme[], prefix = 'et') => [\n ɵProvideColorThemes(themes.map((theme) => theme.name)),\n ɵProvideThemesPrefix(prefix),\n];\n","import { isDevMode } from '@angular/core';\nimport { createCssThemeName, Theme, ThemeSwatch, ɵProvideColorThemes, ɵProvideThemesPrefix } from './theme.util';\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createSwatchCss = (swatch: string, isAlt: boolean, data: ThemeSwatch) => {\n const varSuffix = isAlt ? 'alt-' + swatch : swatch;\n const varOnSuffix = isAlt ? 'alt-' : '';\n\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};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createRootThemeCss = (themes: Theme[]) => {\n const createVars = (name: string, swatch: ThemeSwatch) => {\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 };\n\n const vars: string[] = [];\n\n for (const theme of themes) {\n const name = createCssThemeName(theme.name);\n\n if (theme.secondary || theme.tertiary) {\n vars.push(createVars(`${name}-primary`, theme.primary));\n\n if (theme.secondary) {\n vars.push(createVars(`${name}-secondary`, theme.secondary));\n }\n\n if (theme.tertiary) {\n vars.push(createVars(`${name}-tertiary`, theme.tertiary));\n }\n } else {\n vars.push(createVars(name, theme.primary));\n }\n }\n\n const css = `\n :root {\n ${vars.join('\\n')}\n }\n `;\n\n const style = document.createElement('style');\n style.id = `et-root-themes`;\n style.appendChild(document.createTextNode(css));\n document.head.appendChild(style);\n};\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createThemeStyle = (theme: Theme, isAlt: boolean) => {\n const cssThemeName = createCssThemeName(theme.name);\n const stringSuffix = isAlt ? '-alt' : '';\n\n const selectors = [\n ...((theme.isDefault && !isAlt) || (theme.isDefaultAlt && isAlt)\n ? [':root', `.et-theme${stringSuffix}--default`]\n : []),\n `.et-theme${stringSuffix}--${cssThemeName}`,\n ];\n\n const css = `\n ${selectors.join(', ')} {\n ${createSwatchCss('primary', isAlt, theme.primary)}\n ${theme.secondary ? createSwatchCss('secondary', isAlt, theme.secondary) : ''}\n ${theme.tertiary ? createSwatchCss('tertiary', isAlt, theme.tertiary) : ''}\n }\n `;\n\n const style = document.createElement('style');\n style.id = `et-theme${stringSuffix}--${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 const createTailwindRgbVar = (val: string | undefined) => (val ? `rgb(${val} / <alpha-value>)` : null);\n\n/**\n * @deprecated Migrate to Tailwind v4. Intent to remove in v6.\n */\nexport const createTailwindColorThemes = (themes: Theme[], 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:\n 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\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: Theme[]) => {\n if (isDevMode()) {\n const defaultCount = themes.filter((theme) => theme.isDefault).length;\n const defaultAltCount = themes.filter((theme) => theme.isDefaultAlt).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.map((theme) => theme.name)), ɵProvideThemesPrefix('et')];\n};\n","import {\n computed,\n Directive,\n effect,\n EffectRef,\n inject,\n InjectionToken,\n Injector,\n input,\n isDevMode,\n runInInjectionContext,\n untracked,\n} from '@angular/core';\nimport { setInputSignal } from '../utils';\nimport { createCssThemeName, injectColorThemes, injectThemesPrefix } from './theme.util';\n\nexport const THEME_PROVIDER = new InjectionToken<ProvideThemeDirective>('ThemeProvider');\n\n@Directive({\n selector: '[etProvideTheme]',\n providers: [{ provide: THEME_PROVIDER, useExisting: ProvideThemeDirective }],\n host: {\n '[class]': 'themeClass()',\n },\n})\nexport class ProvideThemeDirective {\n private themes = injectColorThemes({ optional: true });\n private prefix = injectThemesPrefix({ optional: true });\n private injector = inject(Injector);\n\n private currentProviderSync: EffectRef | null = null;\n\n mainTheme = input<string | null>(undefined, { alias: 'etProvideTheme' });\n altTheme = input<string | null>(undefined, { alias: 'etProvideAltTheme' });\n\n mainThemeName = computed(() => {\n const value = this.mainTheme();\n\n if (!this.themes || !value) return;\n\n if (isDevMode() && !this.themes?.some((theme) => theme === value) && value !== null) {\n console.error(`Theme ${value} does not exist. Please make sure to add it to provideColorThemes()`);\n }\n\n return createCssThemeName(value);\n });\n\n altThemeName = computed(() => {\n const value = this.altTheme();\n\n if (!this.themes || !value) return;\n\n if (isDevMode() && !this.themes?.some((theme) => theme === value) && value !== null) {\n console.warn(`Theme ${value} does not exist. Please make sure to add it to provideColorThemes()`);\n }\n\n return createCssThemeName(value);\n });\n\n protected themeClass = computed(() => {\n const themes: string[] = [];\n const prefix = this.prefix || 'et';\n\n if (this.mainThemeName()) {\n themes.push(`${prefix}-theme--${this.mainThemeName()}`);\n }\n\n if (this.altThemeName()) {\n themes.push(`${prefix}-theme-alt--${this.altThemeName()}`);\n }\n\n return themes.join(' ');\n });\n\n syncWithProvider(provider: ProvideThemeDirective) {\n this.currentProviderSync?.destroy();\n\n runInInjectionContext(this.injector, () => {\n this.currentProviderSync = effect(() => {\n const provideMainTheme = provider.mainTheme();\n const provideAltTheme = provider.altTheme();\n\n untracked(() => {\n setInputSignal(this.mainTheme, provideMainTheme);\n setInputSignal(this.altTheme, provideAltTheme);\n });\n });\n });\n }\n\n stopSyncWithProvider() {\n this.currentProviderSync?.destroy();\n this.currentProviderSync = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AnimatableDirective","DOCUMENT"],"mappings":"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"}
|