{"version":3,"file":"ng-cw-v20-editor.mjs","sources":["../../../projects/components/editor/editor.component.ts","../../../projects/components/editor/editor.component.html","../../../projects/components/editor/editor.module.ts","../../../projects/components/editor/ng-cw-v20-editor.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, PLATFORM_ID, Renderer2, ViewEncapsulation, inject, input, output } from '@angular/core';\nimport type { IDomEditor, IEditorConfig, IToolbarConfig, Toolbar } from '@wangeditor/editor';\n\nexport type NcModeType = 'default' | 'simple';\n\nlet editorId = 0;\n\n@Component({\n  selector: 'nc-editor',\n  templateUrl: './editor.component.html',\n  styleUrls: [\n    './editor.component.less',\n    '../../../node_modules/@wangeditor/editor/dist/css/style.css'\n  ],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorComponent {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly document = inject(DOCUMENT);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly renderer = inject(Renderer2);\n\n  /** 编辑器模式 */\n  ncEditorMode = input<NcModeType>('default');\n  /** 工具栏模式 */\n  ncToolbarMode = input<NcModeType>('default');\n  /** 编辑器配置 */\n  ncEditorConfig = input<Partial<IEditorConfig>>({});\n  /** 工具栏配置 */\n  ncToolbarConfig = input<Partial<IToolbarConfig>>({});\n  /** 初始化内容 */\n  ncHtml = input('<p><br></p>');\n  /** 编辑器容器id */\n  ncDomId = input(`nc-editor-${editorId++}`);\n  /** 编辑器加载完成事件 */\n  ncLoaded = output<{ editor: IDomEditor; toolbar: Toolbar }>();\n\n  editor!: IDomEditor;\n  toolbar!: Toolbar;\n\n  private editorInitialized = false;\n  private toolbarInitialized = false;\n  private destroyed = false;\n\n  constructor() {\n    this.destroyRef.onDestroy(() => this.destroyEditor());\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n\n    //默认工具栏配置\n    const toolbarConfig: Partial<IToolbarConfig> = {\n      excludeKeys: ['group-video', 'insertImage']\n    };\n\n    //默认菜单栏和编辑器配置\n    const editorConfig: Partial<IEditorConfig> = {\n      //菜单栏配置\n      MENU_CONF: {\n        uploadImage: {\n          server: '',\n          base64LimitSize: 10 * 1024 * 1024\n        }\n      },\n      //编辑器配置\n      placeholder: '请输入内容...'\n    };\n\n    try {\n      const { createEditor, createToolbar } = await import('@wangeditor/editor');\n      if (this.destroyed) {\n        return;\n      }\n\n      this.editor = createEditor({\n        selector: `#${this.ncDomId()}-editor`,\n        html: this.ncHtml(),\n        config: Object.assign({}, editorConfig, this.ncEditorConfig()),\n        mode: this.ncEditorMode()\n      });\n      this.editorInitialized = true;\n\n      this.toolbar = createToolbar({\n        editor: this.editor,\n        selector: `#${this.ncDomId()}-toolbar`,\n        config: Object.assign({}, toolbarConfig, this.ncToolbarConfig()),\n        mode: this.ncToolbarMode()\n      });\n      this.toolbarInitialized = true;\n\n      // console.log(Object.assign({}, editorConfig, this.ncEditorConfig()));\n      // console.log(Object.assign({}, toolbarConfig, this.ncToolbarConfig()));\n      // console.log(this.editor.getAllMenuKeys());\n      console.log(this.toolbar.getConfig().toolbarKeys);\n\n      this.ncLoaded.emit({ editor: this.editor, toolbar: this.toolbar });\n    } catch (error) {\n      const editorReturned = this.editorInitialized;\n      this.destroyEditor();\n      if (!editorReturned) {\n        this.removeEditorTextareaMarker();\n      }\n      throw error;\n    }\n  }\n\n  private destroyEditor(): void {\n    if (this.destroyed) {\n      return;\n    }\n    this.destroyed = true;\n\n    try {\n      if (this.editorInitialized) {\n        this.editor.destroy();\n      }\n    } finally {\n      if (this.toolbarInitialized) {\n        this.toolbar.destroy();\n      }\n      this.editorInitialized = false;\n      this.toolbarInitialized = false;\n    }\n  }\n\n  private removeEditorTextareaMarker(): void {\n    const editorElement = this.document.getElementById(`${this.ncDomId()}-editor`);\n    if (editorElement) {\n      this.renderer.removeAttribute(editorElement, 'data-w-e-textarea');\n    }\n  }\n}\n","<div class=\"editor—wrapper\" [id]=\"ncDomId()\">\r\n    <div class=\"toolbar-container\" [id]=\"ncDomId() + '-toolbar'\"><!-- 工具栏 --></div>\r\n    <div class=\"editor-container\" [id]=\"ncDomId() + '-editor'\"><!-- 编辑器 --></div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EditorComponent } from './editor.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        EditorComponent,\r\n        CommonModule\r\n    ],\r\n    exports: [\r\n        EditorComponent\r\n    ]\r\n})\r\nexport class NcEditorModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}