@chenyomi/leafer-htmltext-edit 2.0.3 → 2.1.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/README.md +394 -47
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/TextEditTool/index.ts","../src/utils.ts","../src/TextEditor.ts","#style-inject:#style-inject","../src/htmltext-editor.css","../src/license/encrypt.ts","../src/license/validator.ts","../src/license/index.ts","../src/HtmlTextManage.ts","../src/HtmlText.ts","../src/index.ts"],"names":["updataHtmlText","e","base64font","fontObj","scaleX","scaleY","zoomScale","dom","qlEditor","html","htmlTextManage","style","addStyle","addFontSizeToP","fontSize","lineHeight","letterSpacing","textShadow","alignContent","wrapper","wrapperStyle","p","str","height","quill","actualHeight","divBox","setHTMLText","key","value","editor","canvas","range","text","formats","convertedText","val","line","TextEditTool","EditTool","func","wait","timeout","args","div","EditorScaleEvent","ratio","PointerEvent","__decorateClass","registerEditTool","TextEditor","InnerEditor","editDom","config","target","find","width","x","y","a","b","c","d","f","Matrix","registerInnerEditor","styleInject","css","insertAt","head","SECRET_KEY","decrypt","encryptedData","CryptoJS","decode","parseLicense","license","decoded","decrypted","validateDomain","allowedDomains","currentDomain","domain","baseDomain","validateExpireDate","expireDate","expire","validateLicense","data","licenseKey","isLicenseValid","setLicense","result","checkLicense","getLicenseInfo","HtmlTextManage","_HtmlTextManage","app","el","Quill","BlockBlot","lineFormats","delta","Delta","FontStyle","callback","level","listNew","list","applyCallback","leaf","HtmlText","Box","fontFamily","boxData","fontContent","noText","textElement","HTMLText","registerUI"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n EditTool,\n EditorScaleEvent,\n registerEditTool,\n} from \"@leafer-in/editor\";\nimport { PointerEvent } from \"leafer-ui\";\nimport { htmlTextManage } from \"../\";\nimport { updataHtmlText } from \"../utils\";\n@registerEditTool()\n// 定义插件类,继承自 EditTool,处理矩形圆角编辑交互\nexport class TextEditTool extends EditTool {\n // 插件标识标签\n public get tag() {\n return \"TextEditTool\";\n }\n public quill: any = null;\n private updateBoxDebounced: (text: any) => void;\n // 构造函数,初始化控制点并加入视图\n constructor(editor: any) {\n super(editor);\n this.eventIds = []; // 存储事件绑定ID\n this.updateBoxDebounced = this.debounce((text: any) => {\n updataHtmlText(text);\n }, 300);\n }\n // 自定义防抖函数替代 lodash/debounce\n private debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n ): T {\n let timeout: number | null = null;\n return ((...args: any[]) => {\n if (timeout !== null) {\n window.clearTimeout(timeout);\n }\n timeout = window.setTimeout(\n () => func.apply(this, args),\n wait,\n ) as unknown as number;\n }) as T;\n }\n // 绑定事件\n public addEvent(): void {\n const { editor } = htmlTextManage.getCanvas();\n const text = editor._target.findOne(\"HTMLText\");\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n const div: any = document.querySelector(\"#textInnerEditor\");\n const { style } = div;\n this.eventIds = [\n editor.on_(EditorScaleEvent.SCALE, (e: any) => {\n if (!text.data.canChangeBox) {\n text.data.canChangeBox = true;\n }\n if (text.data.canChangeBox) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.height = \"auto\";\n }\n let ratio = 1\n if (text.parent.tag === 'HtmlText' && text.parent.lockRatio && text.data?.baseSize?.width) {\n ratio = text.parent.width / text.data?.baseSize.width\n text.data.textData.fontSize = text.data.textData.fontSize * ratio\n }\n // // 每次变动尺寸更新child的时候都要更新baseSize\n text.data?.baseSize?.width && (text.data.baseSize.width = text.parent.width)\n this.updateBoxDebounced(text);\n }),\n editor.on_(PointerEvent.DOUBLE_TAP, () => {\n if (!text.parent.locked) {\n editor.openInnerEditor(text, true);\n }\n }),\n ];\n }\n\n // 生命周期钩子:插件加载时绑定事件\n public onLoad(): void {\n const { editor } = htmlTextManage.getCanvas();\n console.log(editor._target, 123);\n const text: any = editor._target.findOne(\"HTMLText\");\n\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n this.addEvent();\n this.quill = htmlTextManage.getQuill();\n this.quill.clipboard.dangerouslyPasteHTML(text.text);\n const div: any = document.querySelector(\"#textInnerEditor\");\n const { style } = div;\n\n if (text.data.canChangeBox) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.height = text.parent.height * zoomScale + \"px\";\n } else {\n style.width = \"auto\";\n style.height = \"auto\";\n }\n // 每次进来就恢复初始的 canChangeBox 和 自动的宽高\n // text.set({\n // width: 0,\n // height: 0\n // })\n // text.data.canChangeBox = false\n }\n\n private isUpdatingPoints = false;\n private curveAmount = 0;\n public updateChangeBoxBound(text: any): void {\n text &&\n text.set({\n width: text.__layout.boxBounds.width,\n height: text.__layout.boxBounds.height,\n });\n }\n // 生命周期钩子:插件更新时,因为这是全局的生命周期所以判断一定要细致仔细\n public onUpdate(): void {\n const { editor } = htmlTextManage.getCanvas();\n const text = editor._target.findOne(\"HTMLText\");\n const el = editor._target;\n console.log(\"文本bound更新\");\n\n if (this.curveAmount == (text as any).curveAmount) return;\n if (this.isUpdatingPoints) return;\n // 每次进来就恢复初始的 canChangeBox 和 自动的宽高\n // text.set({\n // width: 0,\n // height: 0\n // })\n }\n\n // 生命周期钩子:插件卸载时解绑事件\n public onUnload(): void {\n const { editor } = htmlTextManage.getCanvas();\n editor.off_(this.eventIds);\n }\n\n // 生命周期钩子:销毁插件时清理资源\n public onDestroy(): void {}\n}\n","import { htmlTextManage } from \".\";\n// 更新text样式\nexport const updataHtmlText = async (\n e?: any,\n base64font?: any,\n fontObj?: any,\n) => {\n const { scaleX, scaleY } = e.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n const dom: any = document.querySelector(\"#textInnerEditor\");\n // if (dom && e.data.textData?.fontFamily) {\n // dom.style.fontFamily = e.data.textData.fontFamily;\n // }\n if (dom && e.data.textData?.fontSize) {\n dom.style.fontSize = `${e.data.textData.fontSize * zoomScale}px`;\n }\n if (dom && e.data.textData?.lineHeight) {\n dom.style.lineHeight = e.data.textData.lineHeight;\n }\n if (dom && e.data.textData?.letterSpacing) {\n dom.style.letterSpacing = `${e.data.textData.letterSpacing}px`;\n }\n if (dom && e.data.textData?.textShadow) {\n dom.style.textShadow = e.data.textData.textShadow;\n } else {\n dom.style.textShadow = \"none\";\n }\n if (dom && e.data.textData?.alignContent) {\n const qlEditor: any = dom.querySelector(\".ql-editor\");\n qlEditor.style.alignContent = e.data.textData.alignContent;\n }\n // 如果是空的就把text滞空\n const quill = htmlTextManage.getQuill();\n const html = quill.getSemanticHTML();\n if (html === \"<p></p>\") {\n if (e.text.includes(\"<style>@font-face\")) {\n e.text = e.text.split(\"</style>\")[0] + \"</style>\";\n } else {\n e.text = \"\";\n }\n return;\n }\n if (e.text.includes(\"<style>@font-face\")) {\n // text已经加载过字体\n const style = e.text.split(\"</style>\")[0];\n if (fontObj && !style.includes(fontObj)) {\n // 在字体style标签检索是否有当前字体 没有就添加字体style\n const addStyle = `@font-face {font-family: ${fontObj.split(\",\")[0]};src: url(${base64font}) format('woff2') }</style>`;\n e.text =\n style +\n addStyle +\n addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n } else {\n // 样式当前字体已经存在\n e.text =\n style +\n \"</style>\" +\n addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n }\n } else if (base64font && fontObj) {\n // 未加载过字体初次添加字体 存在base64font && fontObj才触发\n const style = `<style>@font-face {font-family: ${fontObj.split(\",\")[0]};src: url(${base64font}) format('woff2') }</style>`;\n e.text =\n style +\n addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n } else {\n // text没有包含字体就不加字体style\n e.text = addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n }\n};\nconst addFontSizeToP = (\n e: any,\n html: any,\n fontSize = 20.67,\n lineHeight = 1.5,\n letterSpacing = 0,\n textShadow = \"none\",\n alignContent = \"start\",\n) => {\n const { scaleX, scaleY } = e.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = html;\n // 添加的样式 用于HTMLText渲染\n const wrapperStyle: any = {\n fontSize: `${fontSize}px`,\n lineHeight,\n letterSpacing: `${letterSpacing}px`,\n textShadow,\n };\n wrapper.querySelectorAll(\"p,ol,ul\").forEach((p: any) => {\n Object.assign(p.style, wrapperStyle);\n });\n\n // 这个上下标还是要控制一下尺寸 因为html和canvas规范不一样 所以这里要控制一下 当然如果存在别的style例如color的style就合并style\n let str = wrapper.innerHTML;\n // 排查如果有回车换行的加上一个字符\n if (/<p\\b[^>]*><\\/p>/.test(str)) {\n str = str.replace(/<p\\b([^>]*)><\\/p>/g, \"<p$1> </p>\");\n }\n if (/"/.test(str)) {\n str = str.replace(/"/g, \"\");\n }\n\n let height;\n const div: any = document.querySelector(\"#textInnerEditor\");\n const quill = htmlTextManage.getQuill();\n // 这里别动\n // 获取包含自动换行的实际内容高度\n const actualHeight = Number(\n (quill.scroll.domNode.scrollHeight / zoomScale).toFixed(0),\n );\n const actualWidth = Number(\n (quill.scroll.domNode.scrollWidth / zoomScale).toFixed(0),\n );\n if ([\"center\", \"end\"].includes(e.data.textData.alignContent)) {\n if (e.parent.height < actualHeight) {\n height = (actualHeight || e.__layout.boxBounds.height) + \"px\";\n } else {\n height = `${e.parent.height}px`;\n }\n } else {\n if (e.parent.height < actualHeight) {\n height = (actualHeight || e.__layout.boxBounds.height) + \"px\";\n } else {\n height = `${e.parent.height}px`;\n }\n }\n\n // 水平居中相关样式内嵌 因为这个quill居中用的class没用style\n const style = `<style>p{margin:0;}sub,sup{font-size:63%;}.ql-ui{position:absolute}ol,ul{counter-reset:list-0;padding-left:1.5em;margin:0}ol>li,ul>li{counter-increment:list-0;list-style-type:none;position:relative;padding-left:0;margin:0}ol>li::before{content:counter(list-0,decimal) '. ';position:absolute;left:-1.5em;width:1.2em;text-align:right}ul>li::before{content:'\\u2022';position:absolute;left:-1.5em;width:1.2em;text-align:right}li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-align-center{text-align:center}.ql-align-right{text-align:right}.ql-align-left{text-align:left}.ql-align-justify{text-align:justify}</style>`;\n let divBox = \"\";\n if (e.parent.children[0].tag.includes(\"Shape\")) {\n divBox =\n style +\n `<div style=\"width: ${e.parent.width}px;height: ${e.parent.height}px;overflow-wrap:break-word;word-break:break-all;align-content:center;\">${str}</div>`;\n } else if (e.data.canChangeBox) {\n divBox =\n style +\n `<div style=\"width: ${e.parent.width}px;height:${height};overflow-wrap:break-word;word-break:break-all;align-content:${alignContent};\">${str}</div>`;\n } else {\n // 斜体补偿宽度 控制\n if (e.data.textData.italic) {\n divBox = style + str;\n } else {\n divBox =\n style +\n `<div style=\"overflow-wrap:break-word;word-break:break-all;\">${str}</div>`;\n }\n }\n console.log(divBox, \"最终的html内容\");\n return divBox;\n};\nexport const setHTMLText = (key: string, value?: any, base64font?: any) => {\n const quill = htmlTextManage.getQuill();\n const { editor, canvas } = htmlTextManage.getCanvas();\n // console.log(editor, htmlTextManage.getCanvas(), \"editor\");\n if (!quill) {\n return;\n }\n // const range = JSON.parse(localStorage.getItem(\"selection-change\") || \"{}\");\n const range= htmlTextManage.getSelection()\n console.log(range, \"range\")\n htmlTextManage.dateEdit(async (e: any) => {\n if (key === \"font\") {\n if (editor.innerEditing) {\n if (range && range.length) {\n quill.formatText(range.index, range.length, key, value);\n } else {\n quill.formatText(0, quill.getLength() - 1, key, value);\n }\n e.data.textData.fontFamily = value;\n updataHtmlText(e, base64font ?? null, value ?? null);\n } else {\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n quill.formatText(0, quill.getLength() - 1, key, value);\n e.data.textData.fontFamily = value;\n updataHtmlText(e, base64font ?? null, value ?? null);\n }\n } else if (key === \"fontSize\") {\n // 字体和字号\n e.data.textData[key] = value;\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n updataHtmlText(e, base64font ?? null);\n } else if (key === \"textCase\") {\n // 大小写\n if (editor.innerEditing) {\n const text = quill.getText(range.index, range.length);\n const formats = quill.getFormat(range.index, range.length);\n quill.deleteText(range.index, range.length);\n let convertedText;\n if (text === text.toUpperCase() && /[A-Z]/.test(text)) {\n convertedText = text.toLowerCase();\n } else if (text === text.toLowerCase() && /[a-z]/.test(text)) {\n convertedText = text.toUpperCase();\n } else {\n convertedText = text.toUpperCase();\n }\n\n quill.insertText(range.index, convertedText, formats);\n range &&\n editor.innerEditing &&\n quill.setSelection(range.index, range.length);\n }\n } else if (key === \"script\") {\n // 上下标\n let val = \"sub\";\n if (value === \"super\") val = \"sup\";\n if (editor.innerEditing) {\n if (range && range.length) {\n quill.formatText(\n range.index,\n range.length,\n key,\n quill.getFormat(range).script === value ? false : val,\n );\n } else {\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n quill.getFormat().script === value ? false : val,\n );\n }\n } else {\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n quill.getFormat().script === value ? false : val,\n );\n updataHtmlText(e);\n }\n } else if (key === \"align\") {\n // 水平居中\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n if (editor.innerEditing) {\n quill.format(key, value);\n } else {\n quill.formatLine(0, quill.getLength(), key, value);\n }\n updataHtmlText(e);\n } else if (key === \"alignContent\") {\n // 水平居中\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n e.data.textData[key] = value;\n updataHtmlText(e);\n } else if (key === \"lineHeight\" || key === \"letterSpacing\") {\n // 行高\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n e.data.textData[key] = value;\n updataHtmlText(e);\n } else if (key === \"color\") {\n // 颜色\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n if (range && range.length) {\n quill.formatText(range.index, range.length, key, value);\n } else {\n quill.formatText(0, quill.getLength() - 1, key, value);\n }\n if (e.tag === \"HTMLText\") {\n updataHtmlText(e);\n } else if (e.parent.findOne(\"HTMLText\")) {\n updataHtmlText(e.parent.findOne(\"HTMLText\"));\n }\n } else if (key === \"textShadow\") {\n // 阴影\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n e.data.textData[key] = value;\n updataHtmlText(e);\n } else if (key === \"list\") {\n // 有序无序列表\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n if (editor.innerEditing) {\n const [line]: any = quill.getLine(range?.index || 0);\n if (line.formats().list) {\n quill.format(key, false);\n } else {\n quill.format(key, value);\n }\n } else {\n const [line]: any = quill.getLine(range?.index || 0);\n if (line.formats().list) {\n quill.formatLine(0, quill.getLength(), key, false);\n } else {\n quill.formatLine(0, quill.getLength(), key, value);\n }\n }\n updataHtmlText(e);\n } else {\n if (editor.innerEditing) {\n if (range && range.length) {\n quill.formatText(\n range.index,\n range.length,\n key,\n value === undefined ? !quill.getFormat(range)[key] : value,\n );\n } else {\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n value === undefined ? !quill.getFormat()[key] : value,\n );\n }\n } else {\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n\n value === undefined ? !quill.getFormat()[key] : value,\n );\n updataHtmlText(e);\n }\n }\n\n // if (e.parent.tag === 'Box' && e.parent.findOne('HTMLText') && e.parent.findOne('Box')) {\n // handleShowCurve(e.parent, false)\n // }\n }, 1);\n};\n","import { InnerEditor, registerInnerEditor } from \"@leafer-in/editor\";\nimport { Matrix, PointerEvent } from \"@leafer-ui/core\";\nimport { htmlTextManage } from \".\";\nimport { updataHtmlText } from \"./utils\";\n@registerInnerEditor()\nexport class TextEditor extends InnerEditor {\n public get tag() {\n return \"TextEditor\";\n }\n declare public editTarget: any;\n\n public editDom: any;\n public config = {\n selectAll: false,\n };\n\n public eventIds: any[] = [];\n\n protected selectText:\n | { start: number; end: number; text: string }\n | undefined = undefined;\n protected inBody: boolean | undefined = undefined; // App 的 view 为 canvas 类型时,文本编辑框只能添加到 body 下了\n protected isHTMLText: boolean | undefined = undefined;\n protected _keyEvent: boolean | undefined = undefined;\n public quill: any = null;\n public isComposing: boolean = false;\n public onLoad(): void {\n const { editor } = this;\n const { config } = editor.app;\n const text = this.editTarget;\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n // text.textEditing = true\n\n this.isHTMLText = !(text instanceof Text); // HTMLText\n this._keyEvent = config.keyEvent;\n config.keyEvent = false;\n\n const div = (this.editDom = document.querySelector(\"#textInnerEditor\"));\n const { style } = div;\n style.visibility = \"visible\";\n\n // style.boxSizing = 'border-box'\n // 获取外部box的宽高 这个box也是可以手动调整的\n if (text.data.canChangeBox) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.height = text.parent.height * zoomScale + \"px\";\n } else {\n style.width = \"auto\";\n style.height = \"auto\";\n }\n\n // style.border = '1.5px solid #8499EF'\n style.outline = \"solid #8499EF\";\n // 初始化文本样式\n if (text.data.textData.fontSize) {\n div.style.fontSize = `${text.data.textData.fontSize * zoomScale}px`;\n }\n // if (text.data.textData.fontFamily) {\n // div.style.fontFamily = `${text.data.textData.fontFamily}`;\n // }\n if (text.data.textData.lineHeight) {\n div.style.lineHeight = text.data.textData.lineHeight;\n }\n if (text.data.textData.letterSpacing) {\n div.style.letterSpacing = `${text.data.textData.letterSpacing}px`;\n }\n if (text.data.textData.textShadow) {\n div.style.textShadow = `${text.data.textData.textShadow}`;\n } else {\n div.style.textShadow = \"none\";\n }\n if (text.data.textData.alignContent) {\n const qlEditor: any = div.querySelector(\".ql-editor\");\n qlEditor.style.alignContent = `${text.data.textData.alignContent}`;\n }\n\n this.quill = htmlTextManage.getQuill();\n\n // 加载文本到编辑器\n this.quill.clipboard.dangerouslyPasteHTML(text.text);\n // this.quill.focus()\n if (text.parent.children[0].tag.includes(\"Shape\")) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.left = \"0px\";\n this.quill.formatLine(0, this.quill.getLength(), \"align\", \"center\");\n } else {\n this.quill.setSelection(0, this.quill.getLength() - 1);\n }\n\n // 获取整个编辑器容器的边界\n // const containerBounds = this.quill.container.getBoundingClientRect()\n this.quill.on(\"text-change\", this.onInput);\n this.quill.on(\"selection-change\", this.onSelectionChange);\n htmlTextManage.selection = null\n // localStorage.removeItem(\"selection-change\");\n\n this.eventIds = [\n // 点击空白关闭\n editor.app.on_(PointerEvent.DOWN, (e: PointerEvent) => {\n let { target } = e.origin,\n find: boolean = false;\n while (target) {\n if (target === div) find = true;\n target = target.parentElement;\n }\n if (!find) {\n editor.closeInnerEditor();\n editor.cancel();\n }\n }),\n ];\n // const { canvas } = useEditor()\n // canvas.app.config.move.drag = false\n // canvas.app.tree.hittable = false\n // canvas.app.editor.hittable = false\n }\n private onSelectionChange = async (e: any) => {\n if(e) htmlTextManage.selection = e\n // e && localStorage.setItem(\"selection-change\", JSON.stringify(e));\n };\n\n private onInput = async () => {\n const { editDom } = this;\n // 主要是更新编辑内容\n updataHtmlText(this.editTarget);\n // 获取当前文字编辑文字内容的边界 这里是在没有修改过外部尺寸的情况下 自适应文字编辑内容的尺寸\n // updateChangeBoxBound(this.editTarget)\n\n // 如果是清空了 width要从0改成auto\n // editDom.style.width = documentBounds.width ? documentBounds.width : 'auto'\n };\n\n public onUpdate() {\n const { editTarget: text } = this;\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n\n // layout\n let { width, height } = text.parent.__local;\n ((width *= zoomScale), (height *= zoomScale));\n\n const { x, y } = this.inBody\n ? text.app.clientBounds\n : text.app.tree.clientBounds;\n const { a, b, c, d, e, f } = new Matrix(text.worldTransform)\n .scale(1 / zoomScale)\n .translateInner(0, 0);\n\n const { style } = this.editDom;\n style.transform = `matrix(${a},${b},${c},${d},${e},${f})`;\n style.left = x + \"px\";\n style.top = y + \"px\";\n\n // 打开内部或者编辑内部文本编辑强制隐藏\n text.set({\n visible: false,\n });\n }\n private isUpdatingPoints = false;\n public onUnload(): void {\n const { editTarget: text, editor, editDom: dom } = this;\n // const { canvas } = useEditor()\n // canvas.app.config.move.drag = false\n // canvas.app.tree.hittable = true\n // canvas.app.editor.hittable = true\n if (text) {\n this.onInput();\n\n if (editor.app) editor.app.config.keyEvent = this._keyEvent;\n editor.off_(this.eventIds);\n\n // dom.remove()\n // this.editDom = this.eventIds = undefined\n this.editDom.style.visibility = \"hidden\";\n this.eventIds = [];\n }\n // 如果大于1\n if (\n text.parent &&\n text.parent.name == \"Text\" &&\n text.parent.children.some((e: any) => e.tag === \"Box\")\n ) {\n text.parent.findOne(\"Box\").opacity = 1;\n text.visible = false;\n } else {\n // 恢复显示\n text.set({\n visible: true,\n });\n }\n if (this.quill.getLength() === 1 && text.parent.name === \"Text\") {\n text.parent.remove();\n }\n this.quill.off(\"text-change\", this.onInput);\n this.quill.off(\"selection-change\", this.onSelectionChange);\n }\n}\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\".ql-editor{padding:0!important;line-height:unset!important;overflow:unset!important;outline:0}.ql-container{font-family:unset!important}.ql-editor p{margin:0!important}.ql-editor sub,.ql-editor sup{font-size:63%}.ql-editor sup{top:-.58em}.ql-editor sub{bottom:-.38em}.ql-editor ol{padding-left:0!important}\\n\")","import CryptoJS from 'crypto-js'\n\n// 加密密钥(请修改为你自己的密钥)\nconst SECRET_KEY = 'chenyuming-license-key'\n\n/**\n * 加密数据\n */\nexport function encrypt(data: string): string {\n return CryptoJS.AES.encrypt(data, SECRET_KEY).toString()\n}\n\n/**\n * 解密数据\n */\nexport function decrypt(encryptedData: string): string {\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedData, SECRET_KEY)\n return bytes.toString(CryptoJS.enc.Utf8)\n } catch {\n return ''\n }\n}\n\n/**\n * Base64 编码\n */\nexport function encode(str: string): string {\n return btoa(encodeURIComponent(str))\n}\n\n/**\n * Base64 解码\n */\nexport function decode(str: string): string {\n try {\n return decodeURIComponent(atob(str))\n } catch {\n return ''\n }\n}","import { decrypt, decode } from './encrypt'\n\nexport interface LicenseData {\n key: string // License Key\n domains?: string[] // 允许的域名列表\n expireDate?: string // 过期时间 YYYY-MM-DD\n features?: string[] // 功能列表\n userId?: string // 用户ID\n email?: string // 用户邮箱\n}\n\n/**\n * 解析 License\n */\nfunction parseLicense(license: string): LicenseData | null {\n try {\n // 1. Base64 解码\n const decoded = decode(license)\n if (!decoded) return null\n\n // 2. AES 解密\n const decrypted = decrypt(decoded)\n if (!decrypted) return null\n\n // 3. 解析 JSON\n const data: LicenseData = JSON.parse(decrypted)\n return data\n } catch {\n return null\n }\n}\n\n/**\n * 验证域名\n */\nfunction validateDomain(allowedDomains?: string[]): boolean {\n // 如果没有域名限制,直接通过\n if (!allowedDomains || allowedDomains.length === 0) {\n return true\n }\n\n // 获取当前域名\n const currentDomain = window.location.hostname\n\n // 本地开发环境\n if (currentDomain === 'localhost' || currentDomain === '127.0.0.1') {\n return true\n }\n\n // 检查域名是否在允许列表中\n return allowedDomains.some(domain => {\n // 支持通配符 *.example.com\n if (domain.startsWith('*.')) {\n const baseDomain = domain.slice(2)\n return currentDomain.endsWith(baseDomain)\n }\n return currentDomain === domain\n })\n}\n\n/**\n * 验证过期时间\n */\nfunction validateExpireDate(expireDate?: string): boolean {\n if (!expireDate) return true\n\n try {\n const expire = new Date(expireDate)\n const now = new Date()\n return now < expire\n } catch {\n return false\n }\n}\n\n/**\n * 验证 License\n */\nexport function validateLicense(license: string): {\n valid: boolean\n error?: string\n data?: LicenseData\n} {\n // 解析 License\n const data = parseLicense(license)\n \n if (!data) {\n return {\n valid: false,\n error: 'Invalid license key'\n }\n }\n\n // 验证域名\n if (!validateDomain(data.domains)) {\n return {\n valid: false,\n error: `License not valid for domain: ${window.location.hostname}`,\n data\n }\n }\n\n // 验证过期时间\n if (!validateExpireDate(data.expireDate)) {\n return {\n valid: false,\n error: 'License has expired',\n data\n }\n }\n\n return {\n valid: true,\n data\n }\n}","import { validateLicense } from './validator'\n\nlet licenseKey: string | null = null\nlet isLicenseValid = false\n\n/**\n * 设置 License\n */\nexport function setLicense(license: string): boolean {\n const result = validateLicense(license)\n \n if (result.valid) {\n licenseKey = license\n isLicenseValid = true\n console.log('[License] License activated successfully')\n return true\n } else {\n console.error('[License] License validation failed:', result.error)\n isLicenseValid = false\n return false\n }\n}\n\n/**\n * 检查 License 是否有效\n */\nexport function checkLicense(): boolean {\n if (!licenseKey) {\n console.warn('[License] No license key provided')\n return false\n }\n\n if (!isLicenseValid) {\n console.warn('[License] License is not valid')\n return false\n }\n\n // 重新验证(防止过期)\n const result = validateLicense(licenseKey)\n isLicenseValid = result.valid\n\n if (!isLicenseValid) {\n console.error('[License] License expired or invalid:', result.error)\n }\n\n return isLicenseValid\n}\n\n/**\n * 获取 License 信息\n */\nexport function getLicenseInfo() {\n if (!licenseKey) return null\n \n const result = validateLicense(licenseKey)\n return result.data\n}\n\n// 导出类型\nexport type { LicenseData } from './validator'","import Quill, { Delta } from \"quill\";\nimport \"quill/dist/quill.core.css\";\nimport \"./htmltext-editor.css\";\nimport { FontStyle } from \"quill/formats/font\";\n\nimport { checkLicense } from \"./license\";\nclass HtmlTextManage {\n private static instance: HtmlTextManage;\n private quill: Quill | null = null;\n public app_: any | null = null;\n public selection: any | null = null;\n private constructor() {}\n\n static getInstance() {\n if (!HtmlTextManage.instance) {\n HtmlTextManage.instance = new HtmlTextManage();\n }\n return HtmlTextManage.instance;\n }\n\n async init(app: any) {\n // 检查授权\n if (!checkLicense()) {\n console.error(\n \"[HtmlTextManage] 授权失败请联系作者获取授权 邮箱 : 408550179@qq.com VX : cym5640\",\n );\n throw new Error(\n \"[HtmlTextManage] 授权失败请联系作者获取授权 邮箱 : 408550179@qq.com 微信 : cym5640\",\n );\n }\n this.app_ = app;\n if (this.quill) return this.quill;\n\n let el = document.getElementById(\"textInnerEditor\");\n if (!el) {\n el = document.createElement(\"div\");\n el.id = \"textInnerEditor\";\n el.style.position = \"fixed\";\n el.style.transformOrigin = \"left top\";\n el.style.overflowWrap = \"break-word\";\n el.style.wordBreak = \"break-all\";\n el.style.visibility = \"hidden\";\n document.body.appendChild(el);\n this.quill = new Quill(\"#textInnerEditor\", {\n theme: undefined,\n modules: {\n toolbar: false,\n keyboard: {\n bindings: {\n enter: {\n key: \"Enter\",\n handler: (range: any) => {\n const [line] = this.quill!.getLine(range.index);\n const BlockBlot: any = Quill.import(\"blots/block\");\n if (!BlockBlot?.bubbleFormats) return true;\n\n const lineFormats = BlockBlot.bubbleFormats(line);\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert(\"\\n\", lineFormats);\n\n this.quill!.updateContents(delta, Quill.sources.USER);\n this.quill!.setSelection(\n range.index + 1,\n Quill.sources.SILENT,\n );\n return false;\n },\n },\n },\n },\n },\n });\n this.app_.editor.quill = this.quill;\n this.registerFonts();\n return this.quill;\n } else {\n this.quill = this.app_.editor.quill;\n }\n }\n\n getQuill() {\n if (!this.quill) {\n throw new Error(\"Quill editor not initialized. Call init() first.\");\n }\n return this.quill;\n }\n\n getCanvas() {\n if (!this.app_) {\n throw new Error(\"app_ editor not initialized. Call init() first.\");\n }\n return this.app_;\n }\n\n getSelection() {\n if (!this.selection) {\n throw new Error(\"selection initialized. Call init() first.\");\n }\n return this.selection;\n }\n\n private registerFonts() {\n // 注册 FontStyle 作为字体格式\n FontStyle.whitelist = undefined;\n Quill.register(\"formats/font\", FontStyle, true);\n }\n // 判断是否是多选情况下\n public isMultiSelect(): boolean {\n if (!this.app_.editor) return false;\n if (this.app_.editor.multiple === true) {\n return true;\n } else {\n return false;\n }\n }\n public dateEdit(\n callback: (leaf: any) => void,\n level = 0,\n listNew?: any,\n ): void {\n // 添加listNew支持,用来指定检索的数据源,防止因为防抖或者延迟执行造成的活跃对象变更\n const { editor } = this.app_;\n const list = listNew ? listNew : editor.leafList.list;\n const applyCallback = (leaf: any) => {\n if (level && (leaf.tag === \"Box\" || leaf.name === \"Text\")) {\n callback(leaf.children?.[0] || leaf);\n } else {\n callback(leaf);\n }\n };\n if (!list.length) return;\n if (Array.isArray(list) && list.length > 1) {\n this.app_.lockLayout();\n list.forEach(applyCallback);\n this.app_.unlockLayout();\n editor.updateEditBox();\n } else {\n applyCallback(list[0]);\n }\n }\n}\n\nexport const htmlTextManage = HtmlTextManage.getInstance();\n","import { Box, registerUI } from \"@leafer-ui/core\";\nimport { HTMLText } from \"@leafer-in/html\";\nimport { IBoxInputData } from \"@leafer-ui/interface\";\n\n// 文本样式属性\ninterface IHtmlTextContentData {\n text?: string;\n fontSize: number;\n fontFamily?: string;\n lineHeight?: number;\n letterSpacing?: number;\n textShadow?: string;\n alignContent?: string;\n}\n\n// 使用交叉类型而非继承\ntype IHtmlTextInputData = IBoxInputData & IHtmlTextContentData;\n\n@registerUI()\nclass HtmlText extends Box {\n public get __tag() {\n return \"HtmlText\";\n }\n\n constructor(data?: IHtmlTextInputData) {\n // 提取文本属性,其余传递给 Box\n const {\n text,\n fontSize,\n fontFamily,\n lineHeight,\n letterSpacing,\n textShadow,\n alignContent,\n ...boxData\n } = data || {};\n\n super({\n editOuter: \"TextEditTool\",\n name: \"HtmlText\",\n x: 0,\n y: 0,\n editable: true,\n draggable: true,\n overflow: \"show\",\n ...boxData,\n });\n if (data) {\n this.createTextElement(data);\n }\n }\n\n private createTextElement(data: IHtmlTextInputData) {\n // 提取文本相关属性\n const {\n text,\n fontSize,\n fontFamily,\n lineHeight,\n letterSpacing,\n textShadow,\n alignContent,\n } = data;\n const fontContent = `<style>p{margin:0;}sub,sup{font-size:63%;}.ql-ui{position:absolute}ol,ul{counter-reset:list-0;padding-left:1.5em;margin:0}ol>li,ul>li{counter-increment:list-0;list-style-type:none;position:relative;padding-left:0;margin:0}ol>li::before{content:counter(list-0,decimal) '. ';position:absolute;left:-1.5em;width:1.2em;text-align:right}ul>li::before{content:'•';position:absolute;left:-1.5em;width:1.2em;text-align:right}li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-align-center{text-align:center}.ql-align-right{text-align:right}.ql-align-left{text-align:left}.ql-align-justify{text-align:justify}</style>`;\n const noText = `<div style=\"ove\n rflow-wrap:break-word;word-break:break-all;\"><p style=\"font-size: ${fontSize}px; line-height: ${lineHeight}; letter-spacing: ${letterSpacing}px; text-shadow: ${textShadow};\"><strong>Hello World</strong></p></div>`;\n const textElement = new HTMLText({\n name: \"Text\",\n text: fontContent + (text || noText),\n x: 0,\n y: 0,\n data: {\n canChangeBox: false,\n textData: {\n fontFamily: fontFamily,\n fontSize: fontSize,\n lineHeight: lineHeight,\n letterSpacing: letterSpacing || 0,\n textShadow: textShadow,\n alignContent: alignContent,\n },\n },\n editConfig: {\n selectedStyle: {\n strokeWidth: 0,\n },\n },\n });\n\n this.add(textElement);\n }\n}\n\nexport { HtmlText };\n","import \"./TextEditTool\";\nimport \"./TextEditor\";\nexport * from \"./HtmlTextManage\";\nexport * from \"./utils\"\nexport * from \"./HtmlText\";\n// 导出授权相关\nexport { setLicense, checkLicense, getLicenseInfo } from './license';\nexport type { LicenseData } from './license';\nconsole.log('start')\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/TextEditTool/index.ts","../src/utils.ts","../src/TextEditor.ts","#style-inject:#style-inject","../src/htmltext-editor.css","../src/license/encrypt.ts","../src/license/validator.ts","../src/license/index.ts","../src/HtmlTextManage.ts","../src/HtmlText.ts","../src/index.ts"],"names":["updataHtmlText","e","base64font","fontObj","scaleX","scaleY","zoomScale","dom","qlEditor","html","htmlTextManage","style","addStyle","addFontSizeToP","fontSize","lineHeight","letterSpacing","textShadow","alignContent","wrapper","wrapperStyle","p","str","height","quill","actualHeight","divBox","setHTMLText","key","value","editor","canvas","range","text","formats","convertedText","val","line","TextEditTool","EditTool","func","wait","timeout","args","div","EditorScaleEvent","ratio","PointerEvent","__decorateClass","registerEditTool","TextEditor","InnerEditor","editDom","config","target","find","width","x","y","a","b","c","d","f","Matrix","registerInnerEditor","styleInject","css","insertAt","head","SECRET_KEY","decrypt","encryptedData","CryptoJS","decode","parseLicense","license","decoded","decrypted","validateDomain","allowedDomains","currentDomain","domain","baseDomain","validateExpireDate","expireDate","expire","validateLicense","data","licenseKey","isLicenseValid","setLicense","result","checkLicense","getLicenseInfo","HtmlTextManage","_HtmlTextManage","app","el","Quill","BlockBlot","lineFormats","delta","Delta","FontStyle","callback","level","listNew","list","applyCallback","leaf","HtmlText","Box","fontFamily","boxData","fontContent","noText","textElement","HTMLText","registerUI"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n EditTool,\n EditorScaleEvent,\n registerEditTool,\n} from \"@leafer-in/editor\";\nimport { PointerEvent } from \"leafer-ui\";\nimport { htmlTextManage } from \"../\";\nimport { updataHtmlText } from \"../utils\";\n@registerEditTool()\n// 定义插件类,继承自 EditTool,处理矩形圆角编辑交互\nexport class TextEditTool extends EditTool {\n // 插件标识标签\n public get tag() {\n return \"TextEditTool\";\n }\n public quill: any = null;\n private updateBoxDebounced: (text: any) => void;\n // 构造函数,初始化控制点并加入视图\n constructor(editor: any) {\n super(editor);\n this.eventIds = []; // 存储事件绑定ID\n this.updateBoxDebounced = this.debounce((text: any) => {\n updataHtmlText(text);\n }, 300);\n }\n // 自定义防抖函数替代 lodash/debounce\n private debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n ): T {\n let timeout: number | null = null;\n return ((...args: any[]) => {\n if (timeout !== null) {\n window.clearTimeout(timeout);\n }\n timeout = window.setTimeout(\n () => func.apply(this, args),\n wait,\n ) as unknown as number;\n }) as T;\n }\n // 绑定事件\n public addEvent(): void {\n const { editor } = htmlTextManage.getCanvas();\n const text = editor._target.findOne(\"HTMLText\");\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n const div: any = document.querySelector(\"#textInnerEditor\");\n const { style } = div;\n this.eventIds = [\n editor.on_(EditorScaleEvent.SCALE, (e: any) => {\n if (!text.data.canChangeBox) {\n text.data.canChangeBox = true;\n }\n if (text.data.canChangeBox) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.height = \"auto\";\n }\n let ratio = 1\n if (text.parent.tag === 'HtmlText' && text.parent.lockRatio && text.data?.baseSize?.width) {\n ratio = text.parent.width / text.data?.baseSize.width\n text.data.textData.fontSize = text.data.textData.fontSize * ratio\n }\n // // 每次变动尺寸更新child的时候都要更新baseSize\n text.data?.baseSize?.width && (text.data.baseSize.width = text.parent.width)\n this.updateBoxDebounced(text);\n }),\n editor.on_(PointerEvent.DOUBLE_TAP, () => {\n if (!text.parent.locked) {\n editor.openInnerEditor(text, true);\n }\n }),\n ];\n }\n\n // 生命周期钩子:插件加载时绑定事件\n public onLoad(): void {\n const { editor } = htmlTextManage.getCanvas();\n console.log(editor._target, 123);\n const text: any = editor._target.findOne(\"HTMLText\");\n\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n this.addEvent();\n this.quill = htmlTextManage.getQuill();\n this.quill.clipboard.dangerouslyPasteHTML(text.text);\n const div: any = document.querySelector(\"#textInnerEditor\");\n const { style } = div;\n\n if (text.data.canChangeBox) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.height = text.parent.height * zoomScale + \"px\";\n } else {\n style.width = \"auto\";\n style.height = \"auto\";\n }\n // 每次进来就恢复初始的 canChangeBox 和 自动的宽高\n // text.set({\n // width: 0,\n // height: 0\n // })\n // text.data.canChangeBox = false\n }\n\n private isUpdatingPoints = false;\n private curveAmount = 0;\n public updateChangeBoxBound(text: any): void {\n text &&\n text.set({\n width: text.__layout.boxBounds.width,\n height: text.__layout.boxBounds.height,\n });\n }\n // 生命周期钩子:插件更新时,因为这是全局的生命周期所以判断一定要细致仔细\n public onUpdate(): void {\n const { editor } = htmlTextManage.getCanvas();\n const text = editor._target.findOne(\"HTMLText\");\n const el = editor._target;\n console.log(\"文本bound更新\");\n\n if (this.curveAmount == (text as any).curveAmount) return;\n if (this.isUpdatingPoints) return;\n // 每次进来就恢复初始的 canChangeBox 和 自动的宽高\n // text.set({\n // width: 0,\n // height: 0\n // })\n }\n\n // 生命周期钩子:插件卸载时解绑事件\n public onUnload(): void {\n const { editor } = htmlTextManage.getCanvas();\n editor.off_(this.eventIds);\n }\n\n // 生命周期钩子:销毁插件时清理资源\n public onDestroy(): void {}\n}\n","import { htmlTextManage } from \".\";\n// 更新text样式\nexport const updataHtmlText = async (\n e?: any,\n base64font?: any,\n fontObj?: any,\n) => {\n const { scaleX, scaleY } = e.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n const dom: any = document.querySelector(\"#textInnerEditor\");\n // if (dom && e.data.textData?.fontFamily) {\n // dom.style.fontFamily = e.data.textData.fontFamily;\n // }\n if (dom && e.data.textData?.fontSize) {\n dom.style.fontSize = `${e.data.textData.fontSize * zoomScale}px`;\n }\n if (dom && e.data.textData?.lineHeight) {\n dom.style.lineHeight = e.data.textData.lineHeight;\n }\n if (dom && e.data.textData?.letterSpacing) {\n dom.style.letterSpacing = `${e.data.textData.letterSpacing}px`;\n }\n if (dom && e.data.textData?.textShadow) {\n dom.style.textShadow = e.data.textData.textShadow;\n } else {\n dom.style.textShadow = \"none\";\n }\n if (dom && e.data.textData?.alignContent) {\n const qlEditor: any = dom.querySelector(\".ql-editor\");\n qlEditor.style.alignContent = e.data.textData.alignContent;\n }\n // 如果是空的就把text滞空\n const quill = htmlTextManage.getQuill();\n const html = quill.getSemanticHTML();\n if (html === \"<p></p>\") {\n if (e.text.includes(\"<style>@font-face\")) {\n e.text = e.text.split(\"</style>\")[0] + \"</style>\";\n } else {\n e.text = \"\";\n }\n return;\n }\n if (e.text.includes(\"<style>@font-face\")) {\n // text已经加载过字体\n const style = e.text.split(\"</style>\")[0];\n if (fontObj && !style.includes(fontObj)) {\n // 在字体style标签检索是否有当前字体 没有就添加字体style\n const addStyle = `@font-face {font-family: ${fontObj.split(\",\")[0]};src: url(${base64font}) format('woff2') }</style>`;\n e.text =\n style +\n addStyle +\n addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n } else {\n // 样式当前字体已经存在\n e.text =\n style +\n \"</style>\" +\n addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n }\n } else if (base64font && fontObj) {\n // 未加载过字体初次添加字体 存在base64font && fontObj才触发\n const style = `<style>@font-face {font-family: ${fontObj.split(\",\")[0]};src: url(${base64font}) format('woff2') }</style>`;\n e.text =\n style +\n addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n } else {\n // text没有包含字体就不加字体style\n e.text = addFontSizeToP(\n e,\n html,\n e.data.textData.fontSize,\n e.data.textData.lineHeight,\n e.data.textData.letterSpacing,\n e.data.textData.textShadow,\n e.data.textData?.alignContent,\n );\n }\n};\nconst addFontSizeToP = (\n e: any,\n html: any,\n fontSize = 20.67,\n lineHeight = 1.5,\n letterSpacing = 0,\n textShadow = \"none\",\n alignContent = \"start\",\n) => {\n const { scaleX, scaleY } = e.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = html;\n // 添加的样式 用于HTMLText渲染\n const wrapperStyle: any = {\n fontSize: `${fontSize}px`,\n lineHeight,\n letterSpacing: `${letterSpacing}px`,\n textShadow,\n };\n wrapper.querySelectorAll(\"p,ol,ul\").forEach((p: any) => {\n Object.assign(p.style, wrapperStyle);\n });\n\n // 这个上下标还是要控制一下尺寸 因为html和canvas规范不一样 所以这里要控制一下 当然如果存在别的style例如color的style就合并style\n let str = wrapper.innerHTML;\n // 排查如果有回车换行的加上一个字符\n if (/<p\\b[^>]*><\\/p>/.test(str)) {\n str = str.replace(/<p\\b([^>]*)><\\/p>/g, \"<p$1> </p>\");\n }\n if (/"/.test(str)) {\n str = str.replace(/"/g, \"\");\n }\n\n let height;\n const div: any = document.querySelector(\"#textInnerEditor\");\n const quill = htmlTextManage.getQuill();\n // 这里别动\n // 获取包含自动换行的实际内容高度\n const actualHeight = Number(\n (quill.scroll.domNode.scrollHeight / zoomScale).toFixed(0),\n );\n const actualWidth = Number(\n (quill.scroll.domNode.scrollWidth / zoomScale).toFixed(0),\n );\n if ([\"center\", \"end\"].includes(e.data.textData.alignContent)) {\n if (e.parent.height < actualHeight) {\n height = (actualHeight || e.__layout.boxBounds.height) + \"px\";\n } else {\n height = `${e.parent.height}px`;\n }\n } else {\n if (e.parent.height < actualHeight) {\n height = (actualHeight || e.__layout.boxBounds.height) + \"px\";\n } else {\n height = `${e.parent.height}px`;\n }\n }\n\n // 水平居中相关样式内嵌 因为这个quill居中用的class没用style\n const style = `<style>p{margin:0;}sub,sup{font-size:63%;}.ql-ui{position:absolute}ol,ul{counter-reset:list-0;padding-left:1.5em;margin:0}ol>li,ul>li{counter-increment:list-0;list-style-type:none;position:relative;padding-left:0;margin:0}ol>li::before{content:counter(list-0,decimal) '. ';position:absolute;left:-1.5em;width:1.2em;text-align:right}ul>li::before{content:'\\u2022';position:absolute;left:-1.5em;width:1.2em;text-align:right}li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-align-center{text-align:center}.ql-align-right{text-align:right}.ql-align-left{text-align:left}.ql-align-justify{text-align:justify}</style>`;\n let divBox = \"\";\n if (e.parent.children[0].tag.includes(\"Shape\")) {\n divBox =\n style +\n `<div style=\"width: ${e.parent.width}px;height: ${e.parent.height}px;overflow-wrap:break-word;word-break:break-all;align-content:center;\">${str}</div>`;\n } else if (e.data.canChangeBox) {\n divBox =\n style +\n `<div style=\"width: ${e.parent.width}px;height:${height};overflow-wrap:break-word;word-break:break-all;align-content:${alignContent};\">${str}</div>`;\n } else {\n // 斜体补偿宽度 控制\n if (e.data.textData.italic) {\n divBox = style + str;\n } else {\n divBox =\n style +\n `<div style=\"overflow-wrap:break-word;word-break:break-all;\">${str}</div>`;\n }\n }\n console.log(divBox, \"最终的html内容\");\n return divBox;\n};\nexport const setHTMLText = (key: string, value?: any, base64font?: any) => {\n const quill = htmlTextManage.getQuill();\n const { editor, canvas } = htmlTextManage.getCanvas();\n // console.log(editor, htmlTextManage.getCanvas(), \"editor\");\n if (!quill) {\n return;\n }\n const range = quill.selection.savedRange;\n htmlTextManage.dateEdit(async (e: any) => {\n if (key === \"font\") {\n if (editor.innerEditing) {\n if (range && range.length) {\n quill.formatText(range.index, range.length, key, value);\n } else {\n quill.formatText(0, quill.getLength() - 1, key, value);\n }\n e.data.textData.fontFamily = value;\n updataHtmlText(e, base64font ?? null, value ?? null);\n } else {\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n quill.formatText(0, quill.getLength() - 1, key, value);\n e.data.textData.fontFamily = value;\n updataHtmlText(e, base64font ?? null, value ?? null);\n }\n } else if (key === \"fontSize\") {\n // 字体和字号\n e.data.textData[key] = value;\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n updataHtmlText(e, base64font ?? null);\n } else if (key === \"textCase\") {\n // 大小写\n if (editor.innerEditing) {\n const text = quill.getText(range.index, range.length);\n const formats = quill.getFormat(range.index, range.length);\n quill.deleteText(range.index, range.length);\n let convertedText;\n if (text === text.toUpperCase() && /[A-Z]/.test(text)) {\n convertedText = text.toLowerCase();\n } else if (text === text.toLowerCase() && /[a-z]/.test(text)) {\n convertedText = text.toUpperCase();\n } else {\n convertedText = text.toUpperCase();\n }\n\n quill.insertText(range.index, convertedText, formats);\n range &&\n editor.innerEditing &&\n quill.setSelection(range.index, range.length);\n }\n } else if (key === \"script\") {\n // 上下标\n let val = \"sub\";\n if (value === \"super\") val = \"sup\";\n if (editor.innerEditing) {\n if (range && range.length) {\n quill.formatText(\n range.index,\n range.length,\n key,\n quill.getFormat(range).script === value ? false : val,\n );\n } else {\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n quill.getFormat().script === value ? false : val,\n );\n }\n } else {\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n quill.getFormat().script === value ? false : val,\n );\n updataHtmlText(e);\n }\n } else if (key === \"align\") {\n // 水平居中\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n if (editor.innerEditing) {\n quill.format(key, value);\n } else {\n quill.formatLine(0, quill.getLength(), key, value);\n }\n updataHtmlText(e);\n } else if (key === \"alignContent\") {\n // 水平居中\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n e.data.textData[key] = value;\n updataHtmlText(e);\n } else if (key === \"lineHeight\" || key === \"letterSpacing\") {\n // 行高\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n e.data.textData[key] = value;\n updataHtmlText(e);\n } else if (key === \"color\") {\n // 颜色\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n if (range && range.length) {\n quill.formatText(range.index, range.length, key, value);\n } else {\n quill.formatText(0, quill.getLength() - 1, key, value);\n }\n if (e.tag === \"HTMLText\") {\n updataHtmlText(e);\n } else if (e.parent.findOne(\"HTMLText\")) {\n updataHtmlText(e.parent.findOne(\"HTMLText\"));\n }\n } else if (key === \"textShadow\") {\n // 阴影\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n e.data.textData[key] = value;\n updataHtmlText(e);\n } else if (key === \"list\") {\n // 有序无序列表\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n if (editor.innerEditing) {\n const [line]: any = quill.getLine(range?.index || 0);\n if (line.formats().list) {\n quill.format(key, false);\n } else {\n quill.format(key, value);\n }\n } else {\n const [line]: any = quill.getLine(range?.index || 0);\n if (line.formats().list) {\n quill.formatLine(0, quill.getLength(), key, false);\n } else {\n quill.formatLine(0, quill.getLength(), key, value);\n }\n }\n updataHtmlText(e);\n } else {\n if (editor.innerEditing) {\n if (range && range.length) {\n quill.formatText(\n range.index,\n range.length,\n key,\n value === undefined ? !quill.getFormat(range)[key] : value,\n );\n } else {\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n value === undefined ? !quill.getFormat()[key] : value,\n );\n }\n } else {\n htmlTextManage.isMultiSelect() &&\n quill.clipboard.dangerouslyPasteHTML(e.text);\n quill.formatText(\n 0,\n quill.getLength() - 1,\n key,\n\n value === undefined ? !quill.getFormat()[key] : value,\n );\n updataHtmlText(e);\n }\n }\n\n // if (e.parent.tag === 'Box' && e.parent.findOne('HTMLText') && e.parent.findOne('Box')) {\n // handleShowCurve(e.parent, false)\n // }\n }, 1);\n};\n","import { InnerEditor, registerInnerEditor } from \"@leafer-in/editor\";\nimport { Matrix, PointerEvent } from \"@leafer-ui/core\";\nimport { htmlTextManage } from \".\";\nimport { updataHtmlText } from \"./utils\";\n@registerInnerEditor()\nexport class TextEditor extends InnerEditor {\n public get tag() {\n return \"TextEditor\";\n }\n declare public editTarget: any;\n\n public editDom: any;\n public config = {\n selectAll: false,\n };\n\n public eventIds: any[] = [];\n\n protected selectText:\n | { start: number; end: number; text: string }\n | undefined = undefined;\n protected inBody: boolean | undefined = undefined; // App 的 view 为 canvas 类型时,文本编辑框只能添加到 body 下了\n protected isHTMLText: boolean | undefined = undefined;\n protected _keyEvent: boolean | undefined = undefined;\n public quill: any = null;\n public isComposing: boolean = false;\n public onLoad(): void {\n const { editor } = this;\n const { config } = editor.app;\n const text = this.editTarget;\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n // text.textEditing = true\n\n this.isHTMLText = !(text instanceof Text); // HTMLText\n this._keyEvent = config.keyEvent;\n config.keyEvent = false;\n\n const div = (this.editDom = document.querySelector(\"#textInnerEditor\"));\n const { style } = div;\n style.visibility = \"visible\";\n\n // style.boxSizing = 'border-box'\n // 获取外部box的宽高 这个box也是可以手动调整的\n if (text.data.canChangeBox) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.height = text.parent.height * zoomScale + \"px\";\n } else {\n style.width = \"auto\";\n style.height = \"auto\";\n }\n\n // style.border = '1.5px solid #8499EF'\n style.outline = \"solid #8499EF\";\n // 初始化文本样式\n if (text.data.textData.fontSize) {\n div.style.fontSize = `${text.data.textData.fontSize * zoomScale}px`;\n }\n // if (text.data.textData.fontFamily) {\n // div.style.fontFamily = `${text.data.textData.fontFamily}`;\n // }\n if (text.data.textData.lineHeight) {\n div.style.lineHeight = text.data.textData.lineHeight;\n }\n if (text.data.textData.letterSpacing) {\n div.style.letterSpacing = `${text.data.textData.letterSpacing}px`;\n }\n if (text.data.textData.textShadow) {\n div.style.textShadow = `${text.data.textData.textShadow}`;\n } else {\n div.style.textShadow = \"none\";\n }\n if (text.data.textData.alignContent) {\n const qlEditor: any = div.querySelector(\".ql-editor\");\n qlEditor.style.alignContent = `${text.data.textData.alignContent}`;\n }\n\n this.quill = htmlTextManage.getQuill();\n\n // 加载文本到编辑器\n this.quill.clipboard.dangerouslyPasteHTML(text.text);\n // this.quill.focus()\n if (text.parent.children[0].tag.includes(\"Shape\")) {\n style.width = text.parent.width * zoomScale + \"px\";\n style.left = \"0px\";\n this.quill.formatLine(0, this.quill.getLength(), \"align\", \"center\");\n } else {\n this.quill.setSelection(0, this.quill.getLength() - 1);\n }\n\n // 获取整个编辑器容器的边界\n // const containerBounds = this.quill.container.getBoundingClientRect()\n this.quill.on(\"text-change\", this.onInput);\n\n this.eventIds = [\n // 点击空白关闭\n editor.app.on_(PointerEvent.DOWN, (e: PointerEvent) => {\n let { target } = e.origin,\n find: boolean = false;\n while (target) {\n if (target === div) find = true;\n target = target.parentElement;\n }\n if (!find) {\n editor.closeInnerEditor();\n editor.cancel();\n }\n }),\n ];\n // const { canvas } = useEditor()\n // canvas.app.config.move.drag = false\n // canvas.app.tree.hittable = false\n // canvas.app.editor.hittable = false\n }\n\n private onInput = async () => {\n const { editDom } = this;\n // 主要是更新编辑内容\n updataHtmlText(this.editTarget);\n // 获取当前文字编辑文字内容的边界 这里是在没有修改过外部尺寸的情况下 自适应文字编辑内容的尺寸\n // updateChangeBoxBound(this.editTarget)\n\n // 如果是清空了 width要从0改成auto\n // editDom.style.width = documentBounds.width ? documentBounds.width : 'auto'\n };\n\n public onUpdate() {\n const { editTarget: text } = this;\n const { scaleX, scaleY } = text.worldTransform;\n const zoomScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));\n\n // layout\n let { width, height } = text.parent.__local;\n ((width *= zoomScale), (height *= zoomScale));\n\n const { x, y } = this.inBody\n ? text.app.clientBounds\n : text.app.tree.clientBounds;\n const { a, b, c, d, e, f } = new Matrix(text.worldTransform)\n .scale(1 / zoomScale)\n .translateInner(0, 0);\n\n const { style } = this.editDom;\n style.transform = `matrix(${a},${b},${c},${d},${e},${f})`;\n style.left = x + \"px\";\n style.top = y + \"px\";\n\n // 打开内部或者编辑内部文本编辑强制隐藏\n text.set({\n visible: false,\n });\n }\n private isUpdatingPoints = false;\n public onUnload(): void {\n const { editTarget: text, editor, editDom: dom } = this;\n // const { canvas } = useEditor()\n // canvas.app.config.move.drag = false\n // canvas.app.tree.hittable = true\n // canvas.app.editor.hittable = true\n if (text) {\n this.onInput();\n\n if (editor.app) editor.app.config.keyEvent = this._keyEvent;\n editor.off_(this.eventIds);\n\n // dom.remove()\n // this.editDom = this.eventIds = undefined\n this.editDom.style.visibility = \"hidden\";\n this.eventIds = [];\n }\n // 如果大于1\n if (\n text.parent &&\n text.parent.name == \"Text\" &&\n text.parent.children.some((e: any) => e.tag === \"Box\")\n ) {\n text.parent.findOne(\"Box\").opacity = 1;\n text.visible = false;\n } else {\n // 恢复显示\n text.set({\n visible: true,\n });\n }\n if (this.quill.getLength() === 1 && text.parent.name === \"Text\") {\n text.parent.remove();\n }\n this.quill.off(\"text-change\", this.onInput);\n }\n}\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\".ql-editor{padding:0!important;line-height:unset!important;overflow:unset!important;outline:0}.ql-container{font-family:unset!important}.ql-editor p{margin:0!important}.ql-editor sub,.ql-editor sup{font-size:63%}.ql-editor sup{top:-.58em}.ql-editor sub{bottom:-.38em}.ql-editor ol{padding-left:0!important}\\n\")","import CryptoJS from 'crypto-js'\n\n// 加密密钥(请修改为你自己的密钥)\nconst SECRET_KEY = 'chenyuming-license-key'\n\n/**\n * 加密数据\n */\nexport function encrypt(data: string): string {\n return CryptoJS.AES.encrypt(data, SECRET_KEY).toString()\n}\n\n/**\n * 解密数据\n */\nexport function decrypt(encryptedData: string): string {\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedData, SECRET_KEY)\n return bytes.toString(CryptoJS.enc.Utf8)\n } catch {\n return ''\n }\n}\n\n/**\n * Base64 编码\n */\nexport function encode(str: string): string {\n return btoa(encodeURIComponent(str))\n}\n\n/**\n * Base64 解码\n */\nexport function decode(str: string): string {\n try {\n return decodeURIComponent(atob(str))\n } catch {\n return ''\n }\n}","import { decrypt, decode } from './encrypt'\n\nexport interface LicenseData {\n key: string // License Key\n domains?: string[] // 允许的域名列表\n expireDate?: string // 过期时间 YYYY-MM-DD\n features?: string[] // 功能列表\n userId?: string // 用户ID\n email?: string // 用户邮箱\n}\n\n/**\n * 解析 License\n */\nfunction parseLicense(license: string): LicenseData | null {\n try {\n // 1. Base64 解码\n const decoded = decode(license)\n if (!decoded) return null\n\n // 2. AES 解密\n const decrypted = decrypt(decoded)\n if (!decrypted) return null\n\n // 3. 解析 JSON\n const data: LicenseData = JSON.parse(decrypted)\n return data\n } catch {\n return null\n }\n}\n\n/**\n * 验证域名\n */\nfunction validateDomain(allowedDomains?: string[]): boolean {\n // 如果没有域名限制,直接通过\n if (!allowedDomains || allowedDomains.length === 0) {\n return true\n }\n\n // 获取当前域名\n const currentDomain = window.location.hostname\n\n // 本地开发环境\n if (currentDomain === 'localhost' || currentDomain === '127.0.0.1') {\n return true\n }\n\n // 检查域名是否在允许列表中\n return allowedDomains.some(domain => {\n // 支持通配符 *.example.com\n if (domain.startsWith('*.')) {\n const baseDomain = domain.slice(2)\n return currentDomain.endsWith(baseDomain)\n }\n return currentDomain === domain\n })\n}\n\n/**\n * 验证过期时间\n */\nfunction validateExpireDate(expireDate?: string): boolean {\n if (!expireDate) return true\n\n try {\n const expire = new Date(expireDate)\n const now = new Date()\n return now < expire\n } catch {\n return false\n }\n}\n\n/**\n * 验证 License\n */\nexport function validateLicense(license: string): {\n valid: boolean\n error?: string\n data?: LicenseData\n} {\n // 解析 License\n const data = parseLicense(license)\n \n if (!data) {\n return {\n valid: false,\n error: 'Invalid license key'\n }\n }\n\n // 验证域名\n if (!validateDomain(data.domains)) {\n return {\n valid: false,\n error: `License not valid for domain: ${window.location.hostname}`,\n data\n }\n }\n\n // 验证过期时间\n if (!validateExpireDate(data.expireDate)) {\n return {\n valid: false,\n error: 'License has expired',\n data\n }\n }\n\n return {\n valid: true,\n data\n }\n}","import { validateLicense } from './validator'\n\nlet licenseKey: string | null = null\nlet isLicenseValid = false\n\n/**\n * 设置 License\n */\nexport function setLicense(license: string): boolean {\n const result = validateLicense(license)\n \n if (result.valid) {\n licenseKey = license\n isLicenseValid = true\n console.log('[License] License activated successfully')\n return true\n } else {\n console.error('[License] License validation failed:', result.error)\n isLicenseValid = false\n return false\n }\n}\n\n/**\n * 检查 License 是否有效\n */\nexport function checkLicense(): boolean {\n if (!licenseKey) {\n console.warn('[License] No license key provided')\n return false\n }\n\n if (!isLicenseValid) {\n console.warn('[License] License is not valid')\n return false\n }\n\n // 重新验证(防止过期)\n const result = validateLicense(licenseKey)\n isLicenseValid = result.valid\n\n if (!isLicenseValid) {\n console.error('[License] License expired or invalid:', result.error)\n }\n\n return isLicenseValid\n}\n\n/**\n * 获取 License 信息\n */\nexport function getLicenseInfo() {\n if (!licenseKey) return null\n \n const result = validateLicense(licenseKey)\n return result.data\n}\n\n// 导出类型\nexport type { LicenseData } from './validator'","import Quill, { Delta } from \"quill\";\nimport \"quill/dist/quill.core.css\";\nimport \"./htmltext-editor.css\";\nimport { FontStyle } from \"quill/formats/font\";\n\nimport { checkLicense } from \"./license\";\nclass HtmlTextManage {\n private static instance: HtmlTextManage;\n private quill: Quill | null = null;\n public app_: any | null = null;\n private constructor() {}\n\n static getInstance() {\n if (!HtmlTextManage.instance) {\n HtmlTextManage.instance = new HtmlTextManage();\n }\n return HtmlTextManage.instance;\n }\n\n async init(app: any) {\n // 检查授权\n if (!checkLicense()) {\n console.error(\n \"[HtmlTextManage] 授权失败请联系作者获取授权 邮箱 : 408550179@qq.com VX : cym5640\",\n );\n throw new Error(\n \"[HtmlTextManage] 授权失败请联系作者获取授权 邮箱 : 408550179@qq.com 微信 : cym5640\",\n );\n }\n this.app_ = app;\n if (this.quill) return this.quill;\n\n let el = document.getElementById(\"textInnerEditor\");\n if (!el) {\n el = document.createElement(\"div\");\n el.id = \"textInnerEditor\";\n el.style.position = \"fixed\";\n el.style.transformOrigin = \"left top\";\n el.style.overflowWrap = \"break-word\";\n el.style.wordBreak = \"break-all\";\n el.style.visibility = \"hidden\";\n document.body.appendChild(el);\n this.quill = new Quill(\"#textInnerEditor\", {\n theme: undefined,\n modules: {\n toolbar: false,\n keyboard: {\n bindings: {\n enter: {\n key: \"Enter\",\n handler: (range: any) => {\n const [line] = this.quill!.getLine(range.index);\n const BlockBlot: any = Quill.import(\"blots/block\");\n if (!BlockBlot?.bubbleFormats) return true;\n\n const lineFormats = BlockBlot.bubbleFormats(line);\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert(\"\\n\", lineFormats);\n\n this.quill!.updateContents(delta, Quill.sources.USER);\n this.quill!.setSelection(\n range.index + 1,\n Quill.sources.SILENT,\n );\n return false;\n },\n },\n },\n },\n },\n });\n this.app_.editor.quill = this.quill;\n this.registerFonts();\n return this.quill;\n } else {\n this.quill = this.app_.editor.quill;\n }\n }\n\n public getQuill() {\n if (!this.quill) {\n throw new Error(\"Quill editor not initialized. Call init() first.\");\n }\n return this.quill;\n }\n\n public getCanvas() {\n if (!this.app_) {\n throw new Error(\"app_ editor not initialized. Call init() first.\");\n }\n return this.app_;\n }\n\n public getSelection() {\n console.log(this.quill?.selection.savedRange, 'this.quill?.selection.savedRange')\n return this.quill?.selection.savedRange\n }\n\n private registerFonts() {\n // 注册 FontStyle 作为字体格式\n FontStyle.whitelist = undefined;\n Quill.register(\"formats/font\", FontStyle, true);\n }\n // 判断是否是多选情况下\n public isMultiSelect(): boolean {\n if (!this.app_.editor) return false;\n if (this.app_.editor.multiple === true) {\n return true;\n } else {\n return false;\n }\n }\n public dateEdit(\n callback: (leaf: any) => void,\n level = 0,\n listNew?: any,\n ): void {\n // 添加listNew支持,用来指定检索的数据源,防止因为防抖或者延迟执行造成的活跃对象变更\n const { editor } = this.app_;\n const list = listNew ? listNew : editor.leafList.list;\n const applyCallback = (leaf: any) => {\n if (level && (leaf.tag === \"Box\" || leaf.name === \"Text\")) {\n callback(leaf.children?.[0] || leaf);\n } else {\n callback(leaf);\n }\n };\n if (!list.length) return;\n if (Array.isArray(list) && list.length > 1) {\n this.app_.lockLayout();\n list.forEach(applyCallback);\n this.app_.unlockLayout();\n editor.updateEditBox();\n } else {\n applyCallback(list[0]);\n }\n }\n}\n\nexport const htmlTextManage = HtmlTextManage.getInstance();\n","import { Box, registerUI } from \"@leafer-ui/core\";\nimport { HTMLText } from \"@leafer-in/html\";\nimport { IBoxInputData } from \"@leafer-ui/interface\";\n\n// 文本样式属性\ninterface IHtmlTextContentData {\n text?: string;\n fontSize: number;\n fontFamily?: string;\n lineHeight?: number;\n letterSpacing?: number;\n textShadow?: string;\n alignContent?: string;\n}\n\n// 使用交叉类型而非继承\ntype IHtmlTextInputData = IBoxInputData & IHtmlTextContentData;\n\n@registerUI()\nclass HtmlText extends Box {\n public get __tag() {\n return \"HtmlText\";\n }\n\n constructor(data?: IHtmlTextInputData) {\n // 提取文本属性,其余传递给 Box\n const {\n text,\n fontSize,\n fontFamily,\n lineHeight,\n letterSpacing,\n textShadow,\n alignContent,\n ...boxData\n } = data || {};\n\n super({\n editOuter: \"TextEditTool\",\n name: \"HtmlText\",\n x: 0,\n y: 0,\n editable: true,\n draggable: true,\n overflow: \"show\",\n ...boxData,\n });\n if (data) {\n this.createTextElement(data);\n }\n }\n\n private createTextElement(data: IHtmlTextInputData) {\n // 提取文本相关属性\n const {\n text,\n fontSize,\n fontFamily,\n lineHeight,\n letterSpacing,\n textShadow,\n alignContent,\n } = data;\n const fontContent = `<style>p{margin:0;}sub,sup{font-size:63%;}.ql-ui{position:absolute}ol,ul{counter-reset:list-0;padding-left:1.5em;margin:0}ol>li,ul>li{counter-increment:list-0;list-style-type:none;position:relative;padding-left:0;margin:0}ol>li::before{content:counter(list-0,decimal) '. ';position:absolute;left:-1.5em;width:1.2em;text-align:right}ul>li::before{content:'•';position:absolute;left:-1.5em;width:1.2em;text-align:right}li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-align-center{text-align:center}.ql-align-right{text-align:right}.ql-align-left{text-align:left}.ql-align-justify{text-align:justify}</style>`;\n const noText = `<div style=\"ove\n rflow-wrap:break-word;word-break:break-all;\"><p style=\"font-size: ${fontSize}px; line-height: ${lineHeight}; letter-spacing: ${letterSpacing}px; text-shadow: ${textShadow};\"><strong>Hello World</strong></p></div>`;\n const textElement = new HTMLText({\n name: \"Text\",\n text: fontContent + (text || noText),\n x: 0,\n y: 0,\n data: {\n canChangeBox: false,\n textData: {\n fontFamily: fontFamily,\n fontSize: fontSize,\n lineHeight: lineHeight,\n letterSpacing: letterSpacing || 0,\n textShadow: textShadow,\n alignContent: alignContent,\n },\n },\n editConfig: {\n selectedStyle: {\n strokeWidth: 0,\n },\n },\n });\n\n this.add(textElement);\n }\n}\n\nexport { HtmlText };\n","import \"./TextEditTool\";\nimport \"./TextEditor\";\nexport * from \"./HtmlTextManage\";\nexport * from \"./utils\"\nexport * from \"./HtmlText\";\n// 导出授权相关\nexport { setLicense, checkLicense, getLicenseInfo } from './license';\nexport type { LicenseData } from './license';\nconsole.log('start')\n"]}
|