@ethlete/core 4.32.0 → 4.33.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 +16 -0
- package/fesm2022/ethlete-core.mjs +5932 -5902
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/package.json +16 -10
- package/types/ethlete-core.d.ts +2072 -0
- package/index.d.ts +0 -2022
|
@@ -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.6\", ngImport: i0, type: StructuredDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1kYXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc3RydWN0dXJlZC1kYXRhL3N0cnVjdHVyZWQtZGF0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7O0FBYW5FLE1BQU0sT0FBTyx1QkFBdUI7SUFWcEM7UUFXbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQWVwRDtJQWJDLElBQ0ksSUFBSSxDQUFDLFlBQWdGO1FBQ3ZGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBS0QsV0FBVyxDQUFDLEtBQXlFO1FBQ25GLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRixNQUFNLElBQUksR0FBRyxzQ0FBc0MsSUFBSSxXQUFXLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OEdBZlUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsK0xBUHhCLEVBQUU7OzJGQU9ELHVCQUF1QjtrQkFWbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGVBQWU7cUJBQ3ZCO2lCQUNGOztzQkFJRSxLQUFLOztzQkFLTCxXQUFXO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgaW5qZWN0LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEpzb25MRCB9IGZyb20gJ0BldGhsZXRlL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtc3RydWN0dXJlZC1kYXRhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6ICcnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFN0cnVjdHVyZWREYXRhQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGEoY3VycmVudFZhbHVlOiBKc29uTEQuV2l0aENvbnRleHQ8SnNvbkxELlRoaW5nPiB8IEpzb25MRC5HcmFwaCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmpzb25MRCA9IHRoaXMuZ2V0U2FmZUhUTUwoY3VycmVudFZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnaW5uZXJIVE1MJylcbiAganNvbkxEPzogU2FmZUh0bWw7XG5cbiAgZ2V0U2FmZUhUTUwodmFsdWU6IEpzb25MRC5XaXRoQ29udGV4dDxKc29uTEQuVGhpbmc+IHwgSnNvbkxELkdyYXBoIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGpzb24gPSB2YWx1ZSA/IEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKS5yZXBsYWNlKC88XFwvc2NyaXB0Pi9nLCAnPFxcXFwvc2NyaXB0PicpIDogJyc7XG4gICAgY29uc3QgaHRtbCA9IGA8c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9sZCtqc29uXCI+JHtqc29ufTwvc2NyaXB0PmA7XG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcbiAgfVxufVxuIl19","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, inject, InjectionToken, TemplateRef } from '@angular/core';\nimport { createComponentId } from './component-id.utils';\nexport const injectHostElement = () => inject(ElementRef).nativeElement;\nexport const injectTemplateRef = () => inject(TemplateRef);\nconst createInjectFunction = (token) => {\n function injectFn(options) {\n return options ? inject(token, options) : inject(token);\n }\n return injectFn;\n};\nconst createProviders = (token, factory, extraToken) => [\n { provide: token, useFactory: factory },\n ...(extraToken ? [{ provide: extraToken, useExisting: token }] : []),\n];\nexport const createProvider = (factory, options) => {\n const token = new InjectionToken(options?.name ?? createComponentId('provider'));\n const provide = () => createProviders(token, factory, options?.extraInjectionToken);\n const injectFn = createInjectFunction(token);\n return [provide, injectFn, token];\n};\nexport const createRootProvider = (factory, options) => {\n const token = new InjectionToken(options?.name ?? createComponentId('provider'), {\n providedIn: 'root',\n factory,\n });\n const provide = () => createProviders(token, factory, options?.extraInjectionToken);\n const injectFn = createInjectFunction(token);\n return [provide, injectFn, token];\n};\nexport const createStaticProvider = (defaultValue, options) => {\n const token = new InjectionToken(options?.name ?? createComponentId('static-provider'));\n const provide = (valueOverride) => [\n { provide: token, useValue: maybeMergeValues(defaultValue, valueOverride) },\n ...(options?.extraInjectionToken ? [{ provide: options.extraInjectionToken, useExisting: token }] : []),\n ];\n const injectFn = createInjectFunction(token);\n return [provide, injectFn, token];\n};\nexport const createStaticRootProvider = (defaultValue, options) => {\n const token = new InjectionToken(options?.name ?? createComponentId('static-provider'), {\n providedIn: 'root',\n factory: () => defaultValue,\n });\n const provide = (valueOverride) => [\n { provide: token, useValue: maybeMergeValues(defaultValue, valueOverride) },\n ...(options?.extraInjectionToken ? [{ provide: options.extraInjectionToken, useExisting: token }] : []),\n ];\n const injectFn = createInjectFunction(token);\n return [provide, injectFn, token];\n};\nconst maybeMergeValues = (defaultValue, valueOverride) => {\n if (valueOverride && defaultValue && typeof defaultValue === 'object') {\n return { ...defaultValue, ...valueOverride };\n }\n return valueOverride ?? defaultValue;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvaW5qZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBMkIsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQW9CLEVBQUUsQ0FBQyxNQUFNLENBQWdCLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFnQixFQUFFLENBQUMsTUFBTSxDQUFpQixXQUFXLENBQUMsQ0FBQztBQTRDeEYsTUFBTSxvQkFBb0IsR0FBRyxDQUFJLEtBQXdCLEVBQUUsRUFBRTtJQUkzRCxTQUFTLFFBQVEsQ0FBQyxPQUF1QjtRQUN2QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUF3QixFQUN4QixPQUFnQixFQUNoQixVQUFvQyxFQUN4QixFQUFFLENBQUM7SUFDZixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtJQUN2QyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3JFLENBQUM7QUFFRixN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SUFFRixNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU3QyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQVUsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUksWUFBMkIsRUFBRSxhQUEwQixFQUFFLEVBQUU7SUFDdEYsSUFBSSxhQUFhLElBQUksWUFBWSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLGFBQWEsSUFBSSxZQUFZLENBQUM7QUFDdkMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0T3B0aW9ucywgUHJvdmlkZXIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVDb21wb25lbnRJZCB9IGZyb20gJy4vY29tcG9uZW50LWlkLnV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGluamVjdEhvc3RFbGVtZW50ID0gPFQgPSBIVE1MRWxlbWVudD4oKSA9PiBpbmplY3Q8RWxlbWVudFJlZjxUPj4oRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuZXhwb3J0IGNvbnN0IGluamVjdFRlbXBsYXRlUmVmID0gPEMgPSB1bmtub3duPigpID0+IGluamVjdDxUZW1wbGF0ZVJlZjxDPj4oVGVtcGxhdGVSZWYpO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVQcm92aWRlck9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcHJvdmlkZXIsIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBuYW1lIHdpbGwgYmUgYSBnZW5lcmF0ZWQgc3RyaW5nLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZXhpc3RpbmcgSW5qZWN0aW9uVG9rZW4gdG8gYWxzbyBwcm92aWRlIHRoZSBjcmVhdGVkIHByb3ZpZGVyIHVuZGVyLlxuICAgKi9cbiAgZXh0cmFJbmplY3Rpb25Ub2tlbj86IEluamVjdGlvblRva2VuPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJSZXN1bHQ8VD4gPSByZWFkb25seSBbXG4gIHByb3ZpZGU6ICgpID0+IFByb3ZpZGVyW10sXG4gIGluamVjdDoge1xuICAgICgpOiBUO1xuICAgIChvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IGZhbHNlIH0pOiBUO1xuICAgIChvcHRpb25zOiBJbmplY3RPcHRpb25zKTogVCB8IG51bGw7XG4gIH0sXG4gIHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPixcbl07XG5cbmV4cG9ydCB0eXBlIFN0YXRpY1Byb3ZpZGVyUmVzdWx0PFQ+ID0gcmVhZG9ubHkgW1xuICBwcm92aWRlOiAodmFsdWVPdmVycmlkZT86IFBhcnRpYWw8VD4pID0+IFByb3ZpZGVyW10sXG4gIGluamVjdDoge1xuICAgICgpOiBUO1xuICAgIChvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IGZhbHNlIH0pOiBUO1xuICAgIChvcHRpb25zOiBJbmplY3RPcHRpb25zKTogVCB8IG51bGw7XG4gIH0sXG4gIHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPixcbl07XG5cbmV4cG9ydCB0eXBlIFJvb3RQcm92aWRlclJlc3VsdDxUPiA9IHJlYWRvbmx5IFtcbiAgaW5qZWN0OiB7XG4gICAgKCk6IFQ7XG4gICAgKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogZmFsc2UgfSk6IFQ7XG4gICAgKG9wdGlvbnM6IEluamVjdE9wdGlvbnMpOiBUIHwgbnVsbDtcbiAgfSxcbiAgdG9rZW46IEluamVjdGlvblRva2VuPFQ+LFxuXTtcblxuY29uc3QgY3JlYXRlSW5qZWN0RnVuY3Rpb24gPSA8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+KSA9PiB7XG4gIGZ1bmN0aW9uIGluamVjdEZuKCk6IFQ7XG4gIGZ1bmN0aW9uIGluamVjdEZuKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogZmFsc2UgfSk6IFQ7XG4gIGZ1bmN0aW9uIGluamVjdEZuKG9wdGlvbnM6IEluamVjdE9wdGlvbnMpOiBUIHwgbnVsbDtcbiAgZnVuY3Rpb24gaW5qZWN0Rm4ob3B0aW9ucz86IEluamVjdE9wdGlvbnMpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBpbmplY3QodG9rZW4sIG9wdGlvbnMpIDogaW5qZWN0KHRva2VuKTtcbiAgfVxuICByZXR1cm4gaW5qZWN0Rm47XG59O1xuXG5jb25zdCBjcmVhdGVQcm92aWRlcnMgPSA8VD4oXG4gIHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPixcbiAgZmFjdG9yeTogKCkgPT4gVCxcbiAgZXh0cmFUb2tlbj86IEluamVjdGlvblRva2VuPHVua25vd24+LFxuKTogUHJvdmlkZXJbXSA9PiBbXG4gIHsgcHJvdmlkZTogdG9rZW4sIHVzZUZhY3Rvcnk6IGZhY3RvcnkgfSxcbiAgLi4uKGV4dHJhVG9rZW4gPyBbeyBwcm92aWRlOiBleHRyYVRva2VuLCB1c2VFeGlzdGluZzogdG9rZW4gfV0gOiBbXSksXG5dO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUHJvdmlkZXIgPSA8VD4oZmFjdG9yeTogKCkgPT4gVCwgb3B0aW9ucz86IENyZWF0ZVByb3ZpZGVyT3B0aW9ucyk6IFByb3ZpZGVyUmVzdWx0PFQ+ID0+IHtcbiAgY29uc3QgdG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48VD4ob3B0aW9ucz8ubmFtZSA/PyBjcmVhdGVDb21wb25lbnRJZCgncHJvdmlkZXInKSk7XG4gIGNvbnN0IHByb3ZpZGUgPSAoKSA9PiBjcmVhdGVQcm92aWRlcnModG9rZW4sIGZhY3RvcnksIG9wdGlvbnM/LmV4dHJhSW5qZWN0aW9uVG9rZW4pO1xuICBjb25zdCBpbmplY3RGbiA9IGNyZWF0ZUluamVjdEZ1bmN0aW9uKHRva2VuKTtcblxuICByZXR1cm4gW3Byb3ZpZGUsIGluamVjdEZuLCB0b2tlbl0gYXMgY29uc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUm9vdFByb3ZpZGVyID0gPFQ+KGZhY3Rvcnk6ICgpID0+IFQsIG9wdGlvbnM/OiBDcmVhdGVQcm92aWRlck9wdGlvbnMpOiBQcm92aWRlclJlc3VsdDxUPiA9PiB7XG4gIGNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFQ+KG9wdGlvbnM/Lm5hbWUgPz8gY3JlYXRlQ29tcG9uZW50SWQoJ3Byb3ZpZGVyJyksIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvdmlkZSA9ICgpID0+IGNyZWF0ZVByb3ZpZGVycyh0b2tlbiwgZmFjdG9yeSwgb3B0aW9ucz8uZXh0cmFJbmplY3Rpb25Ub2tlbik7XG4gIGNvbnN0IGluamVjdEZuID0gY3JlYXRlSW5qZWN0RnVuY3Rpb24odG9rZW4pO1xuXG4gIHJldHVybiBbcHJvdmlkZSwgaW5qZWN0Rm4sIHRva2VuXSBhcyBjb25zdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdGF0aWNQcm92aWRlciA9IDxUPihkZWZhdWx0VmFsdWU/OiBULCBvcHRpb25zPzogQ3JlYXRlUHJvdmlkZXJPcHRpb25zKTogU3RhdGljUHJvdmlkZXJSZXN1bHQ8VD4gPT4ge1xuICBjb25zdCB0b2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUPihvcHRpb25zPy5uYW1lID8/IGNyZWF0ZUNvbXBvbmVudElkKCdzdGF0aWMtcHJvdmlkZXInKSk7XG5cbiAgY29uc3QgcHJvdmlkZSA9ICh2YWx1ZU92ZXJyaWRlPzogUGFydGlhbDxUPikgPT4gW1xuICAgIHsgcHJvdmlkZTogdG9rZW4sIHVzZVZhbHVlOiBtYXliZU1lcmdlVmFsdWVzKGRlZmF1bHRWYWx1ZSwgdmFsdWVPdmVycmlkZSkgfSxcbiAgICAuLi4ob3B0aW9ucz8uZXh0cmFJbmplY3Rpb25Ub2tlbiA/IFt7IHByb3ZpZGU6IG9wdGlvbnMuZXh0cmFJbmplY3Rpb25Ub2tlbiwgdXNlRXhpc3Rpbmc6IHRva2VuIH1dIDogW10pLFxuICBdO1xuXG4gIGNvbnN0IGluamVjdEZuID0gY3JlYXRlSW5qZWN0RnVuY3Rpb24odG9rZW4pO1xuXG4gIHJldHVybiBbcHJvdmlkZSwgaW5qZWN0Rm4sIHRva2VuXSBhcyBjb25zdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdGF0aWNSb290UHJvdmlkZXIgPSA8VD4oXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4gIG9wdGlvbnM/OiBDcmVhdGVQcm92aWRlck9wdGlvbnMsXG4pOiBTdGF0aWNQcm92aWRlclJlc3VsdDxUPiA9PiB7XG4gIGNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFQ+KG9wdGlvbnM/Lm5hbWUgPz8gY3JlYXRlQ29tcG9uZW50SWQoJ3N0YXRpYy1wcm92aWRlcicpLCB7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6ICgpID0+IGRlZmF1bHRWYWx1ZSBhcyBULFxuICB9KTtcblxuICBjb25zdCBwcm92aWRlID0gKHZhbHVlT3ZlcnJpZGU/OiBQYXJ0aWFsPFQ+KSA9PiBbXG4gICAgeyBwcm92aWRlOiB0b2tlbiwgdXNlVmFsdWU6IG1heWJlTWVyZ2VWYWx1ZXMoZGVmYXVsdFZhbHVlLCB2YWx1ZU92ZXJyaWRlKSB9LFxuICAgIC4uLihvcHRpb25zPy5leHRyYUluamVjdGlvblRva2VuID8gW3sgcHJvdmlkZTogb3B0aW9ucy5leHRyYUluamVjdGlvblRva2VuLCB1c2VFeGlzdGluZzogdG9rZW4gfV0gOiBbXSksXG4gIF07XG5cbiAgY29uc3QgaW5qZWN0Rm4gPSBjcmVhdGVJbmplY3RGdW5jdGlvbih0b2tlbik7XG5cbiAgcmV0dXJuIFtwcm92aWRlLCBpbmplY3RGbiwgdG9rZW5dIGFzIGNvbnN0O1xufTtcblxuY29uc3QgbWF5YmVNZXJnZVZhbHVlcyA9IDxUPihkZWZhdWx0VmFsdWU6IFQgfCB1bmRlZmluZWQsIHZhbHVlT3ZlcnJpZGU/OiBQYXJ0aWFsPFQ+KSA9PiB7XG4gIGlmICh2YWx1ZU92ZXJyaWRlICYmIGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7IC4uLmRlZmF1bHRWYWx1ZSwgLi4udmFsdWVPdmVycmlkZSB9O1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlT3ZlcnJpZGUgPz8gZGVmYXVsdFZhbHVlO1xufTtcbiJdfQ==","// 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.6\", ngImport: i0, type: ClickObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: ClickObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: ClickObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: ClickObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: ContentObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: ContentObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: FocusVisibleService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: IntersectionObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: IntersectionObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: IntersectionObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: IntersectionObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: ResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: ResizeObserverService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: RouterStateService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: ViewportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", 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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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQU85RDtRQUNDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQTNSVSxlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOztBQXdNbEI7SUFEQyxJQUFJLEVBQUU7Ozs7d0RBaUJOO0FBZ0JPO0lBTFAsSUFBSSxDQUFDO1FBQ0osUUFBUSxFQUFFLENBQUMsQ0FBeUIsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLENBQUM7S0FDRixDQUFDOzs7O3VEQTZCRDsyRkFsUVUsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBERUZBVUxUX1ZJRVdQT1JUX0NPTkZJRywgVklFV1BPUlRfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1lbW8gfSBmcm9tICcuLi9kZWNvcmF0b3JzL21lbW8nO1xuaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXNpemUtb2JzZXJ2ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCdWlsZE1lZGlhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi92aWV3cG9ydC50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmlld3BvcnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KFJlc2l6ZU9ic2VydmVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdwb3J0Q29uZmlnID0gaW5qZWN0KFZJRVdQT1JUX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KSB8fCBERUZBVUxUX1ZJRVdQT1JUX0NPTkZJRztcbiAgcHJpdmF0ZSByZWFkb25seSBfYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld3BvcnRNb25pdG9yU3RvcCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pc1ZpZXdwb3J0TW9uaXRvckVuYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pc1hzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtYXg6ICd4cycgfSkpO1xuICBwcml2YXRlIF9pc1NtJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICdzbScsIG1heDogJ3NtJyB9KSk7XG4gIHByaXZhdGUgX2lzTWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmlzTWF0Y2hlZCh7IG1pbjogJ21kJywgbWF4OiAnbWQnIH0pKTtcbiAgcHJpdmF0ZSBfaXNMZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuaXNNYXRjaGVkKHsgbWluOiAnbGcnLCBtYXg6ICdsZycgfSkpO1xuICBwcml2YXRlIF9pc1hsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICd4bCcsIG1heDogJ3hsJyB9KSk7XG4gIHByaXZhdGUgX2lzMlhsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICcyeGwnIH0pKTtcblxuICBwcml2YXRlIF92aWV3cG9ydFNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaXplIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgX3Njcm9sbGJhclNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaXplIHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGlzWHMkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1hzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc1hzKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1hzJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1NtJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTbSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNTbSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTbSQudmFsdWU7XG4gIH1cblxuICBnZXQgaXNNZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzTWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWQkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzTGckKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0xnJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc0xnKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0xnJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1hsJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNYbCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNYbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNYbCQudmFsdWU7XG4gIH1cblxuICBnZXQgaXMyWGwkKCkge1xuICAgIHJldHVybiB0aGlzLl9pczJYbCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXMyWGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzMlhsJC52YWx1ZTtcbiAgfVxuXG4gIGdldCB2aWV3cG9ydFNpemUkKCkge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydFNpemUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHZpZXdwb3J0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBzY3JvbGxiYXJTaXplJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU2l6ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc2Nyb2xsYmFyU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU2l6ZSQudmFsdWU7XG4gIH1cblxuICBjdXJyZW50Vmlld3BvcnQkID0gY29tYmluZUxhdGVzdChbdGhpcy5pc1hzJCwgdGhpcy5pc1NtJCwgdGhpcy5pc01kJCwgdGhpcy5pc0xnJCwgdGhpcy5pc1hsJCwgdGhpcy5pczJYbCRdKS5waXBlKFxuICAgIG1hcCgodmFsKSA9PiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCh2YWwpKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBnZXQgY3VycmVudFZpZXdwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydChbdGhpcy5pc1hzLCB0aGlzLmlzU20sIHRoaXMuaXNNZCwgdGhpcy5pc0xnLCB0aGlzLmlzWGwsIHRoaXMuaXMyWGxdKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX29ic2VydmVEZWZhdWx0QnJlYWtwb2ludHMoKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9uczogeyBtaW4/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsU0FBcUIsRUFBRSxFQUFFO0lBQzlFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekUsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM3QixPQUFPLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sWUFBWSxHQUFHLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQWdFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWdDLEVBQW1DLEVBQUU7SUFDcEcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsS0FBSyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU87WUFD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aWwnO1xuXG5leHBvcnQgY29uc3QgZWxlbWVudENhblNjcm9sbCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZGlyZWN0aW9uPzogJ3gnIHwgJ3knKSA9PiB7XG4gIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQsIHNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCB9ID0gZWxlbWVudDtcblxuICBpZiAoZGlyZWN0aW9uID09PSAneCcpIHtcbiAgICByZXR1cm4gc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd5Jykge1xuICAgIHJldHVybiBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQ7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0IHx8IHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGg7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElzRWxlbWVudFZpc2libGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNoZWNrIGlmIGl0IGlzIHZpc2libGUgaW5zaWRlIGEgY29udGFpbmVyLlxuICAgKi9cbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluc2lkZS5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/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};\nconst getQueryParamFromUrl = (key) => {\n if (typeof window === 'undefined')\n return null;\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(key);\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] ?? (config?.requireSync ? getQueryParamFromUrl(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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MEIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbkcsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtJQUN4QyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBRXRDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQixJQUFJLE9BQU8sRUFBRTtZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzlCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsc0dBQXNHO0FBQ3RHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7SUFDakMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVsRyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBFZmZlY3RSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFBMQVRGT1JNX0lELFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgU2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgaXNTaWduYWwsXG4gIGxpbmtlZFNpZ25hbCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblNraXBwZWQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHBhaXJ3aXNlLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRVRfUFJPUEVSVFlfUkVNT1ZFRCwgUm91dGVyU3RhdGUsIFJvdXRlclN0YXRlU2VydmljZSwgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5leHRGcmFtZSB9IGZyb20gJy4vYW5pbWF0aW9uLnV0aWxzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi9lcXVhbC51dGlsJztcbmltcG9ydCB7IGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZhYmxlIH0gZnJvbSAnLi9tZWRpYS1xdWVyeS1vYnNlcnZhYmxlLnV0aWwnO1xuaW1wb3J0IHsgaXNFbGVtZW50VmlzaWJsZSB9IGZyb20gJy4vc2Nyb2xsYWJsZS51dGlscyc7XG5cbnR5cGUgU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PlxuICB8IEFycmF5PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+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+KSA9PiB7XG4gIGNvbnN0IHJvdXRlclN0YXRlID0gaW5qZWN0Um91dGVyU3RhdGUoKTtcbiAgY29uc3QgdGl0bGUgPSBjb21wdXRlZCgoKSA9PiByb3V0ZXJTdGF0ZSgpLnRpdGxlKTtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4odGl0bGUsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBhdGggcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvdXRlclN0YXRlID0gaW5qZWN0Um91dGVyU3RhdGUoKTtcblxuICBjb25zdCBwYXRoUGFyYW1zID0gY29tcHV0ZWQoKCkgPT4gcm91dGVyU3RhdGUoKS5wYXRoUGFyYW1zKTtcblxuICByZXR1cm4gcGF0aFBhcmFtcztcbn07XG5cbmV4cG9ydCB0eXBlIEluamVjdFF1ZXJ5UGFyYW1Db25maWc8VD4gPSBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+ICYge1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIGluaXRpYWwgdmFsdWUgd2lsbCBiZSByZWFkIGZyb20gdGhlIGJyb3dzZXIncyB1cmwuXG4gICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHdvcmsgd2l0aCBhcnJheXMgb3IgY29tcGxleCBvYmplY3RzLlxuICAgKi9cbiAgcmVxdWlyZVN5bmM/OiBib29sZWFuO1xufTtcblxuY29uc3QgZ2V0UXVlcnlQYXJhbUZyb21VcmwgPSAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICByZXR1cm4gdXJsUGFyYW1zLmdldChrZXkpO1xufTtcblxuLyoqIEluamVjdCBhIHNwZWNpZmljIHF1ZXJ5IHBhcmFtZXRlciBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFF1ZXJ5UGFyYW0gPSA8VCA9IHN0cmluZyB8IG51bGw+KGtleTogc3RyaW5nLCBjb25maWc/OiBJbmplY3RRdWVyeVBhcmFtQ29uZmlnPFQ+KSA9PiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gaW5qZWN0UXVlcnlQYXJhbXMoKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gcXVlcnlQYXJhbXMoKVtrZXldID8/IChjb25maWc/LnJlcXVpcmVTeW5jID8gZ2V0UXVlcnlQYXJhbUZyb21Vcmwoa2V5KSA6IG51bGwpKSBhcyBTaWduYWw8XG4gICAgc3RyaW5nIHwgbnVsbFxuICA+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.6\", ngImport: i0, type: AnimatableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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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TyxDQUFDLDBCQUEwQjtpQkFDcEMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNaLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQzs4R0FsSVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsK0hBUG5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsV0FBVyxFQUFFLG1CQUFtQjthQUNqQztTQUNGOzsyRkFFVSxtQkFBbUI7a0JBWC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGdCQUFnQjs0QkFDekIsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGO2lCQUNGOztzQkFZRSxLQUFLO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBpc0Rldk1vZGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBza2lwLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgQU5JTUFUQUJMRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBbmltYXRhYmxlRGlyZWN0aXZlPignQU5JTUFUQUJMRV9ESVJFQ1RJVkVfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0QW5pbWF0YWJsZV0nLFxuICBleHBvcnRBczogJ2V0QW5pbWF0YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFOSU1BVEFCTEVfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogQW5pbWF0YWJsZURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmltYXRhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfZGlkRW1pdFN0YXJ0ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50ID0gaW5qZWN0KEFOSU1BVEFCTEVfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYW5pbWF0aW9uU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYW5pbWF0aW9uRW5kJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGlvbkNhbmNlbGxlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgnZXRBbmltYXRhYmxlJylcbiAgc2V0IGFuaW1hdGVkRWxlbWVudCh2YWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgbGV0IG5ld0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBuZXdFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHZhbHVlKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIG5ld0VsZW1lbnQgPSBlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRWxlbWVudCB3aXRoIHNlbGVjdG9yICR7dmFsdWV9IG5vdCBmb3VuZC4gQW5pbWF0YWJsZSBkaXJlY3RpdmUgd2lsbCB1c2UgaG9zdCBlbGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RWxlbWVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hbmltYXRlZEVsZW1lbnQkLnZhbHVlICE9PSBuZXdFbGVtZW50KSB7XG4gICAgICB0aGlzLl9hbmltYXRlZEVsZW1lbnQkLm5leHQobmV3RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2FuaW1hdGVkRWxlbWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50Pih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gIHJlYWRvbmx5IGFuaW1hdGlvblN0YXJ0JCA9IHRoaXMuX2FuaW1hdGlvblN0YXJ0JC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgwKSk7XG4gIHJlYWRvbmx5IGFuaW1hdGlvbkVuZCQgPSB0aGlzLl9hbmltYXRpb25FbmQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDApKTtcbiAgcmVhZG9ubHkgYW5pbWF0aW9uQ2FuY2VsbGVkJCA9IHRoaXMuX2FuaW1hdGlvbkNhbmNlbGxlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoMCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gIHJlYWRvbmx5IGlzQW5pbWF0aW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkLnBpcGUoXG4gICAgbWFwKChjb3VudCkgPT4gY291bnQgPiAwKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fYW5pbWF0ZWRFbGVtZW50JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLl90b3RhbEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQudmFsdWUgLSB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLnZhbHVlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KDApO1xuXG4gICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50PEFuaW1hdGlvbkV2ZW50PihlbCwgJ2FuaW1hdGlvbnN0YXJ0JyksIGZyb21FdmVudDxUcmFuc2l0aW9uRXZlbnQ+KGVsLCAndHJhbnNpdGlvbnN0YXJ0JykpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKChlKSA9PiBlLnRhcmdldCA9PT0gZWwpLCAvLyBza2lwIGV2ZW50cyBmcm9tIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLnZhbHVlICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoY291bnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoY291bnQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2FuaW1hdGVkRWxlbWVudCQucGlwZShza2lwKDEpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIGZyb21FdmVudDxBbmltYXRpb25FdmVudD4oZWwsICdhbmltYXRpb25lbmQnKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxBbmltYXRpb25FdmVudD4oZWwsICdhbmltYXRpb25jYW5jZWwnKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxUcmFuc2l0aW9uRXZlbnQ+KGVsLCAndHJhbnNpdGlvbmVuZCcpLFxuICAgICAgICAgICAgZnJvbUV2ZW50PFRyYW5zaXRpb25FdmVudD4oZWwsICd0cmFuc2l0aW9uY2FuY2VsJyksXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoZSkgPT4gZS50YXJnZXQgPT09IGVsKSwgLy8gc2tpcCBldmVudHMgZnJvbSBjaGlsZHJlblxuICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC52YWx1ZSAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KGNvdW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl90b3RhbEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KGNvdW50KTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9hbmltYXRlZEVsZW1lbnQkLnBpcGUoc2tpcCgxKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50PEFuaW1hdGlvbkV2ZW50PihlbCwgJ2FuaW1hdGlvbmNhbmNlbCcpLCBmcm9tRXZlbnQ8VHJhbnNpdGlvbkV2ZW50PihlbCwgJ3RyYW5zaXRpb25jYW5jZWwnKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudGFyZ2V0ID09PSBlbCksIC8vIHNraXAgZXZlbnRzIGZyb20gY2hpbGRyZW5cbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25DYW5jZWxsZWQkLm5leHQoKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9hbmltYXRlZEVsZW1lbnQkLnBpcGUoc2tpcCgxKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChjb3VudCkgPT4ge1xuICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgIXRoaXMuX2RpZEVtaXRTdGFydCkge1xuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhcnQkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RpZEVtaXRTdGFydCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uRW5kJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9kaWRFbWl0U3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgdGhpcy5fcGFyZW50Ll9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgdGFwKChjb3VudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQubmV4dChjb3VudCArIHRoaXMuX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQudmFsdWUpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","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.6\", ngImport: i0, type: AnimatedLifecycleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.6\", 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.6\", 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: () => [], propDecorators: { stateChange: [{ type: i0.Output, args: [\"stateChange\"] }], skipNextEnter: [{ type: i0.Input, args: [{ isSignal: true, alias: \"skipNextEnter\", required: false }] }, { type: i0.Output, args: [\"skipNextEnterChange\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtbGlmZWN5Y2xlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYW5pbWF0ZWQtbGlmZWN5Y2xlL2FuaW1hdGVkLWxpZmVjeWNsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUV0RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsb0NBQW9DLENBQ3JDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEMsV0FBVyxFQUFFLDJCQUEyQjtJQUN4QyxPQUFPLEVBQUUsdUJBQXVCO0lBQ2hDLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEMsU0FBUyxFQUFFLHlCQUF5QjtJQUNwQyxXQUFXLEVBQUUsMkJBQTJCO0lBQ3hDLE9BQU8sRUFBRSx1QkFBdUI7SUFDaEMsU0FBUyxFQUFFLHlCQUF5QjtDQUM1QixDQUFDO0FBbUJYLE1BQU0sT0FBTywwQkFBMEI7SUFXckMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJ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Q0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBNkI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs4R0FwSVUsMEJBQTBCO2tHQUExQiwwQkFBMEIsK1ZBWDFCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHdCQUF3QjtnQkFDakMsV0FBVyxFQUFFLDBCQUEwQjthQUN4QztTQUNGOzsyRkFNVSwwQkFBMEI7a0JBZnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxXQUFXLDRCQUE0Qjt5QkFDeEM7cUJBQ0Y7b0JBQ0QsY0FBYyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsb0JBQW9CO3FCQUM1QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBtb2RlbCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRGcm9tT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIGZvcmNlUmVmbG93LCBmcm9tTmV4dEZyYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQU5JTUFUQUJMRV9UT0tFTiwgQW5pbWF0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2FuaW1hdGFibGUnO1xuXG5leHBvcnQgY29uc3QgQU5JTUFURURfTElGRUNZQ0xFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEFuaW1hdGVkTGlmZWN5Y2xlRGlyZWN0aXZlPihcbiAgJ0FOSU1BVEVEX0xJRkVDWUNMRV9ESVJFQ1RJVkVfVE9LRU4nLFxuKTtcblxuY29uc3QgQU5JTUFUSU9OX0NMQVNTRVMgPSB7XG4gIGVudGVyRnJvbTogJ2V0LWFuaW1hdGlvbi1lbnRlci1mcm9tJyxcbiAgZW50ZXJBY3RpdmU6ICdldC1hbmltYXRpb24tZW50ZXItYWN0aXZlJyxcbiAgZW50ZXJUbzogJ2V0LWFuaW1hdGlvbi1lbnRlci10bycsXG4gIGVudGVyRG9uZTogJ2V0LWFuaW1hdGlvbi1lbnRlci1kb25lJyxcbiAgbGVhdmVGcm9tOiAnZXQtYW5pbWF0aW9uLWxlYXZlLWZyb20nLFxuICBsZWF2ZUFjdGl2ZTogJ2V0LWFuaW1hdGlvbi1sZWF2ZS1hY3RpdmUnLFxuICBsZWF2ZVRvOiAnZXQtYW5pbWF0aW9uLWxlYXZlLXRvJyxcbiAgbGVhdmVEb25lOiAnZXQtYW5pbWF0aW9uLWxlYXZlLWRvbmUnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQW5pbWF0ZWRMaWZlY3ljbGVTdGF0ZSA9ICdlbnRlcmluZycgfCAnZW50ZXJlZCcgfCAnbGVhdmluZycgfCAnbGVmdCcgfCAnaW5pdCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldEFuaW1hdGVkTGlmZWN5Y2xlXScsXG4gIGV4cG9ydEFzOiAnZXRBbmltYXRlZExpZmVjeWNsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFOSU1BVEVEX0xJRkVDWUNMRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBBbmltYXRlZExpZmVjeWNsZURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW0FuaW1hdGFibGVEaXJlY3RpdmVdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1mb3JjZS1pbnZpc2libGUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBbmltYXRlZExpZmVjeWNsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGFibGUgPSBpbmplY3QoQU5JTUFUQUJMRV9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzTGlzdCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7XG5cbiAgcHJpdmF0ZSBfaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW5pbWF0ZWRMaWZlY3ljbGVTdGF0ZT4oJ2luaXQnKTtcbiAgcmVhZG9ubHkgc3RhdGUkID0gdGhpcy5fc3RhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgc3RhdGVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLl9zdGF0ZSQsIHsgaW5pdGlhbFZhbHVlOiAnaW5pdCcgfSk7XG5cbiAgc3RhdGVDaGFuZ2UgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLl9zdGF0ZSQpO1xuXG4gIHNraXBOZXh0RW50ZXIgPSBtb2RlbChmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVTaWduYWwoKTtcblxuICAgICAgaWYgKHN0YXRlICE9PSAnaW5pdCcpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZXQtZm9yY2UtaW52aXNpYmxlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdldC1mb3JjZS1pbnZpc2libGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0NvbnN0cnVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGVudGVyKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnZW50ZXJpbmcnKSByZXR1cm47XG5cbiAgICBpZiAoKHRoaXMuc3RhdGUgPT09ICdpbml0JyAmJiAhdGhpcy5faXNDb25zdHJ1Y3RlZCkgfHwgdGhpcy5za2lwTmV4dEVudGVyKCkpIHtcbiAgICAgIC8vIEZvcmNlIHRoZSBzdGF0ZSB0byBlbnRlcmVkIHNvIHRoYXQgdGhlIGVsZW1lbnQgaXMgbm90IGFuaW1hdGVkIHdoZW4gaXQgaXMgZmlyc3QgcmVuZGVyZWQuXG4gICAgICB0aGlzLl9mb3JjZVN0YXRlKCdlbnRlcmVkJyk7XG4gICAgICB0aGlzLnNraXBOZXh0RW50ZXIuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJEb25lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2xlYXZpbmcnKSB7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlRnJvbSk7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlQWN0aXZlKTtcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVUbyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUkLm5leHQoJ2VudGVyaW5nJyk7XG5cbiAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlRG9uZSk7XG4gICAgdGhpcy5fY2xhc3NMaXN0LmFkZChBTklNQVRJT05fQ0xBU1NFUy5lbnRlckZyb20pO1xuXG4gICAgZm9yY2VSZWZsb3coKTtcbiAgICB0aGlzLl9jbGFzc0xpc3QuYWRkKEFOSU1BVElPTl9DTEFTU0VTLmVudGVyQWN0aXZlKTtcblxuICAgIGZyb21OZXh0RnJhbWUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdlbnRlcmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+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.6\", ngImport: i0, type: AnimatedIfDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtaWYuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9hbmltYXRlZC1pZi9hbmltYXRlZC1pZi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFFakUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQXNCLG1CQUFtQixDQUFDLENBQUM7QUFhOUYsTUFBTSxPQUFPLG1CQUFtQjtJQVhoQztRQVltQixjQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDNUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQXVCeEU7SUFyQkMsSUFDSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBRXhCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtpQkFDM0IsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFDNUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQXpCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix5SEFSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1NBQ0Y7OzJGQUdVLG1CQUFtQjtrQkFYL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcscUJBQXFCO3lCQUNqQztxQkFDRjtvQkFDRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUM7aUJBQ3ZCOztzQkFNRSxLQUFLO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsLCB0YWtlV2hpbGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEFOSU1BVEVEX0xJRkVDWUNMRV9UT0tFTiB9IGZyb20gJy4uL2FuaW1hdGVkLWxpZmVjeWNsZSc7XG5cbmV4cG9ydCBjb25zdCBBTklNQVRFRF9JRl9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBbmltYXRlZElmRGlyZWN0aXZlPignQU5JTUFURURfSUZfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0QW5pbWF0ZWRJZl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBTklNQVRFRF9JRl9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBBbmltYXRlZElmRGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbTmdJZl0sXG59KVxuZXhwb3J0IGNsYXNzIEFuaW1hdGVkSWZEaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmdJZiA9IGluamVjdChOZ0lmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYW5pbWF0ZWRMaWZlY3ljbGUgPSBpbmplY3QoQU5JTUFURURfTElGRUNZQ0xFX1RPS0VOKTtcblxuICBASW5wdXQoJ2V0QW5pbWF0ZWRJZicpXG4gIHNldCBzaG91bGRSZW5kZXIodmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX25nSWYubmdJZiA9IHZhbHVlO1xuXG4gICAgICB0aGlzLl9hbmltYXRlZExpZmVjeWNsZS5lbnRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hbmltYXRlZExpZmVjeWNsZS5sZWF2ZSgpO1xuXG4gICAgICB0aGlzLl9hbmltYXRlZExpZmVjeWNsZS5zdGF0ZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICB0YWtlV2hpbGUoKHN0YXRlKSA9PiBzdGF0ZSAhPT0gJ2xlZnQnLCB0cnVlKSxcbiAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2xlZnQnKSxcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbmdJZi5uZ0lmID0gdmFsdWU7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19","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.6\", ngImport: i0, type: RootBoundaryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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.6\", ngImport: i0, type: AnimatedOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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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QUFnQixFQUFFOztzQkFPckMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTs7c0JBT3JDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7O3NCQU9yQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBTdGF0aWNQcm92aWRlcixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2Zmc2V0T3B0aW9ucyxcbiAgUGFkZGluZyxcbiAgUGxhY2VtZW50LFxuICBhcnJvdyxcbiAgYXV0b1VwZGF0ZSxcbiAgY29tcHV0ZVBvc2l0aW9uLFxuICBmbGlwLFxuICBoaWRlLFxuICBsaW1pdFNoaWZ0LFxuICBvZmZzZXQsXG4gIHNoaWZ0LFxuICBzaXplLFxufSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSwgbmV4dEZyYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQW5pbWF0ZWRMaWZlY3ljbGVEaXJlY3RpdmUgfSBmcm9tICcuLi9hbmltYXRlZC1saWZlY3ljbGUnO1xuaW1wb3J0IHsgUm9vdEJvdW5kYXJ5RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm9vdC1ib3VuZGFyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZSB7XG4gIF9lbGVtZW50UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIF9hbmltYXRlZExpZmVjeWNsZT86IEFuaW1hdGVkTGlmZWN5Y2xlRGlyZWN0aXZlO1xuICBfbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcblxuICAvLyBUaGVtaW5nIGxpdmVzIGluc2lkZSB0aGUgY2RrIG5vdy4gV2UgY2FudCBpbXBvcnQgaXQgaW50byBjb3JlLlxuICAvLyBGSVhNRTogVHlwZSB0aGlzIHByb3Blcmx5IG9uY2UgY29yZSBpcyBtb3ZlZCB0byBjZGsuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIF9zZXRUaGVtZUZyb21Qcm92aWRlcj86IChwcm92aWRlcjogYW55KSA9PiB2b2lkO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtYW5pbWF0ZWQtb3ZlcmxheScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZTxUIGV4dGVuZHMgQW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+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.6\", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", type: ClickOutsideDirective, isStandalone: true, selector: \"[etClickOutside]\", outputs: { etClickOutside: \"etClickOutside\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUvY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU10RCxNQUFNLE9BQU8scUJBQXFCO0lBSmxDO1FBS1UsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsMEJBQXFCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFckQsa0JBQWEsR0FBd0IsSUFBSSxDQUFDO1FBR2xELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztLQWtCakQ7SUFoQkMsUUFBUTtRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUcsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFeEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzhHQXhCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7O3NCQU9FLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENsaWNrT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRDbGlja091dHNpZGVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIF9jbGlja09ic2VydmVyU2VydmljZSA9IGluamVjdChDbGlja09ic2VydmVyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KClcbiAgZXRDbGlja091dHNpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl9jbGlja09ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0luc2lkZSA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhhY3RpdmVFbGVtZW50KTtcblxuICAgICAgICBpZiAoIWlzSW5zaWRlKSB7XG4gICAgICAgICAgdGhpcy5ldENsaWNrT3V0c2lkZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==","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.6\", ngImport: i0, type: CursorDragScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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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QUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFFdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDOzhHQWxNVSx5QkFBeUI7a0dBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFMckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7O3NCQXFCRSxLQUFLO3VCQUFDLG9CQUFvQjs7c0JBZTFCLEtBQUs7O3NCQUdMLE1BQU07O3NCQUdOLE1BQU07O3NCQUdOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIHN0YXJ0V2l0aCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRPYnNlcnZlclNlcnZpY2UsIFJlc2l6ZU9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIGVsZW1lbnRDYW5TY3JvbGwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MsIENVUlNPUl9EUkFHX1NDUk9MTElOR19QUkVQQVJFRF9DTEFTUyB9IGZyb20gJy4vY3Vyc29yLWRyYWctc2Nyb2xsLmNvbnN0YW50cyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldEN1cnNvckRyYWdTY3JvbGxdJyxcbiAgZXhwb3J0QXM6ICdldEN1cnNvckRyYWdTY3JvbGwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDdXJzb3JEcmFnU2Nyb2xsRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGVudE9ic2VydmVyU2VydmljZSA9IGluamVjdChDb250ZW50T2JzZXJ2ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KFJlc2l6ZU9ic2VydmVyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYnVmZmVyVW50aWxTY3JvbGwgPSA1O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb3VzZVVwJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2FuU2Nyb2xsID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY3VycmVudFNjcm9sbFN0YXRlID0ge1xuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcblxuICBASW5wdXQoJ2V0Q3Vyc29yRHJhZ1Njcm9sbCcpXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG4gIHNldCBlbmFibGVkKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2VuYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGlzYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZW5hYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFsbG93ZWREaXJlY3Rpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgfCAnYm90aCcgPSAnYm90aCc7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGN1cnNvckRyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY3Vyc29yRHJhZ01vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGN1cnNvckRyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2VuYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGlzYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbmFibGVDdXJzb3JEcmFnU2Nyb2xsKCkge1xuICAgIGNvbnN0IGNvbnRlbnRSZXNpemVTdWIgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuX2NvbnRlbnRPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1KSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX3VwZGF0ZUNhblNjcm9sbFN0YXRlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgY29uc3QgbW91c2Vkb3duU3ViID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChlKSA9PiB0aGlzLl9vbk1vdXNlRG93bihlKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goY29udGVudFJlc2l6ZVN1YiwgbW91c2Vkb3duU3ViKTtcblxuICAgIHRoaXMuX3VwZGF0ZUNhblNjcm9sbFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMubGVuZ3RoID0gMDtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCB8fCAhdGhpcy5fY2FuU2Nyb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDVVJTT1JfRFJBR19TQ1JPTExJTkdfUFJFUEFSRURfQ0xBU1MpO1xuXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJ25vbmUnO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9ICd1bnNldCc7XG5cbiAgICB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUgPSB7XG4gICAgICBsZWZ0OiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHRvcDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgIHg6IGUuY2xpZW50WCxcbiAgICAgIHk6IGUuY2xpZW50WSxcbiAgICB9O1xuXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHRoaXMuX21vdXNlTW92ZUhhbmRsZXIoZSkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fbW91c2VVcCQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX21vdXNlVXBIYW5kbGVyKCkpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbW91c2VNb3ZlSGFuZGxlcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZHggPSBlLmNsaWVudFggLSB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUueDtcbiAgICBjb25zdCBkeSA9IGUuY2xpZW50WSAtIHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS55O1xuXG4gICAgY29uc3Qgc2hvdWxkU2Nyb2xsWCA9XG4gICAgICAodGhpcy5hbGxvd2VkRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgdGhpcy5hbGxvd2VkRGlyZWN0aW9uID09PSAnYm90aCcpICYmXG4gICAgICBNYXRoLmFicyhkeCkgPiB0aGlzLl9idWZmZXJVbnRpbFNjcm9sbDtcbiAgICBjb25zdCBzaG91bGRTY3JvbGxZID1cbiAgICAgICh0aGlzLmFsbG93ZWREaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgfHwgdGhpcy5hbGxvd2VkRGlyZWN0aW9uID09PSAnYm90aCcpICYmXG4gICAgICBNYXRoLmFicyhkeSkgPiB0aGlzLl9idWZmZXJVbnRpbFNjcm9sbDtcblxuICAgIGlmIChzaG91bGRTY3JvbGxYIHx8IHNob3VsZFNjcm9sbFkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIGlmICghdGhpcy5faXNTY3JvbGxpbmcpIHtcbiAgICAgICAgdGhpcy5faXNTY3JvbGxpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmN1cnNvckRyYWdTdGFydC5lbWl0KCk7XG5cbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJztcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsKHtcbiAgICAgICAgICB0b3A6IHNob3VsZFNjcm9sbFkgPyB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUudG9wIC0gZHkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbGVmdDogc2hvdWxkU2Nyb2xsWCA/IHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS5sZWZ0IC0gZHggOiB1bmRlZmluZWQsXG4gICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGxZKSB7XG4gICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUudG9wIC0gZHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsWCkge1xuICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS5sZWZ0IC0gZHg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnNvckRyYWdNb3ZlLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9tb3VzZVVwSGFuZGxlcigpIHtcbiAgICB0aGlzLl9tb3VzZVVwJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2lzU2Nyb2xsaW5nID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2Nyb2xsU25hcFR5cGUgPSAnJztcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnJztcblxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnJztcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyk7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ1VSU09SX0RSQUdfU0NST0xMSU5HX1BSRVBBUkVEX0NMQVNTKTtcblxuICAgIHRoaXMuY3Vyc29yRHJhZ0VuZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDYW5TY3JvbGxTdGF0ZSgpIHtcbiAgICB0aGlzLl9jYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAodGhpcy5fY2FuU2Nyb2xsKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xuICAgIH1cbiAgfVxufVxuIl19","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.6\", ngImport: i0, type: DebugDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9kZWJ1Zy9kZWJ1Zy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFNUMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO0FBYXZGLE1BQU0sT0FBTyxjQUFjO0lBWDNCO1FBWW1CLGNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQU9yQyxXQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksa0RBQUMsQ0FBQztRQUNyQixVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxXQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsZUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUY7SUFYQyxJQUNZLE1BQU0sQ0FBQyxLQUFjO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OEdBTlUsY0FBYztrR0FBZCxjQUFjLHFGQUdhLGdCQUFnQixnQkFWM0M7WUFDVDtnQkFDRSxPQUFPLEVBQUUsV0FBVztnQkFDcEIsV0FBVyxFQUFFLGNBQWM7YUFDNUI7U0FDRjs7MkZBRVUsY0FBYztrQkFYMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLFdBQVc7NEJBQ3BCLFdBQVcsZ0JBQWdCO3lCQUM1QjtxQkFDRjtpQkFDRjs7c0JBSUUsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIGJvb2xlYW5BdHRyaWJ1dGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZmlsdGVyLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IERFQlVHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPERlYnVnRGlyZWN0aXZlPignREVCVUdfRElSRUNUSVZFX1RPS0VOJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldERlYnVnXScsXG4gIGV4cG9ydEFzOiAnZXREZWJ1ZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IERFQlVHX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IERlYnVnRGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERlYnVnRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdldERlYnVnJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHByaXZhdGUgc2V0IHNEZWJ1Zyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RlYnVnLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9kZWJ1ZyA9IHNpZ25hbCh0cnVlKTtcbiAgcmVhZG9ubHkgZGVidWcgPSB0aGlzLl9kZWJ1Zy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGRlYnVnJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmRlYnVnKTtcblxuICByZWFkb25seSBzdGFydERlYnVnJCA9IHRoaXMuZGVidWckLnBpcGUoZmlsdGVyKChkZWJ1ZykgPT4gISFkZWJ1ZykpO1xuICByZWFkb25seSBzdG9wRGVidWckID0gbWVyZ2UodGhpcy5fZGVzdHJveSQsIHRoaXMuZGVidWckLnBpcGUoZmlsdGVyKChkZWJ1ZykgPT4gIWRlYnVnKSkpO1xufVxuIl19","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.6\", ngImport: i0, type: DelayableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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.6\", ngImport: i0, type: IsActiveElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtYWN0aXZlLWVsZW1lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9pcy1hY3RpdmUtZWxlbWVudC9pcy1hY3RpdmUtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXZHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUEyQixzQkFBc0IsQ0FBQyxDQUFDO0FBWXRHLE1BQU0sT0FBTyx3QkFBd0I7SUFWckM7UUFXVyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUdsRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztLQUN6Qjs4R0FMWSx3QkFBd0I7a0dBQXhCLHdCQUF3QiwySEFHYSxnQkFBZ0IsZ0JBVnJEO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLHdCQUF3QjthQUN0QztTQUNGOzsyRkFFVSx3QkFBd0I7a0JBVnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLDBCQUEwQjt5QkFDdEM7cUJBQ0Y7aUJBQ0Y7O3NCQUlFLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIGJvb2xlYW5BdHRyaWJ1dGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgSVNfQUNUSVZFX0VMRU1FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48SXNBY3RpdmVFbGVtZW50RGlyZWN0aXZlPignRVRfSVNfQUNUSVZFX0VMRU1FTlQnKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0SXNBY3RpdmVFbGVtZW50XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IElTX0FDVElWRV9FTEVNRU5ULFxuICAgICAgdXNlRXhpc3Rpbmc6IElzQWN0aXZlRWxlbWVudERpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJc0FjdGl2ZUVsZW1lbnREaXJlY3RpdmUge1xuICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2V0SXNBY3RpdmVFbGVtZW50JywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGlzQWN0aXZlRWxlbWVudCA9IGZhbHNlO1xufVxuIl19","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.6\", ngImport: i0, type: IsElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZWxlbWVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2lzLWVsZW1lbnQvaXMtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXZHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsZUFBZSxDQUFDLENBQUM7QUFZbEYsTUFBTSxPQUFPLGtCQUFrQjtJQVYvQjtRQVdXLGVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBR2xFLGNBQVMsR0FBRyxLQUFLLENBQUM7S0FDbkI7OEdBTFksa0JBQWtCO2tHQUFsQixrQkFBa0IsbUdBR2EsZ0JBQWdCLGdCQVYvQztZQUNUO2dCQUNFLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1NBQ0Y7OzJGQUVVLGtCQUFrQjtrQkFWOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsVUFBVTs0QkFDbkIsV0FBVyxvQkFBb0I7eUJBQ2hDO3FCQUNGO2lCQUNGOztzQkFJRSxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdGlvblRva2VuLCBJbnB1dCwgYm9vbGVhbkF0dHJpYnV0ZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBJU19FTEVNRU5UID0gbmV3IEluamVjdGlvblRva2VuPElzRWxlbWVudERpcmVjdGl2ZT4oJ0VUX0lTX0VMRU1FTlQnKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0SXNFbGVtZW50XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IElTX0VMRU1FTlQsXG4gICAgICB1c2VFeGlzdGluZzogSXNFbGVtZW50RGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIElzRWxlbWVudERpcmVjdGl2ZSB7XG4gIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZXRJc0VsZW1lbnQnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaXNFbGVtZW50ID0gZmFsc2U7XG59XG4iXX0=","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.6\", ngImport: i0, type: LetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", type: LetDirective, isStandalone: true, selector: \"[etLet]\", inputs: { etLet: \"etLet\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvbGV0L2xldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUIsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFekMsbUVBQW1FO0FBS25FLE1BQU0sT0FBTyxZQUFZO0lBSnpCO1FBS1UsbUJBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQVUxQyxhQUFRLEdBQWtCLElBQUksVUFBVSxFQUFLLENBQUM7UUFDOUMsaUJBQVksR0FBRyxNQUFNLENBQTZCLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELGFBQVEsR0FBMEMsSUFBSSxDQUFDO0tBZWhFO0lBekJDLElBQ0ksS0FBSyxDQUFDLEtBQVE7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBUUQsOERBQThEO0lBQzlELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBSSxHQUFvQixFQUFFLEdBQVE7UUFDN0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBM0JVLFlBQVk7a0dBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFKeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztzQkFJRSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbWJlZGRlZFZpZXdSZWYsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXRDb250ZXh0IH0gZnJvbSAnLi9sZXQudHlwZXMnO1xuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIHRoZSBsZXQga2V5d29yZCBwcm92aWRlZCBieSBBbmd1bGFyIGluc3RlYWQuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRMZXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGV0RGlyZWN0aXZlPFQgPSB1bmtub3duPiB7XG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgQElucHV0KClcbiAgc2V0IGV0TGV0KHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fY29udGV4dC4kaW1wbGljaXQgPSB0aGlzLl9jb250ZXh0LmV0TGV0ID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlVmlldygpO1xuICB9XG5cbiAgc3RhdGljIG5nVGVtcGxhdGVHdWFyZF9uZ0xldDogJ2JpbmRpbmcnO1xuXG4gIHByaXZhdGUgX2NvbnRleHQ6IExldENvbnRleHQ8VD4gPSBuZXcgTGV0Q29udGV4dDxUPigpO1xuICBwcml2YXRlIF90ZW1wbGF0ZVJlZiA9IGluamVjdDxUZW1wbGF0ZVJlZjxMZXRDb250ZXh0PFQ+Pj4oVGVtcGxhdGVSZWYpO1xuICBwcml2YXRlIF92aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8TGV0Q29udGV4dDxUPj4gfCBudWxsID0gbnVsbDtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxUPihkaXI6IExldERpcmVjdGl2ZTxUPiwgY3R4OiBhbnkpOiBjdHggaXMgTGV0Q29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5fdmlld1JlZikge1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZiwgdGhpcy5fY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","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.6\", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvb2JzZXJ2ZS1jb250ZW50L29ic2VydmUtY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBT3hELE1BQU0sT0FBTyx1QkFBdUI7SUFMcEM7UUFNVSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUd4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBZXBELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFaEMseUJBQW9CLEdBQXdCLElBQUksQ0FBQztLQTBCMUQ7SUFuREMsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBR0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQ3ZHLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzhHQTFEVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7O3NCQU1FLE1BQU07dUJBQUMsa0JBQWtCOztzQkFHekIsS0FBSzt1QkFBQywwQkFBMEI7O3NCQWVoQyxLQUFLO3VCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZW50T2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRPYnNlcnZlQ29udGVudF0nLFxuICBleHBvcnRBczogJ2V0T2JzZXJ2ZUNvbnRlbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBPYnNlcnZlQ29udGVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2NvbnRlbnRPYnNlcnZlciA9IGluamVjdChDb250ZW50T2JzZXJ2ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIEBPdXRwdXQoJ2V0T2JzZXJ2ZUNvbnRlbnQnKVxuICByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TXV0YXRpb25SZWNvcmRbXT4oKTtcblxuICBASW5wdXQoJ2V0T2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCcpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBib29sZWFuQXR0cmlidXRlKHZhbHVlKTtcblxuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdldE9ic2VydmVDb250ZW50RGVib3VuY2UnKVxuICBnZXQgZGVib3VuY2UoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlO1xuICB9XG4gIHNldCBkZWJvdW5jZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX2RlYm91bmNlID0gbnVtYmVyQXR0cmlidXRlKHZhbHVlKSA/PyBudWxsO1xuICAgIHRoaXMuX3N1YnNjcmliZSgpO1xuICB9XG4gIHByaXZhdGUgX2RlYm91bmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9jdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlKCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZik7XG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbiA9ICh0aGlzLmRlYm91bmNlID8gc3RyZWFtLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2UpKSA6IHN0cmVhbSkuc3Vic2NyaWJlKFxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlKCkge1xuICAgIHRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==","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.6\", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1yZXNpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXJlc2l6ZS9vYnNlcnZlLXJlc2l6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBRWYsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU92RCxNQUFNLE9BQU8sc0JBQXNCO0lBTG5DO1FBTVUsb0JBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUd4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBZXpELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFaEMseUJBQW9CLEdBQXdCLElBQUksQ0FBQztLQTBCMUQ7SUFuREMsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBR0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUN2RyxJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQzs4R0ExRFUsc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztzQkFNRSxNQUFNO3VCQUFDLGlCQUFpQjs7c0JBR3hCLEtBQUs7dUJBQUMseUJBQXlCOztzQkFlL0IsS0FBSzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldE9ic2VydmVSZXNpemVdJyxcbiAgZXhwb3J0QXM6ICdldE9ic2VydmVSZXNpemUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBPYnNlcnZlUmVzaXplRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXIgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIEBPdXRwdXQoJ2V0T2JzZXJ2ZVJlc2l6ZScpXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVPYnNlcnZlckVudHJ5W10+KCk7XG5cbiAgQElucHV0KCdldE9ic2VydmVSZXNpemVEaXNhYmxlZCcpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBib29sZWFuQXR0cmlidXRlKHZhbHVlKTtcblxuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdldE9ic2VydmVSZXNpemVEZWJvdW5jZScpXG4gIGdldCBkZWJvdW5jZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZGVib3VuY2U7XG4gIH1cbiAgc2V0IGRlYm91bmNlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGVib3VuY2UgPSBudW1iZXJBdHRyaWJ1dGUodmFsdWUpID8/IG51bGw7XG4gICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfZGVib3VuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24gJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24gPSAodGhpcy5kZWJvdW5jZSA/IHN0cmVhbS5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlKSkgOiBzdHJlYW0pLnN1YnNjcmliZShcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=","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.6\", ngImport: i0, type: ScrollObserverFirstElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVoRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxrQ0FBa0MsQ0FBQztBQU10RixNQUFNLE9BQU8sbUNBQW1DO0lBSmhEO1FBT0UsbUJBQWMsR0FBRyxLQUFLLENBQUM7S0FDeEI7OEdBSlksbUNBQW1DO2tHQUFuQyxtQ0FBbUMsK0lBQ2EsZ0JBQWdCOzsyRkFEaEUsbUNBQW1DO2tCQUovQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7c0JBRUUsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7O3NCQUM1RSxXQUFXO3VCQUFDLFNBQVMsbUNBQW1DLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBJbnB1dCwgYm9vbGVhbkF0dHJpYnV0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1MgPSAnZXQtc2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSB7XG4gIEBJbnB1dCh7IGFsaWFzOiAnZXRTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBASG9zdEJpbmRpbmcoYGNsYXNzLiR7U0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1N9YClcbiAgaXNGaXJzdEVsZW1lbnQgPSBmYWxzZTtcbn1cbiJdfQ==","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.6\", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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.6\", ngImport: i0, type: ScrollObserverLastElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQvc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVoRixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxpQ0FBaUMsQ0FBQztBQVNwRixNQUFNLE9BQU8sa0NBQWtDO0lBUC9DO1FBVUUsa0JBQWEsR0FBRyxLQUFLLENBQUM7S0FDdkI7OEdBSlksa0NBQWtDO2tHQUFsQyxrQ0FBa0MsMklBQ2EsZ0JBQWdCOzsyRkFEL0Qsa0NBQWtDO2tCQVA5QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwrQkFBK0I7b0JBQ3pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGtDQUFrQztxQkFDMUM7aUJBQ0Y7O3NCQUVFLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDM0UsV0FBVzt1QkFBQyxTQUFTLGtDQUFrQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIGJvb2xlYW5BdHRyaWJ1dGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IFNDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1MgPSAnZXQtc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldFNjcm9sbE9ic2VydmVyTGFzdEVsZW1lbnRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiBTQ1JPTExfT0JTRVJWRVJfTEFTVF9FTEVNRU5UX0NMQVNTLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxPYnNlcnZlckxhc3RFbGVtZW50RGlyZWN0aXZlIHtcbiAgQElucHV0KHsgYWxpYXM6ICdldFNjcm9sbE9ic2VydmVyTGFzdEVsZW1lbnQnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgQEhvc3RCaW5kaW5nKGBjbGFzcy4ke1NDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1N9YClcbiAgaXNMYXN0RWxlbWVudCA9IGZhbHNlO1xufVxuIl19","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.6\", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.6\", 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.6\", 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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QUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBdUIsQ0FBQztZQUVoRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0FwTVUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsNkdBcUNsQixlQUFlLDBHQTVDeEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsMkJBQTJCO2FBQ3pDO1NBQ0Y7OzJGQUVVLDJCQUEyQjtrQkFYdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFdBQVcsNkJBQTZCO3lCQUN6QztxQkFDRjtpQkFDRjs7c0JBc0NFLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFOztzQkFHcEMsS0FBSzs7c0JBNEJMLE1BQU07dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50T2JzZXJ2ZXJTZXJ2aWNlLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudCc7XG5pbXBvcnQgeyBTQ1JPTExfT0JTRVJWRVJfSUdOT1JFX1RBUkdFVF9DTEFTUyB9IGZyb20gJy4uL3Njcm9sbC1vYnNlcnZlci1pZ25vcmUtdGFyZ2V0JztcbmltcG9ydCB7IFNDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50JztcbmltcG9ydCB7IE9CU0VSVkVfU0NST0xMX1NUQVRFIH0gZnJvbSAnLi9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5jb25zdGFudHMnO1xuaW1wb3J0IHsgU2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZSB9IGZyb20gJy4vb2JzZXJ2ZS1zY3JvbGwtc3RhdGUudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX09CU0VSVklOR19GSVJTVF9FTEVNRU5UX0NMQVNTID0gJ2V0LXNjcm9sbC1vYnNlcnZlci1vYnNlcnZpbmctZmlyc3QtZWxlbWVudCc7XG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX09CU0VSVklOR19MQVNUX0VMRU1FTlRfQ0xBU1MgPSAnZXQtc2Nyb2xsLW9ic2VydmVyLW9ic2VydmluZy1sYXN0LWVsZW1lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRPYnNlcnZlU2Nyb2xsU3RhdGVdJyxcbiAgZXhwb3J0QXM6ICdldE9ic2VydmVTY3JvbGxTdGF0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9CU0VSVkVfU0NST0xMX1NUQVRFLFxuICAgICAgdXNlRXhpc3Rpbmc6IE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+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.6\", ngImport: i0, type: ObserveVisibilityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.6\", 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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VyxFQUFFLDBCQUEwQjthQUN4QztTQUNGOzsyRkFLVSwwQkFBMEI7a0JBYnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxXQUFXLDRCQUE0Qjt5QkFDeEM7cUJBQ0Y7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSx1QkFBdUI7cUJBQy9CO2lCQUNGOztzQkFXRSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBzaWduYWxIb3N0Q2xhc3NlcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IE9CU0VSVkVfVklTSUJJTElUWV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZlVmlzaWJpbGl0eURpcmVjdGl2ZT4oJ09CU0VSVkVfVklTSUJJTElUWV9UT0tFTicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgaXNBYm92ZTogYm9vbGVhbjtcbiAgaXNCZWxvdzogYm9vbGVhbjtcbiAgaXNMZWZ0OiBib29sZWFuO1xuICBpc1JpZ2h0OiBib29sZWFuO1xuICBlbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTtcbn1cblxuZXhwb3J0IGNvbnN0IHNpZ25hbFZpc2liaWxpdHlDaGFuZ2VDbGFzc2VzID0gKGNmZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNpZ25hbDogU2lnbmFsPE9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlIHwgbnVsbCB8IHVuZGVmaW5lZD47XG59KSA9PiAoe1xuICBbYCR7Y2ZnLm5hbWV9LS1pcy1sZWZ0YF06IGNvbXB1dGVkKCgpID0+IGNmZy5zaWduYWwoKT8uaXNMZWZ0KSxcbiAgW2Ake2NmZy5uYW1lfS0taXMtcmlnaHRgXTogY29tcHV0ZWQoKCkgPT4gY2ZnLnNpZ25hbCgpPy5pc1JpZ2h0KSxcbiAgW2Ake2NmZy5uYW1lfS0taXMtYWJvdmVgXTogY29tcHV0ZWQoKCkgPT4gY2ZnLnNpZ25hbCgpPy5pc0Fib3ZlKSxcbiAgW2Ake2NmZy5uYW1lfS0taXMtYmVsb3dgXTogY29tcHV0ZWQoKCkgPT4gY2ZnLnNpZ25hbCgpPy5pc0JlbG93KSxcbiAgW2Ake2NmZy5uYW1lfS0taXMtdmlzaWJsZWBdOiBjb21wdXRlZCgoKSA9PiBjZmcuc2lnbmFsKCk/LnZpc2libGUpLFxufSk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldE9ic2VydmVWaXNpYmlsaXR5XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9CU0VSVkVfVklTSUJJTElUWV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBPYnNlcnZlVmlzaWJpbGl0eURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1vYnNlcnZlLXZpc2liaWxpdHknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBPYnNlcnZlVmlzaWJpbGl0eURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZSA9IGluamVjdChJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB2aXNpYmlsaXR5Q2hhbmdlID0gc2lnbmFsPE9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFZpc2liaWxpdHkgPSB0aGlzLnZpc2liaWxpdHlDaGFuZ2UuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBjdXJyZW50VmlzaWJpbGl0eSQgPSB0b09ic2VydmFibGUodGhpcy5jdXJyZW50VmlzaWJpbGl0eSk7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGV0T2JzZXJ2ZVZpc2liaWxpdHkgPSBuZXcgRXZlbnRFbWl0dGVyPE9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHNpZ25hbEhvc3RDbGFzc2VzKFxuICAgICAgc2lnbmFsVmlzaWJpbGl0eUNoYW5nZUNsYXNzZXMoe1xuICAgICAgICBuYW1lOiAnZXQtb2JzZXJ2ZS12aXNpYmlsaXR5JyxcbiAgICAgICAgc2lnbmFsOiB0aGlzLnZpc2liaWxpdHlDaGFuZ2UsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZVxuICAgICAgLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZilcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG5cbiAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNBYm92ZSA9IGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC50b3AgPCAwICYmIGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gPCAwO1xuICAgICAgICAgIGNvbnN0IGlzQmVsb3cgPVxuICAgICAgICAgICAgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcCA+IHdpbmRvdy5pbm5lckhlaWdodCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tID4gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICAgIGNvbnN0IGlzTGVmdCA9IGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IDwgMCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgPCAwO1xuICAgICAgICAgIGNvbnN0IGlzUmlnaHQgPVxuICAgICAgICAgICAgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgPiB3aW5kb3cuaW5uZXJXaWR0aCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgICAgIGNvbnN0IGRhdGE6IE9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlID0ge1xuICAgICAgICAgICAgdmlzaWJsZTogZW50cnkuaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgICAgICBpc0Fib3ZlLFxuICAgICAgICAgICAgaXNCZWxvdyxcbiAgICAgICAgICAgIGlzTGVmdCxcbiAgICAgICAgICAgIGlzUmlnaHQsXG4gICAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5ldE9ic2VydmVWaXNpYmlsaXR5LmVtaXQoZGF0YSk7XG4gICAgICAgICAgdGhpcy52aXNpYmlsaXR5Q2hhbmdlLnNldChkYXRhKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==","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.6\", ngImport: i0, type: RepeatDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", type: RepeatDirective, isStandalone: true, selector: \"[etRepeat]\", inputs: { repeatCount: [\"etRepeat\", \"repeatCount\"] }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0L3JlcGVhdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpHLE1BQU0sT0FBTyxlQUFlO0lBSjVCO1FBS1UscUJBQWdCLEdBQUcsTUFBTSxDQUF1QixXQUFXLENBQUMsQ0FBQztRQUM3RCxzQkFBaUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQVU3QyxpQkFBWSxHQUFHLENBQUMsQ0FBQztLQVMxQjtJQWpCQyxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFHTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDOzhHQXBCVSxlQUFlO2tHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7c0JBS0UsS0FBSzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgbnVtYmVyQXR0cmlidXRlLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldFJlcGVhdF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBlYXREaXJlY3RpdmUge1xuICBwcml2YXRlIF9tYWluVGVtcGxhdGVSZWYgPSBpbmplY3Q8VGVtcGxhdGVSZWY8dW5rbm93bj4+KFRlbXBsYXRlUmVmKTtcbiAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICBASW5wdXQoJ2V0UmVwZWF0JylcbiAgZ2V0IHJlcGVhdENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGVhdENvdW50O1xuICB9XG4gIHNldCByZXBlYXRDb3VudCh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3JlcGVhdENvdW50ID0gbnVtYmVyQXR0cmlidXRlKHZhbHVlKTtcbiAgICB0aGlzLl9yZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIF9yZXBlYXRDb3VudCA9IDI7XG5cbiAgcHJpdmF0ZSBfcmVuZGVyKCkge1xuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXBlYXRDb3VudDsgaSsrKSB7XG4gICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9tYWluVGVtcGxhdGVSZWYpO1xuICAgIH1cbiAgfVxufVxuIl19","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.6\", ngImport: i0, type: SeoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", type: SeoDirective, isStandalone: true, providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: InferMimeTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: InferMimeTypePipe, isStandalone: true, name: \"inferMimeType\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: NormalizeGameResultTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: NormalizeGameResultTypePipe, isStandalone: true, name: \"etNormalizeGameResultType\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: NormalizeMatchStatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: NormalizeMatchStatePipe, isStandalone: true, name: \"etNormalizeMatchState\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: NormalizeMatchParticipantsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: NormalizeMatchParticipantsPipe, isStandalone: true, name: \"etNormalizeMatchParticipants\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: NormalizeMatchScorePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: NormalizeMatchScorePipe, isStandalone: true, name: \"etNormalizeMatchScore\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: NormalizeMatchTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: NormalizeMatchTypePipe, isStandalone: true, name: \"etNormalizeMatchType\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: \"toArray\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: PropsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.6\", 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.6\", ngImport: i0, type: PropsDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etProps]',\n standalone: true,\n }]\n }], ctorParameters: () => [], propDecorators: { props: [{ type: i0.Input, args: [{ isSignal: true, alias: \"etProps\", required: true }] }] } });\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","names":["CURSOR_DRAG_SCROLLING_CLASS","i1.AnimatableDirective","debounceTime"],"sources":["../../../../libs/core/src/lib/components/structured-data/structured-data.component.ts","../../../../libs/core/src/lib/constants/viewport.constants.ts","../../../../libs/core/src/lib/decorators/memo/memo.decorator.ts","../../../../libs/core/src/lib/utils/destroy.utils.ts","../../../../libs/core/src/lib/utils/active-selection-model.utils.ts","../../../../libs/core/src/lib/utils/angular.utils.ts","../../../../libs/core/src/lib/utils/animation.utils.ts","../../../../libs/core/src/lib/utils/clamp.util.ts","../../../../libs/core/src/lib/utils/clone.util.ts","../../../../libs/core/src/lib/utils/component-id.utils.ts","../../../../libs/core/src/lib/utils/cookie.util.ts","../../../../libs/core/src/lib/utils/equal.util.ts","../../../../libs/core/src/lib/utils/form.utils.ts","../../../../libs/core/src/lib/utils/inject.utils.ts","../../../../libs/core/src/lib/utils/intersection-observer.utils.ts","../../../../libs/core/src/lib/utils/key-press-manager.utils.ts","../../../../libs/core/src/lib/services/click-observer.service.ts","../../../../libs/core/src/lib/services/content-observer.service.ts","../../../../libs/core/src/lib/services/focus-visible.service.ts","../../../../libs/core/src/lib/services/intersection-observer.service.ts","../../../../libs/core/src/lib/services/resize-observer.service.ts","../../../../libs/core/src/lib/services/router-state.service.ts","../../../../libs/core/src/lib/services/viewport.service.ts","../../../../libs/core/src/lib/utils/media-query-observable.util.ts","../../../../libs/core/src/lib/utils/scrollable.utils.ts","../../../../libs/core/src/lib/utils/signal.utils.ts","../../../../libs/core/src/lib/utils/logger.ts","../../../../libs/core/src/lib/utils/mutation-observable.util.ts","../../../../libs/core/src/lib/utils/object.utils.ts","../../../../libs/core/src/lib/utils/reactive-binding.util.ts","../../../../libs/core/src/lib/utils/resize-observable.util.ts","../../../../libs/core/src/lib/utils/round.utils.ts","../../../../libs/core/src/lib/utils/runtime-error.utils.ts","../../../../libs/core/src/lib/utils/selection-model.utils.ts","../../../../libs/core/src/lib/utils/smart-block-scroll-strategy.utils.ts","../../../../libs/core/src/lib/utils/value.utils.ts","../../../../libs/core/src/lib/utils/viewport.util.ts","../../../../libs/core/src/lib/directives/animatable/animatable.directive.ts","../../../../libs/core/src/lib/directives/animated-lifecycle/animated-lifecycle.directive.ts","../../../../libs/core/src/lib/directives/animated-if/animated-if.directive.ts","../../../../libs/core/src/lib/directives/root-boundary/root-boundary.directive.ts","../../../../libs/core/src/lib/directives/animated-overlay/animated-overlay.directive.ts","../../../../libs/core/src/lib/directives/click-outside/click-outside.directive.ts","../../../../libs/core/src/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.ts","../../../../libs/core/src/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.ts","../../../../libs/core/src/lib/directives/debug/debug.directive.ts","../../../../libs/core/src/lib/directives/delayable/delayable.directive.ts","../../../../libs/core/src/lib/directives/is-active-element/is-active-element.directive.ts","../../../../libs/core/src/lib/directives/is-element/is-element.directive.ts","../../../../libs/core/src/lib/directives/let/let.types.ts","../../../../libs/core/src/lib/directives/let/let.directive.ts","../../../../libs/core/src/lib/directives/observe-content/observe-content.directive.ts","../../../../libs/core/src/lib/directives/observe-resize/observe-resize.directive.ts","../../../../libs/core/src/lib/directives/observe-scroll-state/observe-scroll-state.constants.ts","../../../../libs/core/src/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.ts","../../../../libs/core/src/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.ts","../../../../libs/core/src/lib/directives/observe-scroll-state/observe-scroll-state.directive.ts","../../../../libs/core/src/lib/directives/observe-visibility/observe-visibility.directive.ts","../../../../libs/core/src/lib/directives/repeat/repeat.directive.ts","../../../../libs/core/src/lib/directives/seo/seo.directive.constants.ts","../../../../libs/core/src/lib/directives/seo/seo.directive.utils.ts","../../../../libs/core/src/lib/directives/seo/seo.directive.ts","../../../../libs/core/src/lib/pipes/infer-mime-type/infer-mime-type.util.ts","../../../../libs/core/src/lib/pipes/infer-mime-type/infer-mime-type.pipe.ts","../../../../libs/core/src/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.ts","../../../../libs/core/src/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.ts","../../../../libs/core/src/lib/pipes/normalize-match-state/normalize-match-state.util.ts","../../../../libs/core/src/lib/pipes/normalize-match-state/normalize-match-state.pipe.ts","../../../../libs/core/src/lib/pipes/normalize-match-participants/normalize-match-participants.util.ts","../../../../libs/core/src/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.ts","../../../../libs/core/src/lib/pipes/normalize-match-score/normalize-match-score.util.ts","../../../../libs/core/src/lib/pipes/normalize-match-score/normalize-match-score.pipe.ts","../../../../libs/core/src/lib/pipes/normalize-match-type/normalize-match-type.util.ts","../../../../libs/core/src/lib/pipes/normalize-match-type/normalize-match-type.pipe.ts","../../../../libs/core/src/lib/pipes/to-array/to-array.util.ts","../../../../libs/core/src/lib/pipes/to-array/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/types/angular.types.ts","../../../../libs/core/src/lib/validators/at-least-one-required.validator.ts","../../../../libs/core/src/lib/validators/is-array-not-empty.validator.ts","../../../../libs/core/src/lib/validators/is-email.validator.ts","../../../../libs/core/src/lib/validators/must-match.validator.ts","../../../../libs/core/src/lib/validators/index.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { JsonLD } from '@ethlete/types';\n\n@Component({\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})\nexport class StructuredDataComponent {\n private readonly _sanitizer = inject(DomSanitizer);\n\n @Input()\n set data(currentValue: JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined) {\n this.jsonLD = this.getSafeHTML(currentValue);\n }\n\n @HostBinding('innerHTML')\n jsonLD?: SafeHtml;\n\n getSafeHTML(value: JsonLD.WithContext<JsonLD.Thing> | JsonLD.Graph | null | undefined) {\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}\n","import { InjectionToken } from '@angular/core';\nimport { ViewportConfig } from '../types';\n\nexport const VIEWPORT_CONFIG = new InjectionToken<ViewportConfig>('ViewportConfig');\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","export interface MemoResolver {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (...args: any[]): any;\n}\n\nexport interface MapLike<K = unknown, V = unknown> {\n set(key: K, v: V): MapLike<K, V>;\n get(key: K): V;\n has(key: K): boolean;\n}\n\nexport interface MemoConfig {\n resolver?: MemoResolver;\n cache?: MapLike;\n}\n\nfunction memoize(func: (..._args: unknown[]) => unknown, resolver: MemoResolver, cache: MapLike) {\n const memoized = function (this: unknown, ...args: unknown[]) {\n const key = resolver.apply(this, args);\n const cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n const result = func.apply(this, args);\n memoized.cache = cache.set(key, result) ?? cache;\n return result;\n };\n\n memoized.cache = cache;\n\n return memoized;\n}\n\nconst defaultResolver: MemoResolver = (...args: unknown[]) => args.join('-');\n\nexport const Memo =\n (config: MemoConfig = {}) =>\n (_: unknown, __: string, descriptor: PropertyDescriptor): PropertyDescriptor => {\n if (typeof descriptor.value !== 'function') {\n throw new Error('Memoization can be applied only to methods');\n }\n\n const resolver = config.resolver ?? defaultResolver;\n const cache = config.cache ?? new Map();\n\n descriptor.value = memoize(descriptor.value, resolver, cache);\n return descriptor;\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 { 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';\nimport { SelectionModel } from './selection-model.utils';\n\nexport class ActiveSelectionModel<T = unknown> {\n private readonly _destroy$ = createDestroy();\n\n get selectionModel$() {\n return this._selectionModel$.asObservable();\n }\n get selectionModel() {\n return this._selectionModel$.value;\n }\n private readonly _selectionModel$ = new BehaviorSubject<SelectionModel<T> | null>(null);\n\n get activeOption$() {\n return this._activeOption$.asObservable();\n }\n get activeOption() {\n return this._activeOption$.value;\n }\n private readonly _activeOption$ = new BehaviorSubject<T | null>(null);\n\n constructor() {\n this._selectionModel$\n .pipe(\n takeUntil(this._destroy$),\n switchMap((model) => model?.filteredOptions$ ?? of([])),\n tap(() => this._resetActiveOptions()),\n )\n .subscribe();\n }\n\n setSelectionModel(selectionModel: SelectionModel<T> | null) {\n this._selectionModel$.next(selectionModel);\n\n return this;\n }\n\n setActiveOption(option: T | null) {\n this._activeOption$.next(option);\n\n return this;\n }\n\n isOptionActive$(option: T) {\n return this.activeOption$.pipe(map((activeOption) => activeOption === option));\n }\n\n evaluateKeyboardEvent(event: KeyboardEvent, config?: { skipDisabled?: boolean }) {\n const { skipDisabled = false } = config ?? {};\n\n const keyCode = event.keyCode;\n const activeOption = this.activeOption;\n\n if (!this.selectionModel || !activeOption) return null;\n\n const currentIndex = this.selectionModel?.getOptionIndex(activeOption);\n\n if (currentIndex === null) return null;\n\n let newActiveOption: T | null | undefined = undefined;\n\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\n if (newActiveOption !== undefined) {\n event.preventDefault();\n }\n\n if (newActiveOption !== activeOption && newActiveOption) {\n this._activeOption$.next(newActiveOption);\n }\n\n return newActiveOption ?? null;\n }\n\n private _resetActiveOptions() {\n const firstOption = this.selectionModel?.getFirstOption();\n\n this._activeOption$.next(firstOption ?? null);\n }\n}\n","import { Observable, of, startWith, switchMap } from 'rxjs';\nimport { TypedQueryList } from '../types';\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 { combineLatest, Observable, Subject } 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\ninterface 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 interface 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","export const clamp = (value: number, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n","/* 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 */\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","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","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 = 30,\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 const date = new Date();\n date.setTime(date.getTime() + expiresInDays * 24 * 60 * 60 * 1000);\n\n document.cookie = `${name}=${data}; path=${path}; expires=${date.toUTCString()}; domain=${domain}; SameSite=${sameSiteUpper};`;\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","/* 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 */\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","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, InjectionToken, InjectOptions, Provider, TemplateRef } from '@angular/core';\nimport { createComponentId } from './component-id.utils';\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","// TODO: This needs to be redone, it's a mess...\nexport const getIntersectionInfo = (intersections: IntersectionObserverEntry[]) => {\n const reverseIntersections = [...intersections].reverse();\n const firstIntersecting = intersections.find((i) => i.intersectionRatio > 0);\n const lastIntersecting = reverseIntersections.find((i) => i.intersectionRatio > 0);\n\n const firstIntersectingIndex = intersections.findIndex((i) => i === firstIntersecting);\n const lastIntersectingIndex = intersections.findIndex((i) => i === lastIntersecting);\n\n if (!firstIntersecting || !lastIntersecting) return null;\n\n const greaterIntersecting =\n firstIntersecting.intersectionRatio > lastIntersecting.intersectionRatio ? firstIntersecting : lastIntersecting;\n\n const greaterIntersectingIndex =\n firstIntersecting.intersectionRatio > lastIntersecting.intersectionRatio\n ? firstIntersectingIndex\n : lastIntersectingIndex;\n\n const hasFullIntersection = intersections.some((i) => i.intersectionRatio === 1);\n const hasMultipleFullIntersections = intersections.filter((i) => i.intersectionRatio === 1).length > 1;\n\n const firstFullIntersectionIndex = intersections.findIndex((i) => i.intersectionRatio === 1);\n const firstFullIntersection = intersections.find((i) => i.intersectionRatio === 1);\n\n const lastFullIntersection = reverseIntersections.find((i) => i.intersectionRatio === 1);\n const lastFullIntersectionIndex = intersections.findIndex((i) => i === lastFullIntersection);\n\n const firstNonIntersectingIndex = intersections.findIndex((i) => i.intersectionRatio === 0);\n const firstNonIntersection = intersections.find((i) => i.intersectionRatio === 0);\n\n const lastNonIntersection = reverseIntersections.find((i) => i.intersectionRatio === 0);\n const lastNonIntersectingIndex = intersections.findIndex((i) => i === lastNonIntersection);\n\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","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","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { ElementRef, Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, Observer, Subject, Subscription, fromEvent } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ClickObserverFactory {\n create() {\n return fromEvent<MouseEvent>(document, 'click');\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ClickObserverService implements OnDestroy {\n private _clickObserverFactory = inject(ClickObserverFactory);\n\n private _observedElements = new Map<\n Element,\n {\n observer: Subscription | null;\n readonly stream: Subject<MouseEvent>;\n count: number;\n }\n >();\n\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n\n observe(element: Element): Observable<MouseEvent>;\n observe(element: ElementRef<Element>): Observable<MouseEvent>;\n observe(elementOrRef: Element | ElementRef<Element>): Observable<MouseEvent> {\n const element = coerceElement(elementOrRef);\n\n return new Observable((observer: Observer<MouseEvent>) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n\n private _observeElement(element: Element): Subject<MouseEvent> {\n if (!this._observedElements.has(element)) {\n const stream = new Subject<MouseEvent>();\n const observer = this._clickObserverFactory.create();\n\n const sub = observer.subscribe((event) => stream.next(event));\n\n this._observedElements.set(element, { observer: sub, stream, count: 1 });\n } else {\n this._observedElements.get(element)!.count++;\n }\n return this._observedElements.get(element)!.stream;\n }\n\n private _unobserveElement(element: 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\n private _cleanupObserver(element: 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}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { ElementRef, Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, Observer, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MutationObserverFactory {\n create(callback: MutationCallback): MutationObserver | null {\n return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContentObserverService implements OnDestroy {\n private _mutationObserverFactory = inject(MutationObserverFactory);\n\n private _observedElements = new Map<\n Element,\n {\n observer: MutationObserver | null;\n readonly stream: Subject<MutationRecord[]>;\n count: number;\n }\n >();\n\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n\n observe(element: Element): Observable<MutationRecord[]>;\n observe(element: ElementRef<Element>): Observable<MutationRecord[]>;\n observe(elementOrRef: Element | ElementRef<Element>): Observable<MutationRecord[]> {\n const element = coerceElement(elementOrRef);\n\n return new Observable((observer: Observer<MutationRecord[]>) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n\n private _observeElement(element: Element): Subject<MutationRecord[]> {\n if (!this._observedElements.has(element)) {\n const stream = new Subject<MutationRecord[]>();\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 } else {\n this._observedElements.get(element)!.count++;\n }\n return this._observedElements.get(element)!.stream;\n }\n\n private _unobserveElement(element: 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\n private _cleanupObserver(element: 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}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FocusVisibleService {\n private readonly _document = inject(DOCUMENT);\n\n private _hadKeyboardEvent = false;\n\n get isFocusVisible() {\n return this._hadKeyboardEvent;\n }\n\n constructor() {\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\n onKeyDown(e: KeyboardEvent) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n this._hadKeyboardEvent = true;\n }\n\n onPointerDown() {\n this._hadKeyboardEvent = false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { ElementRef, Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, Observer, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class IntersectionObserverFactory {\n create(callback: IntersectionObserverCallback): IntersectionObserver | null {\n return typeof IntersectionObserver === 'undefined' ? null : new IntersectionObserver(callback);\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IntersectionObserverService implements OnDestroy {\n private _intersectionObserverFactory = inject(IntersectionObserverFactory);\n\n private _observedElements = new Map<\n Element,\n {\n observer: IntersectionObserver | null;\n readonly stream: Subject<IntersectionObserverEntry[]>;\n count: number;\n }\n >();\n\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n\n observe(element: Element): Observable<IntersectionObserverEntry[]>;\n observe(element: ElementRef<Element>): Observable<IntersectionObserverEntry[]>;\n observe(elementOrRef: Element | ElementRef<Element>): Observable<IntersectionObserverEntry[]> {\n const element = coerceElement(elementOrRef);\n\n return new Observable((observer: Observer<IntersectionObserverEntry[]>) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n\n private _observeElement(element: Element): Subject<IntersectionObserverEntry[]> {\n if (!this._observedElements.has(element)) {\n const stream = new Subject<IntersectionObserverEntry[]>();\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 } else {\n this._observedElements.get(element)!.count++;\n }\n return this._observedElements.get(element)!.stream;\n }\n\n private _unobserveElement(element: 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\n private _cleanupObserver(element: 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}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { ElementRef, Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, Observer, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverFactory {\n create(callback: ResizeObserverCallback): ResizeObserver | null {\n return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverService implements OnDestroy {\n private _mutationObserverFactory = inject(ResizeObserverFactory);\n\n private _observedElements = new Map<\n Element,\n {\n observer: ResizeObserver | null;\n readonly stream: Subject<ResizeObserverEntry[]>;\n count: number;\n }\n >();\n\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n\n observe(element: Element): Observable<ResizeObserverEntry[]>;\n observe(element: ElementRef<Element>): Observable<ResizeObserverEntry[]>;\n observe(elementOrRef: Element | ElementRef<Element>): Observable<ResizeObserverEntry[]> {\n const element = coerceElement(elementOrRef);\n\n return new Observable((observer: Observer<ResizeObserverEntry[]>) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n\n private _observeElement(element: Element): Subject<ResizeObserverEntry[]> {\n if (!this._observedElements.has(element)) {\n const stream = new Subject<ResizeObserverEntry[]>();\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 } else {\n this._observedElements.get(element)!.count++;\n }\n return this._observedElements.get(element)!.stream;\n }\n\n private _unobserveElement(element: 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\n private _cleanupObserver(element: 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}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { Data, Event, NavigationEnd, Params, Router } from '@angular/router';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n Observable,\n pairwise,\n shareReplay,\n tap,\n} from 'rxjs';\nimport { equal } from '../utils';\n\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');\n\nexport interface RouterDisableScrollTopConfig {\n /**\n * Whether to disable scroll to top ONLY when navigating back to this route.\n * @default false\n */\n asReturnRoute?: boolean;\n\n /**\n * Whether to disable scroll to top when a path param changes.\n * @default false\n */\n onPathParamChange?: boolean;\n}\n\nexport const routerDisableScrollTop = (config: RouterDisableScrollTopConfig = {}) => {\n return {\n ...(!config.asReturnRoute ? { [ET_DISABLE_SCROLL_TOP]: true } : { [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: true }),\n ...(config.onPathParamChange ? { [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]: true } : {}),\n };\n};\n\nexport const ET_PROPERTY_REMOVED = Symbol('ET_PROPERTY_REMOVED');\n\nexport interface ScrollEnhancementsConfig {\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 interface RouterState {\n data: Data;\n pathParams: Params;\n queryParams: Params;\n title: string | null;\n fragment: string | null;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouterStateService {\n private _isScrollTopOnNavigationEnabled = false;\n private readonly _router = inject(Router);\n\n private readonly _route$ = new BehaviorSubject(window.location.pathname);\n private readonly _state$ = new BehaviorSubject<RouterState>(this._getInitialState());\n\n private readonly _afterInitialize$ = new BehaviorSubject<boolean>(false);\n readonly afterInitialize$ = this._afterInitialize$.pipe(filter((v) => v));\n\n get route$() {\n return this._route$.asObservable().pipe(distinctUntilChanged());\n }\n\n get route() {\n return this._route$.getValue();\n }\n\n get state$() {\n return this._state$.asObservable();\n }\n\n get state() {\n return this._state$.getValue();\n }\n\n get data$() {\n return this._state$.pipe(\n map((state) => state.data),\n distinctUntilChanged((a, b) => equal(a, b)),\n );\n }\n\n get data() {\n return this._state$.getValue().data;\n }\n\n get pathParams$() {\n return this._state$.pipe(\n map((state) => state.pathParams),\n distinctUntilChanged((a, b) => equal(a, b)),\n );\n }\n\n get pathParams() {\n return this._state$.getValue().pathParams;\n }\n\n get queryParams$() {\n return this._state$.pipe(\n map((state) => state.queryParams),\n distinctUntilChanged((a, b) => equal(a, b)),\n );\n }\n\n get queryParams() {\n return this._state$.getValue().queryParams;\n }\n\n get title$() {\n return this._state$.pipe(\n map((state) => state.title),\n distinctUntilChanged(),\n );\n }\n\n get title() {\n return this._state$.getValue().title;\n }\n\n get fragment$() {\n return this._state$.pipe(\n map((state) => state.fragment),\n distinctUntilChanged(),\n );\n }\n\n get fragment() {\n return this._state$.getValue().fragment;\n }\n\n get dataChanges$() {\n return this.data$.pipe(\n pairwise(),\n map((v) => this._findChanges(v)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n get queryParamChanges$() {\n return this.queryParams$.pipe(\n pairwise(),\n map((v) => this._findChanges(v)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n get pathParamChanges$() {\n return this.pathParams$.pipe(\n pairwise(),\n map((v) => this._findChanges(v)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n latestEvent = signal<Event | null>(null);\n\n constructor() {\n this._router.events\n .pipe(\n tap((event) => this.latestEvent.set(event)),\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n distinctUntilChanged((a, b) => a.url === b.url),\n map((event) => {\n const { url } = event;\n\n const urlWithoutQueryParams = url.split('?')[0] ?? '';\n const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';\n\n return withoutFragment;\n }),\n tap(() => {\n if (!this._afterInitialize$.getValue()) {\n this._afterInitialize$.next(true);\n }\n }),\n )\n .subscribe(this._route$);\n\n combineLatest([this._route$, this._afterInitialize$])\n .pipe(\n tap(([, afterInitialize]) => {\n if (!afterInitialize) return;\n\n let route = this._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 this._state$.next({\n data,\n pathParams: params,\n queryParams,\n title: title ?? null,\n fragment,\n });\n }),\n )\n .subscribe();\n }\n\n enableScrollEnhancements(config: ScrollEnhancementsConfig = {}) {\n if (this._isScrollTopOnNavigationEnabled) {\n return;\n }\n\n this._isScrollTopOnNavigationEnabled = true;\n\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\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\n selectQueryParam<T = string | undefined>(key: string): Observable<T> {\n return this._state$.pipe(\n map((state) => state.queryParams[key]),\n distinctUntilChanged(),\n );\n }\n\n selectPathParam<T = string | undefined>(key: string): Observable<T> {\n return this._state$.pipe(\n map((state) => state.pathParams[key]),\n distinctUntilChanged(),\n );\n }\n\n selectData<T = unknown>(key: string): Observable<T> {\n return this._state$.pipe(\n map((state) => state.data[key]),\n distinctUntilChanged((a, b) => equal(a, b)),\n );\n }\n\n private _findChanges<T extends [Record<string, unknown>, Record<string, unknown>], J extends Partial<T[number]>>([\n previous,\n current,\n ]: T) {\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 as J;\n }\n\n private _getInitialState(): RouterState {\n const data = {};\n const pathParams = {};\n const queryParams: Params = {};\n const title = null;\n let fragment = null;\n\n const currentQueryParams = window.location.search;\n const currentFragment = window.location.hash;\n\n if (currentQueryParams) {\n const params = new URLSearchParams(currentQueryParams);\n\n params.forEach((value, key) => {\n queryParams[key] = value;\n });\n }\n\n if (currentFragment) {\n fragment = currentFragment.slice(1);\n }\n\n return {\n data,\n pathParams,\n queryParams,\n title,\n fragment,\n };\n }\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Injectable, inject } from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n combineLatest,\n debounceTime,\n finalize,\n map,\n shareReplay,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { DEFAULT_VIEWPORT_CONFIG, VIEWPORT_CONFIG } from '../constants';\nimport { Memo } from '../decorators/memo';\nimport { Breakpoint } from '../types';\nimport { equal } from '../utils';\nimport { ResizeObserverService } from './resize-observer.service';\nimport { BuildMediaQueryOptions } from './viewport.types';\n\nexport interface Size {\n width: number;\n height: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ViewportService {\n private readonly _resizeObserverService = inject(ResizeObserverService);\n private readonly _viewportConfig = inject(VIEWPORT_CONFIG, { optional: true }) || DEFAULT_VIEWPORT_CONFIG;\n private readonly _breakpointObserver = inject(BreakpointObserver);\n\n private readonly _viewportMonitorStop$ = new Subject<void>();\n private _isViewportMonitorEnabled = false;\n\n private _isXs$ = new BehaviorSubject(this.isMatched({ max: 'xs' }));\n private _isSm$ = new BehaviorSubject(this.isMatched({ min: 'sm', max: 'sm' }));\n private _isMd$ = new BehaviorSubject(this.isMatched({ min: 'md', max: 'md' }));\n private _isLg$ = new BehaviorSubject(this.isMatched({ min: 'lg', max: 'lg' }));\n private _isXl$ = new BehaviorSubject(this.isMatched({ min: 'xl', max: 'xl' }));\n private _is2Xl$ = new BehaviorSubject(this.isMatched({ min: '2xl' }));\n\n private _viewportSize$ = new BehaviorSubject<Size | null>(null);\n private _scrollbarSize$ = new BehaviorSubject<Size | null>(null);\n\n get isXs$() {\n return this._isXs$.asObservable();\n }\n\n get isXs() {\n return this._isXs$.value;\n }\n\n get isSm$() {\n return this._isSm$.asObservable();\n }\n\n get isSm() {\n return this._isSm$.value;\n }\n\n get isMd$() {\n return this._isMd$.asObservable();\n }\n\n get isMd() {\n return this._isMd$.value;\n }\n\n get isLg$() {\n return this._isLg$.asObservable();\n }\n\n get isLg() {\n return this._isLg$.value;\n }\n\n get isXl$() {\n return this._isXl$.asObservable();\n }\n\n get isXl() {\n return this._isXl$.value;\n }\n\n get is2Xl$() {\n return this._is2Xl$.asObservable();\n }\n\n get is2Xl() {\n return this._is2Xl$.value;\n }\n\n get viewportSize$() {\n return this._viewportSize$.asObservable();\n }\n\n get viewportSize() {\n return this._viewportSize$.value;\n }\n\n get scrollbarSize$() {\n return this._scrollbarSize$.asObservable();\n }\n\n get scrollbarSize() {\n return this._scrollbarSize$.value;\n }\n\n currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(\n map((val) => this.getCurrentViewport(val)),\n debounceTime(0),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n get currentViewport() {\n return this.getCurrentViewport([this.isXs, this.isSm, this.isMd, this.isLg, this.isXl, this.is2Xl]);\n }\n\n constructor() {\n this._observeDefaultBreakpoints();\n }\n\n observe(options: { min?: number | Breakpoint; max?: number | Breakpoint }): Observable<boolean> {\n const mediaQuery = this._buildMediaQuery(options);\n\n return this._breakpointObserver.observe(mediaQuery).pipe(\n map((x) => x.matches),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n isMatched(options: { min?: number | Breakpoint; max?: number | Breakpoint }): boolean {\n const mediaQuery = this._buildMediaQuery(options);\n\n return this._breakpointObserver.isMatched(mediaQuery);\n }\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) return;\n\n this._isViewportMonitorEnabled = true;\n\n this._resizeObserverService\n .observe(document.documentElement)\n .pipe(\n tap((e) => {\n const entry = e[0];\n\n if (!entry) return;\n\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n\n const obj = { width, height };\n\n if (equal(obj, this._viewportSize$.value)) return;\n\n document.documentElement.style.setProperty('--et-vw', `${obj.width}px`);\n document.documentElement.style.setProperty('--et-vh', `${obj.height}px`);\n\n this._viewportSize$.next(obj);\n }),\n finalize(() => {\n document.documentElement.style.removeProperty('--et-vw');\n document.documentElement.style.removeProperty('--et-vh');\n\n this._viewportSize$.next(null);\n }),\n takeUntil(this._viewportMonitorStop$),\n )\n .subscribe();\n\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\n this._resizeObserverService\n .observe(scrollbarRuler)\n .pipe(\n tap((e) => {\n const entry = e[0];\n\n if (!entry) return;\n\n const size = entry.contentRect.width;\n\n const obj = { width: 100 - size, height: 100 - size };\n\n if (equal(obj, this._scrollbarSize$.value)) return;\n\n document.documentElement.style.setProperty('--et-sw', `${obj.width}px`);\n document.documentElement.style.setProperty('--et-sh', `${obj.height}px`);\n\n this._scrollbarSize$.next(obj);\n }),\n finalize(() => {\n document.body.removeChild(scrollbarRuler);\n document.documentElement.style.removeProperty('--et-vw');\n document.documentElement.style.removeProperty('--et-vh');\n\n this._scrollbarSize$.next(null);\n }),\n takeUntil(this._viewportMonitorStop$),\n )\n .subscribe();\n }\n\n unmonitorViewport() {\n this._viewportMonitorStop$.next();\n this._isViewportMonitorEnabled = false;\n }\n\n @Memo()\n getBreakpointSize(type: Breakpoint, option: 'min' | 'max') {\n const index = option === 'min' ? 0 : 1;\n const size = this._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 private _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\n @Memo({\n resolver: (v: BuildMediaQueryOptions) => {\n return `${v.min ?? ''}-${v.max ?? ''}`;\n },\n })\n private _buildMediaQuery(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: ${this.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: ${this.getBreakpointSize(options.max, 'max')}px)`);\n }\n }\n\n return mediaQueryParts.join(' ');\n }\n\n private getCurrentViewport([isXs, isSm, isMd, isLg, isXl, is2Xl]: [\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n ]): Breakpoint {\n if (isXs) {\n return 'xs';\n } else if (isSm) {\n return 'sm';\n } else if (isMd) {\n return 'md';\n } else if (isLg) {\n return 'lg';\n } else if (isXl) {\n return 'xl';\n } else if (is2Xl) {\n return '2xl';\n }\n\n return 'xs';\n }\n}\n","import { map, Observable, Observer, startWith } from 'rxjs';\n\nexport const createMediaQueryObservable = (query: string) => {\n const mq = window.matchMedia(query);\n\n const observable = new Observable((observer: Observer<MediaQueryListEvent>) => {\n const eventHandler = (event: MediaQueryListEvent) => {\n observer.next(event);\n };\n\n mq.addEventListener('change', eventHandler);\n\n return () => {\n mq.removeEventListener('change', eventHandler);\n };\n }).pipe(\n startWith(mq),\n map(({ matches }) => ({\n matches,\n query,\n })),\n );\n\n return observable;\n};\n","import { clamp } from './clamp.util';\n\nexport const elementCanScroll = (element: HTMLElement, direction?: 'x' | 'y') => {\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;\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\nexport interface 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 * @default document.documentElement\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 * @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 container.getBoundingClientRect()\n */\n elementRect?: DOMRect | null;\n}\n\nexport interface 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\nexport const isElementVisible = (options: IsElementVisibleOptions): CurrentElementVisibility | null => {\n let { container } = options;\n const { element } = options;\n\n if (!element || container === null) {\n return null;\n }\n\n container ||= document.documentElement;\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 };\n }\n\n const elementRect = options.elementRect || element.getBoundingClientRect();\n const containerRect = options.containerRect || container.getBoundingClientRect();\n\n const elementInlineStart = elementRect.left;\n const elementBlockStart = elementRect.top;\n\n const containerInlineStart = containerRect.left;\n const containerBlockStart = containerRect.top;\n\n const elWith = elementRect.width || 1;\n const elHeight = elementRect.height || 1;\n\n const elementInlineEnd = elementInlineStart + elWith;\n const elementBlockEnd = elementBlockStart + elHeight;\n\n const containerInlineEnd = containerInlineStart + containerRect.width;\n const containerBlockEnd = containerBlockStart + containerRect.height;\n\n const isElementInlineVisible = elementInlineStart >= containerInlineStart && elementInlineEnd <= containerInlineEnd;\n const isElementBlockVisible = elementBlockStart >= containerBlockStart && elementBlockEnd <= containerBlockEnd;\n\n const inlineIntersection =\n Math.min(elementInlineEnd, containerInlineEnd) - Math.max(elementInlineStart, containerInlineStart);\n const blockIntersection =\n Math.min(elementBlockEnd, containerBlockEnd) - Math.max(elementBlockStart, containerBlockStart);\n\n const inlineIntersectionPercentage = clamp(inlineIntersection / elWith, 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\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 let { container } = options;\n const {\n element,\n direction,\n behavior = 'smooth',\n origin = 'nearest',\n scrollBlockMargin = 0,\n scrollInlineMargin = 0,\n } = options;\n\n if (!element || container === null) {\n return {\n behavior,\n left: undefined,\n top: undefined,\n };\n }\n\n container ||= document.documentElement;\n\n const canScroll = elementCanScroll(container);\n\n if (!canScroll) {\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 { width: elementWidth, height: elementHeight, left: elementLeft, top: elementTop } = elementRect;\n const { width: containerWidth, height: containerHeight, left: containerLeft, top: containerTop } = containerRect;\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 scrollToElementStart = () => {\n const relativeTop = elementTop - containerTop;\n const relativeLeft = elementLeft - containerLeft;\n\n const amountToScrollTop = relativeTop;\n const amountToScrollLeft = relativeLeft;\n\n const scrollTopPosition = scrollTop + amountToScrollTop;\n const scrollLeftPosition = scrollLeft + amountToScrollLeft;\n\n scrollLeftTo = scrollLeftPosition - scrollInlineMargin;\n scrollTopTo = scrollTopPosition - scrollBlockMargin;\n };\n\n const scrollToElementEnd = () => {\n const relativeTop = elementTop - containerTop;\n const relativeLeft = elementLeft - containerLeft;\n\n const amountToScrollTop = relativeTop - containerHeight + elementHeight;\n const amountToScrollLeft = relativeLeft - containerWidth + elementWidth;\n\n const scrollTopPosition = scrollTop + amountToScrollTop;\n const scrollLeftPosition = scrollLeft + amountToScrollLeft;\n\n scrollLeftTo = scrollLeftPosition + scrollInlineMargin;\n scrollTopTo = scrollTopPosition + scrollBlockMargin;\n };\n\n const scrollToElementCenter = () => {\n const relativeTop = elementTop - containerTop;\n const relativeLeft = elementLeft - containerLeft;\n\n const amountToScrollTop = relativeTop - containerHeight / 2 + elementHeight / 2;\n const amountToScrollLeft = relativeLeft - containerWidth / 2 + elementWidth / 2;\n\n const scrollTopPosition = scrollTop + amountToScrollTop;\n const scrollLeftPosition = scrollLeft + amountToScrollLeft;\n\n scrollLeftTo = scrollLeftPosition;\n scrollTopTo = scrollTopPosition;\n };\n\n const scrollToElementNearest = () => {\n const isAbove = elementRect.bottom < containerRect.top;\n const isPartialAbove = elementRect.top < containerRect.top && elementRect.bottom > containerRect.top;\n\n const isBelow = elementRect.top > containerRect.bottom;\n const isPartialBelow = elementRect.top < containerRect.bottom && elementRect.bottom > containerRect.bottom;\n\n const isLeft = elementRect.right < containerRect.left;\n const isPartialLeft = elementRect.left < containerRect.left && elementRect.right > containerRect.left;\n\n const isRight = elementRect.left > containerRect.right;\n const isPartialRight = elementRect.left < containerRect.right && elementRect.right > containerRect.right;\n\n if (isAbove || isPartialAbove || isLeft || isPartialLeft) {\n scrollToElementStart();\n } else if (isBelow || isPartialBelow || isRight || isPartialRight) {\n scrollToElementEnd();\n }\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\n return {\n behavior,\n left: shouldScrollLeft ? scrollLeftTo : undefined,\n top: shouldScrollTop ? scrollTopTo : undefined,\n };\n};\n\nexport interface 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 * @default document.documentElement\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 { coerceElement } from '@angular/cdk/coercion';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n EffectRef,\n ElementRef,\n Injector,\n NgZone,\n PLATFORM_ID,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n Signal,\n WritableSignal,\n afterNextRender,\n computed,\n effect,\n inject,\n isDevMode,\n isSignal,\n linkedSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl } from '@angular/forms';\nimport { NavigationEnd, NavigationSkipped, Router } from '@angular/router';\nimport {\n Observable,\n debounceTime,\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n pairwise,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { ET_PROPERTY_REMOVED, RouterState, RouterStateService, ViewportService } from '../services';\nimport { Breakpoint } from '../types';\nimport { nextFrame } from './animation.utils';\nimport { equal } from './equal.util';\nimport { createMediaQueryObservable } from './media-query-observable.util';\nimport { isElementVisible } from './scrollable.utils';\n\ntype SignalElementBindingComplexType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | Array<ElementRef<HTMLElement> | HTMLElement>\n | null\n | undefined;\n\ntype SignalElementBindingType =\n | HTMLElement\n | ElementRef<HTMLElement>\n | Observable<SignalElementBindingComplexType>\n | Signal<SignalElementBindingComplexType>\n | QueryList<ElementRef<HTMLElement> | HTMLElement>\n | ElementSignal;\n\ntype ElementSignal = Signal<{\n /** @deprecated Always use currentElements */\n currentElement: HTMLElement | null;\n\n /** @deprecated Always use previousElements */\n previousElement: HTMLElement | null;\n currentElements: HTMLElement[];\n previousElements: HTMLElement[];\n}>;\n\ntype ElementSignalValue = ReturnType<ElementSignal>;\n\nfunction isElementSignal(el: unknown): el is ElementSignal {\n if (isSignal(el)) {\n const val = el();\n return typeof val === 'object' && val !== null && 'currentElement' in val && 'previousElement' in val;\n }\n\n return false;\n}\n\nconst documentElementSignal = (): ElementSignal =>\n signal({\n currentElement: document.documentElement,\n previousElement: null,\n currentElements: [document.documentElement],\n previousElements: [],\n });\n\nconst buildElementSignal = (el: SignalElementBindingType | null | undefined): ElementSignal => {\n if (el === null || el === undefined) {\n return signal({ currentElement: null, previousElement: null, currentElements: [], previousElements: [] });\n }\n\n if (isElementSignal(el)) {\n return el;\n }\n\n let mElSignal: Signal<HTMLElement[] | null> | null;\n\n const switchElement = () =>\n switchMap((elOrRef: SignalElementBindingComplexType) => {\n if (elOrRef instanceof QueryList) {\n return elOrRef.changes.pipe(\n startWith(elOrRef),\n map(() => elOrRef.toArray().map((r) => coerceElement(r))),\n );\n } else if (Array.isArray(elOrRef)) {\n return of(elOrRef.map((r) => coerceElement(r)));\n } else {\n const coercedEl = coerceElement(elOrRef);\n return of(coercedEl ? [coercedEl] : null);\n }\n });\n\n if (el instanceof Observable) {\n mElSignal = toSignal(el.pipe(switchElement()), { initialValue: null });\n } else if (isSignal(el)) {\n mElSignal = toSignal(toObservable(el).pipe(switchElement()), { initialValue: null });\n } else if (el instanceof QueryList) {\n mElSignal = toSignal(\n el.changes.pipe(\n startWith(el),\n map(() => el.toArray().map((r) => coerceElement(r))),\n ),\n { initialValue: null },\n );\n } else {\n mElSignal = signal([coerceElement(el)]);\n }\n\n const elSig = toSignal(\n toObservable(mElSignal).pipe(\n startWith(null),\n pairwise(),\n map(([previousElements, currentElements]) => {\n const previousEl = previousElements?.[0] ?? null;\n const currentEl = currentElements?.[0] ?? null;\n\n if (currentEl && !(currentEl instanceof HTMLElement)) {\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. This will cause issues. Received:',\n currentEl,\n );\n }\n\n return {\n previousElements: previousElements ?? [],\n currentElements: currentElements ?? [],\n currentElement: currentEl,\n previousElement: previousEl,\n };\n }),\n ),\n { initialValue: { currentElement: null, previousElement: null, previousElements: [], currentElements: [] } },\n );\n\n return computed(() => elSig(), {\n equal: (a, b) =>\n 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};\n\nconst firstElementSignal = (el: ElementSignal) => {\n return computed(\n () => {\n const current = el();\n\n if (current.currentElements.length > 1) {\n console.warn(\n 'More than one element is bound to the signal. Only the first element will be used.',\n current.currentElements,\n );\n }\n\n const curr = current.currentElements[0] ?? null;\n const prev = current.previousElements[0] ?? null;\n\n return { currentElement: curr, previousElement: prev };\n },\n { equal: (a, b) => a.currentElement === b.currentElement && a.previousElement === b.previousElement },\n );\n};\n\nexport interface 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 signalIsRendered = () => {\n const isRendered = signal(false);\n\n afterNextRender(() => isRendered.set(true));\n\n return isRendered.asReadonly();\n};\n\nexport const signalClasses = <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, classMap: T) => {\n const renderer = inject(Renderer2);\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 = inject(Renderer2);\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 = inject(Renderer2);\n\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 } else {\n renderer.setStyle(el, token, `${condition}`, RendererStyleFlags2.DashCase);\n }\n }\n },\n });\n};\n\nexport const signalHostStyles = <T extends Record<string, Signal<unknown>>>(styleMap: T) =>\n signalStyles(inject(ElementRef), styleMap);\n\nexport interface 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 zone = inject(NgZone);\n const isRendered = signalIsRendered();\n\n const initialValue = () => createElementDimensions(elements().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 = elements();\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\nexport const signalElementMutations = (el: SignalElementBindingType, options?: MutationObserverInit) => {\n const destroyRef = inject(DestroyRef);\n const elements = buildElementSignal(el);\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 = elements();\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\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\nexport type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {\n root?: SignalElementBindingType;\n enabled?: Signal<boolean>;\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) : documentElementSignal());\n const zone = inject(NgZone);\n const isRendered = signalIsRendered();\n const isEnabled = options?.enabled ?? signal(true);\n\n const elementIntersectionSignal = signal<IntersectionObserverEntry[]>([]);\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: IntersectionObserverEntry = {\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\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 || !rootEl) {\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 || !rootEl) return;\n\n const rootBounds = rootEl.getBoundingClientRect();\n\n const currIntersectionValue = elementIntersectionSignal();\n const newIntersectionValue: IntersectionObserverEntry[] = [];\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 elBounds = el.getBoundingClientRect();\n\n const initialElementVisibility = isElementVisible({\n container: rootEl,\n element: el,\n containerRect: rootBounds,\n elementRect: elBounds,\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: elBounds,\n intersectionRatio: initialElementVisibility.intersectionRatio,\n intersectionRect: elBounds,\n isIntersecting: initialElementVisibility.isIntersecting,\n rootBounds: rootBounds,\n target: el,\n time: performance.now(),\n };\n\n newIntersectionValue.push(intersectionEntry);\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\nexport const signalElementChildren = (el: SignalElementBindingType) => {\n const elements = buildElementSignal(el);\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 = elements();\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\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 interface 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 const obs = toObservable(controlValueSignal(control, options)).pipe(\n pairwise(),\n startWith([null, control.getRawValue()]),\n );\n\n return toSignal(obs, { requireSync: true });\n};\n\n/**\n * @deprecated Use `controlValueSignal` instead with `debounceTime` option.\n */\nexport interface DebouncedControlValueSignalOptions {\n /**\n * @default 300\n */\n debounceTime?: number;\n}\n\n/**\n * @deprecated Use `controlValueSignal` instead with `debounceTime` set to `300` and `debounceFirst` set to `true`.\n */\nexport const debouncedControlValueSignal = <T extends FormControl>(\n control: T,\n options?: DebouncedControlValueSignalOptions,\n) => controlValueSignal(control, options ?? { debounceTime: 300, debounceFirst: true });\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 = () => {\n const routerStateService = inject(RouterStateService);\n\n const initialRoute = createInitialRoute();\n\n return linkedSignal({\n source: () => new NavigationEnd(-1, initialRoute, initialRoute),\n computation: () => routerStateService.latestEvent(),\n }).asReadonly();\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 = () => {\n const event = injectRouterEvent();\n\n const url = signal(createInitialRoute());\n\n effect(() => {\n const currentEvent = event();\n\n untracked(() => {\n if (currentEvent instanceof NavigationEnd) {\n url.set(currentEvent.urlAfterRedirects);\n } else if (currentEvent instanceof NavigationSkipped) {\n url.set(currentEvent.url);\n }\n });\n });\n\n return url.asReadonly();\n};\n\n/**\n * Inject the current route\n * @example \"/my-page\"\n */\nexport const injectRoute = () => {\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 = () => {\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 = () => {\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 = () => {\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\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\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\nexport type CursorDragScrollDirection = 'horizontal' | 'vertical' | 'both';\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\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 = inject(Renderer2);\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');\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\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, 'scrollSnapType', 'none');\n renderer.setStyle(el, 'scrollBehavior', 'unset');\n renderer.setStyle(el, 'cursor', 'grabbing');\n renderer.setStyle(document.documentElement, 'cursor', 'grabbing');\n }\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\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\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\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\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\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\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\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\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/**\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: { min?: number | Breakpoint; max?: number | Breakpoint }) => {\n return inject(ViewportService).isMatched(options);\n};\n\n/**\n * Inject a signal containing a boolean value indicating if the viewport is matching the provided options.\n */\nexport const injectObserveBreakpoint = (options: { min?: number | Breakpoint; max?: number | Breakpoint }) => {\n return toSignal(inject(ViewportService).observe(options), { initialValue: injectBreakpointIsMatched(options) });\n};\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\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\n return computed(() => queryResult()?.matches);\n};\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\n return computed(() => queryResult()?.matches);\n};\n\n/** Inject a signal containing the current display orientation */\nexport const injectDisplayOrientation = () => {\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 = () => {\n const queryResult = toSignal(createMediaQueryObservable('(pointer: coarse)'), { requireSync: true });\n\n return computed(() => queryResult()?.matches);\n};\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\n return computed(() => queryResult()?.matches);\n};\n\n/** Inject a signal containing the current device input type */\nexport const injectDeviceInputType = () => {\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 = () => {\n const queryResult = toSignal(createMediaQueryObservable('(hover: hover)'), { requireSync: true });\n\n return computed(() => queryResult()?.matches);\n};\n","import { injectQueryParam } from './signal.utils';\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","import { Observable } from 'rxjs';\n\nexport const createMutationObservable = (config: {\n elements: HTMLElement | HTMLElement[];\n options?: MutationObserverInit & { styleIgnoreList?: string[] };\n}) => {\n const elements = Array.isArray(config.elements) ? config.elements : [config.elements];\n\n return new Observable<MutationRecord[]>((obs) => {\n const observer = new MutationObserver((mutations) => {\n if (config.options?.styleIgnoreList) {\n const allowedMutations: MutationRecord[] = [];\n\n for (const mutation of mutations) {\n if (mutation.type === 'attributes') {\n const attributeName = mutation.attributeName;\n\n if (!attributeName || attributeName !== 'style') continue;\n\n const oldValue = mutation.oldValue;\n const newValue = (mutation.target as HTMLElement).getAttribute('style');\n\n const oldValueStyles = oldValue?.split(';').map((s) => s.trim()) ?? [];\n const newValueStyles = newValue?.split(';').map((s) => s.trim()) ?? [];\n\n const changedStyles = newValueStyles.filter((s) => !oldValueStyles.includes(s));\n\n if (\n changedStyles.some((s) => {\n const [key] = s.split(':');\n\n if (!key) return false;\n\n return config.options?.styleIgnoreList?.includes(key);\n })\n )\n continue;\n\n allowedMutations.push(mutation);\n }\n }\n\n if (allowedMutations.length) {\n obs.next(allowedMutations);\n }\n } else {\n obs.next(mutations);\n }\n });\n\n for (const element of elements) {\n observer.observe(element, config.options);\n }\n\n return () => observer.disconnect();\n });\n};\n","export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value);\n};\n\nexport const getObjectProperty = (obj: Record<string, unknown>, prop: string) => {\n const hasDotNotation = prop.includes('.');\n const hasBracketNotation = prop.includes('[');\n\n if (!hasDotNotation && !hasBracketNotation) return obj[prop];\n\n const props = prop.split('.');\n\n let value: unknown = obj;\n\n for (const prop of props) {\n if (!isObject(value)) return undefined;\n\n if (prop.includes('[')) {\n const [key, index] = prop.split('[').map((part) => part.replace(']', '')) as [string, string];\n const arr = value[key];\n if (!Array.isArray(arr)) return undefined;\n\n value = arr[+index];\n } else {\n value = value[prop];\n }\n }\n\n return value;\n};\n","import { ElementRef, assertInInjectionContext, inject } from '@angular/core';\nimport { Observable, Subscription, distinctUntilChanged, map, of, switchMap, takeUntil } from 'rxjs';\nimport { fromNextFrame } from './animation.utils';\nimport { createDestroy } from './destroy.utils';\n\ntype AttributeValueBinding = {\n render: boolean;\n value: boolean | string | number;\n};\n\ntype AttributeRenderBinding = boolean;\n\nexport type ReactiveAttributes = {\n attribute: string | string[];\n observable: Observable<AttributeValueBinding | AttributeRenderBinding>;\n eager?: boolean;\n elementRef?: ElementRef<HTMLElement>;\n};\n\nconst isAttributeRenderBinding = (\n value: AttributeValueBinding | AttributeRenderBinding,\n): value is AttributeRenderBinding => typeof value === 'boolean';\nconst isAttributeValueBinding = (\n value: AttributeValueBinding | AttributeRenderBinding,\n): value is AttributeValueBinding => typeof value === 'object';\n\nexport interface ReactiveBindingResult {\n reset: () => void;\n remove: (...attributes: string[]) => void;\n push: (value: ReactiveAttributes) => void;\n}\n\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: ReactiveAttributes[]): ReactiveBindingResult => {\n assertInInjectionContext(createReactiveBindings);\n\n const rootElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const destroy$ = createDestroy();\n\n const subscriptions: { attributes: string[]; subscription: Subscription }[] = [];\n const pushedAttributes: string[][] = [];\n\n const defaults: Record<string, string | undefined> = {};\n\n const push = (value: ReactiveAttributes) => {\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\n for (const attribute of attributes) {\n if (!defaults[attribute]) {\n defaults[attribute] = elRef.nativeElement.getAttribute(attribute) || undefined;\n }\n }\n\n const subscription = observable\n .pipe(\n takeUntil(destroy$),\n distinctUntilChanged((a, b) => {\n if (isAttributeRenderBinding(a) && isAttributeRenderBinding(b)) {\n return a === b;\n } else if (isAttributeValueBinding(a) && isAttributeValueBinding(b)) {\n return a.render === b.render && a.value === b.value;\n }\n\n return false;\n }),\n switchMap((v) => (eager ? of(v) : fromNextFrame().pipe(map(() => v)))),\n )\n .subscribe((value) => {\n const currentAttributes = pushedAttributes.find((s) => s.some((current) => attributes.includes(current))) || [];\n\n for (const attribute of currentAttributes) {\n const isSingleClassMutation = attribute.startsWith('class.');\n const isMultipleClassMutation = attribute === 'class';\n\n const render = isAttributeRenderBinding(value) ? value : value.render;\n\n if (isSingleClassMutation) {\n const className = attribute.replace('class.', '');\n\n if (!className) {\n continue;\n }\n\n if (!render) {\n elRef.nativeElement.classList.remove(className);\n } else {\n elRef.nativeElement.classList.add(className);\n }\n } else if (isMultipleClassMutation) {\n const classes = isAttributeRenderBinding(value) ? '' : `${value.value}`;\n\n if (!classes) {\n continue;\n }\n\n if (!render) {\n elRef.nativeElement.classList.remove(...classes.split(' '));\n } else {\n elRef.nativeElement.classList.add(...classes.split(' '));\n }\n } else {\n const attributeValue = isAttributeRenderBinding(value) ? true : `${value.value}`;\n\n if (!attribute) {\n continue;\n }\n\n if (!render) {\n elRef.nativeElement.removeAttribute(attribute);\n } else {\n elRef.nativeElement.setAttribute(attribute, `${attributeValue}`);\n }\n }\n }\n });\n\n subscriptions.push({ attributes, subscription });\n };\n\n const remove = (...attributes: string[]) => {\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\n if (sub) {\n sub.attributes = sub.attributes.filter((a) => a !== attribute);\n attributeStack?.splice(attributeStack.indexOf(attribute), 1);\n\n if (sub.attributes.length === 0) {\n sub.subscription.unsubscribe();\n subscriptions.splice(subscriptions.indexOf(sub), 1);\n }\n }\n }\n };\n\n const reset = () => {\n for (const attribute in defaults) {\n if (defaults[attribute] === undefined) {\n rootElementRef.nativeElement.removeAttribute(attribute);\n } else {\n rootElementRef.nativeElement.setAttribute(attribute, defaults[attribute] as string);\n }\n }\n };\n\n for (const value of values) {\n push(value);\n }\n\n return {\n push,\n remove,\n reset,\n };\n};\n","import { Observable } from 'rxjs';\n\nexport const createResizeObservable = (config: {\n elements: HTMLElement | HTMLElement[];\n options?: ResizeObserverOptions;\n}) => {\n const elements = Array.isArray(config.elements) ? config.elements : [config.elements];\n\n return new Observable<ResizeObserverEntry[]>((obs) => {\n const observer = new ResizeObserver((entries) => obs.next(entries));\n\n for (const element of elements) {\n observer.observe(element, config.options);\n }\n\n return () => observer.disconnect();\n });\n};\n","export const round = (value: number, precision = 0) => {\n const multiplier = Math.pow(10, precision);\n return Math.round(value * multiplier) / multiplier;\n};\n","import { clone } from './clone.util';\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 { assertInInjectionContext } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n Observable,\n Subscription,\n combineLatest,\n filter,\n map,\n shareReplay,\n startWith,\n take,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { TypedQueryList } from '../types';\nimport { switchQueryListChanges } from './angular.utils';\nimport { createDestroy } from './destroy.utils';\nimport { getObjectProperty, isObject } from './object.utils';\n\nexport type SelectionModelTypes = string | number | Record<string, unknown> | unknown;\nexport type SelectionModelPropertyPath = string;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SelectionModelOptionValueFn<T extends SelectionModelTypes = any> = (option: T) => unknown;\n\n/**\n * You can use a property path or a function to get the value of an option. The function should be as **lightweight as possible** as it will be called **a lot**.\n *\n * @example\n * // Property path\n * \"id\" // option.id\n * \"user.name\" // option.user.name\n *\n * // Function\n * (option) => option.id // option.id\n * (option) => option.user.name // option.user.name\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SelectionModelBinding<T extends SelectionModelTypes = any> =\n SelectionModelPropertyPath | SelectionModelOptionValueFn<T>;\n\nexport class SelectionModel<T extends SelectionModelTypes = unknown> {\n private readonly _destroy$ = createDestroy();\n private _lastSelectionSetSubscription: Subscription | null = null;\n\n get isSyncingSelectionFromValue() {\n return this._isSyncingSelectionFromValue;\n }\n private _isSyncingSelectionFromValue = false;\n\n get selection$() {\n return this._selection$.asObservable();\n }\n get selection() {\n return this._selection$.value;\n }\n private readonly _selection$ = new BehaviorSubject<T[]>([]);\n\n get options$() {\n return this._options$.asObservable();\n }\n get options() {\n return this._options$.value;\n }\n private readonly _options$ = new BehaviorSubject<T[]>([]);\n readonly optionsSignal = toSignal(this.options$);\n\n get valueBinding$() {\n return this._valueBinding$.asObservable();\n }\n get valueBinding() {\n return this._valueBinding$.value;\n }\n private readonly _valueBinding$ = new BehaviorSubject<SelectionModelBinding<T> | null>(null);\n\n get keyBinding$() {\n return combineLatest([this._keyBinding$, this.valueBinding$]).pipe(\n map(([keyBinding, valueBinding]) => keyBinding || valueBinding),\n );\n }\n get keyBinding() {\n return this._keyBinding$.value || this.valueBinding;\n }\n private readonly _keyBinding$ = new BehaviorSubject<SelectionModelBinding<T> | null>(null);\n\n get labelBinding$() {\n return this._labelBinding$.asObservable();\n }\n get labelBinding() {\n return this._labelBinding$.value;\n }\n private readonly _labelBinding$ = new BehaviorSubject<SelectionModelBinding<T> | null>(null);\n\n get disabledBinding$() {\n return this._disabledBinding$.asObservable();\n }\n get disabledBinding() {\n return this._disabledBinding$.value;\n }\n private readonly _disabledBinding$ = new BehaviorSubject<SelectionModelBinding<T> | null>(null);\n\n get allowMultiple$() {\n return this._allowMultiple$.asObservable();\n }\n get allowMultiple() {\n return this._allowMultiple$.value;\n }\n private readonly _allowMultiple$ = new BehaviorSubject<boolean>(false);\n\n get filter$() {\n return this._filter$.asObservable();\n }\n get filter() {\n return this._filter$.value;\n }\n private readonly _filter$ = new BehaviorSubject<string>('');\n\n readonly value$ = combineLatest([this.selection$, this.valueBinding$, this.allowMultiple$]).pipe(\n map(([selection, valueBinding, allowMultiple]) => {\n if (allowMultiple) {\n return selection.map((option) => this.execFnOrGetOptionProperty(option, valueBinding));\n }\n\n const [option] = selection;\n\n if (!option) return null;\n\n return this.execFnOrGetOptionProperty(option, valueBinding);\n }),\n );\n\n readonly filteredOptions$ = combineLatest([this.options$, this.filter$, this.labelBinding$]).pipe(\n map(([options, filter]) => this.getFilteredOptions(filter, options)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _optionsAndSelection$ = combineLatest([this._options$, this._selection$]);\n\n constructor() {\n this.allowMultiple$\n .pipe(\n tap(() => {\n if (this.allowMultiple) return;\n\n const [option] = this.selection;\n\n if (!option) return;\n\n this.setSelection([option]);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n setSelection(selection: T | T[]) {\n if (!Array.isArray(selection)) {\n selection = [selection];\n }\n\n this._selection$.next(selection);\n\n return this;\n }\n\n setSelectionFromValue(value: unknown) {\n if (Array.isArray(value)) {\n const selection = value.map((v) => this.getOptionByValue(v)).filter((v): v is T => v !== undefined);\n\n this.setSelection(selection);\n } else {\n const selection = this.getOptionByValue(value);\n\n this.setSelection(selection !== undefined ? selection : []);\n }\n }\n\n /**\n * Applies `value` once options are available. Until then, and while applying it, `isSyncingSelectionFromValue` is `true`.\n * Any user selection change cancels a pending sync.\n */\n setSelectionFromValue$(value: unknown) {\n this._cancelPendingSelectionFromValue();\n this._isSyncingSelectionFromValue = true;\n\n this._lastSelectionSetSubscription = this.options$\n .pipe(\n takeUntil(this._destroy$),\n filter((o) => !!o.length),\n take(1),\n )\n .subscribe(() => {\n this.setSelectionFromValue(value);\n this._isSyncingSelectionFromValue = false;\n });\n }\n\n setValueBinding(fnOrPropertyPath: SelectionModelBinding<T> | null) {\n this._valueBinding$.next(fnOrPropertyPath);\n\n return this;\n }\n\n setKeyBinding(fnOrPropertyPath: SelectionModelBinding<T> | null) {\n this._keyBinding$.next(fnOrPropertyPath);\n\n return this;\n }\n\n setLabelBinding(fnOrPropertyPath: SelectionModelBinding<T> | null) {\n this._labelBinding$.next(fnOrPropertyPath);\n\n return this;\n }\n\n setDisabledBinding(fnOrPropertyPath: SelectionModelBinding<T> | null) {\n this._disabledBinding$.next(fnOrPropertyPath);\n\n return this;\n }\n\n setOptions(options: T[]) {\n this._options$.next(options);\n\n return this;\n }\n\n setOptionsFromQueryList(queryList: TypedQueryList<T>) {\n assertInInjectionContext(this.setOptionsFromQueryList);\n\n queryList.changes\n .pipe(\n startWith(queryList),\n tap((list) => this.setOptions(list.toArray())),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n return this;\n }\n\n setOptionsFromQueryList$(queryList$: Observable<TypedQueryList<T> | null | undefined>) {\n assertInInjectionContext(this.setOptionsFromQueryList$);\n\n queryList$\n .pipe(\n switchQueryListChanges(),\n tap((list) => this.setOptions(list?.toArray() || [])),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n return this;\n }\n\n setAllowMultiple(allowMultiple: boolean) {\n this._allowMultiple$.next(allowMultiple);\n\n return this;\n }\n\n setFilter(filter: string | null) {\n const sanitizedFilter = filter?.trim() || '';\n\n this._filter$.next(sanitizedFilter);\n }\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\n trackByOptionKey = (option: T) => this.getKey(option);\n\n getOptionByValue$(value: unknown) {\n return this._optionsAndSelection$.pipe(map(() => this.getOptionByValue(value)));\n }\n\n getOptionByLabel$(label: string) {\n return this._optionsAndSelection$.pipe(map(() => this.getOptionByLabel(label)));\n }\n\n getOptionByKey$(key: string) {\n return this._optionsAndSelection$.pipe(map(() => this.getOptionByKey(key)));\n }\n\n isSelected$(option: T) {\n return this._selection$.pipe(map(() => this.isSelected(option)));\n }\n\n isDisabled$(option: T) {\n return this._optionsAndSelection$.pipe(map(() => this.isDisabled(option)));\n }\n\n getLabel$(option: T) {\n return this.labelBinding$.pipe(map((labelBinding) => this.execFnOrGetOptionProperty(option, labelBinding)));\n }\n\n getValue$(option: T) {\n return this.valueBinding$.pipe(map((valueBinding) => this.execFnOrGetOptionProperty(option, valueBinding)));\n }\n\n getKey$(option: T) {\n return this.keyBinding$.pipe(map((keyBinding) => this.execFnOrGetOptionProperty(option, keyBinding)));\n }\n\n getOptionByValue(value: unknown) {\n return this.getOption(value, this.valueBinding);\n }\n\n getOptionByLabel(label: string) {\n return this.getOption(label, this.labelBinding);\n }\n\n getOptionByKey(key: string) {\n return this.getOption(key, this.keyBinding);\n }\n\n getOption(\n value: unknown,\n propertyPath: SelectionModelBinding<T> | null = null,\n options = [...this.options, ...this.selection],\n ) {\n if (!propertyPath) {\n return options.find((option) => option === value);\n }\n\n return options.find((option) => {\n if (!isObject(option)) return false;\n\n return this.execFnOrGetOptionProperty(option, propertyPath) === value;\n });\n }\n\n getOptionByIndex(index: number, options = this.getFilteredOptions()): T | null {\n return options[index] || null;\n }\n\n getOptionByOffset(\n offset: number,\n index: number,\n config: { loop?: boolean; clamp?: boolean; skipDisabled?: boolean; options?: T[] } = { clamp: true },\n ): T | null {\n const { loop, clamp, skipDisabled, options = this.getFilteredOptions() } = config;\n\n const newIndex = index + offset;\n const remainingOffset = newIndex * -1;\n\n let optionResult: T | null;\n\n if (newIndex < 0) {\n if (loop) {\n optionResult = this.getOptionByOffset(remainingOffset, options.length - 1, config);\n } else if (clamp) {\n optionResult = this.getFirstOption();\n } else {\n optionResult = null;\n }\n } else if (newIndex >= options.length) {\n if (loop) {\n optionResult = this.getOptionByOffset(remainingOffset, 0, config);\n } else if (clamp) {\n optionResult = this.getLastOption();\n } else {\n optionResult = null;\n }\n } else {\n optionResult = this.getOptionByIndex(newIndex);\n }\n\n if (optionResult && skipDisabled && this.isDisabled(optionResult)) {\n return this.getOptionByOffset(offset, newIndex, config);\n }\n\n return optionResult;\n }\n\n getFirstOption(options = this.getFilteredOptions()): T | null {\n return this.getOptionByIndex(0, options);\n }\n\n getLastOption(options = this.getFilteredOptions()): T | null {\n return this.getOptionByIndex(options.length - 1, options);\n }\n\n getOptionIndex(option: T, options = this.getFilteredOptions()) {\n const key = this.getKey(option);\n const index = options.findIndex((o) => this.getKey(o) === key);\n\n return index === -1 ? null : index;\n }\n\n getNonMultipleSelectedOption(): T | null {\n if (this.allowMultiple) return null;\n\n return this.selection[0] || null;\n }\n\n getNonMultipleSelectedOptionIndex() {\n if (this.allowMultiple) return null;\n\n const opt = this.getNonMultipleSelectedOption();\n\n if (!opt) return null;\n\n return this.getOptionIndex(opt);\n }\n\n getNonMultipleOptionByOffsetFromSelected(\n offset: number,\n config: { loop?: boolean; clamp?: boolean } = { clamp: true },\n ) {\n if (this.allowMultiple) return null;\n\n const index = this.getNonMultipleSelectedOptionIndex();\n\n if (index === null) return null;\n\n return this.getOptionByOffset(index, offset, config);\n }\n\n getLabel(option: T) {\n return this.execFnOrGetOptionProperty(option, this.labelBinding);\n }\n\n getValue(option: T) {\n return this.execFnOrGetOptionProperty(option, this.valueBinding);\n }\n\n getKey(option: T) {\n return this.execFnOrGetOptionProperty(option, this.keyBinding);\n }\n\n getDisabled(option: T) {\n return this.execFnOrGetOptionProperty(option, this.disabledBinding);\n }\n\n execFnOrGetOptionProperty(option: T, fnOrPropertyPath: SelectionModelBinding<T> | null) {\n if (!fnOrPropertyPath || !isObject(option)) return option;\n\n if (typeof fnOrPropertyPath === 'function') {\n return fnOrPropertyPath(option);\n }\n\n return getObjectProperty(option, fnOrPropertyPath);\n }\n\n execFnOrGetOptionPropertyNullable(option: T, fnOrPropertyPath: SelectionModelBinding<T> | null) {\n if (!fnOrPropertyPath || !isObject(option)) return null;\n\n return this.execFnOrGetOptionProperty(option, fnOrPropertyPath);\n }\n\n getOptionProperty(option: T, propertyPath: string | null) {\n if (!propertyPath || !isObject(option)) return option;\n\n return getObjectProperty(option, propertyPath);\n }\n\n isSelected(option: T) {\n const optionKey = this.execFnOrGetOptionProperty(option, this.keyBinding);\n\n return this.getOption(optionKey, this.keyBinding, this.selection) !== undefined;\n }\n\n isDisabled(option: T) {\n return !!this.execFnOrGetOptionPropertyNullable(option, this.disabledBinding);\n }\n\n getFilteredOptions(filter = this.filter, options = this.options) {\n if (!filter) return options;\n\n const splitFilter = filter.split(' ').filter((f) => f);\n\n return options.filter((option) => {\n const label = this.getLabel(option);\n\n if (!label || typeof label !== 'string') return false;\n\n const splitLabel = label.split(' ').filter((l) => l);\n\n return splitFilter.every((f) => splitLabel.some((l) => l.toLowerCase().includes(f.toLowerCase())));\n });\n }\n\n addSelectedOption(option: T) {\n this._cancelPendingSelectionFromValue();\n\n if (this.allowMultiple) {\n if (this.isSelected(option)) return;\n\n this._selection$.next([...this.selection, option]);\n } else {\n this._selection$.next([option]);\n }\n }\n\n removeSelectedOption(option: T) {\n this._cancelPendingSelectionFromValue();\n\n const optionKey = this.execFnOrGetOptionProperty(option, this.keyBinding);\n\n if (!this.isSelected(option)) return;\n\n this._selection$.next(\n this.selection.filter((selectedOption) => {\n const key = this.execFnOrGetOptionProperty(selectedOption, this.keyBinding);\n\n return key !== optionKey;\n }),\n );\n }\n\n clearSelectedOptions() {\n this._cancelPendingSelectionFromValue();\n\n this._selection$.next([]);\n }\n\n toggleSelectedOption(option: T) {\n if (this.isSelected(option)) {\n this.removeSelectedOption(option);\n } else {\n this.addSelectedOption(option);\n }\n }\n\n // FIXME: Toggle should respect disabled binding if it exists\n toggleAllSelectedOptions() {\n this._cancelPendingSelectionFromValue();\n\n const filteredOptions = this.getFilteredOptions();\n const unselectedOptions = filteredOptions.filter((option) => !this.isSelected(option));\n\n if (unselectedOptions.length) {\n const selection = unselectedOptions.filter((o) => !this.selection.some((s) => this.getKey(s) === this.getKey(o)));\n\n this._selection$.next([...this.selection, ...selection]);\n } else {\n const selection = this.selection.filter((s) => !filteredOptions.some((o) => this.getKey(o) === this.getKey(s)));\n\n this._selection$.next(selection);\n }\n }\n\n private _cancelPendingSelectionFromValue() {\n this._lastSelectionSetSubscription?.unsubscribe();\n this._lastSelectionSetSubscription = null;\n this._isSyncingSelectionFromValue = false;\n }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\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, Subscription, take, tap } from 'rxjs';\nimport { RouterStateService } from '../services';\nimport { createResizeObservable } from './resize-observable.util';\nimport { elementCanScroll } from './scrollable.utils';\n\nconst scrollBehaviorSupported = supportsScrollBehavior();\n\nconst BLOCK_CLASS = 'cdk-global-scrollblock';\nconst OVERSCROLL_CLASS = 'et-global-no-overscroll';\n\n/**\n * @deprecated Will be removed in v5. Scroll blocking for overlays is build in by default.\n */\nexport class SmartBlockScrollStrategy implements ScrollStrategy {\n private _previousHTMLStyles = { top: '', left: '' };\n private _previousScrollPosition: { top: number; left: number } = { top: 0, left: 0 };\n private _isEnabled = false;\n private _urlSubscription: Subscription | null = null;\n private _resizeSubscription: Subscription | null = null;\n private _didNavigate = false;\n\n #viewportRuler = inject(ViewportRuler);\n #routerState = inject(RouterStateService);\n #document = inject(DOCUMENT);\n\n attach() {\n // noop\n }\n\n enable() {\n if (!this._canBeEnabled()) return;\n\n const root = this.#document.documentElement;\n root.classList.add(OVERSCROLL_CLASS);\n\n this._resizeSubscription = createResizeObservable({ elements: root })\n .pipe(\n startWith(null),\n tap(() => {\n if (this._isEnabled || !elementCanScroll(root) || !this._canBeEnabled()) return;\n\n this._isEnabled = true;\n\n this._previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();\n this._didNavigate = false;\n\n this._previousHTMLStyles.left = root.style.left || '';\n this._previousHTMLStyles.top = root.style.top || '';\n\n root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n root.classList.add(BLOCK_CLASS);\n\n this._urlSubscription = this.#routerState.route$\n .pipe(\n skip(1),\n take(1),\n tap(() => {\n this._didNavigate = true;\n }),\n )\n .subscribe();\n }),\n )\n .subscribe();\n }\n\n disable() {\n this._urlSubscription?.unsubscribe();\n this._resizeSubscription?.unsubscribe();\n const html = this.#document.documentElement;\n\n if (this._canBeEnabled()) {\n html.classList.remove(OVERSCROLL_CLASS);\n }\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\n this._isEnabled = false;\n\n htmlStyle.left = this._previousHTMLStyles.left;\n htmlStyle.top = this._previousHTMLStyles.top;\n html.classList.remove(BLOCK_CLASS);\n\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n }\n\n if (!this._didNavigate) {\n window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n }\n\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n }\n }\n\n private _canBeEnabled(): boolean {\n const html = this.#document.documentElement;\n\n if (html.classList.contains(BLOCK_CLASS) || this._isEnabled) {\n return false;\n }\n\n return true;\n }\n}\n","import { Primitive } from '../types';\n\nexport const isPrimitiveArray = (value: unknown): value is Array<Primitive> => {\n if (!Array.isArray(value)) return false;\n\n const first = value[0];\n const last = value[value.length - 1];\n\n if (!first || !last) return false;\n\n return typeof first !== 'object' && typeof last !== 'object';\n};\n\nexport const isObjectArray = (value: unknown): value is Array<Record<string, unknown>> => {\n if (!Array.isArray(value)) return false;\n\n const first = value[0];\n const last = value[value.length - 1];\n\n if (!first || !last) return false;\n\n return typeof first === 'object' && typeof last === 'object' && !Array.isArray(first) && !Array.isArray(last);\n};\n\nexport const isEmptyArray = (value: unknown): value is [] => {\n return Array.isArray(value) && value.length === 0;\n};\n","import { VIEWPORT_CONFIG } from '../constants';\nimport { ViewportConfig } from '../types';\n\nexport const provideViewportConfig = (\n viewportConfig: ViewportConfig,\n): { provide: typeof VIEWPORT_CONFIG; useValue: typeof viewportConfig } => {\n return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };\n};\n","import { Directive, ElementRef, inject, InjectionToken, Input, isDevMode, OnInit } from '@angular/core';\nimport {\n BehaviorSubject,\n debounceTime,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n skip,\n Subject,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { createDestroy } from '../../utils';\n\nexport const ANIMATABLE_TOKEN = new InjectionToken<AnimatableDirective>('ANIMATABLE_DIRECTIVE_TOKEN');\n\n@Directive({\n selector: '[etAnimatable]',\n exportAs: 'etAnimatable',\n standalone: true,\n providers: [\n {\n provide: ANIMATABLE_TOKEN,\n useExisting: AnimatableDirective,\n },\n ],\n})\nexport class AnimatableDirective implements OnInit {\n private _didEmitStart = false;\n\n private readonly _parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });\n private readonly _destroy$ = createDestroy();\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly _animationStart$ = new Subject<void>();\n private readonly _animationEnd$ = new Subject<void>();\n private readonly _animationCancelled$ = new Subject<void>();\n\n @Input('etAnimatable')\n set animatedElement(value: string | HTMLElement | null | undefined) {\n let newElement: HTMLElement | null;\n if (value === null || value === undefined || value === '') {\n newElement = this._elementRef.nativeElement;\n } else if (typeof value === 'string') {\n const el = document.querySelector(value) as HTMLElement;\n\n if (el) {\n newElement = el;\n } else {\n if (isDevMode()) {\n console.warn(`Element with selector ${value} not found. Animatable directive will use host element.`);\n }\n\n newElement = this._elementRef.nativeElement;\n }\n } else {\n newElement = value;\n }\n\n if (this._animatedElement$.value !== newElement) {\n this._animatedElement$.next(newElement);\n }\n }\n private _animatedElement$ = new BehaviorSubject<HTMLElement>(this._elementRef.nativeElement);\n\n readonly animationStart$ = this._animationStart$.asObservable().pipe(debounceTime(0));\n readonly animationEnd$ = this._animationEnd$.asObservable().pipe(debounceTime(0));\n readonly animationCancelled$ = this._animationCancelled$.asObservable().pipe(debounceTime(0));\n\n private readonly _hostActiveAnimationCount$ = new BehaviorSubject<number>(0);\n private readonly _totalActiveAnimationCount$ = new BehaviorSubject<number>(0);\n\n readonly isAnimating$: Observable<boolean> = this._totalActiveAnimationCount$.pipe(\n map((count) => count > 0),\n debounceTime(0),\n );\n\n ngOnInit(): void {\n this._animatedElement$\n .pipe(\n tap((el) => {\n this._totalActiveAnimationCount$.next(\n this._totalActiveAnimationCount$.value - this._hostActiveAnimationCount$.value,\n );\n this._hostActiveAnimationCount$.next(0);\n\n merge(fromEvent<AnimationEvent>(el, 'animationstart'), fromEvent<TransitionEvent>(el, 'transitionstart'))\n .pipe(\n 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 }),\n takeUntil(this._destroy$),\n takeUntil(this._animatedElement$.pipe(skip(1))),\n )\n .subscribe();\n\n merge(\n fromEvent<AnimationEvent>(el, 'animationend'),\n fromEvent<AnimationEvent>(el, 'animationcancel'),\n fromEvent<TransitionEvent>(el, 'transitionend'),\n fromEvent<TransitionEvent>(el, 'transitioncancel'),\n )\n .pipe(\n 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 }),\n takeUntil(this._destroy$),\n takeUntil(this._animatedElement$.pipe(skip(1))),\n )\n .subscribe();\n\n merge(fromEvent<AnimationEvent>(el, 'animationcancel'), fromEvent<TransitionEvent>(el, 'transitioncancel'))\n .pipe(\n filter((e) => e.target === el), // skip events from children\n tap(() => {\n this._animationCancelled$.next();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._animatedElement$.pipe(skip(1))),\n )\n .subscribe();\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this._totalActiveAnimationCount$\n .pipe(\n tap((count) => {\n if (count > 0 && !this._didEmitStart) {\n this._animationStart$.next();\n this._didEmitStart = true;\n } else if (count === 0) {\n this._animationEnd$.next();\n this._didEmitStart = false;\n }\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n if (this._parent) {\n this._parent._hostActiveAnimationCount$\n .pipe(\n takeUntil(this._destroy$),\n tap((count) => {\n this._totalActiveAnimationCount$.next(count + this._hostActiveAnimationCount$.value);\n }),\n )\n .subscribe();\n }\n }\n}\n","import { AfterViewInit, 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';\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 leaveFrom: 'et-animation-leave-from',\n leaveActive: 'et-animation-leave-active',\n leaveTo: 'et-animation-leave-to',\n leaveDone: 'et-animation-leave-done',\n} as const;\n\nexport type AnimatedLifecycleState = 'entering' | 'entered' | 'leaving' | 'left' | 'init';\n\n@Directive({\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})\nexport class AnimatedLifecycleDirective implements AfterViewInit {\n private readonly _destroy$ = createDestroy();\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _animatable = inject(ANIMATABLE_TOKEN);\n private readonly _classList = this._elementRef.nativeElement.classList;\n\n private _isConstructed = false;\n\n private _state$ = new BehaviorSubject<AnimatedLifecycleState>('init');\n readonly state$ = this._state$.asObservable();\n\n get state() {\n return this._state$.value;\n }\n\n stateSignal = toSignal(this._state$, { initialValue: 'init' });\n\n stateChange = outputFromObservable(this._state$);\n\n skipNextEnter = model(false);\n\n constructor() {\n const renderer = inject(Renderer2);\n\n effect(() => {\n const state = this.stateSignal();\n\n if (state !== 'init') {\n renderer.removeClass(this._elementRef.nativeElement, 'et-force-invisible');\n } else {\n renderer.addClass(this._elementRef.nativeElement, 'et-force-invisible');\n }\n });\n }\n\n ngAfterViewInit(): void {\n this._isConstructed = true;\n }\n\n enter() {\n if (this.state === 'entering') return;\n\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\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\n this._state$.next('entering');\n\n this._classList.remove(ANIMATION_CLASSES.leaveDone);\n this._classList.add(ANIMATION_CLASSES.enterFrom);\n\n forceReflow();\n this._classList.add(ANIMATION_CLASSES.enterActive);\n\n fromNextFrame()\n .pipe(\n tap(() => {\n if (this.state === 'entering') {\n this._classList.remove(ANIMATION_CLASSES.enterFrom);\n this._classList.add(ANIMATION_CLASSES.enterTo);\n }\n }),\n switchMap(() => this._animatable.animationEnd$),\n tap(() => {\n if (this.state !== 'entering') return;\n\n this._state$.next('entered');\n this._classList.remove(ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n this._classList.add(ANIMATION_CLASSES.enterDone);\n }),\n takeUntil(this._destroy$),\n take(1),\n )\n .subscribe();\n }\n\n leave() {\n if (this.state === 'leaving') return;\n\n if (this.state === 'init') {\n this._state$.next('left');\n this._classList.add(ANIMATION_CLASSES.leaveDone);\n\n return;\n }\n\n if (this.state === 'entering') {\n this._classList.remove(ANIMATION_CLASSES.enterFrom, ANIMATION_CLASSES.enterActive, ANIMATION_CLASSES.enterTo);\n }\n\n this._state$.next('leaving');\n\n this._classList.remove(ANIMATION_CLASSES.enterDone);\n this._classList.add(ANIMATION_CLASSES.leaveFrom);\n\n forceReflow();\n this._classList.add(ANIMATION_CLASSES.leaveActive);\n\n fromNextFrame()\n .pipe(\n tap(() => {\n if (this.state === 'leaving') {\n this._classList.remove(ANIMATION_CLASSES.leaveFrom);\n this._classList.add(ANIMATION_CLASSES.leaveTo);\n }\n }),\n switchMap(() => this._animatable.animationEnd$),\n tap(() => {\n if (this.state !== 'leaving') return;\n\n this._state$.next('left');\n this._classList.remove(ANIMATION_CLASSES.leaveActive, ANIMATION_CLASSES.leaveTo);\n this._classList.add(ANIMATION_CLASSES.leaveDone);\n }),\n takeUntil(this._destroy$),\n take(1),\n )\n .subscribe();\n }\n\n _forceState(state: AnimatedLifecycleState) {\n this._state$.next(state);\n }\n}\n","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';\n\nexport const ANIMATED_IF_TOKEN = new InjectionToken<AnimatedIfDirective>('ANIMATED_IF_TOKEN');\n\n@Directive({\n selector: '[etAnimatedIf]',\n standalone: true,\n providers: [\n {\n provide: ANIMATED_IF_TOKEN,\n useExisting: AnimatedIfDirective,\n },\n ],\n hostDirectives: [NgIf],\n})\nexport class AnimatedIfDirective {\n private readonly _destroy$ = createDestroy();\n private readonly _ngIf = inject(NgIf);\n private readonly _animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);\n\n @Input('etAnimatedIf')\n set shouldRender(value: unknown) {\n if (value) {\n this._ngIf.ngIf = value;\n\n this._animatedLifecycle.enter();\n } else {\n this._animatedLifecycle.leave();\n\n this._animatedLifecycle.state$\n .pipe(\n takeUntil(this._destroy$),\n takeWhile((state) => state !== 'left', true),\n filter((state) => state === 'left'),\n tap(() => {\n this._ngIf.ngIf = value;\n }),\n )\n .subscribe();\n }\n }\n}\n","import { Directive, ElementRef, InjectionToken, inject } from '@angular/core';\n\nexport const ROOT_BOUNDARY_TOKEN = new InjectionToken<RootBoundaryDirective>('ROOT_BOUNDARY_TOKEN');\n\n@Directive({\n selector: '[etRootBoundary]',\n standalone: true,\n providers: [\n {\n provide: ROOT_BOUNDARY_TOKEN,\n useExisting: RootBoundaryDirective,\n },\n ],\n})\nexport class RootBoundaryDirective {\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n get boundaryElement() {\n return this._boundaryElement ?? this._elementRef.nativeElement;\n }\n set boundaryElement(v: HTMLElement | null) {\n this._boundaryElement = v;\n }\n private _boundaryElement: HTMLElement | null = null;\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n Injector,\n Input,\n NgZone,\n StaticProvider,\n ViewContainerRef,\n booleanAttribute,\n inject,\n isDevMode,\n} from '@angular/core';\nimport {\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 { BehaviorSubject, Subject, filter, take, takeUntil, tap } from 'rxjs';\nimport { ResizeObserverService } from '../../services';\nimport { createDestroy, nextFrame } from '../../utils';\nimport { AnimatedLifecycleDirective } from '../animated-lifecycle';\nimport { RootBoundaryDirective } from '../root-boundary';\n\nexport interface AnimatedOverlayComponentBase {\n _elementRef?: ElementRef<HTMLElement>;\n _animatedLifecycle?: AnimatedLifecycleDirective;\n _markForCheck?: () => void;\n\n // Theming lives inside the cdk now. We cant import it into core.\n // FIXME: Type this properly once core is moved to cdk.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _setThemeFromProvider?: (provider: any) => void;\n}\n\n@Directive({\n standalone: true,\n host: {\n class: 'et-animated-overlay',\n },\n})\nexport class AnimatedOverlayDirective<T extends AnimatedOverlayComponentBase> {\n private readonly _destroy$ = createDestroy();\n private readonly _overlayService = inject(Overlay);\n private readonly _injector = inject(Injector);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _zone = inject(NgZone);\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _resizeObserverService = inject(ResizeObserverService);\n private readonly _rootBoundary = inject(RootBoundaryDirective, { optional: true });\n\n private _portal: ComponentPortal<T> | null = null;\n private _overlayRef: OverlayRef | null = null;\n private _componentRef: ComponentRef<T> | null = null;\n private _floatingElCleanupFn: (() => void) | null = null;\n\n private _beforeOpened: Subject<void> | null = null;\n private _afterOpened: Subject<void> | null = null;\n private _beforeClosed: Subject<void> | null = null;\n private _afterClosed: Subject<void> | null = null;\n\n private readonly _isMounted$ = new BehaviorSubject<boolean>(false);\n private readonly _isMounting$ = new BehaviorSubject<boolean>(false);\n private readonly _isUnmounting$ = new BehaviorSubject<boolean>(false);\n private readonly _isHidden$ = new BehaviorSubject<boolean>(false);\n\n /**\n * The placement of the animated overlay.\n * @default undefined\n */\n @Input()\n placement?: Placement = 'bottom';\n\n /**\n * The allowed auto placements of the animated overlay.\n * @see https://floating-ui.com/docs/flip#fallbackplacements\n */\n @Input()\n fallbackPlacements?: Placement[];\n\n /**\n * The offset of the animated overlay.\n * @see https://floating-ui.com/docs/offset\n */\n @Input()\n offset: OffsetOptions | null = null;\n\n /**\n * The arrow padding.\n * @see https://floating-ui.com/docs/arrow#padding\n * @default 4\n */\n @Input()\n arrowPadding: Padding | null = 4;\n\n /**\n * The viewport padding.\n * @default 8\n */\n @Input()\n viewportPadding: Padding | null = 8;\n\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 @Input({ transform: booleanAttribute })\n autoResize = false;\n\n /**\n * Whether the animated overlay should shift when it is near the viewport boundary.\n */\n @Input({ transform: booleanAttribute })\n shift = true;\n\n /**\n * Whether the animated overlay should auto hide when the reference element is hidden.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n autoHide = false;\n\n /**\n * Whether the animated overlay should auto close if the reference element is hidden.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n autoCloseIfReferenceHidden = false;\n\n /**\n * The reference element for the animated overlay.\n * @default this._elementRef.nativeElement\n */\n @Input()\n referenceElement = this._elementRef.nativeElement;\n\n get isMounted() {\n return this._isMounted$.value;\n }\n\n get isMounted$() {\n return this._isMounted$.asObservable();\n }\n\n get isMounting() {\n return this._isMounting$.value;\n }\n\n get isMounting$() {\n return this._isMounting$.asObservable();\n }\n\n get isUnmounting() {\n return this._isUnmounting$.value;\n }\n\n get isHidden$() {\n return this._isHidden$.asObservable();\n }\n\n get isHidden() {\n return this._isHidden$.value;\n }\n\n get canMount() {\n return !this.isMounted && !this.isMounting;\n }\n\n get canUnmount() {\n return this.isMounted && !this.isUnmounting;\n }\n\n get portal() {\n return this._portal;\n }\n\n get overlayRef() {\n return this._overlayRef;\n }\n\n get componentRef() {\n return this._componentRef;\n }\n\n mount(config: {\n component: ComponentType<T>;\n providers?: StaticProvider[];\n data?: Partial<T>;\n mirrorWidth?: boolean;\n\n // Theming lives inside the cdk now. We cant import it into core.\n // FIXME: Type this properly once core is moved to cdk.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n themeProvider?: any | null;\n }) {\n if (this.isMounted) {\n if (isDevMode()) {\n if (this.isMounted) {\n console.warn(\n 'AnimatedOverlayDirective: The component is currently mounted. Please unmount the component before mounting again.',\n );\n }\n }\n\n return;\n }\n\n if (this.isMounting) {\n return;\n }\n\n this._isMounting$.next(true);\n\n const { component, providers, data, mirrorWidth, themeProvider } = config;\n\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\n this._portal = new ComponentPortal(component, this._viewContainerRef, injector);\n this._componentRef = this._overlayRef.attach(this._portal);\n\n if (data) {\n Object.assign(this._componentRef.instance, data);\n }\n\n this._componentRef.instance._markForCheck?.();\n\n if (themeProvider) {\n this._componentRef.instance._setThemeFromProvider?.(themeProvider);\n }\n\n if (mirrorWidth) {\n this._overlayRef.updateSize({\n width: this._elementRef.nativeElement.offsetWidth,\n });\n\n this._resizeObserverService\n .observe(this.referenceElement)\n .pipe(\n tap(() => {\n this._overlayRef?.updateSize({\n width: this._elementRef.nativeElement.offsetWidth,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this.afterClosed()),\n )\n .subscribe();\n }\n\n this._zone.runOutsideAngular(() => {\n if (!this._componentRef) {\n return;\n }\n\n const floatingEl = this._componentRef.location.nativeElement as HTMLElement;\n const floatingElArrow = this._componentRef.instance._elementRef?.nativeElement.querySelector(\n '[et-floating-arrow]',\n ) as HTMLElement | null;\n\n floatingEl.classList.add('et-floating-element');\n\n const refEl = this.referenceElement;\n const boundary = this._rootBoundary?.boundaryElement ?? undefined;\n\n this._floatingElCleanupFn = autoUpdate(refEl, floatingEl, () => {\n if (!this._componentRef) return;\n\n computePosition(refEl, floatingEl, {\n placement: this.placement,\n\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\n if (middlewareData.arrow && floatingElArrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n floatingEl.style.setProperty(\n '--et-floating-arrow-translate',\n `translate3d(${arrowX ?? 0}px, ${arrowY ?? 0}px, 0)`,\n );\n }\n\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$.next(true);\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\n // We need to wait for the content to be rendered\n nextFrame(() => {\n if (!this._componentRef) {\n return;\n }\n\n if (!this._componentRef.instance._animatedLifecycle) {\n console.error(\n 'AnimatedOverlayDirective: The component does not have an AnimatedLifecycleDirective. Please add one to the component.',\n );\n }\n\n this._componentRef.instance._animatedLifecycle?.enter();\n\n this._componentRef.instance._animatedLifecycle?.state$\n .pipe(\n tap((s) => {\n if (s === 'entered') {\n this._afterOpened?.next();\n }\n }),\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this._isMounted$.next(true);\n this._isMounting$.next(false);\n });\n });\n\n return this._componentRef.instance;\n }\n\n unmount() {\n if (!this.isMounted) {\n if (isDevMode()) {\n if (!this.isMounted) {\n console.warn(\n `AnimatedOverlayDirective: The component is currently not mounted. Please call \"mount\" before calling \"unmount\" again.`,\n );\n }\n }\n\n return;\n }\n\n if (this.isUnmounting) {\n return;\n }\n\n if (!this._componentRef) {\n return;\n }\n\n if (this.isHidden) {\n return;\n }\n\n this._isUnmounting$.next(true);\n\n this._beforeClosed?.next();\n\n this._componentRef.instance._animatedLifecycle?.leave();\n\n this._componentRef.instance._animatedLifecycle?.state$\n .pipe(\n filter((s) => s === 'left'),\n take(1),\n )\n .subscribe(() => this._destroy());\n }\n\n beforeOpened() {\n if (!this._beforeOpened) {\n this._beforeOpened = new Subject();\n }\n\n return this._beforeOpened;\n }\n\n afterOpened() {\n if (!this._afterOpened) {\n this._afterOpened = new Subject();\n }\n\n return this._afterOpened;\n }\n\n beforeClosed() {\n if (!this._beforeClosed) {\n this._beforeClosed = new Subject();\n }\n\n return this._beforeClosed;\n }\n\n afterClosed() {\n if (!this._afterClosed) {\n this._afterClosed = new Subject();\n }\n\n return this._afterClosed;\n }\n\n _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._isMounted$.next(false);\n this._isUnmounting$.next(false);\n\n this._afterClosed?.next();\n }\n}\n","import { Directive, ElementRef, EventEmitter, inject, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ClickObserverService } from '../../services';\n\n@Directive({\n selector: '[etClickOutside]',\n standalone: true,\n})\nexport class ClickOutsideDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef);\n private _clickObserverService = inject(ClickObserverService);\n\n private _subscription: Subscription | null = null;\n\n @Output()\n etClickOutside = new EventEmitter<MouseEvent>();\n\n ngOnInit(): void {\n setTimeout(() => {\n this._subscription = this._clickObserverService.observe(this._elementRef.nativeElement).subscribe((event) => {\n const activeElement = event.target as HTMLElement;\n const isInside = this._elementRef.nativeElement.contains(activeElement);\n\n if (!isInside) {\n this.etClickOutside.emit(event);\n }\n });\n });\n }\n\n ngOnDestroy(): void {\n this._subscription?.unsubscribe();\n }\n}\n","export const CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';\nexport const CURSOR_DRAG_SCROLLING_PREPARED_CLASS = 'et-cursor-drag-scroll--prepared';\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { Subject, Subscription, 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';\n\n@Directive({\n selector: '[etCursorDragScroll]',\n exportAs: 'etCursorDragScroll',\n standalone: true,\n})\nexport class CursorDragScrollDirective implements AfterViewInit {\n private readonly _subscriptions: Subscription[] = [];\n private readonly _destroy$ = createDestroy();\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _contentObserverService = inject(ContentObserverService);\n private readonly _resizeObserverService = inject(ResizeObserverService);\n\n private readonly _bufferUntilScroll = 5;\n private readonly _mouseUp$ = new Subject<boolean>();\n\n private _isScrolling = false;\n private _canScroll = false;\n\n private _currentScrollState = {\n top: 0,\n left: 0,\n x: 0,\n y: 0,\n };\n\n @Input('etCursorDragScroll')\n get enabled(): boolean {\n return this._enabled;\n }\n set enabled(value: unknown) {\n this._enabled = booleanAttribute(value);\n\n if (this._enabled) {\n this._enableCursorDragScroll();\n } else {\n this._disableCursorDragScroll();\n }\n }\n private _enabled = false;\n\n @Input()\n allowedDirection: 'horizontal' | 'vertical' | 'both' = 'both';\n\n @Output()\n readonly cursorDragStart = new EventEmitter<void>();\n\n @Output()\n readonly cursorDragMove = new EventEmitter<void>();\n\n @Output()\n readonly cursorDragEnd = new EventEmitter<void>();\n\n ngAfterViewInit(): void {\n if (this.enabled) {\n this._enableCursorDragScroll();\n } else {\n this._disableCursorDragScroll();\n }\n }\n\n private _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(\n debounceTime(25),\n tap(() => this._updateCanScrollState()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n const mousedownSub = fromEvent<MouseEvent>(this._elementRef.nativeElement, 'mousedown')\n .pipe(\n tap((e) => this._onMouseDown(e)),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this._subscriptions.push(contentResizeSub, mousedownSub);\n\n this._updateCanScrollState();\n }\n\n private _disableCursorDragScroll() {\n this._subscriptions.forEach((sub) => sub.unsubscribe());\n this._subscriptions.length = 0;\n this._elementRef.nativeElement.style.cursor = 'default';\n }\n\n private _onMouseDown(e: MouseEvent) {\n if (!this._elementRef?.nativeElement || !this._canScroll) {\n return;\n }\n\n const element = this._elementRef.nativeElement;\n\n element.classList.add(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);\n\n this._elementRef.nativeElement.style.scrollSnapType = 'none';\n this._elementRef.nativeElement.style.scrollBehavior = 'unset';\n\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\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(\n tap((e) => this._mouseMoveHandler(e)),\n takeUntil(this._mouseUp$),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(\n tap(() => this._mouseUpHandler()),\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n private _mouseMoveHandler(e: MouseEvent) {\n e.preventDefault();\n\n if (!this._elementRef?.nativeElement) {\n return;\n }\n\n const dx = e.clientX - this._currentScrollState.x;\n const dy = e.clientY - this._currentScrollState.y;\n\n const shouldScrollX =\n (this.allowedDirection === 'horizontal' || this.allowedDirection === 'both') &&\n Math.abs(dx) > this._bufferUntilScroll;\n const shouldScrollY =\n (this.allowedDirection === 'vertical' || this.allowedDirection === 'both') &&\n Math.abs(dy) > this._bufferUntilScroll;\n\n if (shouldScrollX || shouldScrollY) {\n const element = this._elementRef.nativeElement;\n\n if (!this._isScrolling) {\n this._isScrolling = true;\n this.cursorDragStart.emit();\n\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 } else {\n if (shouldScrollY) {\n element.scrollTop = this._currentScrollState.top - dy;\n }\n\n if (shouldScrollX) {\n element.scrollLeft = this._currentScrollState.left - dx;\n }\n\n this.cursorDragMove.emit();\n }\n }\n }\n\n private _mouseUpHandler() {\n this._mouseUp$.next(true);\n this._isScrolling = false;\n\n if (!this._elementRef?.nativeElement) {\n return;\n }\n\n this._elementRef.nativeElement.style.scrollSnapType = '';\n this._elementRef.nativeElement.style.scrollBehavior = '';\n\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\n this.cursorDragEnd.emit();\n }\n\n private _updateCanScrollState() {\n this._canScroll = elementCanScroll(this._elementRef.nativeElement);\n\n if (this._canScroll) {\n this._elementRef.nativeElement.style.cursor = 'grab';\n } else {\n this._elementRef.nativeElement.style.cursor = 'default';\n }\n }\n}\n","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';\n\nexport const DEBUG_TOKEN = new InjectionToken<DebugDirective>('DEBUG_DIRECTIVE_TOKEN');\n\n@Directive({\n selector: '[etDebug]',\n exportAs: 'etDebug',\n standalone: true,\n providers: [\n {\n provide: DEBUG_TOKEN,\n useExisting: DebugDirective,\n },\n ],\n})\nexport class DebugDirective {\n private readonly _destroy$ = createDestroy();\n\n @Input({ alias: 'etDebug', transform: booleanAttribute })\n private set sDebug(value: boolean) {\n this._debug.set(value);\n }\n\n private _debug = signal(true);\n readonly debug = this._debug.asReadonly();\n readonly debug$ = toObservable(this.debug);\n\n readonly startDebug$ = this.debug$.pipe(filter((debug) => !!debug));\n readonly stopDebug$ = merge(this._destroy$, this.debug$.pipe(filter((debug) => !debug)));\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport const DELAYABLE_TOKEN = new InjectionToken<DelayableDirective>('DELAYABLE_DIRECTIVE_TOKEN');\n\n@Directive({\n selector: '[etDelayable]',\n exportAs: 'etDelayable',\n standalone: true,\n providers: [\n {\n provide: DELAYABLE_TOKEN,\n useExisting: DelayableDirective,\n },\n ],\n})\nexport class DelayableDirective {\n private readonly _isDelayed$ = new BehaviorSubject(false);\n\n get isDelayed$() {\n return this._isDelayed$.asObservable();\n }\n\n get isDelayed() {\n return this._isDelayed$.value;\n }\n\n enableDelayed() {\n if (this._isDelayed$.value) {\n return;\n }\n\n this._isDelayed$.next(true);\n }\n\n disableDelayed() {\n if (!this._isDelayed$.value) {\n return;\n }\n\n this._isDelayed$.next(false);\n }\n\n setDelayed(val: boolean) {\n if (this._isDelayed$.value === val) {\n return;\n }\n\n this._isDelayed$.next(val);\n }\n}\n","import { Directive, ElementRef, InjectionToken, Input, booleanAttribute, inject } from '@angular/core';\n\nexport const IS_ACTIVE_ELEMENT = new InjectionToken<IsActiveElementDirective>('ET_IS_ACTIVE_ELEMENT');\n\n@Directive({\n selector: '[etIsActiveElement]',\n standalone: true,\n providers: [\n {\n provide: IS_ACTIVE_ELEMENT,\n useExisting: IsActiveElementDirective,\n },\n ],\n})\nexport class IsActiveElementDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @Input({ alias: 'etIsActiveElement', transform: booleanAttribute })\n isActiveElement = false;\n}\n","import { Directive, ElementRef, InjectionToken, Input, booleanAttribute, inject } from '@angular/core';\n\nexport const IS_ELEMENT = new InjectionToken<IsElementDirective>('ET_IS_ELEMENT');\n\n@Directive({\n selector: '[etIsElement]',\n standalone: true,\n providers: [\n {\n provide: IS_ELEMENT,\n useExisting: IsElementDirective,\n },\n ],\n})\nexport class IsElementDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @Input({ alias: 'etIsElement', transform: booleanAttribute })\n isElement = false;\n}\n","export class LetContext<T = unknown> {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n public $implicit: T = null!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n public etLet: T = null!;\n}\n","import { Directive, EmbeddedViewRef, Input, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { LetContext } from './let.types';\n\n/** @deprecated Use the let keyword provided by Angular instead. */\n@Directive({\n selector: '[etLet]',\n standalone: true,\n})\nexport class LetDirective<T = unknown> {\n private _viewContainer = inject(ViewContainerRef);\n\n @Input()\n set etLet(value: T) {\n this._context.$implicit = this._context.etLet = value;\n this._updateView();\n }\n\n static ngTemplateGuard_ngLet: 'binding';\n\n private _context: LetContext<T> = new LetContext<T>();\n private _templateRef = inject<TemplateRef<LetContext<T>>>(TemplateRef);\n private _viewRef: EmbeddedViewRef<LetContext<T>> | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static ngTemplateContextGuard<T>(dir: LetDirective<T>, ctx: any): ctx is LetContext<T> {\n return true;\n }\n\n private _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}\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n booleanAttribute,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ContentObserverService } from '../../services';\n\n@Directive({\n selector: '[etObserveContent]',\n exportAs: 'etObserveContent',\n standalone: true,\n})\nexport class ObserveContentDirective implements AfterContentInit, OnDestroy {\n private _contentObserver = inject(ContentObserverService);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n\n @Output('etObserveContent')\n readonly valueChange = new EventEmitter<MutationRecord[]>();\n\n @Input('etObserveContentDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: unknown) {\n this._disabled = booleanAttribute(value);\n\n if (this._disabled) {\n this._unsubscribe();\n } else {\n this._subscribe();\n }\n }\n private _disabled = false;\n\n @Input('etObserveContentDebounce')\n get debounce(): number | null {\n return this._debounce;\n }\n set debounce(value: unknown) {\n this._debounce = numberAttribute(value) ?? null;\n this._subscribe();\n }\n private _debounce: number | null = null;\n\n private _currentSubscription: Subscription | null = null;\n\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n\n ngOnDestroy() {\n this._unsubscribe();\n }\n\n private _subscribe() {\n this._unsubscribe();\n const stream = this._contentObserver.observe(this._elementRef);\n\n this._ngZone.runOutsideAngular(() => {\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(\n this.valueChange,\n );\n });\n }\n\n private _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n}\n","import {\n AfterContentInit,\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { debounceTime, Subscription } from 'rxjs';\nimport { ResizeObserverService } from '../../services';\n\n@Directive({\n selector: '[etObserveResize]',\n exportAs: 'etObserveResize',\n standalone: true,\n})\nexport class ObserveResizeDirective implements AfterContentInit, OnDestroy {\n private _resizeObserver = inject(ResizeObserverService);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n\n @Output('etObserveResize')\n readonly valueChange = new EventEmitter<ResizeObserverEntry[]>();\n\n @Input('etObserveResizeDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: unknown) {\n this._disabled = booleanAttribute(value);\n\n if (this._disabled) {\n this._unsubscribe();\n } else {\n this._subscribe();\n }\n }\n private _disabled = false;\n\n @Input('etObserveResizeDebounce')\n get debounce(): number | null {\n return this._debounce;\n }\n set debounce(value: unknown) {\n this._debounce = numberAttribute(value) ?? null;\n this._subscribe();\n }\n private _debounce: number | null = null;\n\n private _currentSubscription: Subscription | null = null;\n\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n\n ngOnDestroy() {\n this._unsubscribe();\n }\n\n private _subscribe() {\n this._unsubscribe();\n const stream = this._resizeObserver.observe(this._elementRef);\n\n this._ngZone.runOutsideAngular(() => {\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(\n this.valueChange,\n );\n });\n }\n\n private _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ObserveScrollStateDirective } from './observe-scroll-state.directive';\n\nexport const OBSERVE_SCROLL_STATE = new InjectionToken<ObserveScrollStateDirective>('OBSERVE_SCROLL_STATE');\n","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\n\nexport const SCROLL_OBSERVER_FIRST_ELEMENT_CLASS = 'et-scroll-observer-first-element';\n\n@Directive({\n selector: '[etScrollObserverFirstElement]',\n standalone: true,\n})\nexport class ScrollObserverFirstElementDirective {\n @Input({ alias: 'etScrollObserverFirstElement', transform: booleanAttribute })\n @HostBinding(`class.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`)\n isFirstElement = false;\n}\n","import { Directive } from '@angular/core';\n\nexport const SCROLL_OBSERVER_IGNORE_TARGET_CLASS = 'et-scroll-observer-ignore-target';\n\n@Directive({\n selector: '[etScrollObserverIgnoreTarget]',\n standalone: true,\n host: {\n class: SCROLL_OBSERVER_IGNORE_TARGET_CLASS,\n },\n})\nexport class ScrollObserverIgnoreTargetDirective {}\n","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\n\nexport const SCROLL_OBSERVER_LAST_ELEMENT_CLASS = 'et-scroll-observer-last-element';\n\n@Directive({\n selector: '[etScrollObserverLastElement]',\n standalone: true,\n host: {\n class: SCROLL_OBSERVER_LAST_ELEMENT_CLASS,\n },\n})\nexport class ScrollObserverLastElementDirective {\n @Input({ alias: 'etScrollObserverLastElement', transform: booleanAttribute })\n @HostBinding(`class.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`)\n isLastElement = false;\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} 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 { ScrollObserverScrollState } from './observe-scroll-state.types';\n\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';\n\n@Directive({\n selector: '[etObserveScrollState]',\n exportAs: 'etObserveScrollState',\n standalone: true,\n providers: [\n {\n provide: OBSERVE_SCROLL_STATE,\n useExisting: ObserveScrollStateDirective,\n },\n ],\n})\nexport class ObserveScrollStateDirective implements OnInit, OnDestroy {\n private readonly _destroy$ = createDestroy();\n\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _contentObserverService = inject(ContentObserverService);\n private readonly _resizeObserverService = inject(ResizeObserverService);\n\n private get _firstCurrentChild() {\n const explicitFirstElement = this._elementRef.nativeElement.querySelector(\n `.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`,\n ) as HTMLElement | null;\n\n if (explicitFirstElement) {\n return explicitFirstElement;\n }\n\n const element = this._elementRef.nativeElement.children[0] as HTMLElement | null;\n\n return this._getNonIgnoredChild(element, 'next');\n }\n\n private get _lastCurrentChild() {\n const explicitLastElement = this._elementRef.nativeElement.querySelector(\n `.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`,\n ) as HTMLElement | null;\n\n if (explicitLastElement) {\n return explicitLastElement;\n }\n\n const element = this._elementRef.nativeElement.children[\n this._elementRef.nativeElement.children.length - 1\n ] as HTMLElement | null;\n\n return this._getNonIgnoredChild(element, 'previous');\n }\n\n @Input({ transform: numberAttribute })\n rootMargin = 0;\n\n @Input()\n get observerThreshold(): number | number[] {\n return this._threshold;\n }\n set observerThreshold(value: unknown) {\n if (Array.isArray(value)) {\n this._threshold = value.map((threshold) => numberAttribute(threshold));\n return;\n }\n\n this._threshold = numberAttribute(value);\n }\n private _threshold: number | number[] = [0.99, 0.99999, 0.9999, 0.999, 1];\n\n private _intersectionObserver: IntersectionObserver | null = null;\n\n private 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\n if (!firstEl || !lastEl) return null;\n\n return {\n first: firstEl,\n last: lastEl,\n };\n }\n\n @Output('etObserveScrollState')\n valueChange = new EventEmitter<ScrollObserverScrollState>();\n\n ngOnInit(): void {\n this._contentObserverService\n .observe(this._elementRef.nativeElement)\n .pipe(\n debounceTime(25),\n tap(() => this._checkChildren()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this._resizeObserverService\n .observe(this._elementRef.nativeElement)\n .pipe(\n debounceTime(25),\n tap(() => {\n const canScroll = elementCanScroll(this._elementRef.nativeElement);\n if ((!this._intersectionObserver && canScroll) || (this._intersectionObserver && !canScroll)) {\n this._checkChildren();\n }\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this._checkChildren();\n }\n\n ngOnDestroy(): void {\n this._clearIntersectionObserver();\n }\n\n private _checkChildren() {\n this._clearIntersectionObserver();\n\n if (\n this._firstCurrentChild === this._lastCurrentChild ||\n !this._firstCurrentChild ||\n !this._lastCurrentChild ||\n !elementCanScroll(this._elementRef.nativeElement)\n ) {\n this._unobserve();\n\n this.valueChange.emit({\n isAtStart: true,\n isAtEnd: true,\n canScroll: false,\n });\n } else {\n this._intersectionObserver = this._initiateIntersectionObserver();\n\n this._observe();\n }\n }\n\n private _initiateIntersectionObserver() {\n const observer = new IntersectionObserver(\n (entries) => {\n const elements = this._observerElements;\n\n if (!elements) return;\n\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\n this.valueChange.emit({\n isAtStart,\n isAtEnd,\n canScroll: !isAtStart || !isAtEnd,\n });\n },\n {\n root: this._elementRef.nativeElement,\n rootMargin: this.rootMargin ? `${this.rootMargin}px` : undefined,\n threshold: this._threshold,\n },\n );\n\n return observer;\n }\n\n private _observe() {\n const elements = this._observerElements;\n\n if (!elements) return;\n\n this._intersectionObserver?.observe(elements.first);\n this._intersectionObserver?.observe(elements.last);\n\n elements.first.classList.add(SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS);\n elements.last.classList.add(SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS);\n }\n\n private _unobserve() {\n const elements = this._observerElements;\n\n if (!elements) return;\n\n this._intersectionObserver?.unobserve(elements.first);\n this._intersectionObserver?.unobserve(elements.last);\n\n elements.first.classList.remove(SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS);\n elements.last.classList.remove(SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS);\n }\n\n private _clearIntersectionObserver() {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = null;\n }\n\n private _getNonIgnoredChild(element: HTMLElement | null, direction: 'previous' | 'next'): HTMLElement | null {\n if (!element) {\n return null;\n }\n\n if (element?.classList.contains(SCROLL_OBSERVER_IGNORE_TARGET_CLASS)) {\n const nextElement = element[`${direction}ElementSibling`] as HTMLElement | null;\n\n if (!nextElement) {\n return null;\n }\n\n return this._getNonIgnoredChild(nextElement, direction);\n }\n\n return element;\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Output,\n Signal,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { takeUntil, tap } from 'rxjs';\nimport { IntersectionObserverService } from '../../services';\nimport { createDestroy, signalHostClasses } from '../../utils';\n\nexport const OBSERVE_VISIBILITY_TOKEN = new InjectionToken<ObserveVisibilityDirective>('OBSERVE_VISIBILITY_TOKEN');\n\nexport interface ObserveVisibilityChange {\n visible: boolean;\n isAbove: boolean;\n isBelow: boolean;\n isLeft: boolean;\n isRight: boolean;\n entry: IntersectionObserverEntry;\n}\n\nexport const signalVisibilityChangeClasses = (cfg: {\n name: string;\n signal: Signal<ObserveVisibilityChange | null | undefined>;\n}) => ({\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});\n\n@Directive({\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})\nexport class ObserveVisibilityDirective implements AfterViewInit {\n private readonly _destroy$ = createDestroy();\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _intersectionObserverService = inject(IntersectionObserverService);\n\n protected readonly visibilityChange = signal<ObserveVisibilityChange | null>(null);\n\n readonly currentVisibility = this.visibilityChange.asReadonly();\n readonly currentVisibility$ = toObservable(this.currentVisibility);\n\n @Output()\n readonly etObserveVisibility = new EventEmitter<ObserveVisibilityChange>();\n\n constructor() {\n signalHostClasses(\n signalVisibilityChangeClasses({\n name: 'et-observe-visibility',\n signal: this.visibilityChange,\n }),\n );\n }\n\n ngAfterViewInit(): void {\n this._intersectionObserverService\n .observe(this._elementRef)\n .pipe(\n takeUntil(this._destroy$),\n tap((entries) => {\n const entry = entries[0];\n\n if (!entry) {\n return;\n }\n\n const isAbove = entry.boundingClientRect.top < 0 && entry.boundingClientRect.bottom < 0;\n const isBelow =\n entry.boundingClientRect.top > window.innerHeight && entry.boundingClientRect.bottom > window.innerHeight;\n const isLeft = entry.boundingClientRect.left < 0 && entry.boundingClientRect.right < 0;\n const isRight =\n entry.boundingClientRect.left > window.innerWidth && entry.boundingClientRect.right > window.innerWidth;\n\n const data: ObserveVisibilityChange = {\n visible: entry.isIntersecting,\n isAbove,\n isBelow,\n isLeft,\n isRight,\n entry,\n };\n\n this.etObserveVisibility.emit(data);\n this.visibilityChange.set(data);\n }),\n )\n .subscribe();\n }\n}\n","import { Directive, Input, numberAttribute, TemplateRef, ViewContainerRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[etRepeat]',\n standalone: true,\n})\nexport class RepeatDirective {\n private _mainTemplateRef = inject<TemplateRef<unknown>>(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n\n @Input('etRepeat')\n get repeatCount(): number {\n return this._repeatCount;\n }\n set repeatCount(value: unknown) {\n this._repeatCount = numberAttribute(value);\n this._render();\n }\n private _repeatCount = 2;\n\n private _render() {\n this._viewContainerRef.clear();\n\n for (let i = 0; i < this.repeatCount; i++) {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { SeoDirective } from './seo.directive';\n\nexport const SEO_DIRECTIVE_TOKEN = new InjectionToken<SeoDirective>('SEO_DIRECTIVE_TOKEN');\n","import { SeoConfig } from './seo.directive.types';\n\nexport const mergeSeoConfig = (config: SeoConfig, parentConfig: SeoConfig): SeoConfig => {\n return {\n ...parentConfig,\n ...config,\n };\n};\n","import { Directive, inject, OnDestroy, OnInit } 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 { AlternateLink, SeoConfig } from './seo.directive.types';\nimport { mergeSeoConfig } from './seo.directive.utils';\n\n@Directive({\n standalone: true,\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 // TODO(TRB): This should get split up into multiple methods to make it more readable\n // - updateTitle\n // - updateMeta\n // - updateLink\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","/**\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 } from '@angular/core';\nimport { inferMimeType } from './infer-mime-type.util';\n\n@Pipe({\n name: 'inferMimeType',\n standalone: true,\n})\nexport class InferMimeTypePipe implements PipeTransform {\n transform = inferMimeType;\n}\n","import { NormalizedGameResultType } from './normalize-game-result-type.types';\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 { normalizeGameResultType } from './normalize-game-result-type.util';\n\n@Pipe({ name: 'etNormalizeGameResultType', standalone: true })\nexport class NormalizeGameResultTypePipe implements PipeTransform {\n transform = normalizeGameResultType;\n}\n","import { MatchListView } from '@ethlete/types';\nimport { MatchStateType } from './normalize-match-state.constants';\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 { normalizeMatchState } from './normalize-match-state.util';\n\n@Pipe({ name: 'etNormalizeMatchState', standalone: true })\nexport class NormalizeMatchStatePipe implements PipeTransform {\n transform = normalizeMatchState;\n}\n","import { MatchListView } from '@ethlete/types';\nimport { MatchStateType, normalizeMatchState } from '../normalize-match-state';\nimport { NormalizedMatchParticipant, NormalizedMatchParticipants } from './normalize-match-participants.types';\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 { normalizeMatchParticipants } from './normalize-match-participants.util';\n\n@Pipe({ name: 'etNormalizeMatchParticipants', standalone: true })\nexport class NormalizeMatchParticipantsPipe implements PipeTransform {\n transform = normalizeMatchParticipants;\n}\n","import { MatchListView, MatchRankingView } from '@ethlete/types';\nimport { MatchStateType, normalizeMatchState } from '../normalize-match-state';\nimport { NormalizedMatchScore } from './normalize-match-score.types';\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 { normalizeMatchScore } from './normalize-match-score.util';\n\n@Pipe({ name: 'etNormalizeMatchScore', standalone: true })\nexport class NormalizeMatchScorePipe implements PipeTransform {\n transform = normalizeMatchScore;\n}\n","import { StageType } from '@ethlete/types';\nimport { Translatable } from '../../types';\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';\nimport { normalizeMatchType } from './normalize-match-type.util';\n\n@Pipe({ name: 'etNormalizeMatchType', standalone: true })\nexport class NormalizeMatchTypePipe implements PipeTransform {\n transform = normalizeMatchType;\n}\n","import { TrackByFunction } from '@angular/core';\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 { Pipe, PipeTransform } from '@angular/core';\nimport { toArray } from './to-array.util';\n\n@Pipe({ name: 'toArray', standalone: true })\nexport class ToArrayPipe implements PipeTransform {\n transform = toArray;\n}\n","import { ElementRef, inject } from '@angular/core';\nimport { createComponentId, signalHostAttributes, signalHostClasses, signalHostStyles } 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 interface 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 interface 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 interface PropsAttachedElements {\n first: Signal<HTMLElement | null>;\n firstId: Signal<string | null>;\n get(id: string): HTMLElement | null;\n}\n\nexport interface PropsAttachedElementsInternal extends PropsAttachedElements {\n has: (id: string) => boolean;\n push: (id: string, element: HTMLElement) => void;\n remove: (id: string) => void;\n}\n\nexport interface 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 interface 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 interface 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 standalone: true,\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 { QueryList, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type NgClassType =\n | string\n | string[]\n | Set<string>\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [klass: string]: any;\n }\n | null\n | undefined;\n\nexport type HostDirective =\n | Type<unknown>\n | {\n directive: Type<unknown>;\n inputs?: string[];\n outputs?: string[];\n };\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","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const AT_LEAST_ONE_REQUIRED = 'atLeastOneRequired';\n\nexport interface 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","import { AbstractControl, ValidationErrors } from '@angular/forms';\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","import { AbstractControl, ValidationErrors } from '@angular/forms';\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","import { AbstractControl } from '@angular/forms';\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","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';\n\nexport * from './at-least-one-required.validator';\nexport * from './is-array-not-empty.validator';\nexport * from './is-email.validator';\nexport * from './must-match.validator';\n\nexport const Validators = {\n MustMatch,\n IsEmail,\n IsArrayNotEmpty,\n ValidateAtLeastOneRequired,\n} as const;\n"],"mappings":"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"}
|