UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

1,128 lines (1,001 loc) 106 kB
/*! * 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 */ import { TransferState, Component, NgModule, ElementRef, NgZone, PLATFORM_ID, Inject, Input, Output, EventEmitter, forwardRef, HostListener, ContentChildren, QueryList } from '@angular/core'; 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 { DxoVariablesModule } from 'devextreme-angular/ui/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 { DxiMentionComponent } from 'devextreme-angular/ui/nested'; import { DxiHtmlEditorMentionComponent } from 'devextreme-angular/ui/html-editor/nested'; 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; 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); } /** * 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 the validation rules that failed. */ 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, which are placeholders to be replaced with actual values when processing text. */ 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. */ 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 = (_) => { }; get mentionsChildren() { return this._getOption('mentions'); } set mentionsChildren(value) { this._setChildren('mentions', value, 'DxiHtmlEditorMentionComponent'); } get mentionsLegacyChildren() { return this._getOption('mentions'); } set mentionsLegacyChildren(value) { this._setChildren('mentions', value, 'DxiMentionComponent'); } 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: '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, selector: "dx-html-editor", inputs: { accessKey: "accessKey", activeStateEnabled: "activeStateEnabled", 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", 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: "mentionsChildren", predicate: DxiHtmlEditorMentionComponent }, { propertyName: "mentionsLegacyChildren", predicate: DxiMentionComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxHtmlEditorComponent, decorators: [{ type: Component, args: [{ selector: 'dx-html-editor', template: '<ng-content></ng-content>', host: { ngSkipHydration: 'true' }, 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: { accessKey: [{ type: Input }], activeStateEnabled: [{ 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 }], 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']] }], mentionsChildren: [{ type: ContentChildren, args: [DxiHtmlEditorMentionComponent] }], mentionsLegacyChildren: [{ type: ContentChildren, args: [DxiMentionComponent] }] } }); 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, declarations: [DxHtmlEditorComponent], imports: [DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxoVariablesModule, 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, DxoVariablesModule, 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: [DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxoVariablesModule, 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, DxoVariablesModule, 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: [ DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxoVariablesModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxIntegrationModule, DxTemplateModule ], declarations: [ DxHtmlEditorComponent ], exports: [ DxHtmlEditorComponent, DxoConverterModule, DxoImageUploadModule, DxoFileUploaderOptionsModule, DxiTabModule, DxoMediaResizingModule, DxiMentionModule, DxoTableContextMenuModule, DxiItemModule, DxoTableResizingModule, DxoToolbarModule, DxoVariablesModule, DxoHtmlEditorConverterModule, DxoHtmlEditorFileUploaderOptionsModule, DxoHtmlEditorImageUploadModule, DxiHtmlEditorItemModule, DxoHtmlEditorMediaResizingModule, DxiHtmlEditorMentionModule, DxiHtmlEditorTabModule, DxoHtmlEditorTableContextMenuModule, DxiHtmlEditorTableContextMenuItemModule, DxoHtmlEditorTableResizingModule, DxoHtmlEditorToolbarModule, DxiHtmlEditorToolbarItemModule, DxoHtmlEditorVariablesModule, DxTemplateModule ] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kaXN0L3VpL2h0bWwtZWRpdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsb0NBQW9DO0FBR3BDLE9BQU8sRUFDSCxhQUFhLEVBQ2IsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFJWixlQUFlLEVBQ2YsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBRXJELE9BQU8sRUFFSCxpQkFBaUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0gsV0FBVyxFQUNYLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNC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