UNPKG

devextreme-angular

Version:

DevExtreme UI and Visualization Components for Angular

1 lines • 142 kB
{"version":3,"file":"devextreme-angular-ui-chat-nested.mjs","sources":["../../../dist/ui/chat/nested/alert-dxi.ts","../../../dist/ui/chat/nested/attachment-dxi.ts","../../../dist/ui/chat/nested/author.ts","../../../dist/ui/chat/nested/chat-item-dxi.ts","../../../dist/ui/chat/nested/custom-speech-recognizer.ts","../../../dist/ui/chat/nested/day-header-format.ts","../../../dist/ui/chat/nested/editing.ts","../../../dist/ui/chat/nested/file-uploader-options.ts","../../../dist/ui/chat/nested/item-dxi.ts","../../../dist/ui/chat/nested/message-timestamp-format.ts","../../../dist/ui/chat/nested/send-button-options.ts","../../../dist/ui/chat/nested/speech-recognition-config.ts","../../../dist/ui/chat/nested/speech-to-text-options.ts","../../../dist/ui/chat/nested/suggestions-item-dxi.ts","../../../dist/ui/chat/nested/suggestions.ts","../../../dist/ui/chat/nested/typing-user-dxi.ts","../../../dist/ui/chat/nested/user.ts","../../../dist/ui/chat/nested/index.ts","../../../dist/ui/chat/nested/devextreme-angular-ui-chat-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 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 { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_alerts } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-chat-alert',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_alerts,\n useExisting: DxiChatAlertComponent,\n }\n ]\n})\nexport class DxiChatAlertComponent extends CollectionNestedOption {\n @Input()\n get id(): number | string {\n return this._getOption('id');\n }\n set id(value: number | string) {\n this._setOption('id', 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\n protected get _optionPath() {\n return 'alerts';\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\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiChatAlertComponent\n ],\n exports: [\n DxiChatAlertComponent\n ],\n})\nexport class DxiChatAlertModule { }\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\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { CollectionNestedOption } from 'devextreme-angular/core';\n\nimport { PROPERTY_TOKEN_attachments } from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-chat-attachment',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_attachments,\n useExisting: DxiChatAttachmentComponent,\n }\n ]\n})\nexport class DxiChatAttachmentComponent extends CollectionNestedOption {\n @Input()\n get name(): string {\n return this._getOption('name');\n }\n set name(value: string) {\n this._setOption('name', value);\n }\n\n @Input()\n get size(): number {\n return this._getOption('size');\n }\n set size(value: number) {\n this._setOption('size', value);\n }\n\n\n protected get _optionPath() {\n return 'attachments';\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\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiChatAttachmentComponent\n ],\n exports: [\n DxiChatAttachmentComponent\n ],\n})\nexport class DxiChatAttachmentModule { }\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-chat-author',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatAuthorComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get avatarAlt(): string {\n return this._getOption('avatarAlt');\n }\n set avatarAlt(value: string) {\n this._setOption('avatarAlt', value);\n }\n\n @Input()\n get avatarUrl(): string {\n return this._getOption('avatarUrl');\n }\n set avatarUrl(value: string) {\n this._setOption('avatarUrl', value);\n }\n\n @Input()\n get id(): number | string {\n return this._getOption('id');\n }\n set id(value: number | string) {\n this._setOption('id', value);\n }\n\n @Input()\n get name(): string {\n return this._getOption('name');\n }\n set name(value: string) {\n this._setOption('name', value);\n }\n\n\n protected get _optionPath() {\n return 'author';\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 DxoChatAuthorComponent\n ],\n exports: [\n DxoChatAuthorComponent\n ],\n})\nexport class DxoChatAuthorModule { }\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 ContentChildren,\n QueryList\n} from '@angular/core';\n\n\n\n\nimport type { Attachment, User } from 'devextreme/ui/chat';\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';\nimport {\n PROPERTY_TOKEN_attachments,\n} from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-chat-chat-item',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [\n NestedOptionHost,\n {\n provide: PROPERTY_TOKEN_items,\n useExisting: DxiChatChatItemComponent,\n }\n ]\n})\nexport class DxiChatChatItemComponent extends CollectionNestedOption {\n @ContentChildren(PROPERTY_TOKEN_attachments)\n set _attachmentsContentChildren(value: QueryList<CollectionNestedOption>) {\n this.setChildren('attachments', value);\n }\n \n @Input()\n get alt(): string {\n return this._getOption('alt');\n }\n set alt(value: string) {\n this._setOption('alt', value);\n }\n\n @Input()\n get attachments(): Array<Attachment> {\n return this._getOption('attachments');\n }\n set attachments(value: Array<Attachment>) {\n this._setOption('attachments', value);\n }\n\n @Input()\n get author(): User {\n return this._getOption('author');\n }\n set author(value: User) {\n this._setOption('author', value);\n }\n\n @Input()\n get id(): number | string {\n return this._getOption('id');\n }\n set id(value: number | string) {\n this._setOption('id', value);\n }\n\n @Input()\n get isDeleted(): boolean {\n return this._getOption('isDeleted');\n }\n set isDeleted(value: boolean) {\n this._setOption('isDeleted', value);\n }\n\n @Input()\n get isEdited(): boolean {\n return this._getOption('isEdited');\n }\n set isEdited(value: boolean) {\n this._setOption('isEdited', value);\n }\n\n @Input()\n get src(): string {\n return this._getOption('src');\n }\n set src(value: string) {\n this._setOption('src', 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 timestamp(): Date | number | string {\n return this._getOption('timestamp');\n }\n set timestamp(value: Date | number | string) {\n this._setOption('timestamp', value);\n }\n\n @Input()\n get type(): string | undefined {\n return this._getOption('type');\n }\n set type(value: string | undefined) {\n this._setOption('type', 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 }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiChatChatItemComponent\n ],\n exports: [\n DxiChatChatItemComponent\n ],\n})\nexport class DxiChatChatItemModule { }\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-chat-custom-speech-recognizer',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatCustomSpeechRecognizerComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get enabled(): boolean {\n return this._getOption('enabled');\n }\n set enabled(value: boolean) {\n this._setOption('enabled', value);\n }\n\n @Input()\n get isListening(): boolean {\n return this._getOption('isListening');\n }\n set isListening(value: boolean) {\n this._setOption('isListening', value);\n }\n\n\n protected get _optionPath() {\n return 'customSpeechRecognizer';\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 DxoChatCustomSpeechRecognizerComponent\n ],\n exports: [\n DxoChatCustomSpeechRecognizerComponent\n ],\n})\nexport class DxoChatCustomSpeechRecognizerModule { }\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\nimport type { Format } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-chat-day-header-format',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatDayHeaderFormatComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get currency(): string {\n return this._getOption('currency');\n }\n set currency(value: string) {\n this._setOption('currency', value);\n }\n\n @Input()\n get formatter(): ((value: number | Date) => string) {\n return this._getOption('formatter');\n }\n set formatter(value: ((value: number | Date) => string)) {\n this._setOption('formatter', value);\n }\n\n @Input()\n get parser(): ((value: string) => number | Date) {\n return this._getOption('parser');\n }\n set parser(value: ((value: string) => number | Date)) {\n this._setOption('parser', value);\n }\n\n @Input()\n get precision(): number {\n return this._getOption('precision');\n }\n set precision(value: number) {\n this._setOption('precision', value);\n }\n\n @Input()\n get type(): Format | string {\n return this._getOption('type');\n }\n set type(value: Format | string) {\n this._setOption('type', value);\n }\n\n @Input()\n get useCurrencyAccountingStyle(): boolean {\n return this._getOption('useCurrencyAccountingStyle');\n }\n set useCurrencyAccountingStyle(value: boolean) {\n this._setOption('useCurrencyAccountingStyle', value);\n }\n\n\n protected get _optionPath() {\n return 'dayHeaderFormat';\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 DxoChatDayHeaderFormatComponent\n ],\n exports: [\n DxoChatDayHeaderFormatComponent\n ],\n})\nexport class DxoChatDayHeaderFormatModule { }\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\nimport type { default as dxChat, Message } from 'devextreme/ui/chat';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-chat-editing',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatEditingComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get allowDeleting(): boolean | ((options: { component: dxChat, message: Message }) => boolean) {\n return this._getOption('allowDeleting');\n }\n set allowDeleting(value: boolean | ((options: { component: dxChat, message: Message }) => boolean)) {\n this._setOption('allowDeleting', value);\n }\n\n @Input()\n get allowUpdating(): boolean | ((options: { component: dxChat, message: Message }) => boolean) {\n return this._getOption('allowUpdating');\n }\n set allowUpdating(value: boolean | ((options: { component: dxChat, message: Message }) => boolean)) {\n this._setOption('allowUpdating', value);\n }\n\n\n protected get _optionPath() {\n return 'editing';\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 DxoChatEditingComponent\n ],\n exports: [\n DxoChatEditingComponent\n ],\n})\nexport class DxoChatEditingModule { }\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 Output,\n EventEmitter\n} from '@angular/core';\n\n\n\n\nimport type UploadInfo from 'devextreme/file_management/upload_info';\nimport type { BeforeSendEvent, ContentReadyEvent, DisposingEvent, DropZoneEnterEvent, DropZoneLeaveEvent, FilesUploadedEvent, InitializedEvent, OptionChangedEvent, ProgressEvent, UploadAbortedEvent, UploadedEvent, UploadErrorEvent, UploadStartedEvent, ValueChangedEvent, UploadHttpMethod, FileUploadMode } from 'devextreme/ui/file_uploader';\nimport type { ValidationStatus } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-chat-file-uploader-options',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatFileUploaderOptionsComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get abortUpload(): ((file: any, uploadInfo?: UploadInfo) => any) {\n return this._getOption('abortUpload');\n }\n set abortUpload(value: ((file: any, uploadInfo?: UploadInfo) => any)) {\n this._setOption('abortUpload', value);\n }\n\n @Input()\n get accept(): string {\n return this._getOption('accept');\n }\n set accept(value: string) {\n this._setOption('accept', value);\n }\n\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 allowCanceling(): boolean {\n return this._getOption('allowCanceling');\n }\n set allowCanceling(value: boolean) {\n this._setOption('allowCanceling', value);\n }\n\n @Input()\n get allowedFileExtensions(): Array<string> {\n return this._getOption('allowedFileExtensions');\n }\n set allowedFileExtensions(value: Array<string>) {\n this._setOption('allowedFileExtensions', value);\n }\n\n @Input()\n get chunkSize(): number {\n return this._getOption('chunkSize');\n }\n set chunkSize(value: number) {\n this._setOption('chunkSize', value);\n }\n\n @Input()\n get dialogTrigger(): any | string | undefined {\n return this._getOption('dialogTrigger');\n }\n set dialogTrigger(value: any | string | undefined) {\n this._setOption('dialogTrigger', 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 dropZone(): any | string | undefined {\n return this._getOption('dropZone');\n }\n set dropZone(value: any | string | undefined) {\n this._setOption('dropZone', 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 inputAttr(): any {\n return this._getOption('inputAttr');\n }\n set inputAttr(value: any) {\n this._setOption('inputAttr', value);\n }\n\n @Input()\n get invalidFileExtensionMessage(): string {\n return this._getOption('invalidFileExtensionMessage');\n }\n set invalidFileExtensionMessage(value: string) {\n this._setOption('invalidFileExtensionMessage', value);\n }\n\n @Input()\n get invalidMaxFileSizeMessage(): string {\n return this._getOption('invalidMaxFileSizeMessage');\n }\n set invalidMaxFileSizeMessage(value: string) {\n this._setOption('invalidMaxFileSizeMessage', value);\n }\n\n @Input()\n get invalidMinFileSizeMessage(): string {\n return this._getOption('invalidMinFileSizeMessage');\n }\n set invalidMinFileSizeMessage(value: string) {\n this._setOption('invalidMinFileSizeMessage', value);\n }\n\n @Input()\n get isDirty(): boolean {\n return this._getOption('isDirty');\n }\n set isDirty(value: boolean) {\n this._setOption('isDirty', value);\n }\n\n @Input()\n get isValid(): boolean {\n return this._getOption('isValid');\n }\n set isValid(value: boolean) {\n this._setOption('isValid', value);\n }\n\n @Input()\n get labelText(): string {\n return this._getOption('labelText');\n }\n set labelText(value: string) {\n this._setOption('labelText', value);\n }\n\n @Input()\n get maxFileSize(): number {\n return this._getOption('maxFileSize');\n }\n set maxFileSize(value: number) {\n this._setOption('maxFileSize', value);\n }\n\n @Input()\n get minFileSize(): number {\n return this._getOption('minFileSize');\n }\n set minFileSize(value: number) {\n this._setOption('minFileSize', value);\n }\n\n @Input()\n get multiple(): boolean {\n return this._getOption('multiple');\n }\n set multiple(value: boolean) {\n this._setOption('multiple', value);\n }\n\n @Input()\n get name(): string {\n return this._getOption('name');\n }\n set name(value: string) {\n this._setOption('name', value);\n }\n\n @Input()\n get onBeforeSend(): ((e: BeforeSendEvent) => void) {\n return this._getOption('onBeforeSend');\n }\n set onBeforeSend(value: ((e: BeforeSendEvent) => void)) {\n this._setOption('onBeforeSend', 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 onDropZoneEnter(): ((e: DropZoneEnterEvent) => void) {\n return this._getOption('onDropZoneEnter');\n }\n set onDropZoneEnter(value: ((e: DropZoneEnterEvent) => void)) {\n this._setOption('onDropZoneEnter', value);\n }\n\n @Input()\n get onDropZoneLeave(): ((e: DropZoneLeaveEvent) => void) {\n return this._getOption('onDropZoneLeave');\n }\n set onDropZoneLeave(value: ((e: DropZoneLeaveEvent) => void)) {\n this._setOption('onDropZoneLeave', value);\n }\n\n @Input()\n get onFilesUploaded(): ((e: FilesUploadedEvent) => void) {\n return this._getOption('onFilesUploaded');\n }\n set onFilesUploaded(value: ((e: FilesUploadedEvent) => void)) {\n this._setOption('onFilesUploaded', 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 onProgress(): ((e: ProgressEvent) => void) {\n return this._getOption('onProgress');\n }\n set onProgress(value: ((e: ProgressEvent) => void)) {\n this._setOption('onProgress', value);\n }\n\n @Input()\n get onUploadAborted(): ((e: UploadAbortedEvent) => void) {\n return this._getOption('onUploadAborted');\n }\n set onUploadAborted(value: ((e: UploadAbortedEvent) => void)) {\n this._setOption('onUploadAborted', value);\n }\n\n @Input()\n get onUploaded(): ((e: UploadedEvent) => void) {\n return this._getOption('onUploaded');\n }\n set onUploaded(value: ((e: UploadedEvent) => void)) {\n this._setOption('onUploaded', value);\n }\n\n @Input()\n get onUploadError(): ((e: UploadErrorEvent) => void) {\n return this._getOption('onUploadError');\n }\n set onUploadError(value: ((e: UploadErrorEvent) => void)) {\n this._setOption('onUploadError', value);\n }\n\n @Input()\n get onUploadStarted(): ((e: UploadStartedEvent) => void) {\n return this._getOption('onUploadStarted');\n }\n set onUploadStarted(value: ((e: UploadStartedEvent) => void)) {\n this._setOption('onUploadStarted', value);\n }\n\n @Input()\n get onValueChanged(): ((e: ValueChangedEvent) => void) {\n return this._getOption('onValueChanged');\n }\n set onValueChanged(value: ((e: ValueChangedEvent) => void)) {\n this._setOption('onValueChanged', value);\n }\n\n @Input()\n get progress(): number {\n return this._getOption('progress');\n }\n set progress(value: number) {\n this._setOption('progress', value);\n }\n\n @Input()\n get readOnly(): boolean {\n return this._getOption('readOnly');\n }\n set readOnly(value: boolean) {\n this._setOption('readOnly', value);\n }\n\n @Input()\n get readyToUploadMessage(): string {\n return this._getOption('readyToUploadMessage');\n }\n set readyToUploadMessage(value: string) {\n this._setOption('readyToUploadMessage', 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 selectButtonText(): string {\n return this._getOption('selectButtonText');\n }\n set selectButtonText(value: string) {\n this._setOption('selectButtonText', value);\n }\n\n @Input()\n get showFileList(): boolean {\n return this._getOption('showFileList');\n }\n set showFileList(value: boolean) {\n this._setOption('showFileList', 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 uploadAbortedMessage(): string {\n return this._getOption('uploadAbortedMessage');\n }\n set uploadAbortedMessage(value: string) {\n this._setOption('uploadAbortedMessage', value);\n }\n\n @Input()\n get uploadButtonText(): string {\n return this._getOption('uploadButtonText');\n }\n set uploadButtonText(value: string) {\n this._setOption('uploadButtonText', value);\n }\n\n @Input()\n get uploadChunk(): ((file: any, uploadInfo: UploadInfo) => any) {\n return this._getOption('uploadChunk');\n }\n set uploadChunk(value: ((file: any, uploadInfo: UploadInfo) => any)) {\n this._setOption('uploadChunk', value);\n }\n\n @Input()\n get uploadCustomData(): any {\n return this._getOption('uploadCustomData');\n }\n set uploadCustomData(value: any) {\n this._setOption('uploadCustomData', value);\n }\n\n @Input()\n get uploadedMessage(): string {\n return this._getOption('uploadedMessage');\n }\n set uploadedMessage(value: string) {\n this._setOption('uploadedMessage', value);\n }\n\n @Input()\n get uploadFailedMessage(): string {\n return this._getOption('uploadFailedMessage');\n }\n set uploadFailedMessage(value: string) {\n this._setOption('uploadFailedMessage', value);\n }\n\n @Input()\n get uploadFile(): ((file: any, progressCallback: Function) => any) {\n return this._getOption('uploadFile');\n }\n set uploadFile(value: ((file: any, progressCallback: Function) => any)) {\n this._setOption('uploadFile', value);\n }\n\n @Input()\n get uploadHeaders(): any {\n return this._getOption('uploadHeaders');\n }\n set uploadHeaders(value: any) {\n this._setOption('uploadHeaders', value);\n }\n\n @Input()\n get uploadMethod(): UploadHttpMethod {\n return this._getOption('uploadMethod');\n }\n set uploadMethod(value: UploadHttpMethod) {\n this._setOption('uploadMethod', value);\n }\n\n @Input()\n get uploadMode(): FileUploadMode {\n return this._getOption('uploadMode');\n }\n set uploadMode(value: FileUploadMode) {\n this._setOption('uploadMode', value);\n }\n\n @Input()\n get uploadUrl(): string {\n return this._getOption('uploadUrl');\n }\n set uploadUrl(value: string) {\n this._setOption('uploadUrl', value);\n }\n\n @Input()\n get validationError(): any {\n return this._getOption('validationError');\n }\n set validationError(value: any) {\n this._setOption('validationError', value);\n }\n\n @Input()\n get validationErrors(): Array<any> {\n return this._getOption('validationErrors');\n }\n set validationErrors(value: Array<any>) {\n this._setOption('validationErrors', value);\n }\n\n @Input()\n get validationStatus(): ValidationStatus {\n return this._getOption('validationStatus');\n }\n set validationStatus(value: ValidationStatus) {\n this._setOption('validationStatus', value);\n }\n\n @Input()\n get value(): Array<any> {\n return this._getOption('value');\n }\n set value(value: Array<any>) {\n this._setOption('value', 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 /**\n \n * This member supports the internal infrastructure and is not intended to be used directly from your code.\n \n */\n @Output() valueChange: EventEmitter<Array<any>>;\n protected get _optionPath() {\n return 'fileUploaderOptions';\n }\n\n\n constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,\n @Host() optionHost: NestedOptionHost) {\n super();\n this._createEventEmitters([\n { emit: 'valueChange' }\n ]);\n\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 DxoChatFileUploaderOptionsComponent\n ],\n exports: [\n DxoChatFileUploaderOptionsComponent\n ],\n})\nexport class DxoChatFileUploaderOptionsModule { }\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 { Attachment, User } from 'devextreme/ui/chat';\nimport type { ButtonType } from 'devextreme/common';\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 { PROPERTY_TOKEN_items } from 'devextreme-angular/core/tokens';\nimport {\n PROPERTY_TOKEN_attachments,\n} from 'devextreme-angular/core/tokens';\n\n@Component({\n selector: 'dxi-chat-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: DxiChatItemComponent,\n }\n ]\n})\nexport class DxiChatItemComponent extends CollectionNestedOption implements AfterViewInit,\n IDxTemplateHost {\n @ContentChildren(PROPERTY_TOKEN_attachments)\n set _attachmentsContentChildren(value: QueryList<CollectionNestedOption>) {\n this.setChildren('attachments', value);\n }\n \n @Input()\n get alt(): string {\n return this._getOption('alt');\n }\n set alt(value: string) {\n this._setOption('alt', value);\n }\n\n @Input()\n get attachments(): Array<Attachment> {\n return this._getOption('attachments');\n }\n set attachments(value: Array<Attachment>) {\n this._setOption('attachments', value);\n }\n\n @Input()\n get author(): User {\n return this._getOption('author');\n }\n set author(value: User) {\n this._setOption('author', value);\n }\n\n @Input()\n get id(): number | string {\n return this._getOption('id');\n }\n set id(value: number | string) {\n this._setOption('id', value);\n }\n\n @Input()\n get isDeleted(): boolean {\n return this._getOption('isDeleted');\n }\n set isDeleted(value: boolean) {\n this._setOption('isDeleted', value);\n }\n\n @Input()\n get isEdited(): boolean {\n return this._getOption('isEdited');\n }\n set isEdited(value: boolean) {\n this._setOption('isEdited', value);\n }\n\n @Input()\n get src(): string {\n return this._getOption('src');\n }\n set src(value: string) {\n this._setOption('src', 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 timestamp(): Date | number | string {\n return this._getOption('timestamp');\n }\n set timestamp(value: Date | number | string) {\n this._setOption('timestamp', value);\n }\n\n @Input()\n get type(): string | undefined | ButtonType {\n return this._getOption('type');\n }\n set type(value: string | undefined | ButtonType) {\n this._setOption('type', 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 hint(): string {\n return this._getOption('hint');\n }\n set hint(value: string) {\n this._setOption('hint', 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 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\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.document);\n }\n\n\n\n ngOnDestroy() {\n this._deleteRemovedOptions(this._fullOptionPath());\n }\n\n}\n\n@NgModule({\n imports: [\n DxiChatItemComponent\n ],\n exports: [\n DxiChatItemComponent\n ],\n})\nexport class DxiChatItemModule { }\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\nimport type { Format } from 'devextreme/common';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-chat-message-timestamp-format',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatMessageTimestampFormatComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get currency(): string {\n return this._getOption('currency');\n }\n set currency(value: string) {\n this._setOption('currency', value);\n }\n\n @Input()\n get formatter(): ((value: number | Date) => string) {\n return this._getOption('formatter');\n }\n set formatter(value: ((value: number | Date) => string)) {\n this._setOption('formatter', value);\n }\n\n @Input()\n get parser(): ((value: string) => number | Date) {\n return this._getOption('parser');\n }\n set parser(value: ((value: string) => number | Date)) {\n this._setOption('parser', value);\n }\n\n @Input()\n get precision(): number {\n return this._getOption('precision');\n }\n set precision(value: number) {\n this._setOption('precision', value);\n }\n\n @Input()\n get type(): Format | string {\n return this._getOption('type');\n }\n set type(value: Format | string) {\n this._setOption('type', value);\n }\n\n @Input()\n get useCurrencyAccountingStyle(): boolean {\n return this._getOption('useCurrencyAccountingStyle');\n }\n set useCurrencyAccountingStyle(value: boolean) {\n this._setOption('useCurrencyAccountingStyle', value);\n }\n\n\n protected get _optionPath() {\n return 'messageTimestampFormat';\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 DxoChatMessageTimestampFormatComponent\n ],\n exports: [\n DxoChatMessageTimestampFormatComponent\n ],\n})\nexport class DxoChatMessageTimestampFormatModule { }\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\nimport type { SendButtonAction, SendButtonClickEvent } from 'devextreme/ui/chat';\n\nimport {\n DxIntegrationModule,\n NestedOptionHost,\n} from 'devextreme-angular/core';\nimport { NestedOption } from 'devextreme-angular/core';\n\n\n@Component({\n selector: 'dxo-chat-send-button-options',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatSendButtonOptionsComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get action(): SendButtonAction {\n return this._getOption('action');\n }\n set action(value: SendButtonAction) {\n this._setOption('action', 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: SendButtonClickEvent) => void) {\n return this._getOption('onClick');\n }\n set onClick(value: ((e: SendButtonClickEvent) => void)) {\n this._setOption('onClick', value);\n }\n\n\n protected get _optionPath() {\n return 'sendButtonOptions';\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 DxoChatSendButtonOptionsComponent\n ],\n exports: [\n DxoChatSendButtonOptionsComponent\n ],\n})\nexport class DxoChatSendButtonOptionsModule { }\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-chat-speech-recognition-config',\n template: '',\n styles: [''],\n imports: [ DxIntegrationModule ],\n providers: [NestedOptionHost]\n})\nexport class DxoChatSpeechRecognitionConfigComponent extends NestedOption implements OnDestroy, OnInit {\n @Input()\n get continuous(): boolean {\n return this._getOption('continuous');\n }\n set continuous(value: boolean) {\n this._setOption('continuous', value);\n }\n\n @Input()\n get grammars(): Array<string> {\n return this._getOption('grammars');\n }\n set grammars(value: Array<string>) {\n this._setOption('grammars', value);\n }\n\n @Input()\n get interimResults(): boolean {\n return this._getOption('interimResults');\n }\n set interimResults(value: boolean) {\n this._setOption('interimResults', value);\n }\n\n @Input()\n get lang(): string {\n return this._getOption('lang');\n }\n set lang(value: string) {\n this._setOption('lang', value);\n }\n\n @Input()\n get maxAlternatives(): number {\n return this._getOption('maxAlternatives');\n }\n set maxAlternatives(value: number) {\n this._setOption('maxAlternatives', value);\n }\n\n\n protected get _optionPath() {\n return 'speechRecognitionConfig';\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 DxoChatSpeechRecognitionConfigComponent\n ],\n exports: [\n DxoChatSpeechRecognitionConfigComponent\n ],\n})\nexport class DxoChatSpeechRecognitionConfigModule { }\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 RESERV