devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
830 lines (735 loc) • 29.2 kB
JavaScript
import * as i0 from '@angular/core';
import { PLATFORM_ID, Component, Inject, Input, Output, ContentChildren, NgModule } from '@angular/core';
import DxChat from 'devextreme/ui/chat';
import * as i1 from 'devextreme-angular/core';
import { DxComponent, DxTemplateHost, WatcherHelper, NestedOptionHost, IterableDifferHelper, DxIntegrationModule, DxTemplateModule } from 'devextreme-angular/core';
import { DxiAlertComponent, DxiItemComponent, DxiTypingUserComponent, DxiAlertModule, DxoDayHeaderFormatModule, DxiItemModule, DxoAuthorModule, DxoMessageTimestampFormatModule, DxiTypingUserModule, DxoUserModule } from 'devextreme-angular/ui/nested';
import { DxiChatAlertComponent, DxiChatItemComponent, DxiChatTypingUserComponent, DxiChatAlertModule, DxoChatAuthorModule, DxoChatDayHeaderFormatModule, DxiChatItemModule, DxoChatMessageTimestampFormatModule, DxiChatTypingUserModule, DxoChatUserModule } from 'devextreme-angular/ui/chat/nested';
/*!
* devextreme-angular
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
/* tslint:disable:max-line-length */
/**
* The Chat UI component is an interactive interface that allows users to send and receive messages in real time.
*/
class DxChatComponent extends DxComponent {
_watcherHelper;
_idh;
instance = null;
/**
* Specifies the shortcut key that sets focus on the UI component.
*/
get accessKey() {
return this._getOption('accessKey');
}
set accessKey(value) {
this._setOption('accessKey', value);
}
/**
* Specifies whether the UI component changes its visual state as a result of user interaction.
*/
get activeStateEnabled() {
return this._getOption('activeStateEnabled');
}
set activeStateEnabled(value) {
this._setOption('activeStateEnabled', value);
}
/**
* A list of available alerts.
*/
get alerts() {
return this._getOption('alerts');
}
set alerts(value) {
this._setOption('alerts', value);
}
/**
* Binds the UI component to data.
*/
get dataSource() {
return this._getOption('dataSource');
}
set dataSource(value) {
this._setOption('dataSource', value);
}
/**
* Specifies the day header format.
*/
get dayHeaderFormat() {
return this._getOption('dayHeaderFormat');
}
set dayHeaderFormat(value) {
this._setOption('dayHeaderFormat', value);
}
/**
* Specifies whether the UI component responds to user interaction.
*/
get disabled() {
return this._getOption('disabled');
}
set disabled(value) {
this._setOption('disabled', value);
}
/**
* Specifies the global attributes to be attached to the UI component's container element.
*/
get elementAttr() {
return this._getOption('elementAttr');
}
set elementAttr(value) {
this._setOption('elementAttr', value);
}
/**
* Specifies whether the Chat's input element can be focused using keyboard navigation.
*/
get focusStateEnabled() {
return this._getOption('focusStateEnabled');
}
set focusStateEnabled(value) {
this._setOption('focusStateEnabled', value);
}
/**
* Specifies the UI component's height.
*/
get height() {
return this._getOption('height');
}
set height(value) {
this._setOption('height', value);
}
/**
* Specifies text for a hint that appears when a user pauses on the UI component.
*/
get hint() {
return this._getOption('hint');
}
set hint(value) {
this._setOption('hint', value);
}
/**
* Specifies whether the UI component changes its state when a user pauses on it.
*/
get hoverStateEnabled() {
return this._getOption('hoverStateEnabled');
}
set hoverStateEnabled(value) {
this._setOption('hoverStateEnabled', value);
}
/**
* Specifies an array of chat messages.
*/
get items() {
return this._getOption('items');
}
set items(value) {
this._setOption('items', value);
}
/**
* Specifies a custom template for a chat message.
*/
get messageTemplate() {
return this._getOption('messageTemplate');
}
set messageTemplate(value) {
this._setOption('messageTemplate', value);
}
/**
* Specifies the message timestamp format.
*/
get messageTimestampFormat() {
return this._getOption('messageTimestampFormat');
}
set messageTimestampFormat(value) {
this._setOption('messageTimestampFormat', value);
}
/**
* Specifies whether the Chat UI component displays newly entered messages immediately. This property only applies if dataSource is used.
*/
get reloadOnChange() {
return this._getOption('reloadOnChange');
}
set reloadOnChange(value) {
this._setOption('reloadOnChange', value);
}
/**
* Switches the UI component to a right-to-left representation.
*/
get rtlEnabled() {
return this._getOption('rtlEnabled');
}
set rtlEnabled(value) {
this._setOption('rtlEnabled', value);
}
/**
* Specifies whether to show avatars.
*/
get showAvatar() {
return this._getOption('showAvatar');
}
set showAvatar(value) {
this._setOption('showAvatar', value);
}
/**
* Specifies whether to show day headers.
*/
get showDayHeaders() {
return this._getOption('showDayHeaders');
}
set showDayHeaders(value) {
this._setOption('showDayHeaders', value);
}
/**
* Specifies whether to show message time stamps.
*/
get showMessageTimestamp() {
return this._getOption('showMessageTimestamp');
}
set showMessageTimestamp(value) {
this._setOption('showMessageTimestamp', value);
}
/**
* Specifies whether to show user names.
*/
get showUserName() {
return this._getOption('showUserName');
}
set showUserName(value) {
this._setOption('showUserName', value);
}
/**
* An array of users who are currently typing.
*/
get typingUsers() {
return this._getOption('typingUsers');
}
set typingUsers(value) {
this._setOption('typingUsers', value);
}
/**
* Specifies the current chat user (messages displayed on the right side).
*/
get user() {
return this._getOption('user');
}
set user(value) {
this._setOption('user', value);
}
/**
* Specifies whether the UI component is visible.
*/
get visible() {
return this._getOption('visible');
}
set visible(value) {
this._setOption('visible', value);
}
/**
* Specifies the UI component's width.
*/
get width() {
return this._getOption('width');
}
set width(value) {
this._setOption('width', value);
}
/**
* A function that is executed before the UI component is disposed of.
*/
onDisposing;
/**
* A function used in JavaScript frameworks to save the UI component instance.
*/
onInitialized;
/**
* A function that is executed after a message is entered into the chat.
*/
onMessageEntered;
/**
* A function that is executed after a UI component property is changed.
*/
onOptionChanged;
/**
* A function that is called 2 seconds after a user stops typing or after a message is entered.
*/
onTypingEnd;
/**
* A function that is called after a user starts typing.
*/
onTypingStart;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
accessKeyChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
activeStateEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
alertsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
dataSourceChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
dayHeaderFormatChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
disabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
elementAttrChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
focusStateEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
heightChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
hintChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
hoverStateEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
itemsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
messageTemplateChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
messageTimestampFormatChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
reloadOnChangeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
rtlEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
showAvatarChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
showDayHeadersChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
showMessageTimestampChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
showUserNameChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
typingUsersChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
userChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
visibleChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
widthChange;
get alertsChildren() {
return this._getOption('alerts');
}
set alertsChildren(value) {
this._setChildren('alerts', value, 'DxiChatAlertComponent');
}
get itemsChildren() {
return this._getOption('items');
}
set itemsChildren(value) {
this._setChildren('items', value, 'DxiChatItemComponent');
}
get typingUsersChildren() {
return this._getOption('typingUsers');
}
set typingUsersChildren(value) {
this._setChildren('typingUsers', value, 'DxiChatTypingUserComponent');
}
get alertsLegacyChildren() {
return this._getOption('alerts');
}
set alertsLegacyChildren(value) {
this._setChildren('alerts', value, 'DxiAlertComponent');
}
get itemsLegacyChildren() {
return this._getOption('items');
}
set itemsLegacyChildren(value) {
this._setChildren('items', value, 'DxiItemComponent');
}
get typingUsersLegacyChildren() {
return this._getOption('typingUsers');
}
set typingUsersLegacyChildren(value) {
this._setChildren('typingUsers', value, 'DxiTypingUserComponent');
}
constructor(elementRef, ngZone, templateHost, _watcherHelper, _idh, optionHost, transferState, platformId) {
super(elementRef, ngZone, templateHost, _watcherHelper, transferState, platformId);
this._watcherHelper = _watcherHelper;
this._idh = _idh;
this._createEventEmitters([
{ subscribe: 'disposing', emit: 'onDisposing' },
{ subscribe: 'initialized', emit: 'onInitialized' },
{ subscribe: 'messageEntered', emit: 'onMessageEntered' },
{ subscribe: 'optionChanged', emit: 'onOptionChanged' },
{ subscribe: 'typingEnd', emit: 'onTypingEnd' },
{ subscribe: 'typingStart', emit: 'onTypingStart' },
{ emit: 'accessKeyChange' },
{ emit: 'activeStateEnabledChange' },
{ emit: 'alertsChange' },
{ emit: 'dataSourceChange' },
{ emit: 'dayHeaderFormatChange' },
{ emit: 'disabledChange' },
{ emit: 'elementAttrChange' },
{ emit: 'focusStateEnabledChange' },
{ emit: 'heightChange' },
{ emit: 'hintChange' },
{ emit: 'hoverStateEnabledChange' },
{ emit: 'itemsChange' },
{ emit: 'messageTemplateChange' },
{ emit: 'messageTimestampFormatChange' },
{ emit: 'reloadOnChangeChange' },
{ emit: 'rtlEnabledChange' },
{ emit: 'showAvatarChange' },
{ emit: 'showDayHeadersChange' },
{ emit: 'showMessageTimestampChange' },
{ emit: 'showUserNameChange' },
{ emit: 'typingUsersChange' },
{ emit: 'userChange' },
{ emit: 'visibleChange' },
{ emit: 'widthChange' }
]);
this._idh.setHost(this);
optionHost.setHost(this);
}
_createInstance(element, options) {
return new DxChat(element, options);
}
ngOnDestroy() {
this._destroyWidget();
}
ngOnChanges(changes) {
super.ngOnChanges(changes);
this.setupChanges('alerts', changes);
this.setupChanges('dataSource', changes);
this.setupChanges('items', changes);
this.setupChanges('typingUsers', changes);
}
setupChanges(prop, changes) {
if (!(prop in this._optionsToUpdate)) {
this._idh.setup(prop, changes);
}
}
ngDoCheck() {
this._idh.doCheck('alerts');
this._idh.doCheck('dataSource');
this._idh.doCheck('items');
this._idh.doCheck('typingUsers');
this._watcherHelper.checkWatchers();
super.ngDoCheck();
super.clearChangedOptions();
}
_setOption(name, value) {
let isSetup = this._idh.setupSingle(name, value);
let isChanged = this._idh.getChanges(name, value) !== null;
if (isSetup || isChanged) {
super._setOption(name, value);
}
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxChatComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.DxTemplateHost }, { token: i1.WatcherHelper }, { token: i1.IterableDifferHelper }, { token: i1.NestedOptionHost }, { token: i0.TransferState }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DxChatComponent, selector: "dx-chat", inputs: { accessKey: "accessKey", activeStateEnabled: "activeStateEnabled", alerts: "alerts", dataSource: "dataSource", dayHeaderFormat: "dayHeaderFormat", disabled: "disabled", elementAttr: "elementAttr", focusStateEnabled: "focusStateEnabled", height: "height", hint: "hint", hoverStateEnabled: "hoverStateEnabled", items: "items", messageTemplate: "messageTemplate", messageTimestampFormat: "messageTimestampFormat", reloadOnChange: "reloadOnChange", rtlEnabled: "rtlEnabled", showAvatar: "showAvatar", showDayHeaders: "showDayHeaders", showMessageTimestamp: "showMessageTimestamp", showUserName: "showUserName", typingUsers: "typingUsers", user: "user", visible: "visible", width: "width" }, outputs: { onDisposing: "onDisposing", onInitialized: "onInitialized", onMessageEntered: "onMessageEntered", onOptionChanged: "onOptionChanged", onTypingEnd: "onTypingEnd", onTypingStart: "onTypingStart", accessKeyChange: "accessKeyChange", activeStateEnabledChange: "activeStateEnabledChange", alertsChange: "alertsChange", dataSourceChange: "dataSourceChange", dayHeaderFormatChange: "dayHeaderFormatChange", disabledChange: "disabledChange", elementAttrChange: "elementAttrChange", focusStateEnabledChange: "focusStateEnabledChange", heightChange: "heightChange", hintChange: "hintChange", hoverStateEnabledChange: "hoverStateEnabledChange", itemsChange: "itemsChange", messageTemplateChange: "messageTemplateChange", messageTimestampFormatChange: "messageTimestampFormatChange", reloadOnChangeChange: "reloadOnChangeChange", rtlEnabledChange: "rtlEnabledChange", showAvatarChange: "showAvatarChange", showDayHeadersChange: "showDayHeadersChange", showMessageTimestampChange: "showMessageTimestampChange", showUserNameChange: "showUserNameChange", typingUsersChange: "typingUsersChange", userChange: "userChange", visibleChange: "visibleChange", widthChange: "widthChange" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
], queries: [{ propertyName: "alertsChildren", predicate: DxiChatAlertComponent }, { propertyName: "itemsChildren", predicate: DxiChatItemComponent }, { propertyName: "typingUsersChildren", predicate: DxiChatTypingUserComponent }, { propertyName: "alertsLegacyChildren", predicate: DxiAlertComponent }, { propertyName: "itemsLegacyChildren", predicate: DxiItemComponent }, { propertyName: "typingUsersLegacyChildren", predicate: DxiTypingUserComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxChatComponent, decorators: [{
type: Component,
args: [{
selector: 'dx-chat',
template: '',
host: { ngSkipHydration: 'true' },
providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
]
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DxTemplateHost }, { type: i1.WatcherHelper }, { type: i1.IterableDifferHelper }, { type: i1.NestedOptionHost }, { type: i0.TransferState }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }], propDecorators: { accessKey: [{
type: Input
}], activeStateEnabled: [{
type: Input
}], alerts: [{
type: Input
}], dataSource: [{
type: Input
}], dayHeaderFormat: [{
type: Input
}], disabled: [{
type: Input
}], elementAttr: [{
type: Input
}], focusStateEnabled: [{
type: Input
}], height: [{
type: Input
}], hint: [{
type: Input
}], hoverStateEnabled: [{
type: Input
}], items: [{
type: Input
}], messageTemplate: [{
type: Input
}], messageTimestampFormat: [{
type: Input
}], reloadOnChange: [{
type: Input
}], rtlEnabled: [{
type: Input
}], showAvatar: [{
type: Input
}], showDayHeaders: [{
type: Input
}], showMessageTimestamp: [{
type: Input
}], showUserName: [{
type: Input
}], typingUsers: [{
type: Input
}], user: [{
type: Input
}], visible: [{
type: Input
}], width: [{
type: Input
}], onDisposing: [{
type: Output
}], onInitialized: [{
type: Output
}], onMessageEntered: [{
type: Output
}], onOptionChanged: [{
type: Output
}], onTypingEnd: [{
type: Output
}], onTypingStart: [{
type: Output
}], accessKeyChange: [{
type: Output
}], activeStateEnabledChange: [{
type: Output
}], alertsChange: [{
type: Output
}], dataSourceChange: [{
type: Output
}], dayHeaderFormatChange: [{
type: Output
}], disabledChange: [{
type: Output
}], elementAttrChange: [{
type: Output
}], focusStateEnabledChange: [{
type: Output
}], heightChange: [{
type: Output
}], hintChange: [{
type: Output
}], hoverStateEnabledChange: [{
type: Output
}], itemsChange: [{
type: Output
}], messageTemplateChange: [{
type: Output
}], messageTimestampFormatChange: [{
type: Output
}], reloadOnChangeChange: [{
type: Output
}], rtlEnabledChange: [{
type: Output
}], showAvatarChange: [{
type: Output
}], showDayHeadersChange: [{
type: Output
}], showMessageTimestampChange: [{
type: Output
}], showUserNameChange: [{
type: Output
}], typingUsersChange: [{
type: Output
}], userChange: [{
type: Output
}], visibleChange: [{
type: Output
}], widthChange: [{
type: Output
}], alertsChildren: [{
type: ContentChildren,
args: [DxiChatAlertComponent]
}], itemsChildren: [{
type: ContentChildren,
args: [DxiChatItemComponent]
}], typingUsersChildren: [{
type: ContentChildren,
args: [DxiChatTypingUserComponent]
}], alertsLegacyChildren: [{
type: ContentChildren,
args: [DxiAlertComponent]
}], itemsLegacyChildren: [{
type: ContentChildren,
args: [DxiItemComponent]
}], typingUsersLegacyChildren: [{
type: ContentChildren,
args: [DxiTypingUserComponent]
}] } });
class DxChatModule {
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxChatModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
/** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DxChatModule, declarations: [DxChatComponent], imports: [DxiAlertModule,
DxoDayHeaderFormatModule,
DxiItemModule,
DxoAuthorModule,
DxoMessageTimestampFormatModule,
DxiTypingUserModule,
DxoUserModule,
DxiChatAlertModule,
DxoChatAuthorModule,
DxoChatDayHeaderFormatModule,
DxiChatItemModule,
DxoChatMessageTimestampFormatModule,
DxiChatTypingUserModule,
DxoChatUserModule,
DxIntegrationModule,
DxTemplateModule], exports: [DxChatComponent, DxiAlertModule,
DxoDayHeaderFormatModule,
DxiItemModule,
DxoAuthorModule,
DxoMessageTimestampFormatModule,
DxiTypingUserModule,
DxoUserModule,
DxiChatAlertModule,
DxoChatAuthorModule,
DxoChatDayHeaderFormatModule,
DxiChatItemModule,
DxoChatMessageTimestampFormatModule,
DxiChatTypingUserModule,
DxoChatUserModule,
DxTemplateModule] });
/** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxChatModule, imports: [DxiAlertModule,
DxoDayHeaderFormatModule,
DxiItemModule,
DxoAuthorModule,
DxoMessageTimestampFormatModule,
DxiTypingUserModule,
DxoUserModule,
DxiChatAlertModule,
DxoChatAuthorModule,
DxoChatDayHeaderFormatModule,
DxiChatItemModule,
DxoChatMessageTimestampFormatModule,
DxiChatTypingUserModule,
DxoChatUserModule,
DxIntegrationModule,
DxTemplateModule, DxiAlertModule,
DxoDayHeaderFormatModule,
DxiItemModule,
DxoAuthorModule,
DxoMessageTimestampFormatModule,
DxiTypingUserModule,
DxoUserModule,
DxiChatAlertModule,
DxoChatAuthorModule,
DxoChatDayHeaderFormatModule,
DxiChatItemModule,
DxoChatMessageTimestampFormatModule,
DxiChatTypingUserModule,
DxoChatUserModule,
DxTemplateModule] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxChatModule, decorators: [{
type: NgModule,
args: [{
imports: [
DxiAlertModule,
DxoDayHeaderFormatModule,
DxiItemModule,
DxoAuthorModule,
DxoMessageTimestampFormatModule,
DxiTypingUserModule,
DxoUserModule,
DxiChatAlertModule,
DxoChatAuthorModule,
DxoChatDayHeaderFormatModule,
DxiChatItemModule,
DxoChatMessageTimestampFormatModule,
DxiChatTypingUserModule,
DxoChatUserModule,
DxIntegrationModule,
DxTemplateModule
],
declarations: [
DxChatComponent
],
exports: [
DxChatComponent,
DxiAlertModule,
DxoDayHeaderFormatModule,
DxiItemModule,
DxoAuthorModule,
DxoMessageTimestampFormatModule,
DxiTypingUserModule,
DxoUserModule,
DxiChatAlertModule,
DxoChatAuthorModule,
DxoChatDayHeaderFormatModule,
DxiChatItemModule,
DxoChatMessageTimestampFormatModule,
DxiChatTypingUserModule,
DxoChatUserModule,
DxTemplateModule
]
}]
}] });
/**
* Generated bundle index. Do not edit.
*/
export { DxChatComponent, DxChatModule };
//# sourceMappingURL=devextreme-angular-ui-chat.mjs.map