devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
1 lines • 72.2 kB
Source Map (JSON)
{"version":3,"file":"devextreme-angular-core.mjs","sources":["../../../dist/core/template-host.ts","../../../dist/core/events-strategy.ts","../../../dist/core/watcher-helper.ts","../../../dist/core/utils.ts","../../../dist/core/template.ts","../../../dist/core/nested-option.ts","../../../dist/core/component.ts","../../../dist/core/integration.ts","../../../dist/core/iterable-differ-helper.ts","../../../dist/core/transfer-state.ts","../../../dist/core/index.ts","../../../dist/core/devextreme-angular-core.ts"],"sourcesContent":["/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport { DxTemplateDirective } from './template';\r\n\r\nexport interface IDxTemplateHost {\r\n setTemplate: (template: DxTemplateDirective) => any;\r\n}\r\n\r\nexport class DxTemplateHost {\r\n host: IDxTemplateHost;\r\n\r\n setHost(host: IDxTemplateHost) {\r\n this.host = host;\r\n }\r\n\r\n setTemplate(template: DxTemplateDirective) {\r\n this.host.setTemplate(template);\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport { EventEmitter, NgZone } from '@angular/core';\r\nimport { DxComponent } from './component';\r\n\r\ninterface IEventSubscription {\r\n handler: any;\r\n unsubscribe: () => void;\r\n}\r\nexport class NgEventsStrategy {\r\n private subscriptions: { [key: string]: IEventSubscription[] } = {};\r\n\r\n private events: { [key: string]: EventEmitter<any> } = {};\r\n\r\n constructor(private readonly instance: any, private readonly zone: NgZone) { }\r\n\r\n hasEvent(name: string) {\r\n return this.getEmitter(name).observers.length !== 0;\r\n }\r\n\r\n fireEvent(name, args) {\r\n const emitter = this.getEmitter(name);\r\n if (emitter.observers.length) {\r\n const internalSubs = this.subscriptions[name] || [];\r\n if (internalSubs.length === emitter.observers.length) {\r\n emitter.next(args && args[0]);\r\n } else {\r\n this.zone.run(() => emitter.next(args && args[0]));\r\n }\r\n }\r\n }\r\n\r\n on(name: string | Object, handler?: Function) {\r\n if (typeof name === 'string') {\r\n const eventSubscriptions = this.subscriptions[name] || [];\r\n const subcription = this.getEmitter(name).subscribe(handler?.bind(this.instance));\r\n const unsubscribe = subcription.unsubscribe.bind(subcription);\r\n\r\n eventSubscriptions.push({ handler, unsubscribe });\r\n this.subscriptions[name] = eventSubscriptions;\r\n } else {\r\n const handlersObj = name;\r\n\r\n Object.keys(handlersObj).forEach((event) => this.on(event, handlersObj[event]));\r\n }\r\n }\r\n\r\n off(name, handler) {\r\n const eventSubscriptions = this.subscriptions[name] || [];\r\n\r\n if (handler) {\r\n eventSubscriptions.some((subscription, i) => {\r\n if (subscription.handler === handler) {\r\n subscription.unsubscribe();\r\n eventSubscriptions.splice(i, 1);\r\n return true;\r\n }\r\n return false;\r\n });\r\n } else {\r\n eventSubscriptions.forEach((subscription) => {\r\n subscription.unsubscribe();\r\n });\r\n eventSubscriptions.splice(0, eventSubscriptions.length);\r\n }\r\n }\r\n\r\n dispose() {}\r\n\r\n public addEmitter(eventName: string, emitter: EventEmitter<any>) {\r\n this.events[eventName] = emitter;\r\n }\r\n\r\n private getEmitter(eventName: string): EventEmitter<any> {\r\n if (!this.events[eventName]) {\r\n this.events[eventName] = new EventEmitter();\r\n }\r\n return this.events[eventName];\r\n }\r\n}\r\n\r\nexport class EmitterHelper {\r\n lockedValueChangeEvent = false;\r\n\r\n constructor(private readonly zone: NgZone, private component: DxComponent) { }\r\n\r\n fireNgEvent(eventName: string, eventArgs: any) {\r\n if (this.lockedValueChangeEvent && eventName === 'valueChange') {\r\n return;\r\n }\r\n const emitter = this.component[eventName];\r\n if (emitter && emitter.observers.length) {\r\n this.zone.run(() => {\r\n emitter.next(eventArgs && eventArgs[0]);\r\n });\r\n }\r\n }\r\n\r\n createEmitters(events: any[]) {\r\n events.forEach((event) => {\r\n this.component[event.emit] = new EventEmitter();\r\n });\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport {\r\n Injectable,\r\n} from '@angular/core';\r\n\r\nimport { equalByValue } from 'devextreme/core/utils/common';\r\n\r\n@Injectable()\r\nexport class WatcherHelper {\r\n private readonly _watchers: any[] = [];\r\n\r\n getWatchMethod() {\r\n const watchMethod = (valueGetter, valueChangeCallback, options) => {\r\n let oldValue = valueGetter();\r\n options = options || {};\r\n\r\n if (!options.skipImmediate) {\r\n valueChangeCallback(oldValue);\r\n }\r\n\r\n const watcher = () => {\r\n const newValue = valueGetter();\r\n\r\n if (this._isDifferentValues(oldValue, newValue, options.deep)) {\r\n valueChangeCallback(newValue);\r\n oldValue = newValue;\r\n }\r\n };\r\n\r\n this._watchers.push(watcher);\r\n\r\n return () => {\r\n const index = this._watchers.indexOf(watcher);\r\n\r\n if (index !== -1) {\r\n this._watchers.splice(index, 1);\r\n }\r\n };\r\n };\r\n\r\n return watchMethod;\r\n }\r\n\r\n private _isDifferentValues(oldValue: any, newValue: any, deepCheck: boolean) {\r\n const comparableNewValue = this._toComparable(newValue);\r\n const comparableOldValue = this._toComparable(oldValue);\r\n const isObjectValues = comparableNewValue instanceof Object && comparableOldValue instanceof Object;\r\n\r\n if (deepCheck && isObjectValues) {\r\n return this._checkObjectsFields(newValue, oldValue);\r\n }\r\n return comparableNewValue !== comparableOldValue;\r\n }\r\n\r\n private _toComparable(value) {\r\n if (value instanceof Date) {\r\n return value.getTime();\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private _checkObjectsFields(checkingFromObject: Object, checkingToObject: Object) {\r\n for (const field in checkingFromObject) {\r\n const oldValue = this._toComparable(checkingFromObject[field]);\r\n const newValue = this._toComparable(checkingToObject[field]);\r\n let isEqualObjects = false;\r\n\r\n if (typeof oldValue === 'object' && typeof newValue === 'object') {\r\n isEqualObjects = equalByValue(oldValue, newValue);\r\n }\r\n if (oldValue !== newValue && !isEqualObjects) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n checkWatchers() {\r\n for (const watcher of this._watchers) {\r\n watcher();\r\n }\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nexport function getElement(element: any) {\r\n return element.get ? element.get(0) : element;\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\n/* tslint:disable:use-input-property-decorator */\r\n\r\nimport {\r\n Directive,\r\n NgModule,\r\n TemplateRef,\r\n ViewContainerRef,\r\n Input,\r\n Renderer2,\r\n NgZone,\r\n EmbeddedViewRef,\r\n} from '@angular/core';\r\n\r\nimport { one } from 'devextreme/events';\r\nimport domAdapter from 'devextreme/core/dom_adapter';\r\nimport { DxTemplateHost } from './template-host';\r\nimport { getElement } from './utils';\r\n\r\nexport const DX_TEMPLATE_WRAPPER_CLASS = 'dx-template-wrapper';\r\n\r\nexport class RenderData {\r\n model: any;\r\n\r\n index: number;\r\n\r\n container: any;\r\n}\r\n\r\n@Directive({\r\n selector: '[dxTemplate]',\r\n})\r\nexport class DxTemplateDirective {\r\n @Input()\r\n set dxTemplateOf(value) {\r\n this.name = value;\r\n }\r\n\r\n name: string;\r\n\r\n constructor(\r\n private readonly templateRef: TemplateRef<any>,\r\n private readonly viewContainerRef: ViewContainerRef,\r\n templateHost: DxTemplateHost,\r\n private readonly renderer: Renderer2,\r\n private readonly zone: NgZone,\r\n ) {\r\n templateHost.setTemplate(this);\r\n }\r\n\r\n private renderTemplate(renderData: RenderData): EmbeddedViewRef<any> {\r\n const childView = this.viewContainerRef.createEmbeddedView(this.templateRef, {\r\n $implicit: renderData.model,\r\n index: renderData.index,\r\n });\r\n\r\n const container = getElement(renderData.container);\r\n if (renderData.container) {\r\n childView.rootNodes.forEach((element) => {\r\n this.renderer.appendChild(container, element);\r\n });\r\n }\r\n\r\n return childView;\r\n }\r\n\r\n render(renderData: RenderData) {\r\n let childView;\r\n if (this.zone.isStable) {\r\n childView = this.zone.run(() => this.renderTemplate(renderData));\r\n } else {\r\n childView = this.renderTemplate(renderData);\r\n }\r\n // =========== WORKAROUND =============\r\n // https://github.com/angular/angular/issues/12243\r\n childView.detectChanges();\r\n // =========== /WORKAROUND =============\r\n\r\n childView.rootNodes.forEach((element) => {\r\n if (element.nodeType === 1) {\r\n domAdapter.setClass(element, DX_TEMPLATE_WRAPPER_CLASS, true);\r\n }\r\n\r\n one(element, 'dxremove', ({}, params) => {\r\n if (!params || !params._angularIntegration) {\r\n childView.destroy();\r\n }\r\n });\r\n });\r\n\r\n return childView.rootNodes;\r\n }\r\n}\r\n\r\n@NgModule({\r\n declarations: [DxTemplateDirective],\r\n exports: [DxTemplateDirective],\r\n})\r\nexport class DxTemplateModule { }\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport {\r\n Component, QueryList, ElementRef, Renderer2, EventEmitter,\r\n} from '@angular/core';\r\n\r\nimport render from 'devextreme/core/renderer';\r\nimport { triggerHandler } from 'devextreme/events';\r\nimport domAdapter from 'devextreme/core/dom_adapter';\r\nimport { getElement } from './utils';\r\nimport { DX_TEMPLATE_WRAPPER_CLASS } from './template';\r\n\r\nconst VISIBILITY_CHANGE_SELECTOR = 'dx-visibility-change-handler';\r\n\r\nexport interface INestedOptionContainer {\r\n instance: any;\r\n isLinked: boolean;\r\n removedNestedComponents: string[];\r\n optionChangedHandlers: EventEmitter<any>;\r\n recreatedNestedComponents: any[];\r\n resetOptions: (collectionName?: string) => void;\r\n isRecreated: (name: string) => boolean;\r\n}\r\n\r\nexport type IOptionPathGetter = () => string;\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport abstract class BaseNestedOption implements INestedOptionContainer, ICollectionNestedOptionContainer {\r\n protected _host: INestedOptionContainer;\r\n\r\n protected _hostOptionPath: IOptionPathGetter;\r\n\r\n private readonly _collectionContainerImpl: ICollectionNestedOptionContainer;\r\n\r\n protected _initialOptions = {};\r\n\r\n protected abstract get _optionPath(): string;\r\n protected abstract _fullOptionPath(): string;\r\n\r\n constructor() {\r\n this._collectionContainerImpl = new CollectionNestedOptionContainerImpl(this._setOption.bind(this), this._filterItems.bind(this));\r\n }\r\n\r\n protected _optionChangedHandler(e: any) {\r\n const fullOptionPath = this._fullOptionPath();\r\n\r\n if (e.fullName.indexOf(fullOptionPath) === 0) {\r\n const optionName = e.fullName.slice(fullOptionPath.length);\r\n const emitter = this[`${optionName}Change`];\r\n\r\n if (emitter) {\r\n emitter.next(e.value);\r\n }\r\n }\r\n }\r\n\r\n protected _createEventEmitters(events) {\r\n events.forEach((event) => {\r\n this[event.emit] = new EventEmitter();\r\n });\r\n }\r\n\r\n protected _getOption(name: string): any {\r\n if (this.isLinked) {\r\n return this.instance.option(this._fullOptionPath() + name);\r\n }\r\n return this._initialOptions[name];\r\n }\r\n\r\n protected _setOption(name: string, value: any) {\r\n if (this.isLinked) {\r\n const fullPath = this._fullOptionPath() + name;\r\n this.instance.option(fullPath, value);\r\n } else {\r\n this._initialOptions[name] = value;\r\n }\r\n }\r\n\r\n protected _addRemovedOption(name: string) {\r\n if (this.instance && this.removedNestedComponents) {\r\n this.removedNestedComponents.push(name);\r\n }\r\n }\r\n\r\n protected _deleteRemovedOptions(name: string) {\r\n if (this.instance && this.removedNestedComponents) {\r\n this.removedNestedComponents = this.removedNestedComponents.filter((x) => !x.startsWith(name));\r\n }\r\n }\r\n\r\n protected _addRecreatedComponent() {\r\n if (this.instance && this.recreatedNestedComponents) {\r\n this.recreatedNestedComponents.push({ getOptionPath: () => this._getOptionPath() });\r\n }\r\n }\r\n\r\n protected _getOptionPath() {\r\n return this._hostOptionPath() + this._optionPath;\r\n }\r\n\r\n setHost(host: INestedOptionContainer, optionPath: IOptionPathGetter) {\r\n this._host = host;\r\n this._hostOptionPath = optionPath;\r\n this.optionChangedHandlers.subscribe(this._optionChangedHandler.bind(this));\r\n }\r\n\r\n setChildren<T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>) {\r\n this.resetOptions(propertyName);\r\n return this._collectionContainerImpl.setChildren(propertyName, items);\r\n }\r\n\r\n _filterItems(items: QueryList<BaseNestedOption>) {\r\n return items.filter((item) => item !== this);\r\n }\r\n\r\n get instance() {\r\n return this._host && this._host.instance;\r\n }\r\n\r\n get resetOptions() {\r\n return this._host && this._host.resetOptions;\r\n }\r\n\r\n get isRecreated() {\r\n return this._host && this._host.isRecreated;\r\n }\r\n\r\n get removedNestedComponents() {\r\n return this._host && this._host.removedNestedComponents;\r\n }\r\n\r\n set removedNestedComponents(value) {\r\n this._host.removedNestedComponents = value;\r\n }\r\n\r\n get recreatedNestedComponents() {\r\n return this._host && this._host.recreatedNestedComponents;\r\n }\r\n\r\n set recreatedNestedComponents(value) {\r\n this._host.recreatedNestedComponents = value;\r\n }\r\n\r\n get isLinked() {\r\n return !!this.instance && this._host.isLinked;\r\n }\r\n\r\n get optionChangedHandlers() {\r\n return this._host && this._host.optionChangedHandlers;\r\n }\r\n}\r\n\r\nexport interface ICollectionNestedOptionContainer {\r\n setChildren: <T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>) => any;\r\n}\r\n\r\nexport class CollectionNestedOptionContainerImpl implements ICollectionNestedOptionContainer {\r\n private _activatedQueries = {};\r\n\r\n constructor(private readonly _setOption: Function, private readonly _filterItems?: Function) { }\r\n\r\n setChildren<T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>) {\r\n if (this._filterItems) {\r\n items = this._filterItems(items);\r\n }\r\n if (items.length) {\r\n this._activatedQueries[propertyName] = true;\r\n }\r\n if (this._activatedQueries[propertyName]) {\r\n const widgetItems = items.map((item, index) => {\r\n item._index = index;\r\n return item._value;\r\n });\r\n this._setOption(propertyName, widgetItems);\r\n }\r\n }\r\n}\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport abstract class NestedOption extends BaseNestedOption {\r\n setHost(host: INestedOptionContainer, optionPath: IOptionPathGetter) {\r\n super.setHost(host, optionPath);\r\n\r\n this._host[this._optionPath] = this._initialOptions;\r\n }\r\n\r\n protected _fullOptionPath() {\r\n return `${this._getOptionPath()}.`;\r\n }\r\n}\r\n\r\nexport interface ICollectionNestedOption {\r\n _index: number;\r\n _value: Object;\r\n}\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport abstract class CollectionNestedOption extends BaseNestedOption implements ICollectionNestedOption {\r\n _index: number;\r\n\r\n protected _fullOptionPath() {\r\n return `${this._getOptionPath()}[${this._index}].`;\r\n }\r\n\r\n get _value() {\r\n return this._initialOptions;\r\n }\r\n\r\n get isLinked() {\r\n return this._index !== undefined && !!this.instance && this._host.isLinked;\r\n }\r\n}\r\n\r\nexport interface IOptionWithTemplate extends BaseNestedOption {\r\n template: any;\r\n}\r\n\r\nconst triggerShownEvent = function (element) {\r\n const changeHandlers = [];\r\n\r\n if (!render(element).hasClass(VISIBILITY_CHANGE_SELECTOR)) {\r\n changeHandlers.push(element);\r\n }\r\n\r\n changeHandlers.push.apply(changeHandlers, element.querySelectorAll(`.${VISIBILITY_CHANGE_SELECTOR}`));\r\n\r\n for (let i = 0; i < changeHandlers.length; i++) {\r\n triggerHandler(changeHandlers[i], 'dxshown');\r\n }\r\n};\r\n\r\nexport function extractTemplate(option: IOptionWithTemplate, element: ElementRef, renderer: Renderer2, document: any) {\r\n if (!option.template === undefined || !element.nativeElement.hasChildNodes()) {\r\n return;\r\n }\r\n\r\n const childNodes = [].slice.call(element.nativeElement.childNodes);\r\n const userContent = childNodes.filter((n) => {\r\n if (n.tagName) {\r\n const tagNamePrefix = n.tagName.toLowerCase().substr(0, 3);\r\n return !(tagNamePrefix === 'dxi' || tagNamePrefix === 'dxo');\r\n }\r\n return n.nodeName !== '#comment' && n.textContent.replace(/\\s/g, '').length;\r\n });\r\n if (!userContent.length) {\r\n return;\r\n }\r\n\r\n option.template = {\r\n render: (renderData) => {\r\n const result = element.nativeElement;\r\n\r\n domAdapter.setClass(result, DX_TEMPLATE_WRAPPER_CLASS, true);\r\n\r\n if (renderData.container) {\r\n const container = getElement(renderData.container);\r\n const resultInContainer = container.contains(element.nativeElement);\r\n\r\n renderer.appendChild(container, element.nativeElement);\r\n\r\n if (!resultInContainer) {\r\n const resultInBody = document.body.contains(container);\r\n\r\n if (resultInBody) {\r\n triggerShownEvent(result);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n };\r\n}\r\n\r\nexport class NestedOptionHost {\r\n private _host: INestedOptionContainer;\r\n\r\n private _optionPath: IOptionPathGetter;\r\n\r\n getHost(): INestedOptionContainer {\r\n return this._host;\r\n }\r\n\r\n setHost(host: INestedOptionContainer, optionPath?: IOptionPathGetter) {\r\n this._host = host;\r\n this._optionPath = optionPath || (() => '');\r\n }\r\n\r\n setNestedOption(nestedOption: BaseNestedOption) {\r\n nestedOption.setHost(this._host, this._optionPath);\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport {\r\n TransferState,\r\n makeStateKey,\r\n Component,\r\n ElementRef,\r\n NgZone,\r\n QueryList,\r\n SimpleChanges,\r\n PLATFORM_ID,\r\n Inject,\r\n EventEmitter,\r\n\r\n OnChanges,\r\n OnInit,\r\n DoCheck,\r\n AfterContentChecked,\r\n AfterViewInit,\r\n AfterViewChecked,\r\n} from '@angular/core';\r\n\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\nimport domAdapter from 'devextreme/core/dom_adapter';\r\nimport { triggerHandler } from 'devextreme/events';\r\nimport config from 'devextreme/core/config';\r\n\r\nimport { DxTemplateDirective } from './template';\r\nimport { IDxTemplateHost, DxTemplateHost } from './template-host';\r\nimport { EmitterHelper, NgEventsStrategy } from './events-strategy';\r\nimport { WatcherHelper } from './watcher-helper';\r\n\r\nimport {\r\n INestedOptionContainer,\r\n ICollectionNestedOption,\r\n ICollectionNestedOptionContainer,\r\n CollectionNestedOptionContainerImpl,\r\n} from './nested-option';\r\n\r\nconfig({\r\n buyNowLink: 'https://go.devexpress.com/Licensing_Installer_Watermark_DevExtremeAngular.aspx',\r\n licensingDocLink: 'https://go.devexpress.com/Licensing_Documentation_DevExtremeAngular.aspx',\r\n});\r\n\r\nlet serverStateKey;\r\nexport const getServerStateKey = () => {\r\n if (!serverStateKey) {\r\n serverStateKey = makeStateKey<any>('DX_isPlatformServer');\r\n }\r\n\r\n return serverStateKey;\r\n};\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport abstract class DxComponent implements OnChanges, OnInit, DoCheck, AfterContentChecked, AfterViewInit, AfterViewChecked,\r\n INestedOptionContainer, ICollectionNestedOptionContainer, IDxTemplateHost {\r\n private _initialOptions: any = {};\r\n\r\n protected _optionsToUpdate: any = {};\r\n\r\n private readonly _collectionContainerImpl: ICollectionNestedOptionContainer;\r\n\r\n eventHelper: EmitterHelper;\r\n\r\n optionChangedHandlers: EventEmitter<any> = new EventEmitter();\r\n\r\n templates: DxTemplateDirective[];\r\n\r\n instance: any;\r\n\r\n isLinked = true;\r\n\r\n changedOptions = {};\r\n\r\n removedNestedComponents: string[] = [];\r\n\r\n recreatedNestedComponents: any[];\r\n\r\n widgetUpdateLocked = false;\r\n\r\n templateUpdateRequired = false;\r\n\r\n private _updateTemplates() {\r\n if (this.templates.length && this.templateUpdateRequired) {\r\n const updatedTemplates = {};\r\n this.templates.forEach((template) => {\r\n updatedTemplates[template.name] = template;\r\n });\r\n this.instance.option('integrationOptions.templates', updatedTemplates);\r\n this.templates = Object.values(updatedTemplates);\r\n this.templateUpdateRequired = false;\r\n }\r\n }\r\n\r\n private _initEvents() {\r\n this.instance.on('optionChanged', (e) => {\r\n this.changedOptions[e.name] = e.value;\r\n\r\n const value = e.name === e.fullName ? e.value : e.component.option(e.name);\r\n this.eventHelper.fireNgEvent(`${e.name}Change`, [value]);\r\n this.optionChangedHandlers.emit(e);\r\n });\r\n }\r\n\r\n private _initOptions() {\r\n this._initialOptions.integrationOptions.watchMethod = this.watcherHelper.getWatchMethod();\r\n }\r\n\r\n private _initPlatform() {\r\n if (this.transferState.hasKey(getServerStateKey())) {\r\n this._initialOptions.integrationOptions.renderedOnServer = this.transferState.get(getServerStateKey(), null);\r\n } else if (isPlatformServer(this.platformId)) {\r\n this.transferState.set(getServerStateKey(), true);\r\n }\r\n }\r\n\r\n protected _createEventEmitters(events) {\r\n const zone = this.ngZone;\r\n this.eventHelper.createEmitters(events);\r\n\r\n this._initialOptions.eventsStrategy = (instance) => {\r\n const strategy = new NgEventsStrategy(instance, zone);\r\n\r\n events.filter((event) => event.subscribe).forEach((event) => {\r\n strategy.addEmitter(event.subscribe, this[event.emit]);\r\n });\r\n\r\n return strategy;\r\n };\r\n\r\n this._initialOptions.nestedComponentOptions = function (component) {\r\n return {\r\n eventsStrategy: (instance) => new NgEventsStrategy(instance, zone),\r\n nestedComponentOptions: component.option('nestedComponentOptions'),\r\n };\r\n };\r\n }\r\n\r\n _shouldOptionChange(name: string, value: any) {\r\n if (this.changedOptions.hasOwnProperty(name)) {\r\n const prevValue = this.changedOptions[name];\r\n delete this.changedOptions[name];\r\n\r\n return value !== prevValue;\r\n }\r\n return true;\r\n }\r\n\r\n clearChangedOptions() {\r\n this.changedOptions = {};\r\n }\r\n\r\n protected _getOption(name: string) {\r\n return this.instance\r\n ? this.instance.option(name)\r\n : this._initialOptions[name];\r\n }\r\n\r\n lockWidgetUpdate() {\r\n if (!this.widgetUpdateLocked && this.instance) {\r\n this.instance.beginUpdate();\r\n this.widgetUpdateLocked = true;\r\n }\r\n }\r\n\r\n unlockWidgetUpdate() {\r\n if (this.widgetUpdateLocked) {\r\n this.widgetUpdateLocked = false;\r\n this.instance.endUpdate();\r\n }\r\n }\r\n\r\n protected _setOption(name: string, value: any) {\r\n this.lockWidgetUpdate();\r\n\r\n if (!this._shouldOptionChange(name, value)) {\r\n return;\r\n }\r\n\r\n if (this.instance) {\r\n this.instance.option(name, value);\r\n } else {\r\n this._initialOptions[name] = value;\r\n }\r\n }\r\n\r\n protected abstract _createInstance(element, options);\r\n\r\n protected _createWidget(element: any) {\r\n this._initialOptions.integrationOptions = {};\r\n this._initPlatform();\r\n this._initOptions();\r\n\r\n this._initialOptions.onInitializing = function () {\r\n this.beginUpdate();\r\n };\r\n this.instance = this._createInstance(element, this._initialOptions);\r\n this._initEvents();\r\n this._initialOptions = {};\r\n }\r\n\r\n protected _destroyWidget() {\r\n this.removedNestedComponents = [];\r\n if (this.instance) {\r\n const element = this.instance.element();\r\n triggerHandler(element, 'dxremove', { _angularIntegration: true });\r\n this.instance.dispose();\r\n domAdapter.removeElement(element);\r\n }\r\n }\r\n\r\n protected _setChildren(propertyName, value, className) {\r\n if (this.checkContentChildren(propertyName, value, className)) {\r\n this.setContentChildren(propertyName, value, className);\r\n this.setChildren(propertyName, value);\r\n }\r\n }\r\n\r\n constructor(\r\n protected element: ElementRef,\r\n private readonly ngZone: NgZone,\r\n templateHost: DxTemplateHost,\r\n private readonly watcherHelper: WatcherHelper,\r\n private readonly transferState: TransferState,\r\n @Inject(PLATFORM_ID) private readonly platformId: any,\r\n ) {\r\n this.templates = [];\r\n templateHost.setHost(this);\r\n this._collectionContainerImpl = new CollectionNestedOptionContainerImpl(this._setOption.bind(this));\r\n this.eventHelper = new EmitterHelper(ngZone, this);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n for (const key in changes) {\r\n const change = changes[key];\r\n if (change.currentValue !== this[key]) {\r\n this._optionsToUpdate[key] = changes[key].currentValue;\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this._createWidget(this.element.nativeElement);\r\n }\r\n\r\n ngDoCheck() {\r\n this.applyOptions();\r\n }\r\n\r\n ngAfterContentChecked() {\r\n this.applyOptions();\r\n this.resetOptions();\r\n this.unlockWidgetUpdate();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._updateTemplates();\r\n this.instance.endUpdate();\r\n this.recreatedNestedComponents = [];\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n this._updateTemplates();\r\n }\r\n\r\n applyOptions() {\r\n if (Object.keys(this._optionsToUpdate).length) {\r\n if (this.instance) {\r\n this.instance.option(this._optionsToUpdate);\r\n }\r\n this._optionsToUpdate = {};\r\n }\r\n }\r\n\r\n resetOptions(collectionName?: string) {\r\n if (this.instance) {\r\n this.removedNestedComponents.filter((option) => (option\r\n && !this.isRecreated(option)\r\n && collectionName ? option.startsWith(collectionName) : true))\r\n .forEach((option) => {\r\n this.instance.resetOption(option);\r\n });\r\n\r\n this.removedNestedComponents = [];\r\n this.recreatedNestedComponents = [];\r\n }\r\n }\r\n\r\n isRecreated(name: string): boolean {\r\n return this.recreatedNestedComponents\r\n && this.recreatedNestedComponents.some((nestedComponent) => nestedComponent.getOptionPath() === name);\r\n }\r\n\r\n setTemplate(template: DxTemplateDirective) {\r\n this.templates.push(template);\r\n this.templateUpdateRequired = true;\r\n }\r\n\r\n contentChildren = {};\r\n\r\n checkContentChildren<T>(propertyName: string, items: QueryList<T>, className: string) {\r\n if (this.contentChildren[propertyName] && this.contentChildren[propertyName] !== className) {\r\n if (items.length > 0) {\r\n if (console && console.warn) {\r\n console.warn(`In ${this.constructor.name}, \r\n the nested ${className} and ${this.contentChildren[propertyName]} components are incompatible. \r\n Ensure that all nested components in the content area match.`);\r\n }\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n setContentChildren<T>(propertyName: string, items: QueryList<T>, className: string) {\r\n if (items.length > 0) {\r\n this.contentChildren[propertyName] = className;\r\n }\r\n }\r\n\r\n setChildren<T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>) {\r\n this.resetOptions(propertyName);\r\n return this._collectionContainerImpl.setChildren(propertyName, items);\r\n }\r\n}\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport abstract class DxComponentExtension extends DxComponent implements OnInit, AfterViewInit {\r\n createInstance(element: any) {\r\n this._createWidget(element);\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._createWidget(this.element.nativeElement);\r\n this.instance.endUpdate();\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\n/* tslint:disable:max-line-length */\r\nimport {\r\n NgModule, Inject, NgZone, Optional, VERSION,\r\n} from '@angular/core';\r\nimport { DOCUMENT, XhrFactory } from '@angular/common';\r\nimport httpRequest from 'devextreme/core/http_request';\r\n\r\nimport domAdapter from 'devextreme/core/dom_adapter';\r\nimport readyCallbacks from 'devextreme/core/utils/ready_callbacks';\r\nimport eventsEngine from 'devextreme/common/core/events/core/events_engine';\r\n\r\nconst outsideZoneEvents = ['mousemove', 'mouseover', 'mouseout'];\r\nconst insideZoneEvents = ['mouseup', 'click', 'mousedown', 'transitionend', 'wheel'];\r\n\r\nlet originalAdd;\r\nlet callbacks = [];\r\nlet readyCallbackAdd = function (callback) {\r\n if (!originalAdd) {\r\n originalAdd = this.callBase.bind(this);\r\n }\r\n callbacks.push(callback);\r\n};\r\n\r\nreadyCallbacks.inject({\r\n add(callback) {\r\n return readyCallbackAdd.call(this, callback);\r\n },\r\n});\r\n\r\nlet doInjections = (document: any, ngZone: NgZone, xhrFactory: XhrFactory) => {\r\n if (Number(VERSION.major) < 12) {\r\n console.warn('Your version of Angular is not supported. Please update your project to version 12 or later.'\r\n + ' Please refer to the Angular Update Guide for more information: https://update.angular.io');\r\n }\r\n\r\n domAdapter.inject({\r\n _document: document,\r\n\r\n listen(...args) {\r\n const eventName = args[1];\r\n if (outsideZoneEvents.includes(eventName)) {\r\n return ngZone.runOutsideAngular(() => this.callBase.apply(this, args));\r\n }\r\n\r\n if (ngZone.isStable && insideZoneEvents.includes(eventName)) {\r\n return ngZone.run(() => this.callBase.apply(this, args));\r\n }\r\n\r\n return this.callBase.apply(this, args);\r\n },\r\n\r\n isElementNode(element) {\r\n return element && element.nodeType === 1;\r\n },\r\n\r\n isTextNode(element) {\r\n return element && element.nodeType === 3;\r\n },\r\n\r\n isDocument(element) {\r\n return element && element.nodeType === 9;\r\n },\r\n });\r\n\r\n httpRequest.inject({\r\n getXhr() {\r\n if (!xhrFactory) {\r\n return this.callBase.apply(this);\r\n }\r\n const _xhr = xhrFactory.build();\r\n if (!('withCredentials' in _xhr)) {\r\n (_xhr as any).withCredentials = false;\r\n }\r\n\r\n return _xhr;\r\n },\r\n });\r\n\r\n const runReadyCallbacksInZone = () => {\r\n ngZone.run(() => {\r\n eventsEngine.set({});\r\n callbacks.forEach((callback) => originalAdd.call(null, callback));\r\n callbacks = [];\r\n readyCallbacks.fire();\r\n });\r\n };\r\n\r\n runReadyCallbacksInZone();\r\n\r\n readyCallbackAdd = (callback) => ngZone.run(() => callback());\r\n doInjections = runReadyCallbacksInZone;\r\n};\r\n\r\n@NgModule({})\r\nexport class DxIntegrationModule {\r\n constructor(@Inject(DOCUMENT) document: any, ngZone: NgZone, @Optional() xhrFactory: XhrFactory) {\r\n doInjections(document, ngZone, xhrFactory);\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport {\r\n Injectable,\r\n SimpleChanges,\r\n IterableDiffers,\r\n} from '@angular/core';\r\n\r\nimport {\r\n DxComponent,\r\n} from './component';\r\n\r\nfunction isIterable(value) {\r\n return value && (typeof value[Symbol.iterator] === 'function');\r\n}\r\n@Injectable()\r\nexport class IterableDifferHelper {\r\n private _host: DxComponent;\r\n\r\n private _propertyDiffers: { [id: string]: any } = {};\r\n\r\n constructor(private readonly _differs: IterableDiffers) { }\r\n\r\n setHost(host: DxComponent) {\r\n this._host = host;\r\n }\r\n\r\n setup(prop: string, changes: SimpleChanges) {\r\n if (prop in changes) {\r\n const value = changes[prop].currentValue;\r\n this.setupSingle(prop, value);\r\n }\r\n }\r\n\r\n setupSingle(prop: string, value: any) {\r\n if (value && Array.isArray(value)) {\r\n if (!this._propertyDiffers[prop]) {\r\n try {\r\n this._propertyDiffers[prop] = this._differs.find(value).create(null);\r\n return true;\r\n } catch (e) { }\r\n }\r\n } else {\r\n delete this._propertyDiffers[prop];\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getChanges(prop: string, value: any) {\r\n if (this._propertyDiffers[prop]) {\r\n return this._propertyDiffers[prop].diff(value);\r\n }\r\n }\r\n\r\n checkChangedOptions(propName: string, hostValue: any) {\r\n return this._host.changedOptions[propName] === hostValue;\r\n }\r\n\r\n doCheck(prop: string) {\r\n if (this._propertyDiffers[prop] && this._host.instance) {\r\n const hostValue = this._host[prop];\r\n const changes = isIterable(hostValue) && this.getChanges(prop, hostValue);\r\n\r\n if (changes && !this.checkChangedOptions(prop, hostValue)) {\r\n this._host.lockWidgetUpdate();\r\n this._host.instance.option(prop, hostValue);\r\n }\r\n }\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nimport {\r\n PLATFORM_ID,\r\n Inject,\r\n NgModule,\r\n TransferState,\r\n makeStateKey,\r\n} from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport ajax from 'devextreme/core/utils/ajax';\r\nimport { Deferred } from 'devextreme/core/utils/deferred';\r\n\r\n@NgModule({})\r\n\r\nexport class DxServerTransferStateModule {\r\n constructor(private readonly state: TransferState, @Inject(PLATFORM_ID) private readonly platformId: any) {\r\n const that = this;\r\n\r\n ajax.inject({\r\n sendRequest(...args) {\r\n const key = makeStateKey(that.generateKey(args));\r\n const cachedData = that.state.get(key, null as any);\r\n\r\n if (isPlatformServer(that.platformId)) {\r\n const result = this.callBase.apply(this, args);\r\n result.always((data, status) => {\r\n const dataForCache = {\r\n data,\r\n status,\r\n };\r\n that.state.set(key, dataForCache as any);\r\n });\r\n return result;\r\n }\r\n if (cachedData) {\r\n const d = (Deferred as any)();\r\n d.resolve(cachedData.data, cachedData.status);\r\n that.state.set(key, null as any);\r\n\r\n return d.promise();\r\n }\r\n return this.callBase.apply(this, args);\r\n },\r\n });\r\n }\r\n\r\n generateKey(args) {\r\n let keyValue = '';\r\n for (const key in args) {\r\n if (typeof args[key] === 'object') {\r\n const objKey = this.generateKey(args[key]);\r\n keyValue += key + objKey;\r\n } else {\r\n keyValue += key + args[key];\r\n }\r\n }\r\n\r\n return keyValue;\r\n }\r\n}\r\n","/*!\n * devextreme-angular\n * Version: 24.2.6\n * Build date: Mon Mar 17 2025\n *\n * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED\n *\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file in the root of the project for details.\n *\n * https://github.com/DevExpress/devextreme-angular\n */\n\nexport * from './component';\r\nexport * from './events-strategy';\r\nexport * from './integration';\r\nexport * from './iterable-differ-helper';\r\nexport * from './nested-option';\r\nexport * from './template-host';\r\nexport * from './template';\r\nexport * from './transfer-state';\r\nexport * from './utils';\r\nexport * from './watcher-helper';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DxTemplateHost"],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAWG;MAQU,cAAc,CAAA;AACzB,IAAA,IAAI,CAAkB;AAEtB,IAAA,OAAO,CAAC,IAAqB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,WAAW,CAAC,QAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KACjC;AACF;;AC7BD;;;;;;;;;;;AAWG;MASU,gBAAgB,CAAA;AAKE,IAAA,QAAA,CAAA;AAAgC,IAAA,IAAA,CAAA;IAJrD,aAAa,GAA4C,EAAE,CAAC;IAE5D,MAAM,GAAyC,EAAE,CAAC;IAE1D,WAA6B,CAAA,QAAa,EAAmB,IAAY,EAAA;QAA5C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAK;QAAmB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAK;AAE9E,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;KACrD;IAED,SAAS,CAAC,IAAI,EAAE,IAAI,EAAA;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;gBACpD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD;SACF;KACF;IAED,EAAE,CAAC,IAAqB,EAAE,OAAkB,EAAA;AAC1C,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClF,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE9D,kBAAkB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC;SAC/C;aAAM;YACL,MAAM,WAAW,GAAG,IAAI,CAAC;YAEzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACjF;KACF;IAED,GAAG,CAAC,IAAI,EAAE,OAAO,EAAA;QACf,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAE1D,IAAI,OAAO,EAAE;YACX,kBAAkB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,KAAI;AAC1C,gBAAA,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,EAAE;oBACpC,YAAY,CAAC,WAAW,EAAE,CAAC;AAC3B,oBAAA,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,oBAAA,OAAO,IAAI,CAAC;iBACb;AACD,gBAAA,OAAO,KAAK,CAAC;AACf,aAAC,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;gBAC1C,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,aAAC,CAAC,CAAC;YACH,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;SACzD;KACF;AAED,IAAA,OAAO,MAAK;IAEL,UAAU,CAAC,SAAiB,EAAE,OAA0B,EAAA;AAC7D,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;KAClC;AAEO,IAAA,UAAU,CAAC,SAAiB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;SAC7C;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KAC/B;AACF,CAAA;MAEY,aAAa,CAAA;AAGK,IAAA,IAAA,CAAA;AAAsB,IAAA,SAAA,CAAA;IAFnD,sBAAsB,GAAG,KAAK,CAAC;IAE/B,WAA6B,CAAA,IAAY,EAAU,SAAsB,EAAA;QAA5C,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAAU,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;KAAK;IAE9E,WAAW,CAAC,SAAiB,EAAE,SAAc,EAAA;QAC3C,IAAI,IAAI,CAAC,sBAAsB,IAAI,SAAS,KAAK,aAAa,EAAE;YAC9D,OAAO;SACR;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;gBACjB,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,aAAC,CAAC,CAAC;SACJ;KACF;AAED,IAAA,cAAc,CAAC,MAAa,EAAA;AAC1B,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;AAClD,SAAC,CAAC,CAAC;KACJ;AACF;;AClHD;;;;;;;;;;;AAWG;MASU,aAAa,CAAA;IACP,SAAS,GAAU,EAAE,CAAC;IAEvC,cAAc,GAAA;QACZ,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,OAAO,KAAI;AAChE,YAAA,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;AAC7B,YAAA,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAExB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;gBAC1B,mBAAmB,CAAC,QAAQ,CAAC,CAAC;aAC/B;YAED,MAAM,OAAO,GAAG,MAAK;AACnB,gBAAA,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;AAE/B,gBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC7D,mBAAmB,CAAC,QAAQ,CAAC,CAAC;oBAC9B,QAAQ,GAAG,QAAQ,CAAC;iBACrB;AACH,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE7B,YAAA,OAAO,MAAK;gBACV,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9C,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,OAAO,WAAW,CAAC;KACpB;AAEO,IAAA,kBAAkB,CAAC,QAAa,EAAE,QAAa,EAAE,SAAkB,EAAA;QACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,kBAAkB,YAAY,MAAM,IAAI,kBAAkB,YAAY,MAAM,CAAC;AAEpG,QAAA,IAAI,SAAS,IAAI,cAAc,EAAE;YAC/B,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACrD;QACD,OAAO,kBAAkB,KAAK,kBAAkB,CAAC;KAClD;AAEO,IAAA,aAAa,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;SACxB;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,mBAAmB,CAAC,kBAA0B,EAAE,gBAAwB,EAAA;AAC9E,QAAA,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,cAAc,GAAG,KAAK,CAAC;YAE3B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChE,gBAAA,cAAc,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACnD;AACD,YAAA,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC5C,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;KACF;IAED,aAAa,GAAA;AACX,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,OAAO,EAAE,CAAC;SACX;KACF;2HAzEU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+HAAb,aAAa,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;;;ACnBX;;;;;;;;;;;AAWG;AAEG,SAAU,UAAU,CAAC,OAAY,EAAA;AACrC,IAAA,OAAO,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;AAChD;;ACfA;;;;;;;;;;;AAWG;AAEH;AAkBO,MAAM,yBAAyB,GAAG,sBAAsB;MAElD,UAAU,CAAA;AACrB,IAAA,KAAK,CAAM;AAEX,IAAA,KAAK,CAAS;AAEd,IAAA,SAAS,CAAM;AAChB,CAAA;MAKY,mBAAmB,CAAA;AASX,IAAA,WAAA,CAAA;AACA,IAAA,gBAAA,CAAA;AAEA,IAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA;IAZnB,IACI,YAAY,CAAC,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,CAAS;IAEb,WACmB,CAAA,WAA6B,EAC7B,gBAAkC,EACnD,YAA4B,EACX,QAAmB,EACnB,IAAY,EAAA;QAJZ,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;QAC7B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAElC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AAE7B,QAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KAChC;AAEO,IAAA,cAAc,CAAC,UAAsB,EAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE;YAC3E,SAAS,EAAE,UAAU,CAAC,KAAK;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;AACxB,SAAA,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACnD,QAAA,IAAI,UAAU,CAAC,SAAS,EAAE;YACxB,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBACtC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChD,aAAC,CAAC,CAAC;SACJ;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,MAAM,CAAC,UAAsB,EAAA;AAC3B,QAAA,IAAI,SAAS,CAAC;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;SAClE;aAAM;AACL,YAAA,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;SAC7C;;;QAGD,SAAS,CAAC,aAAa,EAAE,CAAC;;QAG1B,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;gBAC1B,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC;aAC/D;YAED,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAI;gBACtC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;oBAC1C,SAAS,CAAC,OAAO,EAAE,CAAC;iBACrB;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC,SAAS,CAAC;KAC5B;2HA3DU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;+GAAnB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA,CAAA;sLAGK,YAAY,EAAA,CAAA;sBADf,KAAK;;MAiEK,gBAAgB,CAAA;2HAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4HAAhB,gBAAgB,EAAA,YAAA,EAAA,CAlEhB,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAAnB,mBAAmB,CAAA,EAAA,CAAA,CAAA;4HAkEnB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC/B,iBAAA,CAAA;;;AC7GD;;;;;;;;;;;AAWG;AAYH,MAAM,0BAA0B,GAAG,8BAA8B,CAAC;MAiB5C,gBAAgB,CAAA;AAC1B,IAAA,KAAK,CAAyB;AAE9B,IAAA,eAAe,CAAoB;AAE5B,IAAA,wBAAwB,CAAmC;IAElE,eAAe,GAAG,EAAE,CAAC;AAK/B,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,wBAAwB,GAAG,IAAI,mCAAmC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnI;AAES,IAAA,qBAAqB,CAAC,CAAM,EAAA;AACpC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,UAAU,CAAA,MAAA,CAAQ,CAAC,CAAC;YAE5C,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aACvB;SACF;KACF;AAES,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACnC,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;AAES,IAAA,UAAU,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;SAC5D;AACD,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnC;IAES,UAAU,CAAC,IAAY,EAAE,KAAU,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SACvC;aAAM;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SACpC;KACF;AAES,IAAA,iBAAiB,CAAC,IAAY,EAAA;QACtC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE;AACjD,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzC;KACF;AAES,IAAA,qBAAqB,CAAC,IAAY,EAAA;QAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE;YACjD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,C