UNPKG

devextreme-angular

Version:

DevExtreme UI and Visualization Components for Angular

1 lines • 200 kB
{"version":3,"file":"devextreme-angular-ui-form-nested.mjs","sources":["../../../dist/ui/form/nested/ai-options.ts","../../../dist/ui/form/nested/async-rule-dxi.ts","../../../dist/ui/form/nested/button-item-dxi.ts","../../../dist/ui/form/nested/button-options.ts","../../../dist/ui/form/nested/col-count-by-screen.ts","../../../dist/ui/form/nested/compare-rule-dxi.ts","../../../dist/ui/form/nested/custom-rule-dxi.ts","../../../dist/ui/form/nested/email-rule-dxi.ts","../../../dist/ui/form/nested/empty-item-dxi.ts","../../../dist/ui/form/nested/group-item-dxi.ts","../../../dist/ui/form/nested/item-dxi.ts","../../../dist/ui/form/nested/label.ts","../../../dist/ui/form/nested/numeric-rule-dxi.ts","../../../dist/ui/form/nested/pattern-rule-dxi.ts","../../../dist/ui/form/nested/range-rule-dxi.ts","../../../dist/ui/form/nested/required-rule-dxi.ts","../../../dist/ui/form/nested/simple-item-dxi.ts","../../../dist/ui/form/nested/string-length-rule-dxi.ts","../../../dist/ui/form/nested/tab-dxi.ts","../../../dist/ui/form/nested/tab-panel-options-item-dxi.ts","../../../dist/ui/form/nested/tab-panel-options.ts","../../../dist/ui/form/nested/tabbed-item-dxi.ts","../../../dist/ui/form/nested/validation-rule-dxi.ts","../../../dist/ui/form/nested/index.ts","../../../dist/ui/form/nested/devextreme-angular-ui-form-nested.ts"],"sourcesContent":["/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n OnInit,\n OnDestroy,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-form-ai-options',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoFormAIOptionsComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get disabled(): boolean {\n return this._getOption('disabled');\n }\n set disabled(value: boolean) {\n this._setOption('disabled', value);\n }\n\n @Input()\n get instruction(): string | undefined {\n return this._getOption('instruction');\n }\n set instruction(value: string | undefined) {\n this._setOption('instruction', value);\n }\n\n\n protected get _optionPath() {\n return 'aiOptions';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n }\n\n\n ngOnInit() {\n this._addRecreatedComponent();\n }\n\n ngOnDestroy() {\n this._addRemovedOption(this._getOptionPath());\n }\n\n\n}\n\n@NgModule({\n imports: [\n DxoFormAIOptionsComponent\n ],\n exports: [\n DxoFormAIOptionsComponent\n ],\n})\nexport class DxoFormAIOptionsModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\nimport type { ValidationRuleType } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_validationRules } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-async-rule',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_validationRules,\n useExisting: DxiFormAsyncRuleComponent,\n }\n ]\n})\nexport class DxiFormAsyncRuleComponent extends CollectionNestedOption {\n @Input()\n get ignoreEmptyValue(): boolean {\n return this._getOption('ignoreEmptyValue');\n }\n set ignoreEmptyValue(value: boolean) {\n this._setOption('ignoreEmptyValue', value);\n }\n\n @Input()\n get message(): string {\n return this._getOption('message');\n }\n set message(value: string) {\n this._setOption('message', value);\n }\n\n @Input()\n get reevaluate(): boolean {\n return this._getOption('reevaluate');\n }\n set reevaluate(value: boolean) {\n this._setOption('reevaluate', value);\n }\n\n @Input()\n get type(): ValidationRuleType {\n return this._getOption('type');\n }\n set type(value: ValidationRuleType) {\n this._setOption('type', value);\n }\n\n @Input()\n get validationCallback(): ((options: { column: Record<string, any>, data: Record<string, any>, formItem: Record<string, any>, rule: Record<string, any>, validator: Record<string, any>, value: any }) => any) {\n return this._getOption('validationCallback');\n }\n set validationCallback(value: ((options: { column: Record<string, any>, data: Record<string, any>, formItem: Record<string, any>, rule: Record<string, any>, validator: Record<string, any>, value: any }) => any)) {\n this._setOption('validationCallback', value);\n }\n\n\n protected get _optionPath() {\n return 'validationRules';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n this.type = 'async';\n \n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormAsyncRuleComponent\n ],\n exports: [\n DxiFormAsyncRuleComponent\n ],\n})\nexport class DxiFormAsyncRuleModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\nimport type { dxButtonOptions } from 'devextreme/ui/button';\nimport type { HorizontalAlignment, VerticalAlignment } from 'devextreme/common';\nimport type { FormItemType, FormPredefinedButtonItem } from 'devextreme/ui/form';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_items } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-button-item',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_items,\n useExisting: DxiFormButtonItemComponent,\n }\n ]\n})\nexport class DxiFormButtonItemComponent extends CollectionNestedOption {\n @Input()\n get buttonOptions(): dxButtonOptions | undefined {\n return this._getOption('buttonOptions');\n }\n set buttonOptions(value: dxButtonOptions | undefined) {\n this._setOption('buttonOptions', value);\n }\n\n @Input()\n get colSpan(): number | undefined {\n return this._getOption('colSpan');\n }\n set colSpan(value: number | undefined) {\n this._setOption('colSpan', value);\n }\n\n @Input()\n get cssClass(): string | undefined {\n return this._getOption('cssClass');\n }\n set cssClass(value: string | undefined) {\n this._setOption('cssClass', value);\n }\n\n @Input()\n get horizontalAlignment(): HorizontalAlignment {\n return this._getOption('horizontalAlignment');\n }\n set horizontalAlignment(value: HorizontalAlignment) {\n this._setOption('horizontalAlignment', value);\n }\n\n @Input()\n get itemType(): FormItemType {\n return this._getOption('itemType');\n }\n set itemType(value: FormItemType) {\n this._setOption('itemType', value);\n }\n\n @Input()\n get name(): FormPredefinedButtonItem | string | undefined {\n return this._getOption('name');\n }\n set name(value: FormPredefinedButtonItem | string | undefined) {\n this._setOption('name', value);\n }\n\n @Input()\n get verticalAlignment(): VerticalAlignment {\n return this._getOption('verticalAlignment');\n }\n set verticalAlignment(value: VerticalAlignment) {\n this._setOption('verticalAlignment', value);\n }\n\n @Input()\n get visible(): boolean {\n return this._getOption('visible');\n }\n set visible(value: boolean) {\n this._setOption('visible', value);\n }\n\n @Input()\n get visibleIndex(): number | undefined {\n return this._getOption('visibleIndex');\n }\n set visibleIndex(value: number | undefined) {\n this._setOption('visibleIndex', value);\n }\n\n\n protected get _optionPath() {\n return 'items';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n this.itemType = 'button';\n \n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormButtonItemComponent\n ],\n exports: [\n DxiFormButtonItemComponent\n ],\n})\nexport class DxiFormButtonItemModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n OnInit,\n OnDestroy,\n NgModule,\n Host,\n ElementRef,\n Renderer2,\n Inject,\n AfterViewInit,\n SkipSelf,\n Input\n} from '@angular/core';\n\nimport { DOCUMENT } from '@angular/common';\n\n\nimport type { ClickEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, OptionChangedEvent } from 'devextreme/ui/button';\nimport type { ButtonStyle, ButtonType } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n extractTemplate,\n DxTemplateDirective,\n IDxTemplateHost,\n DxTemplateHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-form-button-options',\n template: '<ng-content></ng-content>',\n styles: [':host { display: block; }'],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost, DxTemplateHost]\n})\nexport class DxoFormButtonOptionsComponent extends NestedOption implements AfterViewInit, OnDestroy, OnInit,\n IDxTemplateHost {\n @Input()\n get accessKey(): string | undefined {\n return this._getOption('accessKey');\n }\n set accessKey(value: string | undefined) {\n this._setOption('accessKey', value);\n }\n\n @Input()\n get activeStateEnabled(): boolean {\n return this._getOption('activeStateEnabled');\n }\n set activeStateEnabled(value: boolean) {\n this._setOption('activeStateEnabled', value);\n }\n\n @Input()\n get disabled(): boolean {\n return this._getOption('disabled');\n }\n set disabled(value: boolean) {\n this._setOption('disabled', value);\n }\n\n @Input()\n get elementAttr(): Record<string, any> {\n return this._getOption('elementAttr');\n }\n set elementAttr(value: Record<string, any>) {\n this._setOption('elementAttr', value);\n }\n\n @Input()\n get focusStateEnabled(): boolean {\n return this._getOption('focusStateEnabled');\n }\n set focusStateEnabled(value: boolean) {\n this._setOption('focusStateEnabled', value);\n }\n\n @Input()\n get height(): number | string | undefined {\n return this._getOption('height');\n }\n set height(value: number | string | undefined) {\n this._setOption('height', value);\n }\n\n @Input()\n get hint(): string | undefined {\n return this._getOption('hint');\n }\n set hint(value: string | undefined) {\n this._setOption('hint', value);\n }\n\n @Input()\n get hoverStateEnabled(): boolean {\n return this._getOption('hoverStateEnabled');\n }\n set hoverStateEnabled(value: boolean) {\n this._setOption('hoverStateEnabled', value);\n }\n\n @Input()\n get icon(): string {\n return this._getOption('icon');\n }\n set icon(value: string) {\n this._setOption('icon', value);\n }\n\n @Input()\n get onClick(): ((e: ClickEvent) => void) {\n return this._getOption('onClick');\n }\n set onClick(value: ((e: ClickEvent) => void)) {\n this._setOption('onClick', value);\n }\n\n @Input()\n get onContentReady(): ((e: ContentReadyEvent) => void) {\n return this._getOption('onContentReady');\n }\n set onContentReady(value: ((e: ContentReadyEvent) => void)) {\n this._setOption('onContentReady', value);\n }\n\n @Input()\n get onDisposing(): ((e: DisposingEvent) => void) {\n return this._getOption('onDisposing');\n }\n set onDisposing(value: ((e: DisposingEvent) => void)) {\n this._setOption('onDisposing', value);\n }\n\n @Input()\n get onInitialized(): ((e: InitializedEvent) => void) {\n return this._getOption('onInitialized');\n }\n set onInitialized(value: ((e: InitializedEvent) => void)) {\n this._setOption('onInitialized', value);\n }\n\n @Input()\n get onOptionChanged(): ((e: OptionChangedEvent) => void) {\n return this._getOption('onOptionChanged');\n }\n set onOptionChanged(value: ((e: OptionChangedEvent) => void)) {\n this._setOption('onOptionChanged', value);\n }\n\n @Input()\n get rtlEnabled(): boolean {\n return this._getOption('rtlEnabled');\n }\n set rtlEnabled(value: boolean) {\n this._setOption('rtlEnabled', value);\n }\n\n @Input()\n get stylingMode(): ButtonStyle {\n return this._getOption('stylingMode');\n }\n set stylingMode(value: ButtonStyle) {\n this._setOption('stylingMode', value);\n }\n\n @Input()\n get tabIndex(): number {\n return this._getOption('tabIndex');\n }\n set tabIndex(value: number) {\n this._setOption('tabIndex', value);\n }\n\n @Input()\n get template(): any {\n return this._getOption('template');\n }\n set template(value: any) {\n this._setOption('template', value);\n }\n\n @Input()\n get text(): string {\n return this._getOption('text');\n }\n set text(value: string) {\n this._setOption('text', value);\n }\n\n @Input()\n get type(): ButtonType | string {\n return this._getOption('type');\n }\n set type(value: ButtonType | string) {\n this._setOption('type', value);\n }\n\n @Input()\n get useSubmitBehavior(): boolean {\n return this._getOption('useSubmitBehavior');\n }\n set useSubmitBehavior(value: boolean) {\n this._setOption('useSubmitBehavior', value);\n }\n\n @Input()\n get validationGroup(): string | undefined {\n return this._getOption('validationGroup');\n }\n set validationGroup(value: string | undefined) {\n this._setOption('validationGroup', value);\n }\n\n @Input()\n get visible(): boolean {\n return this._getOption('visible');\n }\n set visible(value: boolean) {\n this._setOption('visible', value);\n }\n\n @Input()\n get width(): number | string | undefined {\n return this._getOption('width');\n }\n set width(value: number | string | undefined) {\n this._setOption('width', value);\n }\n\n\n protected get _optionPath() {\n return 'buttonOptions';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: any,\n @Host() templateHost: DxTemplateHost,\n private element: ElementRef) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n templateHost.setHost(this);\n }\n\n setTemplate(template: DxTemplateDirective) {\n this.template = template;\n }\n ngAfterViewInit() {\n extractTemplate(this, this.element, this.renderer, this.document);\n }\n\n\n ngOnInit() {\n this._addRecreatedComponent();\n }\n\n ngOnDestroy() {\n this._addRemovedOption(this._getOptionPath());\n }\n\n\n}\n\n@NgModule({\n imports: [\n DxoFormButtonOptionsComponent\n ],\n exports: [\n DxoFormButtonOptionsComponent\n ],\n})\nexport class DxoFormButtonOptionsModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n OnInit,\n OnDestroy,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-form-col-count-by-screen',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoFormColCountByScreenComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get lg(): number | undefined {\n return this._getOption('lg');\n }\n set lg(value: number | undefined) {\n this._setOption('lg', value);\n }\n\n @Input()\n get md(): number | undefined {\n return this._getOption('md');\n }\n set md(value: number | undefined) {\n this._setOption('md', value);\n }\n\n @Input()\n get sm(): number | undefined {\n return this._getOption('sm');\n }\n set sm(value: number | undefined) {\n this._setOption('sm', value);\n }\n\n @Input()\n get xs(): number | undefined {\n return this._getOption('xs');\n }\n set xs(value: number | undefined) {\n this._setOption('xs', value);\n }\n\n\n protected get _optionPath() {\n return 'colCountByScreen';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n }\n\n\n ngOnInit() {\n this._addRecreatedComponent();\n }\n\n ngOnDestroy() {\n this._addRemovedOption(this._getOptionPath());\n }\n\n\n}\n\n@NgModule({\n imports: [\n DxoFormColCountByScreenComponent\n ],\n exports: [\n DxoFormColCountByScreenComponent\n ],\n})\nexport class DxoFormColCountByScreenModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\nimport type { ComparisonOperator, ValidationRuleType } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_validationRules } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-compare-rule',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_validationRules,\n useExisting: DxiFormCompareRuleComponent,\n }\n ]\n})\nexport class DxiFormCompareRuleComponent extends CollectionNestedOption {\n @Input()\n get comparisonTarget(): Function {\n return this._getOption('comparisonTarget');\n }\n set comparisonTarget(value: Function) {\n this._setOption('comparisonTarget', value);\n }\n\n @Input()\n get comparisonType(): ComparisonOperator {\n return this._getOption('comparisonType');\n }\n set comparisonType(value: ComparisonOperator) {\n this._setOption('comparisonType', value);\n }\n\n @Input()\n get ignoreEmptyValue(): boolean {\n return this._getOption('ignoreEmptyValue');\n }\n set ignoreEmptyValue(value: boolean) {\n this._setOption('ignoreEmptyValue', value);\n }\n\n @Input()\n get message(): string {\n return this._getOption('message');\n }\n set message(value: string) {\n this._setOption('message', value);\n }\n\n @Input()\n get type(): ValidationRuleType {\n return this._getOption('type');\n }\n set type(value: ValidationRuleType) {\n this._setOption('type', value);\n }\n\n\n protected get _optionPath() {\n return 'validationRules';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n this.type = 'compare';\n \n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormCompareRuleComponent\n ],\n exports: [\n DxiFormCompareRuleComponent\n ],\n})\nexport class DxiFormCompareRuleModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\nimport type { ValidationRuleType } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_validationRules } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-custom-rule',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_validationRules,\n useExisting: DxiFormCustomRuleComponent,\n }\n ]\n})\nexport class DxiFormCustomRuleComponent extends CollectionNestedOption {\n @Input()\n get ignoreEmptyValue(): boolean {\n return this._getOption('ignoreEmptyValue');\n }\n set ignoreEmptyValue(value: boolean) {\n this._setOption('ignoreEmptyValue', value);\n }\n\n @Input()\n get message(): string {\n return this._getOption('message');\n }\n set message(value: string) {\n this._setOption('message', value);\n }\n\n @Input()\n get reevaluate(): boolean {\n return this._getOption('reevaluate');\n }\n set reevaluate(value: boolean) {\n this._setOption('reevaluate', value);\n }\n\n @Input()\n get type(): ValidationRuleType {\n return this._getOption('type');\n }\n set type(value: ValidationRuleType) {\n this._setOption('type', value);\n }\n\n @Input()\n get validationCallback(): ((options: { column: Record<string, any>, data: Record<string, any>, formItem: Record<string, any>, rule: Record<string, any>, validator: Record<string, any>, value: any }) => boolean) {\n return this._getOption('validationCallback');\n }\n set validationCallback(value: ((options: { column: Record<string, any>, data: Record<string, any>, formItem: Record<string, any>, rule: Record<string, any>, validator: Record<string, any>, value: any }) => boolean)) {\n this._setOption('validationCallback', value);\n }\n\n\n protected get _optionPath() {\n return 'validationRules';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n this.type = 'custom';\n \n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormCustomRuleComponent\n ],\n exports: [\n DxiFormCustomRuleComponent\n ],\n})\nexport class DxiFormCustomRuleModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\nimport type { ValidationRuleType } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_validationRules } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-email-rule',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_validationRules,\n useExisting: DxiFormEmailRuleComponent,\n }\n ]\n})\nexport class DxiFormEmailRuleComponent extends CollectionNestedOption {\n @Input()\n get ignoreEmptyValue(): boolean {\n return this._getOption('ignoreEmptyValue');\n }\n set ignoreEmptyValue(value: boolean) {\n this._setOption('ignoreEmptyValue', value);\n }\n\n @Input()\n get message(): string {\n return this._getOption('message');\n }\n set message(value: string) {\n this._setOption('message', value);\n }\n\n @Input()\n get type(): ValidationRuleType {\n return this._getOption('type');\n }\n set type(value: ValidationRuleType) {\n this._setOption('type', value);\n }\n\n\n protected get _optionPath() {\n return 'validationRules';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n this.type = 'email';\n \n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormEmailRuleComponent\n ],\n exports: [\n DxiFormEmailRuleComponent\n ],\n})\nexport class DxiFormEmailRuleModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n SkipSelf,\n Input\n} from '@angular/core';\n\n\n\n\nimport type { FormItemType } from 'devextreme/ui/form';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_items } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-empty-item',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_items,\n useExisting: DxiFormEmptyItemComponent,\n }\n ]\n})\nexport class DxiFormEmptyItemComponent extends CollectionNestedOption {\n @Input()\n get colSpan(): number | undefined {\n return this._getOption('colSpan');\n }\n set colSpan(value: number | undefined) {\n this._setOption('colSpan', value);\n }\n\n @Input()\n get cssClass(): string | undefined {\n return this._getOption('cssClass');\n }\n set cssClass(value: string | undefined) {\n this._setOption('cssClass', value);\n }\n\n @Input()\n get itemType(): FormItemType {\n return this._getOption('itemType');\n }\n set itemType(value: FormItemType) {\n this._setOption('itemType', value);\n }\n\n @Input()\n get name(): string | undefined {\n return this._getOption('name');\n }\n set name(value: string | undefined) {\n this._setOption('name', value);\n }\n\n @Input()\n get visible(): boolean {\n return this._getOption('visible');\n }\n set visible(value: boolean) {\n this._setOption('visible', value);\n }\n\n @Input()\n get visibleIndex(): number | undefined {\n return this._getOption('visibleIndex');\n }\n set visibleIndex(value: number | undefined) {\n this._setOption('visibleIndex', value);\n }\n\n\n protected get _optionPath() {\n return 'items';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n this.itemType = 'empty';\n \n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormEmptyItemComponent\n ],\n exports: [\n DxiFormEmptyItemComponent\n ],\n})\nexport class DxiFormEmptyItemModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n ElementRef,\n Renderer2,\n Inject,\n AfterViewInit,\n SkipSelf,\n Input,\n ContentChildren,\n QueryList\n} from '@angular/core';\n\nimport { DOCUMENT } from '@angular/common';\n\n\nimport type { dxFormButtonItem, dxFormEmptyItem, dxFormGroupItem, dxFormSimpleItem, dxFormTabbedItem, FormItemType } from 'devextreme/ui/form';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n extractTemplate,\n DxTemplateDirective,\n IDxTemplateHost,\n DxTemplateHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport {\n PROPERTY_TOKEN_items,\n} from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-group-item',\n template: '<ng-content></ng-content>',\n styles: [':host { display: block; }'],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n DxTemplateHost,\n {\n provide: PROPERTY_TOKEN_items,\n useExisting: DxiFormGroupItemComponent,\n }\n ]\n})\nexport class DxiFormGroupItemComponent extends CollectionNestedOption implements AfterViewInit,\n IDxTemplateHost {\n @ContentChildren(PROPERTY_TOKEN_items)\n set _itemsContentChildren(value: QueryList<CollectionNestedOption>) {\n this.setChildren('items', value);\n }\n \n @Input()\n get alignItemLabels(): boolean {\n return this._getOption('alignItemLabels');\n }\n set alignItemLabels(value: boolean) {\n this._setOption('alignItemLabels', value);\n }\n\n @Input()\n get caption(): string | undefined {\n return this._getOption('caption');\n }\n set caption(value: string | undefined) {\n this._setOption('caption', value);\n }\n\n @Input()\n get captionTemplate(): any {\n return this._getOption('captionTemplate');\n }\n set captionTemplate(value: any) {\n this._setOption('captionTemplate', value);\n }\n\n @Input()\n get colCount(): number {\n return this._getOption('colCount');\n }\n set colCount(value: number) {\n this._setOption('colCount', value);\n }\n\n @Input()\n get colCountByScreen(): { lg?: number | undefined, md?: number | undefined, sm?: number | undefined, xs?: number | undefined } {\n return this._getOption('colCountByScreen');\n }\n set colCountByScreen(value: { lg?: number | undefined, md?: number | undefined, sm?: number | undefined, xs?: number | undefined }) {\n this._setOption('colCountByScreen', value);\n }\n\n @Input()\n get colSpan(): number | undefined {\n return this._getOption('colSpan');\n }\n set colSpan(value: number | undefined) {\n this._setOption('colSpan', value);\n }\n\n @Input()\n get cssClass(): string | undefined {\n return this._getOption('cssClass');\n }\n set cssClass(value: string | undefined) {\n this._setOption('cssClass', value);\n }\n\n @Input()\n get items(): Array<dxFormButtonItem | dxFormEmptyItem | dxFormGroupItem | dxFormSimpleItem | dxFormTabbedItem> {\n return this._getOption('items');\n }\n set items(value: Array<dxFormButtonItem | dxFormEmptyItem | dxFormGroupItem | dxFormSimpleItem | dxFormTabbedItem>) {\n this._setOption('items', value);\n }\n\n @Input()\n get itemType(): FormItemType {\n return this._getOption('itemType');\n }\n set itemType(value: FormItemType) {\n this._setOption('itemType', value);\n }\n\n @Input()\n get name(): string | undefined {\n return this._getOption('name');\n }\n set name(value: string | undefined) {\n this._setOption('name', value);\n }\n\n @Input()\n get template(): any {\n return this._getOption('template');\n }\n set template(value: any) {\n this._setOption('template', value);\n }\n\n @Input()\n get visible(): boolean {\n return this._getOption('visible');\n }\n set visible(value: boolean) {\n this._setOption('visible', value);\n }\n\n @Input()\n get visibleIndex(): number | undefined {\n return this._getOption('visibleIndex');\n }\n set visibleIndex(value: number | undefined) {\n this._setOption('visibleIndex', value);\n }\n\n\n protected get _optionPath() {\n return 'items';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: any,\n @Host() templateHost: DxTemplateHost,\n private element: ElementRef) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n templateHost.setHost(this);\n this.itemType = 'group';\n \n }\n\n setTemplate(template: DxTemplateDirective) {\n this.template = template;\n }\n ngAfterViewInit() {\n extractTemplate(this, this.element, this.renderer, this.document);\n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiFormGroupItemComponent\n ],\n exports: [\n DxiFormGroupItemComponent\n ],\n})\nexport class DxiFormGroupItemModule { }\n","/*!\n * devextreme-angular\n * Version: 26.1.3\n * Build date: Wed Jun 10 2026\n *\n * Copyright (c) 2012 - 2026 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\n */\n\n/* tslint:disable:max-line-length */\n\n\nimport {\n Component,\n NgModule,\n Host,\n ElementRef,\n Renderer2,\n Inject,\n AfterViewInit,\n SkipSelf,\n Input,\n ContentChildren,\n QueryList\n} from '@angular/core';\n\nimport { DOCUMENT } from '@angular/common';\n\n\nimport type * as CommonTypes from 'devextreme/common';\nimport type { FormItemComponent, FormItemType, LabelLocation, FormPredefinedButtonItem, dxFormButtonItem, dxFormEmptyItem, dxFormGroupItem, dxFormSimpleItem, dxFormTabbedItem } from 'devextreme/ui/form';\nimport type { HorizontalAlignment, VerticalAlignment } from 'devextreme/common';\nimport type { dxTabPanelOptions } from 'devextreme/ui/tab_panel';\nimport type { dxButtonOptions } from 'devextreme/ui/button';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n extractTemplate,\n DxTemplateDirective,\n IDxTemplateHost,\n DxTemplateHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport {\n PROPERTY_TOKEN_validationRules,\n PROPERTY_TOKEN_tabs,\n PROPERTY_TOKEN_items,\n} from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-form-item',\n template: '<ng-content></ng-content>',\n styles: [':host { display: block; }'],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n DxTemplateHost,\n {\n provide: PROPERTY_TOKEN_items,\n useExisting: DxiFormItemComponent,\n }\n ]\n})\nexport class DxiFormItemComponent extends CollectionNestedOption implements AfterViewInit,\n IDxTemplateHost {\n @ContentChildren(PROPERTY_TOKEN_validationRules)\n set _validationRulesContentChildren(value: QueryList<CollectionNestedOption>) {\n this.setChildren('validationRules', value);\n }\n \n @ContentChildren(PROPERTY_TOKEN_tabs)\n set _tabsContentChildren(value: QueryList<CollectionNestedOption>) {\n this.setChildren('tabs', value);\n }\n \n @ContentChildren(PROPERTY_TOKEN_items)\n set _itemsContentChildren(value: QueryList<CollectionNestedOption>) {\n this.setChildren('items', value);\n }\n \n @Input()\n get badge(): string {\n return this._getOption('badge');\n }\n set badge(value: string) {\n this._setOption('badge', value);\n }\n\n @Input()\n get disabled(): boolean {\n return this._getOption('disabled');\n }\n set disabled(value: boolean) {\n this._setOption('disabled', value);\n }\n\n @Input()\n get html(): string {\n return this._getOption('html');\n }\n set html(value: string) {\n this._setOption('html', value);\n }\n\n @Input()\n get icon(): string {\n return this._getOption('icon');\n }\n set icon(value: string) {\n this._setOption('icon', value);\n }\n\n @Input()\n get tabTemplate(): any {\n return this._getOption('tabTemplate');\n }\n set tabTemplate(value: any) {\n this._setOption('tabTemplate', value);\n }\n\n @Input()\n get template(): any {\n return this._getOption('template');\n }\n set template(value: any) {\n this._setOption('template', value);\n }\n\n @Input()\n get text(): string {\n return this._getOption('text');\n }\n set text(value: string) {\n this._setOption('text', value);\n }\n\n @Input()\n get title(): string {\n return this._getOption('title');\n }\n set title(value: string) {\n this._setOption('title', value);\n }\n\n @Input()\n get visible(): boolean {\n return this._getOption('visible');\n }\n set visible(value: boolean) {\n this._setOption('visible', value);\n }\n\n @Input()\n get aiOptions(): { disabled?: boolean, instruction?: string | undefined } {\n return this._getOption('aiOptions');\n }\n set aiOptions(value: { disabled?: boolean, instruction?: string | undefined }) {\n this._setOption('aiOptions', value);\n }\n\n @Input()\n get colSpan(): number | undefined {\n return this._getOption('colSpan');\n }\n set colSpan(value: number | undefined) {\n this._setOption('colSpan', value);\n }\n\n @Input()\n get cssClass(): string | undefined {\n return this._getOption('cssClass');\n }\n set cssClass(value: string | undefined) {\n this._setOption('cssClass', value);\n }\n\n @Input()\n get dataField(): string | undefined {\n return this._getOption('dataField');\n }\n set dataField(value: string | undefined) {\n this._setOption('dataField', value);\n }\n\n @Input()\n get editorOptions(): any | undefined {\n return this._getOption('editorOptions');\n }\n set editorOptions(value: any | undefined) {\n this._setOption('editorOptions', value);\n }\n\n @Input()\n get editorType(): FormItemComponent {\n return this._getOption('editorType');\n }\n set editorType(value: FormItemComponent) {\n this._setOption('editorType', value);\n }\n\n @Input()\n get helpText(): string | undefined {\n return this._getOption('helpText');\n }\n set helpText(value: string | undefined) {\n this._setOption('helpText', value);\n }\n\n @Input()\n get isRequired(): boolean | undefined {\n return this._getOption('isRequired');\n }\n set isRequired(value: boolean | undefined) {\n this._setOption('isRequired', value);\n }\n\n @Input()\n get itemType(): FormItemType {\n return this._getOption('itemType');\n }\n set itemType(value: FormItemType) {\n this._setOption('itemType', value);\n }\n\n @Input()\n get label(): { alignment?: HorizontalAlignment, location?: LabelLocation, showColon?: boolean, template?: any, text?: string | undefined, visible?: boolean } {\n return this._getOption('label');\n }\n set label(value: { alignment?: HorizontalAlignment, location?: LabelLocation, showColon?: boolean, template?: any, text?: string | undefined, visible?: boolean }) {\n this._setOption('label', value);\n }\n\n @Input()\n get name(): string | undefined | FormPredefinedButtonItem {\n return this._getOption('name');\n }\n set name(value: string | undefined | FormPredefinedButtonItem) {\n this._setOption('name', value);\n }\n\n @Input()\n get validationRules(): Array<CommonTypes.ValidationRule> {\n return this._getOption('validationRules');\n }\n set validationRules(value: Array<CommonTypes.ValidationRule>) {\n this._setOption('validationRules', value);\n }\n\n @Input()\n get visibleIndex(): number | undefined {\n return this._getOption('visibleIndex');\n }\n set visibleIndex(value: number | undefined) {\n this._setOption('visibleIndex', value);\n }\n\n @Input()\n get alignItemLabels(): boolean {\n return this._getOption('alignItemLabels');\n }\n set alignItemLabels(value: boolean) {\n this._setOption('alignItemLabels', value);\n }\n\n @Input()\n get caption(): string | undefined {\n return this._getOption('caption');\n }\n set caption(value: string | undefined) {\n this._setOption('caption', value);\n }\n\n @Input()\n get captionTemplate(): any {\n return this._getOption('captionTemplate');\n }\n set captionTemplate(value: any) {\n this._setOption('captionTemplate', value);\n }\n\n @Input()\n get colCount(): number {\n return this._getOption('colCount');\n }\n set colCount(value: number) {\n this._setOption('colCount', value);\n }\n\n @Input()\n get colCountByScreen(): { lg?: number | undefined, md?: number | undefined, sm?: number | undefined, xs?: number | undefined } {\n return this._getOption('colCountByScreen');\n }\n set colCountByScreen(value: { lg?: number | undefined, md?: number | undefined, sm?: number | undefined, xs?: number | undefined }) {\n this._setOption('colCountByScreen', value);\n }\n\n @Input()\n get items(): Array<dxFormButtonItem | dxFormEmptyItem | dxFormGroupItem | dxFormSimpleItem | dxFormTabbedItem> {\n return this._getOption('items');\n }\n set items(value: Array<dxFormButtonItem | dxFormEmptyItem | dxFormGroupItem | dxFormSimpleItem | dxFormTabbedItem>) {\n this._setOption('items', value);\n }\n\n @Input()\n get tabPanelOptions(): dxTabPanelOptions | undefined {\n return this._getOption('tabPanelOptions');\n }\n set tabPanelOptions(value: dxTabPanelOptions | undefined) {\n this._setOption('tabPanelOptions', value);\n }\n\n @Input()\n get tabs(): { alignItemLabels?: boolean, badge?: string | undefined, colCount?: number, colCountByScreen?: { lg?: number | undefined, md?: number | undefined, sm?: number | undefined, xs?: number | undefined }, disabled?: boolean, icon?: string | undefined, items?: Array<dxFormButtonItem | dxFormEmptyItem | dxFormGroupItem | dxFormSimpleItem | dxFormTabbedItem>, tabTemplate?: any, template?: any, title?: string | undefined }[] {\n return this._getOption('tabs');\n }\n set tabs(value: { alignItemLabels?: boolean, badge?: string | undefined, colCount?: number, colCountByScreen?: { lg?: number | undefined, md?: number | undefined, sm?: number | undefined, xs?: number | undefined }, disabled?: boolean, icon?: string | undefined, items?: Array<dxFormButtonItem | dxFormEmptyItem | dxFormGroupItem | dxFormSimpleItem | dxFormTabbedItem>, tabTemplate?: any, template?: any, title?: string | undefined }[]) {\n this._setOption('tabs', value);\n }\n\n @Input()\n get buttonOptions(): dxButtonOptions | undefined {\n return this._getOption('buttonOptions');\n }\n set buttonOptions(value: dxButtonOptions | undefined) {\n this._setOption('buttonOptions', value);\n }\n\n @Input()\n get horizontalAlignment(): HorizontalAlignment {\n return this._getOption('horizontalAlignment');\n }\n set horizontalAlignment(value: HorizontalAlignment) {\n this._setOption('horizontalAlignment', value);\n }\n\n @Input()\n get verticalAlignment(): VerticalAlignment {\n return this._getOption('verticalAlignment');\n }\n set verticalAlignment(value: VerticalAlignment) {\n this._setOption('verticalAlignment', value);\n }\n\n\n protected get _optionPath() {\n return 'items';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: any,\n @Host() templateHost: DxTemplateHost,\n private element: ElementRef) {\n super();\n parentOptionHost.setNestedOption(this);\n optionHost.setHost(this, this._fullOptionPath.bind(this));\n templateHost.setHost(this);\n }\n\n setTemplate(template: DxTemplateDirective) {\n this.template = template;\n }\n ngAfterViewInit() {\n extractTemplate(this, this.element, this.renderer, this