@opentiny/fluent-editor 4.0.0-beta.0 → 4.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/config/i18n/en-us.es.js +0 -2
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js +0 -2
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/fluent-editor.es.js +0 -6
- package/es/fluent-editor.es.js.map +1 -1
- package/es/index.es.js +0 -4
- package/es/index.es.js.map +1 -1
- package/es/modules/index.es.js +0 -4
- package/es/modules/index.es.js.map +1 -1
- package/es/modules/shortcut-key/index.es.js +0 -16
- package/es/modules/shortcut-key/index.es.js.map +1 -1
- package/es/ui/icons.config.es.js +0 -4
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js +2 -4
- package/es/ui/icons.es.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js +0 -2
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js +0 -2
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +2 -8
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/index.cjs.js +5 -9
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/index.cjs.js +5 -9
- package/lib/modules/index.cjs.js.map +1 -1
- package/lib/modules/shortcut-key/index.cjs.js +0 -16
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js +1 -3
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js +0 -4
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/package.json +1 -3
- package/types/config/i18n/en-us.d.ts +0 -2
- package/types/config/i18n/zh-cn.d.ts +0 -2
- package/types/config/types/editor-modules.interface.d.ts +0 -4
- package/types/modules/index.d.ts +0 -2
- package/types/ui/icons.config.d.ts +0 -2
- package/es/modules/ai/constants.es.js +0 -50
- package/es/modules/ai/constants.es.js.map +0 -1
- package/es/modules/ai/icons.es.js +0 -319
- package/es/modules/ai/icons.es.js.map +0 -1
- package/es/modules/ai/index.es.js +0 -670
- package/es/modules/ai/index.es.js.map +0 -1
- package/es/modules/flow-chart/config-utils.es.js +0 -102
- package/es/modules/flow-chart/config-utils.es.js.map +0 -1
- package/es/modules/flow-chart/formats/flow-chart-blot.es.js +0 -369
- package/es/modules/flow-chart/formats/flow-chart-blot.es.js.map +0 -1
- package/es/modules/flow-chart/i18n/en-us.es.js +0 -30
- package/es/modules/flow-chart/i18n/en-us.es.js.map +0 -1
- package/es/modules/flow-chart/i18n/index.es.js +0 -12
- package/es/modules/flow-chart/i18n/index.es.js.map +0 -1
- package/es/modules/flow-chart/i18n/zh-cn.es.js +0 -30
- package/es/modules/flow-chart/i18n/zh-cn.es.js.map +0 -1
- package/es/modules/flow-chart/icons.es.js +0 -27
- package/es/modules/flow-chart/icons.es.js.map +0 -1
- package/es/modules/flow-chart/index.es.js +0 -45
- package/es/modules/flow-chart/index.es.js.map +0 -1
- package/es/modules/flow-chart/modules/context-menu.es.js +0 -184
- package/es/modules/flow-chart/modules/context-menu.es.js.map +0 -1
- package/es/modules/flow-chart/modules/control-panel.es.js +0 -286
- package/es/modules/flow-chart/modules/control-panel.es.js.map +0 -1
- package/es/modules/flow-chart/modules/custom-resize-action.es.js +0 -150
- package/es/modules/flow-chart/modules/custom-resize-action.es.js.map +0 -1
- package/es/modules/mind-map/config-utils.es.js +0 -108
- package/es/modules/mind-map/config-utils.es.js.map +0 -1
- package/es/modules/mind-map/formats/mind-map-blot.es.js +0 -356
- package/es/modules/mind-map/formats/mind-map-blot.es.js.map +0 -1
- package/es/modules/mind-map/i18n/en-us.es.js +0 -29
- package/es/modules/mind-map/i18n/en-us.es.js.map +0 -1
- package/es/modules/mind-map/i18n/index.es.js +0 -12
- package/es/modules/mind-map/i18n/index.es.js.map +0 -1
- package/es/modules/mind-map/i18n/zh-cn.es.js +0 -29
- package/es/modules/mind-map/i18n/zh-cn.es.js.map +0 -1
- package/es/modules/mind-map/icons.es.js +0 -45
- package/es/modules/mind-map/icons.es.js.map +0 -1
- package/es/modules/mind-map/index.es.js +0 -56
- package/es/modules/mind-map/index.es.js.map +0 -1
- package/es/modules/mind-map/modules/context-menu.es.js +0 -128
- package/es/modules/mind-map/modules/context-menu.es.js.map +0 -1
- package/es/modules/mind-map/modules/control-panel.es.js +0 -425
- package/es/modules/mind-map/modules/control-panel.es.js.map +0 -1
- package/es/modules/mind-map/modules/custom-resize-action.es.js +0 -161
- package/es/modules/mind-map/modules/custom-resize-action.es.js.map +0 -1
- package/flow-chart.css +0 -185
- package/lib/modules/ai/constants.cjs.js +0 -50
- package/lib/modules/ai/constants.cjs.js.map +0 -1
- package/lib/modules/ai/icons.cjs.js +0 -319
- package/lib/modules/ai/icons.cjs.js.map +0 -1
- package/lib/modules/ai/index.cjs.js +0 -670
- package/lib/modules/ai/index.cjs.js.map +0 -1
- package/lib/modules/flow-chart/config-utils.cjs.js +0 -102
- package/lib/modules/flow-chart/config-utils.cjs.js.map +0 -1
- package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js +0 -369
- package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js.map +0 -1
- package/lib/modules/flow-chart/i18n/en-us.cjs.js +0 -30
- package/lib/modules/flow-chart/i18n/en-us.cjs.js.map +0 -1
- package/lib/modules/flow-chart/i18n/index.cjs.js +0 -12
- package/lib/modules/flow-chart/i18n/index.cjs.js.map +0 -1
- package/lib/modules/flow-chart/i18n/zh-cn.cjs.js +0 -30
- package/lib/modules/flow-chart/i18n/zh-cn.cjs.js.map +0 -1
- package/lib/modules/flow-chart/icons.cjs.js +0 -27
- package/lib/modules/flow-chart/icons.cjs.js.map +0 -1
- package/lib/modules/flow-chart/index.cjs.js +0 -45
- package/lib/modules/flow-chart/index.cjs.js.map +0 -1
- package/lib/modules/flow-chart/modules/context-menu.cjs.js +0 -184
- package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +0 -1
- package/lib/modules/flow-chart/modules/control-panel.cjs.js +0 -286
- package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +0 -1
- package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js +0 -150
- package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js.map +0 -1
- package/lib/modules/mind-map/config-utils.cjs.js +0 -108
- package/lib/modules/mind-map/config-utils.cjs.js.map +0 -1
- package/lib/modules/mind-map/formats/mind-map-blot.cjs.js +0 -356
- package/lib/modules/mind-map/formats/mind-map-blot.cjs.js.map +0 -1
- package/lib/modules/mind-map/i18n/en-us.cjs.js +0 -29
- package/lib/modules/mind-map/i18n/en-us.cjs.js.map +0 -1
- package/lib/modules/mind-map/i18n/index.cjs.js +0 -12
- package/lib/modules/mind-map/i18n/index.cjs.js.map +0 -1
- package/lib/modules/mind-map/i18n/zh-cn.cjs.js +0 -29
- package/lib/modules/mind-map/i18n/zh-cn.cjs.js.map +0 -1
- package/lib/modules/mind-map/icons.cjs.js +0 -45
- package/lib/modules/mind-map/icons.cjs.js.map +0 -1
- package/lib/modules/mind-map/index.cjs.js +0 -56
- package/lib/modules/mind-map/index.cjs.js.map +0 -1
- package/lib/modules/mind-map/modules/context-menu.cjs.js +0 -128
- package/lib/modules/mind-map/modules/context-menu.cjs.js.map +0 -1
- package/lib/modules/mind-map/modules/control-panel.cjs.js +0 -425
- package/lib/modules/mind-map/modules/control-panel.cjs.js.map +0 -1
- package/lib/modules/mind-map/modules/custom-resize-action.cjs.js +0 -161
- package/lib/modules/mind-map/modules/custom-resize-action.cjs.js.map +0 -1
- package/mind-map.css +0 -224
- package/types/modules/ai/constants.d.ts +0 -30
- package/types/modules/ai/icons.d.ts +0 -21
- package/types/modules/ai/index.d.ts +0 -96
- package/types/modules/ai/types.d.ts +0 -16
- package/types/modules/flow-chart/config-utils.d.ts +0 -10
- package/types/modules/flow-chart/formats/flow-chart-blot.d.ts +0 -43
- package/types/modules/flow-chart/i18n/en-us.d.ts +0 -26
- package/types/modules/flow-chart/i18n/index.d.ts +0 -1
- package/types/modules/flow-chart/i18n/zh-cn.d.ts +0 -26
- package/types/modules/flow-chart/icons.d.ts +0 -12
- package/types/modules/flow-chart/index.d.ts +0 -10
- package/types/modules/flow-chart/modules/context-menu.d.ts +0 -3
- package/types/modules/flow-chart/modules/control-panel.d.ts +0 -3
- package/types/modules/flow-chart/modules/custom-resize-action.d.ts +0 -22
- package/types/modules/flow-chart/options.d.ts +0 -29
- package/types/modules/mind-map/config-utils.d.ts +0 -12
- package/types/modules/mind-map/formats/mind-map-blot.d.ts +0 -44
- package/types/modules/mind-map/i18n/en-us.d.ts +0 -25
- package/types/modules/mind-map/i18n/index.d.ts +0 -1
- package/types/modules/mind-map/i18n/zh-cn.d.ts +0 -25
- package/types/modules/mind-map/icons.d.ts +0 -21
- package/types/modules/mind-map/index.d.ts +0 -10
- package/types/modules/mind-map/modules/context-menu.d.ts +0 -3
- package/types/modules/mind-map/modules/control-panel.d.ts +0 -3
- package/types/modules/mind-map/modules/custom-resize-action.d.ts +0 -23
- package/types/modules/mind-map/options.d.ts +0 -27
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/ai/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\nimport type FluentEditor from '../../core/fluent-editor'\nimport type { AIOptions, OperationMenuItem, ResultMenuItem } from './types'\nimport {\n CLOSE,\n INPUT_PLACEHOLDER,\n INSERT_SUB_CONTENT_TEXT,\n INSERT_TEXT,\n MENU_ID_MAP,\n MENU_TITLE_DATA,\n REGENERATE,\n REPLACE_SELECT,\n RESULT_HEADER_TEXT,\n SELECT_PLACEHOLDER,\n STOP_ANSWER,\n THINK_TEXT,\n} from './constants'\nimport {\n ADJUST_ICON,\n AI_ICON,\n CALL_ICON,\n CLOSE_ICON,\n COPY_ICON,\n EDITOR_ICON,\n INSERT_ICON,\n MENU_CLOSE_ICON,\n REBUILD_ICON,\n REFRESH_ICON,\n REPLACE_SELECT_ICON,\n RIGHT_ARROW_ICON,\n SEND_BTN_ICON,\n STOP_ICON,\n THINK_ICON,\n} from './icons'\n\nexport class AI {\n toolbar: TypeToolbar\n host: string\n apiKey: string\n model: string\n message: string\n isBreak: boolean = false // 打断标记\n textNumber: number // 文本字数限制\n private _isSelectRangeMode: boolean = false // 选择/点击模式\n private _charCount: number = 0 // 文本字数\n private _debounceTimer = null\n private _inputPlaceholder: string = ''\n private _showOperationMenu: boolean = false\n private _isThinking: boolean = false // 思考中\n private _showResultPopupEl: boolean = false // 结果弹窗\n selectedText: string = '' // 选择的文本\n inputValue: string = '' // 存储输入框的值\n resultMenuList: ResultMenuItem[] = []\n operationMenuList: OperationMenuItem[] = []\n private _operationMenuItemList: OperationMenuItem[] = []\n\n private alertEl: HTMLDivElement | null = null\n private alertTimer: number | null = null\n private selectionBubbleEl: HTMLDivElement | null = null\n private selectionRange: any = null\n private dialogContainerEl: HTMLDivElement | null = null\n private wrapContainerEl: HTMLDivElement | null = null\n private aiIconEl: HTMLSpanElement | null = null\n private inputContainerEl: HTMLDivElement | null = null\n private inputEl: HTMLInputElement | null = null\n private menuContainerEl: HTMLDivElement | null = null\n private subMenuEl: HTMLDivElement | null = null\n private subMenuEditorEl: HTMLDivElement | null = null\n private subMenuToneEl: HTMLDivElement | null = null\n private subMenuAdjustEl: HTMLDivElement | null = null\n private inputRightEl: HTMLDivElement | null = null\n private inputSendBtnEl: HTMLSpanElement | null = null\n private inputCloseBtnEl: HTMLSpanElement | null = null\n private thinkContainerEl: HTMLDivElement | null = null // 思考元素\n private thinkBtnEl: HTMLDivElement | null = null\n private resultPopupEl: HTMLDivElement | null = null\n private resultPopupHeaderEl: HTMLDivElement | null = null\n private resultPopupContentEl: HTMLDivElement | null = null\n private resultPopupFooterEl: HTMLDivElement | null = null\n private resultPopupFooterTextEl: HTMLSpanElement | null = null\n private resultRefreshBtnEl: HTMLSpanElement | null = null\n private resultCopyBtnEl: HTMLSpanElement | null = null\n // 分享和朗读功能待放开\n // private resultShareBtnEl: HTMLSpanElement | null = null\n // private resultVoiceBtnEl: HTMLSpanElement | null = null\n private actionMenuEl: HTMLDivElement | null = null\n\n constructor(\n public quill: FluentEditor,\n public options: AIOptions,\n ) {\n this.quill = quill\n this.toolbar = quill.getModule('toolbar') as TypeToolbar\n // 添加AI按钮到工具栏\n if (typeof this.toolbar !== 'undefined') {\n this.toolbar.addHandler('ai', this.showAIInput.bind(this))\n }\n\n this.quill.on('selection-change', this.handleSelectionChange.bind(this))\n\n this.host = options.host || 'https://api.deepseek.com/v1'\n this.apiKey = options.apiKey\n this.model = options.model || 'deepseek-chat'\n this.textNumber = options.contentMaxLength || 5000\n\n this.resultMenuList = [\n { text: REPLACE_SELECT, icon: REPLACE_SELECT_ICON },\n { text: INSERT_TEXT, icon: INSERT_ICON, selectText: INSERT_SUB_CONTENT_TEXT },\n { text: REGENERATE, icon: REBUILD_ICON },\n { text: CLOSE, icon: MENU_CLOSE_ICON },\n ]\n\n this.operationMenuList = [\n { id: 'editor', text: '编辑调整内容', icon: EDITOR_ICON },\n { id: 'tone', text: '改写口吻', icon: CALL_ICON },\n { id: 'adjust', text: '整理选区内容', icon: ADJUST_ICON },\n ]\n }\n\n // 工具栏启动\n showAIInput() {\n // 创建输入框和结果弹窗\n this.create()\n\n this.selectionRange = this.quill.getSelection()\n if (this.selectionRange.length) {\n this.isSelectRangeMode = true\n }\n else {\n this.isSelectRangeMode = false\n }\n // 定位到编辑器焦点位置\n this.positionElements()\n\n // 添加ESC键监听\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n this.closeAIPanel()\n this.quill.container.removeEventListener('keydown', handleKeyDown)\n }\n }\n this.quill.container.addEventListener('keydown', handleKeyDown)\n }\n\n // 气泡启动\n private selectTextEvent() {\n if (!this.selectionRange) return\n this.create()\n // 定位到编辑器焦点位置\n this.positionElements()\n\n this.isSelectRangeMode = true\n }\n\n private create() {\n this.createResultElement()\n this.createOperationMenuElements()\n this.createInputBoxElements()\n\n // 创建事件监听\n this.addInputEvent()\n this.addResultEvent()\n this.handleActionMenuDisplay()\n // 添加到编辑器\n this.quill.container.appendChild(this.dialogContainerEl)\n }\n\n // 创建结果弹窗\n private createResultElement() {\n if (!this.resultPopupEl) {\n this.resultPopupEl = document.createElement('div')\n this.resultPopupEl.className = 'ql-ai-result'\n this.resultPopupHeaderEl = document.createElement('div')\n this.resultPopupHeaderEl.className = 'ql-ai-result-header'\n this.resultPopupHeaderEl.textContent = RESULT_HEADER_TEXT\n this.resultPopupContentEl = document.createElement('div')\n this.resultPopupContentEl.className = 'ql-ai-result-content'\n this.resultPopupFooterEl = document.createElement('div')\n this.resultPopupFooterEl.className = 'ql-ai-result-footer'\n this.resultPopupFooterTextEl = document.createElement('span')\n this.resultPopupFooterTextEl.className = 'ql-ai-result-footer-text'\n this.resultPopupFooterTextEl.textContent = `0`\n this.resultRefreshBtnEl = document.createElement('span')\n this.resultRefreshBtnEl.className = 'ql-ai-result-footer-refresh'\n this.resultRefreshBtnEl.innerHTML = REFRESH_ICON\n this.resultCopyBtnEl = document.createElement('span')\n this.resultCopyBtnEl.className = 'ql-ai-result-footer-copy'\n this.resultCopyBtnEl.innerHTML = COPY_ICON\n\n // 分享和朗读功能待放开\n // this.resultShareBtnEl = document.createElement('span')\n // this.resultShareBtnEl.className = 'ql-ai-result-footer-share'\n // this.resultShareBtnEl.innerHTML = SHARE_ICON\n // this.resultVoiceBtnEl = document.createElement('span')\n // this.resultVoiceBtnEl.className = 'ql-ai-result-footer-voice'\n // this.resultVoiceBtnEl.innerHTML = VOICE_ICON\n const resultFooterRightEl: HTMLDivElement = document.createElement('div')\n resultFooterRightEl.className = 'ql-ai-result-footer-right'\n resultFooterRightEl.appendChild(this.resultRefreshBtnEl)\n resultFooterRightEl.appendChild(this.resultCopyBtnEl)\n // 分享和朗读功能待放开\n // resultFooterRightEl.appendChild(this.resultShareBtnEl)\n // resultFooterRightEl.appendChild(this.resultVoiceBtnEl)\n this.resultPopupFooterEl.appendChild(this.resultPopupFooterTextEl)\n this.resultPopupFooterEl.appendChild(resultFooterRightEl)\n this.resultPopupEl.appendChild(this.resultPopupHeaderEl)\n this.resultPopupEl.appendChild(this.resultPopupContentEl)\n this.resultPopupEl.appendChild(this.resultPopupFooterEl)\n }\n this.showResultPopupEl = false\n }\n\n private createOperationMenuElements() {\n if (!this.menuContainerEl) {\n // 创建操作菜单容器\n this.menuContainerEl = document.createElement('div')\n this.menuContainerEl.className = 'ql-ai-menu-container'\n\n // 创建主菜单\n const mainMenu = document.createElement('div')\n mainMenu.className = 'ql-ai-main-menu'\n this.operationMenuList.forEach(({ text, icon, id }) => {\n const menuItem = document.createElement('div')\n menuItem.className = 'ql-ai-menu-item'\n menuItem.innerHTML = `${icon}<span>${text}</span>${RIGHT_ARROW_ICON}`\n menuItem.addEventListener('mouseenter', (e) => {\n e.stopPropagation()\n this.subMenuEl.style.display = 'block'\n this.subMenuEl.className = `ql-ai-sub-menu ${id}`\n this.createOperationMenuItem(id)\n })\n mainMenu.appendChild(menuItem)\n })\n if (!this.subMenuEl) {\n // 创建子菜单\n this.subMenuEl = document.createElement('div')\n this.subMenuEl.className = 'ql-ai-sub-menu'\n this.subMenuEl.style.display = 'none'\n }\n\n this.menuContainerEl.appendChild(mainMenu)\n this.menuContainerEl.appendChild(this.subMenuEl)\n }\n this.showOperationMenu = false\n }\n\n private createOperationMenuItem(id: string) {\n let menuItemBox = this[MENU_ID_MAP[id]]\n if (!menuItemBox) {\n menuItemBox = document.createElement('div')\n }\n // 清除子菜单容器中的所有子元素\n while (this.subMenuEl.firstChild) {\n this.subMenuEl.removeChild(this.subMenuEl.firstChild)\n }\n\n MENU_TITLE_DATA[id].forEach(({ text, icon, id }) => {\n const menuItem = document.createElement('div')\n menuItem.className = 'ql-ai-menu-item'\n menuItem.innerHTML = `${icon || ''}<span>${text}</span>`\n menuItem.addEventListener('click', (e) => {\n e.stopPropagation()\n this.handleOperationMenuItemClick(text, id)\n })\n menuItemBox.appendChild(menuItem)\n })\n this.subMenuEl.appendChild(menuItemBox)\n }\n\n private createInputBoxElements() {\n if (!this.dialogContainerEl) {\n this.dialogContainerEl = document.createElement('div')\n this.dialogContainerEl.className = 'ql-ai-dialog'\n this.wrapContainerEl = document.createElement('div')\n this.wrapContainerEl.className = 'ql-ai-wrapper'\n this.wrapContainerEl.style.width = `${this.quill.container.clientWidth - 30}px`\n\n // 添加AI图标\n this.createAIInputIcon()\n\n // 增加输入框\n this.inputEl = document.createElement('input')\n this.inputEl.type = 'text'\n this.inputPlaceholder = this._isSelectRangeMode ? SELECT_PLACEHOLDER : INPUT_PLACEHOLDER\n // 添加发送按钮\n this.inputSendBtnEl = document.createElement('span')\n this.inputSendBtnEl.className = 'ql-ai-input-right-send'\n this.inputSendBtnEl.innerHTML = SEND_BTN_ICON\n this.inputCloseBtnEl = document.createElement('span')\n this.inputCloseBtnEl.className = 'ql-ai-input-right-close'\n this.inputCloseBtnEl.innerHTML = CLOSE_ICON\n this.inputRightEl = document.createElement('div')\n this.inputRightEl.className = 'ql-ai-input-right'\n\n // 创建输入框\n this.inputContainerEl = document.createElement('div')\n this.inputContainerEl.className = 'ql-ai-input'\n this.inputContainerEl.appendChild(this.aiIconEl)\n this.inputContainerEl.appendChild(this.inputEl)\n this.inputRightEl.appendChild(this.inputSendBtnEl)\n this.inputRightEl.appendChild(this.inputCloseBtnEl)\n this.inputContainerEl.appendChild(this.inputRightEl) // 添加发送按钮\n this.wrapContainerEl.appendChild(this.resultPopupEl)\n this.wrapContainerEl.appendChild(this.inputContainerEl)\n this.wrapContainerEl.appendChild(this.menuContainerEl) // 添加菜单容器\n this.dialogContainerEl.appendChild(this.wrapContainerEl)\n }\n else {\n this.dialogContainerEl.style.display = 'block'\n }\n this.hiddenInputSendBtnEl()\n }\n\n private hiddenInputSendBtnEl(display = 'none') {\n if (this.inputEl && this.inputSendBtnEl) {\n this.inputSendBtnEl.style.display = display\n }\n }\n\n private copyResult() {\n if (!this.resultPopupContentEl) return\n\n try {\n const textToCopy = this.resultPopupContentEl.textContent || ''\n navigator.clipboard\n .writeText(textToCopy)\n .then(() => {\n this.showAlert('内容已复制到剪贴板')\n // 可以在这里添加复制成功的提示\n })\n .catch((err) => {\n this.showAlert(`复制失败:${err}`)\n })\n }\n catch (err) {\n this.showAlert(`复制失败:${err}`)\n // 兼容不支持clipboard API的浏览器\n const textarea = document.createElement('textarea')\n textarea.value = this.resultPopupContentEl.textContent || ''\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n }\n }\n\n // 分享和朗读功能待放开\n // private shareResult() {\n // if (!this.resultPopupContentEl) return\n\n // const textToShare = this.resultPopupContentEl.textContent || ''\n // const title = 'AI生成内容分享'\n\n // if (navigator.share) {\n // navigator.share({\n // title,\n // text: textToShare,\n // })\n // .catch((err) => {\n // this.showAlert(`分享失败:${err}`)\n // })\n // }\n // else {\n // // 兼容不支持Web Share API的浏览器\n // const shareUrl = `mailto:?subject=${encodeURIComponent(title)}&body=${encodeURIComponent(textToShare)}`\n // window.open(shareUrl, '_blank')\n // }\n // }\n // private voiceResult() {\n // if (!this.resultPopupContentEl) return\n\n // const textToSpeak = this.resultPopupContentEl.textContent || ''\n\n // if ('speechSynthesis' in window) {\n // const utterance = new SpeechSynthesisUtterance(textToSpeak)\n // utterance.lang = 'zh-CN' // 设置中文语音\n // speechSynthesis.speak(utterance)\n // }\n // else {\n // this.showAlert('当前浏览器不支持语音合成API')\n // // 可以在这里添加不支持语音的提示\n // }\n // }\n\n private addResultEvent() {\n if (this.resultRefreshBtnEl) {\n this.resultRefreshBtnEl.addEventListener('click', () => {\n this.regenerateResponse()\n })\n }\n\n if (this.resultCopyBtnEl) {\n this.resultCopyBtnEl.addEventListener('click', () => {\n this.copyResult()\n })\n }\n\n // 分享和朗读功能待放开\n // if (this.resultShareBtnEl) {\n // this.resultShareBtnEl.addEventListener('click', () => {\n // this.shareResult()\n // })\n // }\n // if (this.resultVoiceBtnEl) {\n // this.resultVoiceBtnEl.addEventListener('click', () => {\n // this.voiceResult()\n // })\n // }\n }\n\n // 显示选中文本的气泡\n private showSelectionBubble() {\n if (!this.selectionBubbleEl) {\n this.selectionBubbleEl = document.createElement('div')\n this.selectionBubbleEl.className = 'ql-ai-selection-bubble'\n const icon = AI_ICON.replaceAll('paint_linear_2', 'paint_linear_bubble')\n this.selectionBubbleEl.innerHTML = `${icon}<span>AI 智能</span>`\n this.selectionBubbleEl.addEventListener('click', () => this.selectTextEvent())\n document.body.appendChild(this.selectionBubbleEl)\n }\n\n const { left, top } = this.quill.getBounds(this.selectionRange.index)\n const { left: endLeft } = this.quill.getBounds(this.selectionRange.index + this.selectionRange.length)\n const width = (endLeft - left) / 2\n const editorRect = this.quill.container.getBoundingClientRect()\n\n this.selectionBubbleEl.style.display = 'flex'\n this.selectionBubbleEl.style.left = `${left + editorRect.left + width - 45}px`\n this.selectionBubbleEl.style.top = `${top + editorRect.top - 40}px`\n }\n\n // 隐藏选中文本的气泡\n private hideSelectionBubble() {\n if (this.selectionBubbleEl) {\n this.selectionBubbleEl.style.display = 'none'\n }\n }\n\n // 处理文本选中变化\n private handleSelectionChange(range: any) {\n if (range && range.length > 0) {\n this.selectionRange = range\n this.showSelectionBubble()\n this.selectedText = this.quill.getText(range.index, range.length)\n }\n else {\n if (range && range.index !== null) {\n this.selectedText = ''\n this.closeAIPanel()\n }\n else {\n this.hideSelectionBubble()\n }\n }\n }\n\n private addInputEvent() {\n if (this.inputContainerEl) {\n this.inputContainerEl.addEventListener('click', () => {})\n }\n\n // 监听输入事件\n if (this.inputEl) {\n this.inputEl.addEventListener('input', () => {\n this.hiddenInputSendBtnEl(this.inputEl.value.trim() ? 'flex' : 'none')\n if (this.menuContainerEl && this._isSelectRangeMode) {\n this.showOperationMenu = !this.inputEl.value.trim() && !this._showResultPopupEl\n }\n })\n }\n\n // 给发送按钮添加点击事件\n if (this.inputSendBtnEl) {\n this.inputSendBtnEl.addEventListener('click', async () => {\n await this.queryAI()\n })\n }\n // 监听发送事件\n this.inputEl.addEventListener('keydown', async (e) => {\n if (e.key === 'Enter') {\n await this.queryAI()\n }\n })\n\n // 给关闭按钮添加点击事件\n if (this.inputCloseBtnEl) {\n this.inputCloseBtnEl.addEventListener('click', () => {\n this.closeAIPanel()\n })\n }\n }\n\n private positionElements() {\n if (!this.dialogContainerEl) return\n const range = this.selectionRange\n if (range) {\n const bounds = this.quill.getBounds(range.index)\n this.dialogContainerEl.style.position = 'absolute'\n this.dialogContainerEl.style.top = `${bounds.top + bounds.height + 20}px`\n }\n }\n\n // 添加创建alert元素的方法\n private createAlertElement() {\n if (!this.alertEl) {\n this.alertEl = document.createElement('div')\n this.alertEl.className = 'ql-ai-alert'\n this.alertEl.style.display = 'none'\n document.body.appendChild(this.alertEl)\n }\n }\n\n // 添加显示alert的方法\n private showAlert(message: string, duration: number = 3000) {\n this.createAlertElement()\n if (!this.alertEl) return\n\n // 清除之前的定时器\n if (this.alertTimer) {\n clearTimeout(this.alertTimer)\n this.alertTimer = null\n }\n\n this.alertEl.textContent = message\n this.alertEl.style.display = 'block'\n\n // 自动隐藏\n this.alertTimer = setTimeout(() => {\n if (this.alertEl) {\n this.alertEl.style.display = 'none'\n }\n this.alertTimer = null\n }, duration) as unknown as number\n }\n\n private createAIInputIcon() {\n if (!this.aiIconEl) {\n this.aiIconEl = document.createElement('span')\n this.aiIconEl.className = 'ql-ai-input-pre-icon'\n const icon = AI_ICON.replaceAll('paint_linear_2', 'paint_linear_ai_input')\n this.aiIconEl.innerHTML = icon\n }\n }\n\n // 添加处理子菜单点击的方法\n private handleOperationMenuItemClick(text: string, id: string = '') {\n let quetion = ''\n if (id.startsWith('1-') || id.startsWith('3-')) {\n quetion = `将目标文字${text},目标文字为:${this.selectedText}`\n }\n else if (id.startsWith('2-')) {\n quetion = `改写目标文字的口吻,让其变得${text},目标文字为:${this.selectedText}`\n }\n this.showOperationMenu = false\n this.queryAI(quetion)\n }\n\n private createActionMenu() {\n if (!this.actionMenuEl) {\n this.actionMenuEl = document.createElement('div')\n this.actionMenuEl.className = 'ql-ai-actions'\n\n this.resultMenuList.forEach(({ text, icon }) => {\n const menuItem = document.createElement('div')\n menuItem.className = 'ql-ai-action-item'\n menuItem.innerHTML = `${icon}<span class=\"ql-ai-result-menu-text\">${text}</span>`\n menuItem.addEventListener('click', () => this.handleAction(text))\n this.actionMenuEl.appendChild(menuItem)\n })\n\n this.wrapContainerEl.appendChild(this.actionMenuEl)\n }\n const secondMenuItemText = this.actionMenuEl.children[1].querySelector('.ql-ai-result-menu-text') as HTMLDivElement\n\n const firstChild = this.actionMenuEl.firstChild\n\n if (!this._isSelectRangeMode) {\n if (firstChild instanceof Element) {\n firstChild.classList.add('hidden')\n }\n\n secondMenuItemText.textContent = INSERT_TEXT\n }\n else {\n if (firstChild instanceof Element) {\n firstChild.classList.remove('hidden')\n }\n\n secondMenuItemText.textContent = INSERT_SUB_CONTENT_TEXT\n }\n\n this.isThinking = false\n }\n\n private handleActionMenuDisplay(value: string = 'none') {\n if (this.actionMenuEl) {\n this.actionMenuEl.style.display = value\n }\n }\n\n private switchInputEl(showInput = true) {\n if (this.inputContainerEl) {\n this.inputContainerEl.style.display = showInput ? 'flex' : 'none'\n }\n\n this.handleActionMenuDisplay(showInput ? 'block' : 'none')\n\n if (this.thinkContainerEl) {\n this.thinkContainerEl.style.display = showInput ? 'none' : 'flex'\n }\n }\n\n // 创建思考元素\n private createThinkElements() {\n if (!this.thinkContainerEl) {\n this.thinkContainerEl = document.createElement('div')\n this.thinkContainerEl.className = 'ql-ai-input'\n this.thinkContainerEl.innerHTML = `<span class=\"ql-ai-input-pre-icon ql-ai-think-icon\">${THINK_ICON}</span><span class=\"ql-ai-think-text\">${THINK_TEXT}</span>`\n this.thinkBtnEl = document.createElement('div')\n this.thinkBtnEl.className = 'ql-ai-think-btn'\n this.thinkBtnEl.innerHTML = `${STOP_ICON}<span>${STOP_ANSWER}</span>`\n this.thinkContainerEl.appendChild(this.thinkBtnEl)\n this.wrapContainerEl.appendChild(this.thinkContainerEl) // 添加发送按钮\n this.thinkBtnEl.addEventListener('click', () => {\n this.isBreak = true\n this.isThinking = false\n })\n }\n\n this.isThinking = true\n }\n\n // AI查询\n private async queryAI(question?: string): Promise<string> {\n this.createThinkElements()\n this.inputValue = question || this.inputEl.value\n if (this.inputValue.trim() === '') {\n return\n }\n\n // 有信息\n this.isBreak = false // 重置打断标记,防止重复打断ai\n // 这里实现实际的AI查询逻辑\n try {\n const response = await fetch(`${this.host}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n prompt: this.inputValue,\n stream: true,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let content = ''\n\n while (true) {\n if (this.isBreak) {\n this.isBreak = false\n break\n }\n\n const { done, value } = await reader.read()\n if (done) break\n\n const chunk = decoder.decode(value)\n const lines = chunk.split('\\n').filter(line => line.trim() !== '')\n\n for (const line of lines) {\n try {\n const data = JSON.parse(line)\n content += data.response || ''\n this.showAIResponse(content)\n }\n catch (e) {\n console.error('解析错误:', e)\n }\n }\n }\n\n // 创建操作菜单\n this.createActionMenu()\n this.inputEl.value = '' // 清空输入框\n this.hiddenInputSendBtnEl()\n return content\n }\n catch (error) {\n console.error('AI查询失败:', error)\n return 'AI查询失败,请重试'\n }\n }\n\n private showAIResponse(response: string) {\n if (!this.resultPopupEl) return\n\n // 显示结果\n if (this._charCount <= this.textNumber) {\n this.resultPopupContentEl.innerHTML = response\n this.charCount = this.resultPopupContentEl.textContent.replace(/\\s+/g, '').length\n }\n else {\n this.isBreak = true\n this.charCount = 0\n }\n this.showResultPopupEl = true\n }\n\n private handleAction(action: string) {\n switch (action) {\n case REPLACE_SELECT:\n this.replaceSelectText()\n break\n case INSERT_TEXT:\n this.insertAIResponse()\n break\n case REGENERATE:\n this.regenerateResponse()\n break\n case CLOSE:\n this.closeAIPanel()\n break\n }\n }\n\n private replaceSelectText() {\n if (!this.resultPopupContentEl) return\n const range = this.quill.getSelection(true)\n if (range && range.length > 0) {\n // 删除选中内容\n this.quill.deleteText(range.index, range.length)\n // 插入AI生成的内容\n this.quill.clipboard.dangerouslyPasteHTML(range.index, this.resultPopupContentEl.innerHTML)\n }\n this.closeAIPanel()\n }\n\n private insertAIResponse() {\n if (!this.resultPopupContentEl) return\n const range = this.quill.getSelection(true)\n if (range) {\n this.quill.clipboard.dangerouslyPasteHTML(range.index + range.length, this.resultPopupContentEl.innerHTML)\n }\n this.closeAIPanel()\n }\n\n private async regenerateResponse() {\n await this.queryAI(this.inputValue)\n }\n\n private closeAIPanel() {\n this.isBreak = true // 停止查询\n\n if (this.dialogContainerEl) {\n this.dialogContainerEl.style.display = 'none'\n }\n\n if (this.actionMenuEl) {\n this.actionMenuEl.style.display = 'none'\n }\n\n this.showResultPopupEl = false\n\n if (this.inputEl && this.inputEl.value.trim() !== '') {\n this.inputEl.value = '' // 清空输入框\n }\n this.hideSelectionBubble()\n }\n\n set charCount(value: number) {\n // 清除之前的定时器\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer)\n }\n\n this._debounceTimer = setTimeout(() => {\n this._charCount = value\n if (this.resultPopupFooterTextEl) {\n this.resultPopupFooterTextEl.textContent = `${this._charCount}/${this.textNumber}`\n }\n clearTimeout(this._debounceTimer)\n this._debounceTimer = null\n }, 210)\n }\n\n get charCount() {\n return this._charCount\n }\n\n set inputPlaceholder(value: string) {\n this._inputPlaceholder = value\n if (this.inputEl) {\n this.inputEl.placeholder = value\n }\n }\n\n get inputPlaceholder() {\n return this._inputPlaceholder\n }\n\n set showOperationMenu(value: boolean) {\n this._showOperationMenu = value\n if (this.menuContainerEl) {\n this.menuContainerEl.style.display = value ? 'flex' : 'none'\n }\n }\n\n get showOperationMenu() {\n return this._showOperationMenu\n }\n\n set isSelectRangeMode(value: boolean) {\n this._isSelectRangeMode = value\n this.showOperationMenu = value\n this.inputPlaceholder = value ? SELECT_PLACEHOLDER : INPUT_PLACEHOLDER\n this.hideSelectionBubble()\n }\n\n get isSelectRangeMode() {\n return this._isSelectRangeMode\n }\n\n set isThinking(value: boolean) {\n this._isThinking = value\n this.switchInputEl(!value)\n }\n\n get isThinking() {\n return this._isThinking\n }\n\n set showResultPopupEl(value: boolean) {\n this._showResultPopupEl = value\n if (this.resultPopupEl) {\n this.resultPopupEl.style.display = value ? 'block' : 'none'\n }\n }\n\n get showResultPopupEl() {\n return this._showResultPopupEl\n }\n}\n"],"names":["REPLACE_SELECT","REPLACE_SELECT_ICON","INSERT_TEXT","INSERT_ICON","INSERT_SUB_CONTENT_TEXT","REGENERATE","REBUILD_ICON","CLOSE","MENU_CLOSE_ICON","EDITOR_ICON","CALL_ICON","ADJUST_ICON","RESULT_HEADER_TEXT","REFRESH_ICON","COPY_ICON","RIGHT_ARROW_ICON","MENU_ID_MAP","MENU_TITLE_DATA","id","SELECT_PLACEHOLDER","INPUT_PLACEHOLDER","SEND_BTN_ICON","CLOSE_ICON","AI_ICON","THINK_ICON","THINK_TEXT","STOP_ICON","STOP_ANSWER"],"mappings":"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"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
function getGridConfig(quill) {
|
|
4
|
-
var _a, _b, _c;
|
|
5
|
-
const defaultGrid = {
|
|
6
|
-
size: 20,
|
|
7
|
-
visible: true,
|
|
8
|
-
type: "dot",
|
|
9
|
-
config: {
|
|
10
|
-
color: "#ababab",
|
|
11
|
-
thickness: 1
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
const flowChartModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["flow-chart"];
|
|
15
|
-
if (!flowChartModule || typeof flowChartModule !== "object") {
|
|
16
|
-
return defaultGrid;
|
|
17
|
-
}
|
|
18
|
-
if ("grid" in flowChartModule) {
|
|
19
|
-
const grid = flowChartModule.grid;
|
|
20
|
-
if (grid === false || grid === void 0) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
if (typeof grid === "object" && grid !== null) {
|
|
24
|
-
const typedGrid = grid;
|
|
25
|
-
const gridConfig = {
|
|
26
|
-
size: typedGrid.size || defaultGrid.size,
|
|
27
|
-
visible: typedGrid.visible !== void 0 ? typedGrid.visible : defaultGrid.visible,
|
|
28
|
-
type: typedGrid.type || defaultGrid.type,
|
|
29
|
-
config: {
|
|
30
|
-
color: ((_b = typedGrid.config) == null ? void 0 : _b.color) || defaultGrid.config.color,
|
|
31
|
-
thickness: ((_c = typedGrid.config) == null ? void 0 : _c.thickness) || defaultGrid.config.thickness
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
return gridConfig;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return defaultGrid;
|
|
38
|
-
}
|
|
39
|
-
function getBackgroundConfig(quill) {
|
|
40
|
-
var _a;
|
|
41
|
-
const flowChartModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["flow-chart"];
|
|
42
|
-
if (!flowChartModule || typeof flowChartModule !== "object") {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
if ("background" in flowChartModule) {
|
|
46
|
-
const background = flowChartModule.background;
|
|
47
|
-
if (background === false || background === void 0) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
if (typeof background === "object" && background !== null) {
|
|
51
|
-
const typedBackground = background;
|
|
52
|
-
const backgroundConfig = {};
|
|
53
|
-
if (typedBackground.color) {
|
|
54
|
-
backgroundConfig.backgroundColor = typedBackground.color;
|
|
55
|
-
}
|
|
56
|
-
if (typedBackground.image) {
|
|
57
|
-
backgroundConfig.backgroundImage = typedBackground.image;
|
|
58
|
-
}
|
|
59
|
-
if (typedBackground.repeat) {
|
|
60
|
-
backgroundConfig.backgroundRepeat = typedBackground.repeat;
|
|
61
|
-
}
|
|
62
|
-
if (typedBackground.position) {
|
|
63
|
-
backgroundConfig.backgroundPosition = typedBackground.position;
|
|
64
|
-
}
|
|
65
|
-
if (typedBackground.size) {
|
|
66
|
-
backgroundConfig.backgroundSize = typedBackground.size;
|
|
67
|
-
}
|
|
68
|
-
if (typedBackground.opacity) {
|
|
69
|
-
backgroundConfig.opacity = typedBackground.opacity;
|
|
70
|
-
}
|
|
71
|
-
return backgroundConfig;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
function getResizeConfig(quill) {
|
|
77
|
-
var _a;
|
|
78
|
-
const flowChartModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["flow-chart"];
|
|
79
|
-
if (!flowChartModule || typeof flowChartModule !== "object") {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
if ("resize" in flowChartModule) {
|
|
83
|
-
const resize = flowChartModule.resize;
|
|
84
|
-
return resize === true;
|
|
85
|
-
}
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
88
|
-
function getAllConfigs(quill) {
|
|
89
|
-
var _a, _b;
|
|
90
|
-
const deps = (_b = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["flow-chart"]) == null ? void 0 : _b.deps;
|
|
91
|
-
return {
|
|
92
|
-
gridConfig: getGridConfig(quill),
|
|
93
|
-
backgroundConfig: getBackgroundConfig(quill),
|
|
94
|
-
resizeConfig: getResizeConfig(quill),
|
|
95
|
-
deps
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
exports.getAllConfigs = getAllConfigs;
|
|
99
|
-
exports.getBackgroundConfig = getBackgroundConfig;
|
|
100
|
-
exports.getGridConfig = getGridConfig;
|
|
101
|
-
exports.getResizeConfig = getResizeConfig;
|
|
102
|
-
//# sourceMappingURL=config-utils.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-utils.cjs.js","sources":["../../../../src/modules/flow-chart/config-utils.ts"],"sourcesContent":["import type Quill from 'quill'\nimport type { BackgroundConfig, GridOptions } from './options'\n\nexport function getGridConfig(quill: Quill | null): any {\n const defaultGrid = {\n size: 20,\n visible: true,\n type: 'dot',\n config: {\n color: '#ababab',\n thickness: 1,\n },\n }\n\n const flowChartModule = quill?.options.modules?.['flow-chart']\n if (!flowChartModule || typeof flowChartModule !== 'object') {\n return defaultGrid\n }\n\n if ('grid' in flowChartModule) {\n const grid = flowChartModule.grid as GridOptions | boolean | undefined\n if (grid === false || grid === undefined) {\n return null\n }\n\n if (typeof grid === 'object' && grid !== null) {\n const typedGrid = grid as GridOptions\n const gridConfig = {\n size: typedGrid.size || defaultGrid.size,\n visible: typedGrid.visible !== undefined ? typedGrid.visible : defaultGrid.visible,\n type: typedGrid.type || defaultGrid.type,\n config: {\n color: typedGrid.config?.color || defaultGrid.config.color,\n thickness: typedGrid.config?.thickness || defaultGrid.config.thickness,\n },\n }\n\n return gridConfig\n }\n }\n\n return defaultGrid\n}\n\nexport function getBackgroundConfig(quill: Quill | null): false | object {\n const flowChartModule = quill?.options.modules?.['flow-chart']\n if (!flowChartModule || typeof flowChartModule !== 'object') {\n return false\n }\n if ('background' in flowChartModule) {\n const background = flowChartModule.background as BackgroundConfig | boolean | undefined\n\n if (background === false || background === undefined) {\n return false\n }\n if (typeof background === 'object' && background !== null) {\n const typedBackground = background as BackgroundConfig\n const backgroundConfig: any = {}\n\n if (typedBackground.color) {\n backgroundConfig.backgroundColor = typedBackground.color\n }\n if (typedBackground.image) {\n backgroundConfig.backgroundImage = typedBackground.image\n }\n if (typedBackground.repeat) {\n backgroundConfig.backgroundRepeat = typedBackground.repeat\n }\n if (typedBackground.position) {\n backgroundConfig.backgroundPosition = typedBackground.position\n }\n if (typedBackground.size) {\n backgroundConfig.backgroundSize = typedBackground.size\n }\n if (typedBackground.opacity) {\n backgroundConfig.opacity = typedBackground.opacity\n }\n return backgroundConfig\n }\n }\n return false\n}\n\nexport function getResizeConfig(quill: Quill | null): boolean {\n const flowChartModule = quill?.options.modules?.['flow-chart']\n if (!flowChartModule || typeof flowChartModule !== 'object') {\n return false\n }\n if ('resize' in flowChartModule) {\n const resize = (flowChartModule as any).resize as boolean | undefined\n return resize === true\n }\n return false\n}\n\nexport function getAllConfigs(quill: Quill | null): {\n gridConfig: any\n backgroundConfig: false | object\n resizeConfig: boolean\n deps?: any\n} {\n const deps = (quill?.options.modules?.['flow-chart'] as any)?.deps\n return {\n gridConfig: getGridConfig(quill),\n backgroundConfig: getBackgroundConfig(quill),\n resizeConfig: getResizeConfig(quill),\n deps,\n }\n}\n"],"names":[],"mappings":";;AAGO,SAAS,cAAc,OAA0B;;AACtD,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,IAAA;AAAA,EACb;AAGF,QAAM,mBAAkB,oCAAO,QAAQ,YAAf,mBAAyB;AACjD,MAAI,CAAC,mBAAmB,OAAO,oBAAoB,UAAU;AAC3D,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,iBAAiB;AAC7B,UAAM,OAAO,gBAAgB;AAC7B,QAAI,SAAS,SAAS,SAAS,QAAW;AACxC,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,YAAY;AAClB,YAAM,aAAa;AAAA,QACjB,MAAM,UAAU,QAAQ,YAAY;AAAA,QACpC,SAAS,UAAU,YAAY,SAAY,UAAU,UAAU,YAAY;AAAA,QAC3E,MAAM,UAAU,QAAQ,YAAY;AAAA,QACpC,QAAQ;AAAA,UACN,SAAO,eAAU,WAAV,mBAAkB,UAAS,YAAY,OAAO;AAAA,UACrD,aAAW,eAAU,WAAV,mBAAkB,cAAa,YAAY,OAAO;AAAA,QAAA;AAAA,MAC/D;AAGF,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,oBAAoB,OAAqC;;AACvE,QAAM,mBAAkB,oCAAO,QAAQ,YAAf,mBAAyB;AACjD,MAAI,CAAC,mBAAmB,OAAO,oBAAoB,UAAU;AAC3D,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,iBAAiB;AACnC,UAAM,aAAa,gBAAgB;AAEnC,QAAI,eAAe,SAAS,eAAe,QAAW;AACpD,aAAO;AAAA,IACT;AACA,QAAI,OAAO,eAAe,YAAY,eAAe,MAAM;AACzD,YAAM,kBAAkB;AACxB,YAAM,mBAAwB,CAAA;AAE9B,UAAI,gBAAgB,OAAO;AACzB,yBAAiB,kBAAkB,gBAAgB;AAAA,MACrD;AACA,UAAI,gBAAgB,OAAO;AACzB,yBAAiB,kBAAkB,gBAAgB;AAAA,MACrD;AACA,UAAI,gBAAgB,QAAQ;AAC1B,yBAAiB,mBAAmB,gBAAgB;AAAA,MACtD;AACA,UAAI,gBAAgB,UAAU;AAC5B,yBAAiB,qBAAqB,gBAAgB;AAAA,MACxD;AACA,UAAI,gBAAgB,MAAM;AACxB,yBAAiB,iBAAiB,gBAAgB;AAAA,MACpD;AACA,UAAI,gBAAgB,SAAS;AAC3B,yBAAiB,UAAU,gBAAgB;AAAA,MAC7C;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,OAA8B;;AAC5D,QAAM,mBAAkB,oCAAO,QAAQ,YAAf,mBAAyB;AACjD,MAAI,CAAC,mBAAmB,OAAO,oBAAoB,UAAU;AAC3D,WAAO;AAAA,EACT;AACA,MAAI,YAAY,iBAAiB;AAC/B,UAAM,SAAU,gBAAwB;AACxC,WAAO,WAAW;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,cAAc,OAK5B;;AACA,QAAM,QAAQ,0CAAO,QAAQ,YAAf,mBAAyB,kBAAzB,mBAAgD;AAC9D,SAAO;AAAA,IACL,YAAY,cAAc,KAAK;AAAA,IAC/B,kBAAkB,oBAAoB,KAAK;AAAA,IAC3C,cAAc,gBAAgB,KAAK;AAAA,IACnC;AAAA,EAAA;AAEJ;;;;;"}
|
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
6
|
-
const Quill = require("quill");
|
|
7
|
-
const configUtils = require("../config-utils.cjs.js");
|
|
8
|
-
const icons = require("../icons.cjs.js");
|
|
9
|
-
const contextMenu = require("../modules/context-menu.cjs.js");
|
|
10
|
-
const controlPanel = require("../modules/control-panel.cjs.js");
|
|
11
|
-
const customResizeAction = require("../modules/custom-resize-action.cjs.js");
|
|
12
|
-
;/* empty css */
|
|
13
|
-
const BlockEmbed = Quill.import("blots/embed");
|
|
14
|
-
const _FlowChartPlaceholderBlot = class _FlowChartPlaceholderBlot extends BlockEmbed {
|
|
15
|
-
constructor(scroll, domNode) {
|
|
16
|
-
super(scroll, domNode);
|
|
17
|
-
__publicField(this, "quill", null);
|
|
18
|
-
__publicField(this, "flowChart", null);
|
|
19
|
-
__publicField(this, "data");
|
|
20
|
-
__publicField(this, "contextMenu", null);
|
|
21
|
-
__publicField(this, "currentElement", null);
|
|
22
|
-
__publicField(this, "width", 100);
|
|
23
|
-
__publicField(this, "height", 500);
|
|
24
|
-
__publicField(this, "parentObserver", null);
|
|
25
|
-
__publicField(this, "nextPObserver", null);
|
|
26
|
-
const data = _FlowChartPlaceholderBlot.value(domNode);
|
|
27
|
-
this.width = data.width || 100;
|
|
28
|
-
this.height = data.height || 500;
|
|
29
|
-
this.domNode.style.width = `${this.width}${data.width ? "px" : "%"}`;
|
|
30
|
-
this.domNode.style.height = `${this.height}px`;
|
|
31
|
-
this.domNode.style.maxWidth = "100%";
|
|
32
|
-
this.domNode.style.border = "1px solid #e8e8e8";
|
|
33
|
-
this.domNode.setAttribute("contenteditable", "false");
|
|
34
|
-
this.data = _FlowChartPlaceholderBlot.value(this.domNode);
|
|
35
|
-
this.initFlowChart();
|
|
36
|
-
}
|
|
37
|
-
static value(domNode) {
|
|
38
|
-
const dataStr = JSON.parse(domNode.getAttribute("data-flow-chart"));
|
|
39
|
-
const value = dataStr.root ? dataStr.root : dataStr;
|
|
40
|
-
if (domNode.hasAttribute("width")) {
|
|
41
|
-
value.width = Number.parseInt(domNode.getAttribute("width"), 10);
|
|
42
|
-
}
|
|
43
|
-
if (domNode.hasAttribute("height")) {
|
|
44
|
-
value.height = Number.parseInt(domNode.getAttribute("height"), 10);
|
|
45
|
-
}
|
|
46
|
-
return dataStr.root ? dataStr.root : dataStr;
|
|
47
|
-
}
|
|
48
|
-
static create(value) {
|
|
49
|
-
const node = super.create();
|
|
50
|
-
if (value) {
|
|
51
|
-
node.setAttribute("data-flow-chart", JSON.stringify(value));
|
|
52
|
-
}
|
|
53
|
-
if (value.width) {
|
|
54
|
-
node.setAttribute("width", String(value.width));
|
|
55
|
-
node.style.width = `${value.width}%`;
|
|
56
|
-
}
|
|
57
|
-
if (value.height) {
|
|
58
|
-
node.setAttribute("height", String(value.height));
|
|
59
|
-
node.style.height = `${value.height}px`;
|
|
60
|
-
}
|
|
61
|
-
node.setAttribute("contenteditable", "false");
|
|
62
|
-
return node;
|
|
63
|
-
}
|
|
64
|
-
static findQuill(el) {
|
|
65
|
-
let cur = el;
|
|
66
|
-
while (cur) {
|
|
67
|
-
const q = cur.__quillInstance;
|
|
68
|
-
if (q) return q;
|
|
69
|
-
cur = cur.parentElement;
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
attach() {
|
|
74
|
-
super.attach();
|
|
75
|
-
this.quill = _FlowChartPlaceholderBlot.findQuill(this.domNode);
|
|
76
|
-
}
|
|
77
|
-
initFlowChart() {
|
|
78
|
-
if (this.domNode.isConnected) {
|
|
79
|
-
this.insertFlowChartEditor();
|
|
80
|
-
} else {
|
|
81
|
-
const observer = new MutationObserver(() => {
|
|
82
|
-
if (this.domNode.isConnected) {
|
|
83
|
-
this.insertFlowChartEditor();
|
|
84
|
-
observer.disconnect();
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
observer.observe(document.body, { childList: true, subtree: true });
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
insertFlowChartEditor() {
|
|
91
|
-
this.domNode.style.width = `${this.width}${this.data.width ? "px" : "%"}`;
|
|
92
|
-
this.domNode.style.height = `${this.height}px`;
|
|
93
|
-
this.updateAlignmentStyle();
|
|
94
|
-
this.observeParentAlignment();
|
|
95
|
-
const { gridConfig, backgroundConfig, resizeConfig, deps } = configUtils.getAllConfigs(this.quill);
|
|
96
|
-
const { LogicFlow, DndPanel, SelectionSelect, Snapshot } = deps || window;
|
|
97
|
-
this.flowChart = new LogicFlow({
|
|
98
|
-
container: this.domNode,
|
|
99
|
-
stopScrollGraph: true,
|
|
100
|
-
stopZoomGraph: true,
|
|
101
|
-
allowResize: true,
|
|
102
|
-
allowRotate: true,
|
|
103
|
-
editable: true,
|
|
104
|
-
preventDefaultDoubleClick: true,
|
|
105
|
-
preventDefault: true,
|
|
106
|
-
grid: gridConfig,
|
|
107
|
-
background: backgroundConfig,
|
|
108
|
-
plugins: [DndPanel, SelectionSelect, Snapshot]
|
|
109
|
-
});
|
|
110
|
-
this.flowChart.setPatternItems([
|
|
111
|
-
{
|
|
112
|
-
className: "lf-shape-dashed",
|
|
113
|
-
callback: () => {
|
|
114
|
-
this.flowChart.openSelectionSelect();
|
|
115
|
-
this.flowChart.once("selection:selected", () => {
|
|
116
|
-
this.flowChart.closeSelectionSelect();
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
type: "rect",
|
|
122
|
-
text: "矩形",
|
|
123
|
-
className: "lf-shape-rect"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: "circle",
|
|
127
|
-
text: "圆形",
|
|
128
|
-
className: "lf-shape-circle"
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
type: "ellipse",
|
|
132
|
-
text: "椭圆",
|
|
133
|
-
className: "lf-shape-ellipse"
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
type: "diamond",
|
|
137
|
-
text: "菱形",
|
|
138
|
-
className: "lf-shape-diamond"
|
|
139
|
-
}
|
|
140
|
-
]);
|
|
141
|
-
if (resizeConfig) {
|
|
142
|
-
new customResizeAction.FlowChartResizeAction(this);
|
|
143
|
-
}
|
|
144
|
-
controlPanel.createControlPanel(this, this.quill);
|
|
145
|
-
contextMenu.initContextMenu(this, this.quill);
|
|
146
|
-
this.observeOwnParentChange();
|
|
147
|
-
this.observeNextPElement();
|
|
148
|
-
this.addMouseHoverEvents();
|
|
149
|
-
this.flowChart.render(this.data);
|
|
150
|
-
this.flowChart.on("graph:updated", () => {
|
|
151
|
-
this.data = this.flowChart.getGraphData();
|
|
152
|
-
this.domNode.setAttribute("data-flow-chart", JSON.stringify(this.data));
|
|
153
|
-
});
|
|
154
|
-
this.flowChart.on("history:change", () => {
|
|
155
|
-
this.data = this.flowChart.getGraphData();
|
|
156
|
-
this.domNode.setAttribute("data-flow-chart", JSON.stringify(this.data));
|
|
157
|
-
});
|
|
158
|
-
this.flowChart.on("node:dbclick", this.handleNodeDblClick.bind(this));
|
|
159
|
-
this.flowChart.on("edge:dbclick", this.handleNodeDblClick.bind(this));
|
|
160
|
-
this.domNode.addEventListener("click", (e) => {
|
|
161
|
-
if (this.quill) {
|
|
162
|
-
const flowChartBlot = Quill.find(this.domNode);
|
|
163
|
-
const index = this.quill.getIndex(flowChartBlot);
|
|
164
|
-
if (index && typeof index === "number") {
|
|
165
|
-
this.quill.setSelection(index + 1, 0);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
addMouseHoverEvents() {
|
|
171
|
-
this.domNode.addEventListener("mouseenter", () => {
|
|
172
|
-
this.showControlPanel();
|
|
173
|
-
});
|
|
174
|
-
this.domNode.addEventListener("mouseleave", () => {
|
|
175
|
-
var _a;
|
|
176
|
-
(_a = this.flowChart) == null ? void 0 : _a.clearSelectElements();
|
|
177
|
-
this.hideControlPanel();
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
getControlElements() {
|
|
181
|
-
const leftUpControl = this.domNode.querySelector(".lf-dndpanel");
|
|
182
|
-
const control = this.domNode.querySelector(".ql-flow-chart-control");
|
|
183
|
-
const panelStatusIcon = this.domNode.querySelector('[data-control-type="panel-status"]');
|
|
184
|
-
return { leftUpControl, control, panelStatusIcon };
|
|
185
|
-
}
|
|
186
|
-
showControlPanel() {
|
|
187
|
-
const { leftUpControl, control, panelStatusIcon } = this.getControlElements();
|
|
188
|
-
if (!leftUpControl || !control) return;
|
|
189
|
-
leftUpControl.style.display = "block";
|
|
190
|
-
control.style.display = "flex";
|
|
191
|
-
if (panelStatusIcon) {
|
|
192
|
-
const iconElement = panelStatusIcon.querySelector("i") || panelStatusIcon;
|
|
193
|
-
iconElement.innerHTML = icons.expandIcon;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
hideControlPanel() {
|
|
197
|
-
const { leftUpControl, control, panelStatusIcon } = this.getControlElements();
|
|
198
|
-
if (!leftUpControl || !control) return;
|
|
199
|
-
leftUpControl.style.display = "none";
|
|
200
|
-
control.style.display = "none";
|
|
201
|
-
if (panelStatusIcon) {
|
|
202
|
-
const iconElement = panelStatusIcon.querySelector("i") || panelStatusIcon;
|
|
203
|
-
iconElement.innerHTML = icons.contractIcon;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
observeOwnParentChange() {
|
|
207
|
-
let currentParent = this.domNode.parentElement;
|
|
208
|
-
const observer = new MutationObserver(() => {
|
|
209
|
-
if (this.domNode.parentElement !== currentParent) {
|
|
210
|
-
currentParent = this.domNode.parentElement;
|
|
211
|
-
this.observeParentAlignment();
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
observer.observe(document.body, {
|
|
215
|
-
attributes: false,
|
|
216
|
-
childList: true,
|
|
217
|
-
subtree: true
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
observeParentAlignment() {
|
|
221
|
-
if (this.parentObserver) {
|
|
222
|
-
this.parentObserver.disconnect();
|
|
223
|
-
}
|
|
224
|
-
const observer = new MutationObserver((mutations) => {
|
|
225
|
-
mutations.forEach((mutation) => {
|
|
226
|
-
if (mutation.attributeName === "class") {
|
|
227
|
-
this.updateAlignmentStyle();
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
this.parentObserver = observer;
|
|
232
|
-
const parent = this.domNode.parentElement;
|
|
233
|
-
if (parent) {
|
|
234
|
-
observer.observe(parent, {
|
|
235
|
-
attributes: true,
|
|
236
|
-
attributeFilter: ["class"]
|
|
237
|
-
});
|
|
238
|
-
this.updateAlignmentStyle();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
updateAlignmentStyle() {
|
|
242
|
-
const parent = this.domNode.parentElement;
|
|
243
|
-
if (!parent) return;
|
|
244
|
-
this.domNode.style.margin = "";
|
|
245
|
-
this.domNode.style.display = "block";
|
|
246
|
-
if (parent.classList.contains("ql-align-center")) {
|
|
247
|
-
this.domNode.style.margin = "0 auto";
|
|
248
|
-
} else if (parent.classList.contains("ql-align-right")) {
|
|
249
|
-
this.domNode.style.marginLeft = "auto";
|
|
250
|
-
this.domNode.style.marginRight = "0";
|
|
251
|
-
} else {
|
|
252
|
-
this.domNode.style.marginLeft = "0";
|
|
253
|
-
this.domNode.style.marginRight = "auto";
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
observeNextPElement() {
|
|
257
|
-
if (this.nextPObserver) {
|
|
258
|
-
this.nextPObserver.disconnect();
|
|
259
|
-
}
|
|
260
|
-
const parentElement = this.domNode.parentElement;
|
|
261
|
-
if (!parentElement) {
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
const trackedParentElement = parentElement;
|
|
265
|
-
const parentElementId = parentElement.getAttribute("id") || `flow-chart-parent-${Date.now()}`;
|
|
266
|
-
parentElement.setAttribute("id", parentElementId);
|
|
267
|
-
const observer = new MutationObserver(() => {
|
|
268
|
-
if (!document.contains(trackedParentElement)) {
|
|
269
|
-
const elementById = document.getElementById(parentElementId);
|
|
270
|
-
if (!elementById) {
|
|
271
|
-
this.remove();
|
|
272
|
-
observer.disconnect();
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
observer.observe(document.body, {
|
|
277
|
-
childList: true,
|
|
278
|
-
subtree: true
|
|
279
|
-
});
|
|
280
|
-
this.nextPObserver = observer;
|
|
281
|
-
}
|
|
282
|
-
// 处理节点双击事件
|
|
283
|
-
handleNodeDblClick(event) {
|
|
284
|
-
const { data, position, e } = event;
|
|
285
|
-
if (data && data.id) {
|
|
286
|
-
this.createEditInput(data, position, e);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// 创建编辑输入框
|
|
290
|
-
createEditInput(nodeData, position, e) {
|
|
291
|
-
var _a;
|
|
292
|
-
const input = document.createElement("textarea");
|
|
293
|
-
input.className = "ql-flow-chart-edit-input";
|
|
294
|
-
input.value = ((_a = nodeData.text) == null ? void 0 : _a.value) || "";
|
|
295
|
-
const autoResize = () => {
|
|
296
|
-
input.style.height = "auto";
|
|
297
|
-
input.style.height = `${input.scrollHeight}px`;
|
|
298
|
-
};
|
|
299
|
-
Object.assign(input.style, {
|
|
300
|
-
position: "absolute",
|
|
301
|
-
boxSizing: "border-box",
|
|
302
|
-
width: "100px",
|
|
303
|
-
height: "35px",
|
|
304
|
-
padding: "5px",
|
|
305
|
-
lineHeight: "1.2",
|
|
306
|
-
whiteSpace: "pre",
|
|
307
|
-
textAlign: "center",
|
|
308
|
-
background: "#fff",
|
|
309
|
-
border: "1px solid #edefed",
|
|
310
|
-
borderRadius: "3px",
|
|
311
|
-
outline: "none",
|
|
312
|
-
transform: "translate(-50%, -50%)",
|
|
313
|
-
resize: "none",
|
|
314
|
-
zIndex: "1000",
|
|
315
|
-
left: `${e.pageX}px`,
|
|
316
|
-
top: `${e.pageY}px`,
|
|
317
|
-
overflow: "hidden"
|
|
318
|
-
});
|
|
319
|
-
document.body.appendChild(input);
|
|
320
|
-
autoResize();
|
|
321
|
-
input.addEventListener("input", autoResize);
|
|
322
|
-
input.addEventListener("keydown", (e2) => {
|
|
323
|
-
if (e2.key === "Enter" && !e2.shiftKey) {
|
|
324
|
-
this.flowChart.updateText(nodeData.id, input.value);
|
|
325
|
-
autoResize();
|
|
326
|
-
}
|
|
327
|
-
});
|
|
328
|
-
input.focus();
|
|
329
|
-
this.flowChart.on("blank:mousedown", () => {
|
|
330
|
-
this.flowChart.updateText(nodeData.id, input.value);
|
|
331
|
-
input.remove();
|
|
332
|
-
});
|
|
333
|
-
this.flowChart.on("node:click", () => {
|
|
334
|
-
this.flowChart.updateText(nodeData.id, input.value);
|
|
335
|
-
input.remove();
|
|
336
|
-
});
|
|
337
|
-
this.flowChart.on("edge:click", () => {
|
|
338
|
-
this.flowChart.updateText(nodeData.id, input.value);
|
|
339
|
-
input.remove();
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
updateText(nodeId, text) {
|
|
343
|
-
this.flowChart.updateNode(nodeId, {
|
|
344
|
-
text: { value: text }
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
destroyFlowChart() {
|
|
348
|
-
if (this.flowChart) {
|
|
349
|
-
this.flowChart.destroy();
|
|
350
|
-
this.flowChart = null;
|
|
351
|
-
}
|
|
352
|
-
const editInputs = document.querySelectorAll(".ql-flow-chart-edit-input");
|
|
353
|
-
editInputs.forEach((input) => input.remove());
|
|
354
|
-
if (this.nextPObserver) {
|
|
355
|
-
this.nextPObserver.disconnect();
|
|
356
|
-
this.nextPObserver = null;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
remove() {
|
|
360
|
-
this.destroyFlowChart();
|
|
361
|
-
super.remove();
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
__publicField(_FlowChartPlaceholderBlot, "blotName", "flow-chart");
|
|
365
|
-
__publicField(_FlowChartPlaceholderBlot, "tagName", "div");
|
|
366
|
-
__publicField(_FlowChartPlaceholderBlot, "className", "ql-flow-chart-item");
|
|
367
|
-
let FlowChartPlaceholderBlot = _FlowChartPlaceholderBlot;
|
|
368
|
-
exports.default = FlowChartPlaceholderBlot;
|
|
369
|
-
//# sourceMappingURL=flow-chart-blot.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flow-chart-blot.cjs.js","sources":["../../../../../src/modules/flow-chart/formats/flow-chart-blot.ts"],"sourcesContent":["import type { Root } from 'parchment'\nimport type { BlockEmbed as TypeBlockEmbed } from 'quill/blots/block'\nimport type FluentEditor from '../../../core/fluent-editor'\nimport Quill from 'quill'\nimport { getAllConfigs } from '../config-utils'\nimport { contractIcon, expandIcon } from '../icons'\nimport { initContextMenu } from '../modules/context-menu'\nimport { createControlPanel } from '../modules/control-panel'\nimport { FlowChartResizeAction } from '../modules/custom-resize-action'\nimport '../style/flow-chart.scss'\n\nconst BlockEmbed = Quill.import('blots/embed') as typeof TypeBlockEmbed\nclass FlowChartPlaceholderBlot extends BlockEmbed {\n static blotName = 'flow-chart'\n static tagName = 'div'\n static className = 'ql-flow-chart-item'\n quill: Quill | null = null\n flowChart: any | null = null\n data: any\n contextMenu: HTMLElement | null = null\n currentElement: any = null\n width: number = 100\n height: number = 500\n parentObserver: MutationObserver | null = null\n nextPObserver: MutationObserver | null = null\n\n constructor(scroll: Root, domNode: HTMLElement) {\n super(scroll, domNode)\n const data = FlowChartPlaceholderBlot.value(domNode)\n this.width = data.width || 100\n this.height = data.height || 500\n this.domNode.style.width = `${this.width}${data.width ? 'px' : '%'}`\n this.domNode.style.height = `${this.height}px`\n this.domNode.style.maxWidth = '100%'\n this.domNode.style.border = '1px solid #e8e8e8'\n this.domNode.setAttribute('contenteditable', 'false')\n this.data = FlowChartPlaceholderBlot.value(this.domNode)\n this.initFlowChart()\n }\n\n static value(domNode: HTMLElement): any {\n const dataStr = JSON.parse(domNode.getAttribute('data-flow-chart'))\n const value = dataStr.root ? dataStr.root : dataStr\n if (domNode.hasAttribute('width')) {\n value.width = Number.parseInt(domNode.getAttribute('width'), 10)\n }\n if (domNode.hasAttribute('height')) {\n value.height = Number.parseInt(domNode.getAttribute('height'), 10)\n }\n return dataStr.root ? dataStr.root : dataStr\n }\n\n static create(value: any): HTMLElement {\n const node = super.create() as HTMLElement\n if (value) {\n node.setAttribute('data-flow-chart', JSON.stringify(value))\n }\n if (value.width) {\n node.setAttribute('width', String(value.width))\n node.style.width = `${value.width}%`\n }\n if (value.height) {\n node.setAttribute('height', String(value.height))\n node.style.height = `${value.height}px`\n }\n node.setAttribute('contenteditable', 'false')\n return node\n }\n\n private static findQuill(el: HTMLElement): Quill | null {\n let cur: HTMLElement | null = el\n while (cur) {\n const q = (cur as any).__quillInstance\n if (q) return q\n cur = cur.parentElement\n }\n return null\n }\n\n attach() {\n super.attach()\n this.quill = FlowChartPlaceholderBlot.findQuill(this.domNode)\n }\n\n initFlowChart(): void {\n if (this.domNode.isConnected) {\n this.insertFlowChartEditor()\n }\n else {\n const observer = new MutationObserver(() => {\n if (this.domNode.isConnected) {\n this.insertFlowChartEditor()\n observer.disconnect()\n }\n })\n observer.observe(document.body, { childList: true, subtree: true })\n }\n }\n\n insertFlowChartEditor(): void {\n this.domNode.style.width = `${this.width}${this.data.width ? 'px' : '%'}`\n this.domNode.style.height = `${this.height}px`\n this.updateAlignmentStyle()\n this.observeParentAlignment()\n const { gridConfig, backgroundConfig, resizeConfig, deps } = getAllConfigs(this.quill)\n const { LogicFlow, DndPanel, SelectionSelect, Snapshot } = deps || window as any\n this.flowChart = new LogicFlow({\n container: this.domNode,\n stopScrollGraph: true,\n stopZoomGraph: true,\n allowResize: true,\n allowRotate: true,\n editable: true,\n preventDefaultDoubleClick: true,\n preventDefault: true,\n grid: gridConfig,\n background: backgroundConfig,\n plugins: [DndPanel, SelectionSelect, Snapshot],\n })\n this.flowChart.setPatternItems([\n {\n className: 'lf-shape-dashed',\n callback: () => {\n this.flowChart.openSelectionSelect()\n this.flowChart.once('selection:selected', () => {\n this.flowChart.closeSelectionSelect()\n })\n },\n },\n {\n type: 'rect',\n text: '矩形',\n className: 'lf-shape-rect',\n },\n {\n type: 'circle',\n text: '圆形',\n className: 'lf-shape-circle',\n },\n {\n type: 'ellipse',\n text: '椭圆',\n className: 'lf-shape-ellipse',\n },\n {\n type: 'diamond',\n text: '菱形',\n className: 'lf-shape-diamond',\n },\n ])\n if (resizeConfig) {\n new FlowChartResizeAction(this)\n }\n createControlPanel(this, this.quill as FluentEditor) // 创建控制面板\n initContextMenu(this, this.quill as FluentEditor) // 初始化右键菜单\n this.observeOwnParentChange()\n this.observeNextPElement()\n this.addMouseHoverEvents()\n this.flowChart.render(this.data)\n this.flowChart.on('graph:updated', () => {\n this.data = this.flowChart.getGraphData()\n this.domNode.setAttribute('data-flow-chart', JSON.stringify(this.data))\n })\n this.flowChart.on('history:change', () => {\n this.data = this.flowChart.getGraphData()\n this.domNode.setAttribute('data-flow-chart', JSON.stringify(this.data))\n })\n this.flowChart.on('node:dbclick', this.handleNodeDblClick.bind(this))\n this.flowChart.on('edge:dbclick', this.handleNodeDblClick.bind(this))\n this.domNode.addEventListener('click', (e) => {\n if (this.quill) {\n const flowChartBlot = Quill.find(this.domNode)\n const index = this.quill.getIndex(flowChartBlot as FlowChartPlaceholderBlot)\n if (index && typeof index === 'number') {\n this.quill.setSelection(index + 1, 0)\n }\n }\n })\n }\n\n addMouseHoverEvents(): void {\n this.domNode.addEventListener('mouseenter', () => {\n this.showControlPanel()\n })\n\n this.domNode.addEventListener('mouseleave', () => {\n this.flowChart?.clearSelectElements()\n this.hideControlPanel()\n })\n }\n\n getControlElements(): { leftUpControl: HTMLElement | null, control: HTMLElement | null, panelStatusIcon: HTMLElement | null } {\n const leftUpControl = this.domNode.querySelector('.lf-dndpanel') as HTMLElement | null\n const control = this.domNode.querySelector('.ql-flow-chart-control') as HTMLElement | null\n const panelStatusIcon = this.domNode.querySelector('[data-control-type=\"panel-status\"]') as HTMLElement | null\n return { leftUpControl, control, panelStatusIcon }\n }\n\n showControlPanel(): void {\n const { leftUpControl, control, panelStatusIcon } = this.getControlElements()\n if (!leftUpControl || !control) return\n\n leftUpControl.style.display = 'block'\n control.style.display = 'flex'\n if (panelStatusIcon) {\n const iconElement = panelStatusIcon.querySelector('i') || panelStatusIcon\n iconElement.innerHTML = expandIcon\n }\n }\n\n hideControlPanel(): void {\n const { leftUpControl, control, panelStatusIcon } = this.getControlElements()\n if (!leftUpControl || !control) return\n\n leftUpControl.style.display = 'none'\n control.style.display = 'none'\n if (panelStatusIcon) {\n const iconElement = panelStatusIcon.querySelector('i') || panelStatusIcon\n iconElement.innerHTML = contractIcon\n }\n }\n\n observeOwnParentChange(): void {\n let currentParent = this.domNode.parentElement\n const observer = new MutationObserver(() => {\n if (this.domNode.parentElement !== currentParent) {\n currentParent = this.domNode.parentElement\n this.observeParentAlignment()\n }\n })\n\n observer.observe(document.body, {\n attributes: false,\n childList: true,\n subtree: true,\n })\n }\n\n observeParentAlignment(): void {\n if (this.parentObserver) {\n this.parentObserver.disconnect()\n }\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === 'class') {\n this.updateAlignmentStyle()\n }\n })\n })\n\n this.parentObserver = observer\n\n const parent = this.domNode.parentElement\n if (parent) {\n observer.observe(parent, {\n attributes: true,\n attributeFilter: ['class'],\n })\n this.updateAlignmentStyle()\n }\n }\n\n updateAlignmentStyle(): void {\n const parent = this.domNode.parentElement\n if (!parent) return\n\n this.domNode.style.margin = ''\n this.domNode.style.display = 'block'\n\n if (parent.classList.contains('ql-align-center')) {\n this.domNode.style.margin = '0 auto'\n }\n else if (parent.classList.contains('ql-align-right')) {\n this.domNode.style.marginLeft = 'auto'\n this.domNode.style.marginRight = '0'\n }\n else {\n this.domNode.style.marginLeft = '0'\n this.domNode.style.marginRight = 'auto'\n }\n }\n\n observeNextPElement(): void {\n if (this.nextPObserver) {\n this.nextPObserver.disconnect()\n }\n\n const parentElement = this.domNode.parentElement\n if (!parentElement) {\n return\n }\n\n const trackedParentElement = parentElement\n\n const parentElementId = parentElement.getAttribute('id') || `flow-chart-parent-${Date.now()}`\n parentElement.setAttribute('id', parentElementId)\n\n const observer = new MutationObserver(() => {\n if (!document.contains(trackedParentElement)) {\n const elementById = document.getElementById(parentElementId)\n if (!elementById) {\n this.remove()\n observer.disconnect()\n }\n }\n })\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n })\n\n this.nextPObserver = observer\n }\n\n // 处理节点双击事件\n handleNodeDblClick(event: any) {\n const { data, position, e } = event\n if (data && data.id) {\n this.createEditInput(data, position, e)\n }\n }\n\n // 创建编辑输入框\n createEditInput(nodeData: any, position: any, e: any) {\n const input = document.createElement('textarea')\n input.className = 'ql-flow-chart-edit-input'\n input.value = nodeData.text?.value || ''\n const autoResize = () => {\n input.style.height = 'auto'\n input.style.height = `${input.scrollHeight}px`\n }\n Object.assign(input.style, {\n position: 'absolute',\n boxSizing: 'border-box',\n width: '100px',\n height: '35px',\n padding: '5px',\n lineHeight: '1.2',\n whiteSpace: 'pre',\n textAlign: 'center',\n background: '#fff',\n border: '1px solid #edefed',\n borderRadius: '3px',\n outline: 'none',\n transform: 'translate(-50%, -50%)',\n resize: 'none',\n zIndex: '1000',\n left: `${e.pageX}px`,\n top: `${e.pageY}px`,\n overflow: 'hidden',\n })\n document.body.appendChild(input)\n autoResize()\n input.addEventListener('input', autoResize)\n input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n this.flowChart.updateText(nodeData.id, input.value)\n autoResize()\n }\n })\n input.focus()\n\n this.flowChart.on('blank:mousedown', () => {\n this.flowChart.updateText(nodeData.id, input.value)\n input.remove()\n })\n\n this.flowChart.on('node:click', () => {\n this.flowChart.updateText(nodeData.id, input.value)\n input.remove()\n })\n\n this.flowChart.on('edge:click', () => {\n this.flowChart.updateText(nodeData.id, input.value)\n input.remove()\n })\n }\n\n updateText(nodeId: string, text: string) {\n this.flowChart.updateNode(nodeId, {\n text: { value: text },\n })\n }\n\n destroyFlowChart() {\n if (this.flowChart) {\n this.flowChart.destroy()\n this.flowChart = null\n }\n const editInputs = document.querySelectorAll('.ql-flow-chart-edit-input')\n editInputs.forEach(input => input.remove())\n if (this.nextPObserver) {\n this.nextPObserver.disconnect()\n this.nextPObserver = null\n }\n }\n\n remove() {\n this.destroyFlowChart()\n super.remove()\n }\n}\n\nexport default FlowChartPlaceholderBlot\n"],"names":["getAllConfigs","FlowChartResizeAction","createControlPanel","initContextMenu","expandIcon","contractIcon","e"],"mappings":"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"}
|