UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

1,171 lines (1,041 loc) 111 kB
/*! * devextreme-angular * Version: 25.2.3 * Build date: Fri Dec 12 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 */ import { TransferState, Component, NgModule, ElementRef, NgZone, PLATFORM_ID, Inject, Input, Output, EventEmitter, forwardRef, HostListener, ContentChildren, QueryList } from '@angular/core'; import { AIIntegration } from 'devextreme/common/ai-integration'; import DxHtmlEditor from 'devextreme/ui/html_editor'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { DxComponent, DxTemplateHost, DxIntegrationModule, DxTemplateModule, NestedOptionHost, IterableDifferHelper, WatcherHelper, } from 'devextreme-angular/core'; import { DxoConverterModule } from 'devextreme-angular/ui/nested'; import { DxoImageUploadModule } from 'devextreme-angular/ui/nested'; import { DxoFileUploaderOptionsModule } from 'devextreme-angular/ui/nested'; import { DxiTabModule } from 'devextreme-angular/ui/nested'; import { DxoMediaResizingModule } from 'devextreme-angular/ui/nested'; import { DxiMentionModule } from 'devextreme-angular/ui/nested'; import { DxoTableContextMenuModule } from 'devextreme-angular/ui/nested'; import { DxiItemModule } from 'devextreme-angular/ui/nested'; import { DxoTableResizingModule } from 'devextreme-angular/ui/nested'; import { DxoToolbarModule } from 'devextreme-angular/ui/nested'; import { DxiCommandModule } from 'devextreme-angular/ui/nested'; import { DxoVariablesModule } from 'devextreme-angular/ui/nested'; import { DxiHtmlEditorCommandModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorConverterModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorFileUploaderOptionsModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorImageUploadModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxiHtmlEditorItemModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorMediaResizingModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxiHtmlEditorMentionModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxiHtmlEditorTabModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorTableContextMenuModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxiHtmlEditorTableContextMenuItemModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorTableResizingModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorToolbarModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxiHtmlEditorToolbarItemModule } from 'devextreme-angular/ui/html-editor/nested'; import { DxoHtmlEditorVariablesModule } from 'devextreme-angular/ui/html-editor/nested'; import { PROPERTY_TOKEN_commands, PROPERTY_TOKEN_items, PROPERTY_TOKEN_mentions, PROPERTY_TOKEN_tabs, } from 'devextreme-angular/core/tokens'; import * as i0 from "@angular/core"; import * as i1 from "devextreme-angular/core"; const CUSTOM_VALUE_ACCESSOR_PROVIDER = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DxHtmlEditorComponent), multi: true }; /** * HTML Editor is a WYSIWYG editor that allows you to format textual and visual content and to output it in HTML. HTML Editor is built on top of and requires the DevExtreme Quill. */ export class DxHtmlEditorComponent extends DxComponent { _watcherHelper; _idh; set _commandsContentChildren(value) { this.setChildren('commands', value); } set _itemsContentChildren(value) { this.setChildren('items', value); } set _mentionsContentChildren(value) { this.setChildren('mentions', value); } set _tabsContentChildren(value) { this.setChildren('tabs', value); } 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); } /** * Binds the AI service to the HTML Editor. */ get aiIntegration() { return this._getOption('aiIntegration'); } set aiIntegration(value) { this._setOption('aiIntegration', value); } /** * Allows users to break content into multiple lines within a single block element. The Shift + Enter key combination generates the new line. */ get allowSoftLineBreak() { return this._getOption('allowSoftLineBreak'); } set allowSoftLineBreak(value) { this._setOption('allowSoftLineBreak', value); } /** * Allows you to convert an HTML Editor value between different markups. */ get converter() { return this._getOption('converter'); } set converter(value) { this._setOption('converter', value); } /** * Allows you to customize the DevExtreme Quill and 3rd-party modules. */ get customizeModules() { return this._getOption('customizeModules'); } set customizeModules(value) { this._setOption('customizeModules', 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&apos;s container element. */ get elementAttr() { return this._getOption('elementAttr'); } set elementAttr(value) { this._setOption('elementAttr', value); } /** * Specifies whether the UI component can be focused using keyboard navigation. */ get focusStateEnabled() { return this._getOption('focusStateEnabled'); } set focusStateEnabled(value) { this._setOption('focusStateEnabled', value); } /** * Specifies the UI component&apos;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); } /** * Configures the image upload. */ get imageUpload() { return this._getOption('imageUpload'); } set imageUpload(value) { this._setOption('imageUpload', value); } /** * Specifies whether the component&apos;s current value differs from the initial value. */ get isDirty() { return this._getOption('isDirty'); } set isDirty(value) { this._setOption('isDirty', value); } /** * Specifies or indicates whether the editor&apos;s value is valid. */ get isValid() { return this._getOption('isValid'); } set isValid(value) { this._setOption('isValid', value); } /** * Configures media resizing. */ get mediaResizing() { return this._getOption('mediaResizing'); } set mediaResizing(value) { this._setOption('mediaResizing', value); } /** * Configures mentions. */ get mentions() { return this._getOption('mentions'); } set mentions(value) { this._setOption('mentions', value); } /** * The value to be assigned to the `name` attribute of the underlying HTML element. */ get name() { return this._getOption('name'); } set name(value) { this._setOption('name', value); } /** * Specifies the text displayed when the input field is empty. */ get placeholder() { return this._getOption('placeholder'); } set placeholder(value) { this._setOption('placeholder', value); } /** * Specifies whether the editor is read-only. */ get readOnly() { return this._getOption('readOnly'); } set readOnly(value) { this._setOption('readOnly', 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 how the HTML Editor&apos;s toolbar and content field are styled. */ get stylingMode() { return this._getOption('stylingMode'); } set stylingMode(value) { this._setOption('stylingMode', value); } /** * Specifies the number of the element when the Tab key is used for navigating. */ get tabIndex() { return this._getOption('tabIndex'); } set tabIndex(value) { this._setOption('tabIndex', value); } /** * Configures table context menu settings. */ get tableContextMenu() { return this._getOption('tableContextMenu'); } set tableContextMenu(value) { this._setOption('tableContextMenu', value); } /** * Configures table resize. */ get tableResizing() { return this._getOption('tableResizing'); } set tableResizing(value) { this._setOption('tableResizing', value); } /** * Configures the UI component&apos;s toolbar. */ get toolbar() { return this._getOption('toolbar'); } set toolbar(value) { this._setOption('toolbar', value); } /** * Information on the broken validation rule. Contains the first item from the validationErrors array. */ get validationError() { return this._getOption('validationError'); } set validationError(value) { this._setOption('validationError', value); } /** * An array of validation errors. */ get validationErrors() { return this._getOption('validationErrors'); } set validationErrors(value) { this._setOption('validationErrors', value); } /** * Specifies how the message about the validation rules that are not satisfied by this editor&apos;s value is displayed. */ get validationMessageMode() { return this._getOption('validationMessageMode'); } set validationMessageMode(value) { this._setOption('validationMessageMode', value); } /** * Specifies the position of a validation message relative to the component. The validation message describes the validation rules that this component&apos;s value does not satisfy. */ get validationMessagePosition() { return this._getOption('validationMessagePosition'); } set validationMessagePosition(value) { this._setOption('validationMessagePosition', value); } /** * Indicates or specifies the current validation status. */ get validationStatus() { return this._getOption('validationStatus'); } set validationStatus(value) { this._setOption('validationStatus', value); } /** * Specifies the UI component&apos;s value. */ get value() { return this._getOption('value'); } set value(value) { this._setOption('value', value); } /** * Configures variables that are placeholders for values created once text is processed. */ get variables() { return this._getOption('variables'); } set variables(value) { this._setOption('variables', 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&apos;s width. */ get width() { return this._getOption('width'); } set width(value) { this._setOption('width', value); } /** * A function that is executed when the UI component is rendered and each time the component is repainted. */ onContentReady; /** * A function that is executed before the UI component is disposed of. */ onDisposing; /** * A function that is executed when the UI component gets focus. */ onFocusIn; /** * A function that is executed when the UI component loses focus. */ onFocusOut; /** * A function used in JavaScript frameworks to save the UI component instance. */ onInitialized; /** * A function that is executed after a UI component property is changed. */ onOptionChanged; /** * A function that is executed after the UI component&apos;s value is changed. */ onValueChanged; /** * 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. */ aiIntegrationChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ allowSoftLineBreakChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ converterChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ customizeModulesChange; /** * 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. */ imageUploadChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ isDirtyChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ isValidChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ mediaResizingChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ mentionsChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ nameChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ placeholderChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ readOnlyChange; /** * 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. */ stylingModeChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ tabIndexChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ tableContextMenuChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ tableResizingChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ toolbarChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ validationErrorChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ validationErrorsChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ validationMessageModeChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ validationMessagePositionChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ validationStatusChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ valueChange; /** * This member supports the internal infrastructure and is not intended to be used directly from your code. */ variablesChange; /** * 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; /** * */ onBlur; change(_) { } touched = (_) => { }; 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: 'contentReady', emit: 'onContentReady' }, { subscribe: 'disposing', emit: 'onDisposing' }, { subscribe: 'focusIn', emit: 'onFocusIn' }, { subscribe: 'focusOut', emit: 'onFocusOut' }, { subscribe: 'initialized', emit: 'onInitialized' }, { subscribe: 'optionChanged', emit: 'onOptionChanged' }, { subscribe: 'valueChanged', emit: 'onValueChanged' }, { emit: 'accessKeyChange' }, { emit: 'activeStateEnabledChange' }, { emit: 'aiIntegrationChange' }, { emit: 'allowSoftLineBreakChange' }, { emit: 'converterChange' }, { emit: 'customizeModulesChange' }, { emit: 'disabledChange' }, { emit: 'elementAttrChange' }, { emit: 'focusStateEnabledChange' }, { emit: 'heightChange' }, { emit: 'hintChange' }, { emit: 'hoverStateEnabledChange' }, { emit: 'imageUploadChange' }, { emit: 'isDirtyChange' }, { emit: 'isValidChange' }, { emit: 'mediaResizingChange' }, { emit: 'mentionsChange' }, { emit: 'nameChange' }, { emit: 'placeholderChange' }, { emit: 'readOnlyChange' }, { emit: 'rtlEnabledChange' }, { emit: 'stylingModeChange' }, { emit: 'tabIndexChange' }, { emit: 'tableContextMenuChange' }, { emit: 'tableResizingChange' }, { emit: 'toolbarChange' }, { emit: 'validationErrorChange' }, { emit: 'validationErrorsChange' }, { emit: 'validationMessageModeChange' }, { emit: 'validationMessagePositionChange' }, { emit: 'validationStatusChange' }, { emit: 'valueChange' }, { emit: 'variablesChange' }, { emit: 'visibleChange' }, { emit: 'widthChange' }, { emit: 'onBlur' } ]); this._idh.setHost(this); optionHost.setHost(this); } _createInstance(element, options) { return new DxHtmlEditor(element, options); } writeValue(value) { this.eventHelper.lockedValueChangeEvent = true; this.value = value; this.eventHelper.lockedValueChangeEvent = false; } setDisabledState(isDisabled) { this.disabled = isDisabled; } registerOnChange(fn) { this.change = fn; } registerOnTouched(fn) { this.touched = fn; } _createWidget(element) { super._createWidget(element); this.instance.on('focusOut', (e) => { this.eventHelper.fireNgEvent('onBlur', [e]); }); } ngOnDestroy() { this._destroyWidget(); } ngOnChanges(changes) { super.ngOnChanges(changes); this.setupChanges('mentions', changes); this.setupChanges('validationErrors', changes); } setupChanges(prop, changes) { if (!(prop in this._optionsToUpdate)) { this._idh.setup(prop, changes); } } ngDoCheck() { this._idh.doCheck('mentions'); this._idh.doCheck('validationErrors'); 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: DxHtmlEditorComponent, 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: DxHtmlEditorComponent, isStandalone: true, selector: "dx-html-editor", inputs: { accessKey: "accessKey", activeStateEnabled: "activeStateEnabled", aiIntegration: "aiIntegration", allowSoftLineBreak: "allowSoftLineBreak", converter: "converter", customizeModules: "customizeModules", disabled: "disabled", elementAttr: "elementAttr", focusStateEnabled: "focusStateEnabled", height: "height", hint: "hint", hoverStateEnabled: "hoverStateEnabled", imageUpload: "imageUpload", isDirty: "isDirty", isValid: "isValid", mediaResizing: "mediaResizing", mentions: "mentions", name: "name", placeholder: "placeholder", readOnly: "readOnly", rtlEnabled: "rtlEnabled", stylingMode: "stylingMode", tabIndex: "tabIndex", tableContextMenu: "tableContextMenu", tableResizing: "tableResizing", toolbar: "toolbar", validationError: "validationError", validationErrors: "validationErrors", validationMessageMode: "validationMessageMode", validationMessagePosition: "validationMessagePosition", validationStatus: "validationStatus", value: "value", variables: "variables", visible: "visible", width: "width" }, outputs: { onContentReady: "onContentReady", onDisposing: "onDisposing", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onInitialized: "onInitialized", onOptionChanged: "onOptionChanged", onValueChanged: "onValueChanged", accessKeyChange: "accessKeyChange", activeStateEnabledChange: "activeStateEnabledChange", aiIntegrationChange: "aiIntegrationChange", allowSoftLineBreakChange: "allowSoftLineBreakChange", converterChange: "converterChange", customizeModulesChange: "customizeModulesChange", disabledChange: "disabledChange", elementAttrChange: "elementAttrChange", focusStateEnabledChange: "focusStateEnabledChange", heightChange: "heightChange", hintChange: "hintChange", hoverStateEnabledChange: "hoverStateEnabledChange", imageUploadChange: "imageUploadChange", isDirtyChange: "isDirtyChange", isValidChange: "isValidChange", mediaResizingChange: "mediaResizingChange", mentionsChange: "mentionsChange", nameChange: "nameChange", placeholderChange: "placeholderChange", readOnlyChange: "readOnlyChange", rtlEnabledChange: "rtlEnabledChange", stylingModeChange: "stylingModeChange", tabIndexChange: "tabIndexChange", tableContextMenuChange: "tableContextMenuChange", tableResizingChange: "tableResizingChange", toolbarChange: "toolbarChange", validationErrorChange: "validationErrorChange", validationErrorsChange: "validationErrorsChange", validationMessageModeChange: "validationMessageModeChange", validationMessagePositionChange: "validationMessagePositionChange", validationStatusChange: "validationStatusChange", valueChange: "valueChange", variablesChange: "variablesChange", visibleChange: "visibleChange", widthChange: "widthChange", onBlur: "onBlur" }, host: { attributes: { "ngSkipHydration": "true" }, listeners: { "valueChange": "change($event)", "onBlur": "touched($event)" } }, providers: [ DxTemplateHost, WatcherHelper, CUSTOM_VALUE_ACCESSOR_PROVIDER, NestedOptionHost, IterableDifferHelper ], queries: [{ propertyName: "_commandsContentChildren", predicate: PROPERTY_TOKEN_commands }, { propertyName: "_itemsContentChildren", predicate: PROPERTY_TOKEN_items }, { propertyName: "_mentionsContentChildren", predicate: PROPERTY_TOKEN_mentions }, { propertyName: "_tabsContentChildren", predicate: PROPERTY_TOKEN_tabs }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, dependencies: [{ kind: "ngmodule", type: DxIntegrationModule }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxHtmlEditorComponent, decorators: [{ type: Component, args: [{ selector: 'dx-html-editor', standalone: true, template: '<ng-content></ng-content>', host: { ngSkipHydration: 'true' }, imports: [DxIntegrationModule], providers: [ DxTemplateHost, WatcherHelper, CUSTOM_VALUE_ACCESSOR_PROVIDER, 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: { _commandsContentChildren: [{ type: ContentChildren, args: [PROPERTY_TOKEN_commands] }], _itemsContentChildren: [{ type: ContentChildren, args: [PROPERTY_TOKEN_items] }], _mentionsContentChildren: [{ type: ContentChildren, args: [PROPERTY_TOKEN_mentions] }], _tabsContentChildren: [{ type: ContentChildren, args: [PROPERTY_TOKEN_tabs] }], accessKey: [{ type: Input }], activeStateEnabled: [{ type: Input }], aiIntegration: [{ type: Input }], allowSoftLineBreak: [{ type: Input }], converter: [{ type: Input }], customizeModules: [{ type: Input }], disabled: [{ type: Input }], elementAttr: [{ type: Input }], focusStateEnabled: [{ type: Input }], height: [{ type: Input }], hint: [{ type: Input }], hoverStateEnabled: [{ type: Input }], imageUpload: [{ type: Input }], isDirty: [{ type: Input }], isValid: [{ type: Input }], mediaResizing: [{ type: Input }], mentions: [{ type: Input }], name: [{ type: Input }], placeholder: [{ type: Input }], readOnly: [{ type: Input }], rtlEnabled: [{ type: Input }], stylingMode: [{ type: Input }], tabIndex: [{ type: Input }], tableContextMenu: [{ type: Input }], tableResizing: [{ type: Input }], toolbar: [{ type: Input }], validationError: [{ type: Input }], validationErrors: [{ type: Input }], validationMessageMode: [{ type: Input }], validationMessagePosition: [{ type: Input }], validationStatus: [{ type: Input }], value: [{ type: Input }], variables: [{ type: Input }], visible: [{ type: Input }], width: [{ type: Input }], onContentReady: [{ type: Output }], onDisposing: [{ type: Output }], onFocusIn: [{ type: Output }], onFocusOut: [{ type: Output }], onInitialized: [{ type: Output }], onOptionChanged: [{ type: Output }], onValueChanged: [{ type: Output }], accessKeyChange: [{ type: Output }], activeStateEnabledChange: [{ type: Output }], aiIntegrationChange: [{ type: Output }], allowSoftLineBreakChange: [{ type: Output }], converterChange: [{ type: Output }], customizeModulesChange: [{ type: Output }], disabledChange: [{ type: Output }], elementAttrChange: [{ type: Output }], focusStateEnabledChange: [{ type: Output }], heightChange: [{ type: Output }], hintChange: [{ type: Output }], hoverStateEnabledChange: [{ type: Output }], imageUploadChange: [{ type: Output }], isDirtyChange: [{ type: Output }], isValidChange: [{ type: Output }], mediaResizingChange: [{ type: Output }], mentionsChange: [{ type: Output }], nameChange: [{ type: Output }], placeholderChange: [{ type: Output }], readOnlyChange: [{ type: Output }], rtlEnabledChange: [{ type: Output }], stylingModeChange: [{ type: Output }], tabIndexChange: [{ type: Output }], tableContextMenuChange: [{ type: Output }], tableResizingChange: [{ type: Output }], toolbarChange: [{ type: Output }], validationErrorChange: [{ type: Output }], validationErrorsChange: [{ type: Output }], validationMessageModeChange: [{ type: Output }], validationMessagePositionChange: [{ type: Output }], validationStatusChange: [{ type: Output }], valueChange: [{ type: Output }], variablesChange: [{ type: Output }], visibleChange: [{ type: Output }], widthChange: [{ type: Output }], onBlur: [{ type: Output }], change: [{ type: HostListener, args: ['valueChange', ['$event']] }], touched: [{ type: HostListener, args: ['onBlur', ['$event']] }] } }); export class DxHtmlEditorModule { /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxHtmlEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DxHtmlEditorModule, imports: [DxHtmlEditorComponent, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxiCommandModule, DxoVariablesModule, DxiHtmlEditorCommandModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxIntegrationModule, DxTemplateModule], exports: [DxHtmlEditorComponent, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxiCommandModule, DxoVariablesModule, DxiHtmlEditorCommandModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxTemplateModule] }); /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxHtmlEditorModule, imports: [DxHtmlEditorComponent, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxiCommandModule, DxoVariablesModule, DxiHtmlEditorCommandModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxIntegrationModule, DxTemplateModule, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxiCommandModule, DxoVariablesModule, DxiHtmlEditorCommandModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxTemplateModule] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxHtmlEditorModule, decorators: [{ type: NgModule, args: [{ imports: [ DxHtmlEditorComponent, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxiCommandModule, DxoVariablesModule, DxiHtmlEditorCommandModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxIntegrationModule, DxTemplateModule ], exports: [ DxHtmlEditorComponent, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxiCommandModule, DxoVariablesModule, DxiHtmlEditorCommandModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxTemplateModule ] }] }] }); export * from 'devextreme-angular/ui/html-editor/nested'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kaXN0L3VpL2h0bWwtZWRpdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsb0NBQW9DO0FBR3BDLE9BQU8sRUFDSCxhQUFhLEVBQ2IsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFJWixlQUFlLEVBQ2YsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUlqRSxPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUVyRCxPQUFPLEVBRUgsaUJBQWlCLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNILFdBQVcsRUFDWCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGFBQWEsR0FFaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFB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