gitextract_n9qlzxsf/ ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.en.md ├── README.md ├── app/ │ └── app.go ├── build/ │ ├── README.md │ ├── darwin/ │ │ ├── Info.dev.plist │ │ └── Info.plist │ └── windows/ │ ├── info.json │ ├── installer/ │ │ ├── project.nsi │ │ └── wails_tools.nsh │ └── wails.exe.manifest ├── build.linux.sh ├── build.win.sh ├── cloud/ │ ├── .gitignore │ ├── README.md │ ├── build.sh │ ├── cmd/ │ │ ├── main.go │ │ ├── msg.go │ │ └── serve.go │ ├── deps/ │ │ └── frontend.go │ ├── go.mod │ ├── go.sum │ └── main.go ├── compose-dev.yaml ├── docker/ │ ├── Dockerfile-dev │ └── nginx.conf ├── docker-compose.yml ├── docs/ │ ├── Api.md │ ├── Faq.md │ ├── Markdown.md │ ├── Store.en.md │ ├── Store.md │ ├── ai.md │ └── demo/ │ ├── mysql5.7/ │ │ ├── install.json │ │ ├── my.ini │ │ ├── my.ini.tpl │ │ ├── password.txt │ │ ├── password.txt.tpl │ │ ├── static/ │ │ │ └── index.html │ │ └── store.json │ ├── mysql8.0/ │ │ ├── install.json │ │ └── my.ini.tpl │ ├── nginx/ │ │ └── store.json │ └── redis5.0/ │ └── store.json ├── frontend/ │ ├── .gitignore │ ├── .vscode/ │ │ └── extensions.json │ ├── README.md │ ├── auto-imports.d.ts │ ├── components.d.ts │ ├── env.d.ts │ ├── index.html │ ├── package.json │ ├── package.json.md5 │ ├── public/ │ │ ├── baiban/ │ │ │ ├── assets/ │ │ │ │ ├── index-BBuZupZQ.js │ │ │ │ ├── index-C7Nv1nqD.js │ │ │ │ ├── index-CB2-j8Sp.js │ │ │ │ ├── index-CbiYJP60.css │ │ │ │ ├── index-CdI7WPm4.js │ │ │ │ ├── index-D7I3m8ha.js │ │ │ │ ├── index-DQ-zJgK-.js │ │ │ │ ├── index-DQ5iesJJ.css │ │ │ │ ├── index-e9sqCFI7.css │ │ │ │ └── index-kFFNEmpN.js │ │ │ ├── index.html │ │ │ └── static/ │ │ │ └── translations/ │ │ │ ├── ar.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── en.json │ │ │ ├── es.json │ │ │ ├── fa.json │ │ │ ├── fi.json │ │ │ ├── fr.json │ │ │ ├── gl.json │ │ │ ├── he.json │ │ │ ├── hi-in.json │ │ │ ├── hr.json │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── ko-kr.json │ │ │ ├── ku.json │ │ │ ├── languages.json │ │ │ ├── main.json │ │ │ ├── my.json │ │ │ ├── ne.json │ │ │ ├── no.json │ │ │ ├── pl.json │ │ │ ├── pt-br.json │ │ │ ├── pt-pt.json │ │ │ ├── ro.json │ │ │ ├── ru.json │ │ │ ├── sl.json │ │ │ ├── sv.json │ │ │ ├── te.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── vi.json │ │ │ ├── zh-cn.json │ │ │ └── zh-tw.json │ │ ├── bot/ │ │ │ ├── chat.json │ │ │ └── search.json │ │ ├── calculator/ │ │ │ ├── css/ │ │ │ │ └── cal.css │ │ │ ├── index.html │ │ │ └── js/ │ │ │ └── cal.js │ │ ├── docx/ │ │ │ ├── assets/ │ │ │ │ ├── index.03fab396.css │ │ │ │ ├── index.15480821.css │ │ │ │ ├── index.2535d7f3.css │ │ │ │ ├── index.2a68c9e8.js │ │ │ │ ├── index.30955838.js │ │ │ │ ├── index.3842052e.js │ │ │ │ ├── index.461a1f59.js │ │ │ │ ├── index.4e9c2fed.js │ │ │ │ ├── index.572c8ee8.js │ │ │ │ ├── index.5f048ec4.js │ │ │ │ ├── index.6dcf988b.css │ │ │ │ ├── index.77c27592.js │ │ │ │ ├── index.82ba8f6a.js │ │ │ │ ├── index.8fae8eed.js │ │ │ │ ├── index.97977da0.js │ │ │ │ ├── index.9cb6c062.js │ │ │ │ ├── index.af10cfdc.css │ │ │ │ ├── index.bae472f7.js │ │ │ │ ├── index.da267adb.js │ │ │ │ ├── index.de73f97d.js │ │ │ │ ├── index.ea630926.css │ │ │ │ ├── index.ec407d42.css │ │ │ │ ├── index.eff96d1a.css │ │ │ │ ├── index.f6f10f0f.js │ │ │ │ ├── vendor.68ee6001.js │ │ │ │ └── vendor.d13e5cc9.js │ │ │ └── index.html │ │ ├── excel/ │ │ │ ├── assets/ │ │ │ │ └── iconfont/ │ │ │ │ ├── demo.css │ │ │ │ ├── demo_index.html │ │ │ │ ├── iconfont.css │ │ │ │ ├── iconfont.js │ │ │ │ └── iconfont.json │ │ │ ├── css/ │ │ │ │ └── luckysheet.css │ │ │ ├── demo.html │ │ │ ├── demoData/ │ │ │ │ ├── chat.js │ │ │ │ ├── demoFeature.js │ │ │ │ ├── getTargetData.js │ │ │ │ ├── sheetCell.js │ │ │ │ ├── sheetChart.js │ │ │ │ ├── sheetComment.js │ │ │ │ ├── sheetConditionFormat.js │ │ │ │ ├── sheetDataVerification.js │ │ │ │ ├── sheetFormula.js │ │ │ │ ├── sheetPicture.js │ │ │ │ ├── sheetPivotTable.js │ │ │ │ ├── sheetPivotTableData.js │ │ │ │ ├── sheetSparkline.js │ │ │ │ └── sheetTable.js │ │ │ ├── expendPlugins/ │ │ │ │ ├── chart/ │ │ │ │ │ └── chartmix.css │ │ │ │ ├── exceljs.js │ │ │ │ ├── export.js │ │ │ │ ├── filesaver.js │ │ │ │ ├── luckyexcel.js │ │ │ │ └── print/ │ │ │ │ ├── print.css │ │ │ │ └── print.js │ │ │ ├── fonts/ │ │ │ │ └── FontAwesome.otf │ │ │ ├── index.html │ │ │ ├── luckysheet.umd.js │ │ │ └── plugins/ │ │ │ ├── css/ │ │ │ │ └── pluginsCss.css │ │ │ ├── js/ │ │ │ │ └── plugin.js │ │ │ └── plugins.css │ │ ├── font/ │ │ │ ├── demo.css │ │ │ ├── demo_index.html │ │ │ ├── iconfont.css │ │ │ ├── iconfont.js │ │ │ └── iconfont.json │ │ ├── gantt/ │ │ │ ├── README.md │ │ │ ├── composer.json │ │ │ ├── gantt.css │ │ │ ├── ganttDrawerSVG.js │ │ │ ├── ganttGridEditor.js │ │ │ ├── ganttMaster.js │ │ │ ├── ganttPrint.css │ │ │ ├── ganttTask.js │ │ │ ├── ganttTestSuite.js │ │ │ ├── ganttUtilities.js │ │ │ ├── ganttZoom.js │ │ │ ├── index.html │ │ │ ├── libs/ │ │ │ │ ├── date.js │ │ │ │ ├── dialogs.js │ │ │ │ ├── forms.js │ │ │ │ ├── i18nJs.js │ │ │ │ ├── jquery/ │ │ │ │ │ ├── JST/ │ │ │ │ │ │ └── jquery.JST.js │ │ │ │ │ ├── dateField/ │ │ │ │ │ │ ├── jquery.dateField.css │ │ │ │ │ │ └── jquery.dateField.js │ │ │ │ │ ├── jquery.timers.js │ │ │ │ │ ├── svg/ │ │ │ │ │ │ ├── jquery.svgdom.1.8.js │ │ │ │ │ │ └── jquery.svgdom.pack.js │ │ │ │ │ └── valueSlider/ │ │ │ │ │ ├── jquery.mb.slider.js │ │ │ │ │ └── mb.slider.css │ │ │ │ ├── layout.js │ │ │ │ └── utilities.js │ │ │ ├── license.txt │ │ │ └── platform.css │ │ ├── kanban/ │ │ │ ├── CNAME │ │ │ ├── asset-manifest.json │ │ │ ├── index.html │ │ │ ├── manifest.json │ │ │ ├── service-worker.js │ │ │ └── static/ │ │ │ ├── css/ │ │ │ │ └── main.5a0187ba.chunk.css │ │ │ └── js/ │ │ │ ├── 2.929441b1.chunk.js │ │ │ ├── 2.929441b1.chunk.js.LICENSE.txt │ │ │ ├── main.3373143f.chunk.js │ │ │ └── runtime-main.04a7ba0b.js │ │ ├── markdown/ │ │ │ ├── dist/ │ │ │ │ └── addons/ │ │ │ │ ├── advance/ │ │ │ │ │ └── cherry-table-echarts-plugin.js │ │ │ │ ├── cherry-code-block-mermaid-plugin.js │ │ │ │ └── cherry-code-block-plantuml-plugin.js │ │ │ ├── drawio/ │ │ │ │ ├── Actions.js │ │ │ │ ├── Dialogs.js │ │ │ │ ├── Editor.js │ │ │ │ ├── EditorUi.js │ │ │ │ ├── Format.js │ │ │ │ ├── Graph.js │ │ │ │ ├── Init.js │ │ │ │ ├── Menus.js │ │ │ │ ├── Shapes.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Toolbar.js │ │ │ │ ├── atlas.css │ │ │ │ ├── dark-default.xml │ │ │ │ ├── dark.css │ │ │ │ ├── default-old.xml │ │ │ │ ├── default.xml │ │ │ │ ├── drawio-demo.js │ │ │ │ ├── font/ │ │ │ │ │ └── graph.iconfont.less │ │ │ │ ├── grapheditor.css │ │ │ │ ├── image/ │ │ │ │ │ └── stencils/ │ │ │ │ │ ├── arrows.xml │ │ │ │ │ ├── basic.xml │ │ │ │ │ ├── bpmn.xml │ │ │ │ │ └── flowchart.xml │ │ │ │ ├── jscolor/ │ │ │ │ │ └── jscolor.js │ │ │ │ ├── lib/ │ │ │ │ │ └── base64.js │ │ │ │ ├── resources/ │ │ │ │ │ ├── en.txt │ │ │ │ │ └── zh.txt │ │ │ │ ├── src/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── common.css │ │ │ │ │ │ └── explorer.css │ │ │ │ │ ├── grapheditor.less │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── editor/ │ │ │ │ │ │ │ ├── mxDefaultKeyHandler.js │ │ │ │ │ │ │ ├── mxDefaultPopupMenu.js │ │ │ │ │ │ │ ├── mxDefaultToolbar.js │ │ │ │ │ │ │ └── mxEditor.js │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ ├── mxCellHighlight.js │ │ │ │ │ │ │ ├── mxCellMarker.js │ │ │ │ │ │ │ ├── mxCellTracker.js │ │ │ │ │ │ │ ├── mxConnectionHandler.js │ │ │ │ │ │ │ ├── mxConstraintHandler.js │ │ │ │ │ │ │ ├── mxEdgeHandler.js │ │ │ │ │ │ │ ├── mxEdgeSegmentHandler.js │ │ │ │ │ │ │ ├── mxElbowEdgeHandler.js │ │ │ │ │ │ │ ├── mxGraphHandler.js │ │ │ │ │ │ │ ├── mxHandle.js │ │ │ │ │ │ │ ├── mxKeyHandler.js │ │ │ │ │ │ │ ├── mxPanningHandler.js │ │ │ │ │ │ │ ├── mxPopupMenuHandler.js │ │ │ │ │ │ │ ├── mxRubberband.js │ │ │ │ │ │ │ ├── mxSelectionCellsHandler.js │ │ │ │ │ │ │ ├── mxTooltipHandler.js │ │ │ │ │ │ │ └── mxVertexHandler.js │ │ │ │ │ │ ├── index.txt │ │ │ │ │ │ ├── io/ │ │ │ │ │ │ │ ├── mxCellCodec.js │ │ │ │ │ │ │ ├── mxChildChangeCodec.js │ │ │ │ │ │ │ ├── mxCodec.js │ │ │ │ │ │ │ ├── mxCodecRegistry.js │ │ │ │ │ │ │ ├── mxDefaultKeyHandlerCodec.js │ │ │ │ │ │ │ ├── mxDefaultPopupMenuCodec.js │ │ │ │ │ │ │ ├── mxDefaultToolbarCodec.js │ │ │ │ │ │ │ ├── mxEditorCodec.js │ │ │ │ │ │ │ ├── mxGenericChangeCodec.js │ │ │ │ │ │ │ ├── mxGraphCodec.js │ │ │ │ │ │ │ ├── mxGraphViewCodec.js │ │ │ │ │ │ │ ├── mxModelCodec.js │ │ │ │ │ │ │ ├── mxObjectCodec.js │ │ │ │ │ │ │ ├── mxRootChangeCodec.js │ │ │ │ │ │ │ ├── mxStylesheetCodec.js │ │ │ │ │ │ │ └── mxTerminalChangeCodec.js │ │ │ │ │ │ ├── layout/ │ │ │ │ │ │ │ ├── hierarchical/ │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ ├── mxGraphAbstractHierarchyCell.js │ │ │ │ │ │ │ │ │ ├── mxGraphHierarchyEdge.js │ │ │ │ │ │ │ │ │ ├── mxGraphHierarchyModel.js │ │ │ │ │ │ │ │ │ ├── mxGraphHierarchyNode.js │ │ │ │ │ │ │ │ │ └── mxSwimlaneModel.js │ │ │ │ │ │ │ │ ├── mxHierarchicalLayout.js │ │ │ │ │ │ │ │ ├── mxSwimlaneLayout.js │ │ │ │ │ │ │ │ └── stage/ │ │ │ │ │ │ │ │ ├── mxCoordinateAssignment.js │ │ │ │ │ │ │ │ ├── mxHierarchicalLayoutStage.js │ │ │ │ │ │ │ │ ├── mxMedianHybridCrossingReduction.js │ │ │ │ │ │ │ │ ├── mxMinimumCycleRemover.js │ │ │ │ │ │ │ │ └── mxSwimlaneOrdering.js │ │ │ │ │ │ │ ├── mxCircleLayout.js │ │ │ │ │ │ │ ├── mxCompactTreeLayout.js │ │ │ │ │ │ │ ├── mxCompositeLayout.js │ │ │ │ │ │ │ ├── mxEdgeLabelLayout.js │ │ │ │ │ │ │ ├── mxFastOrganicLayout.js │ │ │ │ │ │ │ ├── mxGraphLayout.js │ │ │ │ │ │ │ ├── mxParallelEdgeLayout.js │ │ │ │ │ │ │ ├── mxPartitionLayout.js │ │ │ │ │ │ │ ├── mxRadialTreeLayout.js │ │ │ │ │ │ │ └── mxStackLayout.js │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── mxCell.js │ │ │ │ │ │ │ ├── mxCellPath.js │ │ │ │ │ │ │ ├── mxGeometry.js │ │ │ │ │ │ │ └── mxGraphModel.js │ │ │ │ │ │ ├── mxClient.js │ │ │ │ │ │ ├── shape/ │ │ │ │ │ │ │ ├── mxActor.js │ │ │ │ │ │ │ ├── mxArrow.js │ │ │ │ │ │ │ ├── mxArrowConnector.js │ │ │ │ │ │ │ ├── mxCloud.js │ │ │ │ │ │ │ ├── mxConnector.js │ │ │ │ │ │ │ ├── mxCylinder.js │ │ │ │ │ │ │ ├── mxDoubleEllipse.js │ │ │ │ │ │ │ ├── mxEllipse.js │ │ │ │ │ │ │ ├── mxHexagon.js │ │ │ │ │ │ │ ├── mxImageShape.js │ │ │ │ │ │ │ ├── mxLabel.js │ │ │ │ │ │ │ ├── mxLine.js │ │ │ │ │ │ │ ├── mxMarker.js │ │ │ │ │ │ │ ├── mxPolyline.js │ │ │ │ │ │ │ ├── mxRectangleShape.js │ │ │ │ │ │ │ ├── mxRhombus.js │ │ │ │ │ │ │ ├── mxShape.js │ │ │ │ │ │ │ ├── mxStencil.js │ │ │ │ │ │ │ ├── mxStencilRegistry.js │ │ │ │ │ │ │ ├── mxSwimlane.js │ │ │ │ │ │ │ ├── mxText.js │ │ │ │ │ │ │ └── mxTriangle.js │ │ │ │ │ │ ├── util/ │ │ │ │ │ │ │ ├── mxAbstractCanvas2D.js │ │ │ │ │ │ │ ├── mxAnimation.js │ │ │ │ │ │ │ ├── mxAutoSaveManager.js │ │ │ │ │ │ │ ├── mxClipboard.js │ │ │ │ │ │ │ ├── mxConstants.js │ │ │ │ │ │ │ ├── mxDictionary.js │ │ │ │ │ │ │ ├── mxDivResizer.js │ │ │ │ │ │ │ ├── mxDragSource.js │ │ │ │ │ │ │ ├── mxEffects.js │ │ │ │ │ │ │ ├── mxEvent.js │ │ │ │ │ │ │ ├── mxEventObject.js │ │ │ │ │ │ │ ├── mxEventSource.js │ │ │ │ │ │ │ ├── mxForm.js │ │ │ │ │ │ │ ├── mxGuide.js │ │ │ │ │ │ │ ├── mxImage.js │ │ │ │ │ │ │ ├── mxImageBundle.js │ │ │ │ │ │ │ ├── mxImageExport.js │ │ │ │ │ │ │ ├── mxLog.js │ │ │ │ │ │ │ ├── mxMorphing.js │ │ │ │ │ │ │ ├── mxMouseEvent.js │ │ │ │ │ │ │ ├── mxObjectIdentity.js │ │ │ │ │ │ │ ├── mxPanningManager.js │ │ │ │ │ │ │ ├── mxPoint.js │ │ │ │ │ │ │ ├── mxPopupMenu.js │ │ │ │ │ │ │ ├── mxRectangle.js │ │ │ │ │ │ │ ├── mxResources.js │ │ │ │ │ │ │ ├── mxSvgCanvas2D.js │ │ │ │ │ │ │ ├── mxToolbar.js │ │ │ │ │ │ │ ├── mxUndoManager.js │ │ │ │ │ │ │ ├── mxUndoableEdit.js │ │ │ │ │ │ │ ├── mxUrlConverter.js │ │ │ │ │ │ │ ├── mxUtils.js │ │ │ │ │ │ │ ├── mxVmlCanvas2D.js │ │ │ │ │ │ │ ├── mxWindow.js │ │ │ │ │ │ │ ├── mxXmlCanvas2D.js │ │ │ │ │ │ │ └── mxXmlRequest.js │ │ │ │ │ │ └── view/ │ │ │ │ │ │ ├── mxCellEditor.js │ │ │ │ │ │ ├── mxCellOverlay.js │ │ │ │ │ │ ├── mxCellRenderer.js │ │ │ │ │ │ ├── mxCellState.js │ │ │ │ │ │ ├── mxCellStatePreview.js │ │ │ │ │ │ ├── mxConnectionConstraint.js │ │ │ │ │ │ ├── mxEdgeStyle.js │ │ │ │ │ │ ├── mxGraph.js │ │ │ │ │ │ ├── mxGraphSelectionModel.js │ │ │ │ │ │ ├── mxGraphView.js │ │ │ │ │ │ ├── mxLayoutManager.js │ │ │ │ │ │ ├── mxMultiplicity.js │ │ │ │ │ │ ├── mxOutline.js │ │ │ │ │ │ ├── mxPerimeter.js │ │ │ │ │ │ ├── mxPrintPreview.js │ │ │ │ │ │ ├── mxStyleRegistry.js │ │ │ │ │ │ ├── mxStylesheet.js │ │ │ │ │ │ ├── mxSwimlaneManager.js │ │ │ │ │ │ └── mxTemporaryCellStates.js │ │ │ │ │ └── resources/ │ │ │ │ │ ├── editor.txt │ │ │ │ │ ├── editor_de.txt │ │ │ │ │ ├── editor_zh.txt │ │ │ │ │ ├── graph.txt │ │ │ │ │ ├── graph_de.txt │ │ │ │ │ └── graph_zh.txt │ │ │ │ └── theme/ │ │ │ │ └── default.xml │ │ │ ├── drawio.html │ │ │ ├── index.html │ │ │ ├── katex/ │ │ │ │ ├── README.md │ │ │ │ ├── contrib/ │ │ │ │ │ ├── auto-render.js │ │ │ │ │ ├── auto-render.mjs │ │ │ │ │ ├── copy-tex.js │ │ │ │ │ ├── copy-tex.mjs │ │ │ │ │ ├── mathtex-script-type.js │ │ │ │ │ ├── mathtex-script-type.mjs │ │ │ │ │ ├── mhchem.js │ │ │ │ │ ├── mhchem.mjs │ │ │ │ │ ├── render-a11y-string.js │ │ │ │ │ └── render-a11y-string.mjs │ │ │ │ ├── katex.css │ │ │ │ ├── katex.js │ │ │ │ └── katex.mjs │ │ │ ├── mxgraph/ │ │ │ │ ├── css/ │ │ │ │ │ ├── common.css │ │ │ │ │ └── explorer.css │ │ │ │ └── mxClient.js │ │ │ └── scripts/ │ │ │ ├── ai-chat-demo.js │ │ │ ├── api-demo.js │ │ │ ├── chatgpt-demo.js │ │ │ ├── dialog.css │ │ │ ├── drawio.js │ │ │ ├── h5-demo.js │ │ │ ├── html-docx.js │ │ │ ├── index.js │ │ │ ├── modal.js │ │ │ ├── multiple-demo.js │ │ │ ├── notoolbar-demo.js │ │ │ ├── pinyin/ │ │ │ │ ├── README.md │ │ │ │ ├── hanziPinyin.js │ │ │ │ ├── hanziPinyinWithoutYin.js │ │ │ │ ├── pinyin.js │ │ │ │ └── pinyin_dist.js │ │ │ ├── pptx-dialog.css │ │ │ ├── preview-demo.js │ │ │ ├── suggester-demo.js │ │ │ ├── tex-svg.js │ │ │ └── xss-demo.js │ │ ├── mind/ │ │ │ ├── css/ │ │ │ │ ├── app.css │ │ │ │ ├── chunk-3222d6ee.css │ │ │ │ ├── chunk-b15d02c4.css │ │ │ │ └── chunk-vendors.css │ │ │ ├── index.html │ │ │ └── js/ │ │ │ ├── app.js │ │ │ ├── chunk-3222d6ee.js │ │ │ ├── chunk-b15d02c4.js │ │ │ └── chunk-vendors.js │ │ ├── picedit/ │ │ │ ├── dist/ │ │ │ │ ├── bundle.js │ │ │ │ └── bundle.js.LICENSE.txt │ │ │ ├── images/ │ │ │ │ └── test-collection.json │ │ │ └── index.html │ │ ├── ppt/ │ │ │ ├── assets/ │ │ │ │ ├── index-FEB_hL87.css │ │ │ │ ├── index-NZ0pT4uX.js │ │ │ │ ├── index-O-Ts9bLA.js │ │ │ │ └── index-eVh7c3Gk.css │ │ │ └── index.html │ │ └── text/ │ │ ├── css/ │ │ │ ├── css2.css │ │ │ ├── index.css │ │ │ ├── styles.css │ │ │ ├── tab.css │ │ │ ├── vanilla-appearance.css │ │ │ ├── vanilla-highlighting.css │ │ │ └── vanilla-layout.css │ │ ├── index.html │ │ ├── js/ │ │ │ ├── base.js │ │ │ ├── init.js │ │ │ ├── script.js │ │ │ └── script2.js │ │ ├── manifest.webmanifest │ │ └── service-worker.js │ ├── src/ │ │ ├── App.vue │ │ ├── assets/ │ │ │ ├── chat.scss │ │ │ ├── emoji.json │ │ │ ├── imglist.scss │ │ │ ├── left.scss │ │ │ ├── list.scss │ │ │ ├── main.scss │ │ │ ├── root.scss │ │ │ ├── store.json │ │ │ ├── store.scss │ │ │ └── windows10.scss │ │ ├── auto-imports.d.ts │ │ ├── components/ │ │ │ ├── ai/ │ │ │ │ ├── AiSettingApi.vue │ │ │ │ ├── AiSettingConf.vue │ │ │ │ ├── AiSettingDef.vue │ │ │ │ ├── AssistantAdd.vue │ │ │ │ ├── DownAddbox.vue │ │ │ │ ├── DownLabeleditor.vue │ │ │ │ ├── DownModelInfo.vue │ │ │ │ ├── aimodel.vue │ │ │ │ ├── aisetting.vue │ │ │ │ └── assistant.vue │ │ │ ├── builtin/ │ │ │ │ ├── Browser.vue │ │ │ │ ├── Calendar.vue │ │ │ │ ├── ContextMenu.vue │ │ │ │ ├── CreateUrl.vue │ │ │ │ ├── DateNote.vue │ │ │ │ ├── EditFileName.vue │ │ │ │ ├── EditType.vue │ │ │ │ ├── FileIcon.vue │ │ │ │ ├── FileIconImg.vue │ │ │ │ ├── FileIconIs.vue │ │ │ │ ├── FileList.vue │ │ │ │ ├── FileProps.vue │ │ │ │ ├── FileTree.vue │ │ │ │ ├── FileViewer.vue │ │ │ │ ├── ImageViewer.vue │ │ │ │ ├── MusicStore.vue │ │ │ │ ├── MusicViewer.vue │ │ │ │ ├── NotifyGroup.vue │ │ │ │ ├── OpenWiteDialog.vue │ │ │ │ ├── OsImage.vue │ │ │ │ ├── PdfViewer.vue │ │ │ │ ├── PictureStore.vue │ │ │ │ ├── RectChosen.vue │ │ │ │ ├── UrlBrowser.vue │ │ │ │ ├── Version.vue │ │ │ │ └── VideoViewer.vue │ │ │ ├── chat/ │ │ │ │ ├── Chat.vue │ │ │ │ ├── ChatBox.vue │ │ │ │ ├── ChatMenu.vue │ │ │ │ ├── ChatMessage.vue │ │ │ │ ├── ChatMsgList.vue │ │ │ │ ├── ChatUserList.vue │ │ │ │ ├── ChatUserSetting.vue │ │ │ │ ├── ChatWorkList.vue │ │ │ │ ├── chatGroupMember.vue │ │ │ │ └── chatUserInfo.vue │ │ │ ├── computer/ │ │ │ │ ├── Computer.vue │ │ │ │ ├── ComputerNavBar.vue │ │ │ │ ├── QuickLink.vue │ │ │ │ └── UpPopover.vue │ │ │ ├── desktop/ │ │ │ │ ├── Ad.vue │ │ │ │ ├── CloseDesktop.vue │ │ │ │ ├── DeskItem.vue │ │ │ │ ├── Desktop.vue │ │ │ │ ├── DesktopBackground.vue │ │ │ │ ├── LockDesktop.vue │ │ │ │ ├── Notice.vue │ │ │ │ ├── OpeningDesktop.vue │ │ │ │ ├── Screen.vue │ │ │ │ ├── ScreenContent.vue │ │ │ │ ├── Upgrade.vue │ │ │ │ └── mobile/ │ │ │ │ ├── BottomBar.vue │ │ │ │ ├── Mobile.vue │ │ │ │ ├── MobileApp.vue │ │ │ │ └── util.scss │ │ │ ├── install/ │ │ │ │ ├── Install.vue │ │ │ │ ├── InstallCompony.vue │ │ │ │ ├── InstallMember.vue │ │ │ │ └── InstallPerson.vue │ │ │ ├── localchat/ │ │ │ │ ├── AiChatInfo.vue │ │ │ │ ├── AiChatLeft.vue │ │ │ │ ├── AiChatMain.vue │ │ │ │ ├── AiChatMessage.vue │ │ │ │ ├── ChatContent.vue │ │ │ │ ├── ChatDomain.vue │ │ │ │ ├── ChatEditor.vue │ │ │ │ ├── ChatFoot.vue │ │ │ │ ├── ChatNav.vue │ │ │ │ ├── KnowledgeChat.vue │ │ │ │ └── LocalChat.vue │ │ │ ├── oa/ │ │ │ │ ├── FilePwd.vue │ │ │ │ ├── PlanTasks.vue │ │ │ │ └── ShareFiles.vue │ │ │ ├── setting/ │ │ │ │ ├── ColorPicker.vue │ │ │ │ ├── FrpcConfig.vue │ │ │ │ ├── FrpcEdit.vue │ │ │ │ ├── LocalNas.vue │ │ │ │ ├── LocalProxy.vue │ │ │ │ ├── NasClient.vue │ │ │ │ ├── NetProxy.vue │ │ │ │ ├── ProcessManager.vue │ │ │ │ ├── SetAccount.vue │ │ │ │ ├── SetCustom.vue │ │ │ │ ├── SetFilePwd.vue │ │ │ │ ├── SetLang.vue │ │ │ │ ├── SetNas.vue │ │ │ │ ├── SetSystem.vue │ │ │ │ ├── SetUpdate.vue │ │ │ │ ├── Setting.vue │ │ │ │ ├── WebDavClient.vue │ │ │ │ └── setStyle.css │ │ │ ├── store/ │ │ │ │ ├── AddApp.vue │ │ │ │ ├── AppItem.vue │ │ │ │ └── Store.vue │ │ │ ├── taskbar/ │ │ │ │ ├── AppIcon.vue │ │ │ │ ├── AppIconGroup.vue │ │ │ │ ├── Battery.vue │ │ │ │ ├── BatteryPop.vue │ │ │ │ ├── CustomIcon.vue │ │ │ │ ├── DateTime.vue │ │ │ │ ├── DateTimeShow.vue │ │ │ │ ├── Error.vue │ │ │ │ ├── Magnet.vue │ │ │ │ ├── MenuList.vue │ │ │ │ ├── MessageCenterPop.vue │ │ │ │ ├── MessageIcon.vue │ │ │ │ ├── NetWork.vue │ │ │ │ ├── NetworkPop.vue │ │ │ │ ├── ScreenRecorder.vue │ │ │ │ ├── Screenshort.vue │ │ │ │ ├── ShowNews.vue │ │ │ │ ├── StartMenu.vue │ │ │ │ ├── StartOption.vue │ │ │ │ ├── StateIcon.vue │ │ │ │ └── Taskbar.vue │ │ │ ├── ui/ │ │ │ │ ├── CloseButton.vue │ │ │ │ ├── WinButton.vue │ │ │ │ ├── WinCheckBox.vue │ │ │ │ ├── WinInput.vue │ │ │ │ ├── WinLoading.vue │ │ │ │ ├── WinLogo.vue │ │ │ │ ├── WinProcess.vue │ │ │ │ ├── WinSelect.vue │ │ │ │ └── WinUpButtonGroup.vue │ │ │ └── window/ │ │ │ ├── DialogProcess.vue │ │ │ ├── DialogTemp.vue │ │ │ ├── IframeFile.vue │ │ │ ├── MenuBar.vue │ │ │ ├── MenuFooter.vue │ │ │ ├── MobileTemplate.vue │ │ │ ├── NotFound.vue │ │ │ ├── OnlyOffice.vue │ │ │ ├── WindowGroup.vue │ │ │ ├── WindowInner.vue │ │ │ ├── WindowNode.vue │ │ │ └── WindowTemplate.vue │ │ ├── components.d.ts │ │ ├── hook/ │ │ │ ├── useAi.ts │ │ │ ├── useAppMenu.ts │ │ │ ├── useAppOpen.ts │ │ │ ├── useComputer.ts │ │ │ ├── useContextMenu.ts │ │ │ ├── useFileDrag.ts │ │ │ ├── usePlugin.ts │ │ │ ├── useRectChosen.ts │ │ │ └── useWebdav.ts │ │ ├── i18n/ │ │ │ ├── index.ts │ │ │ └── lang/ │ │ │ ├── en.json │ │ │ └── zh.json │ │ ├── main.ts │ │ ├── stores/ │ │ │ ├── aichat.ts │ │ │ ├── assistant.ts │ │ │ ├── chat.ts │ │ │ ├── choose.ts │ │ │ ├── db.ts │ │ │ ├── file.ts │ │ │ ├── filePwd.ts │ │ │ ├── history.ts │ │ │ ├── index.ts │ │ │ ├── labels/ │ │ │ │ ├── aya.ts │ │ │ │ ├── bakllava.ts │ │ │ │ ├── bge.ts │ │ │ │ ├── bgereranker.ts │ │ │ │ ├── bilibili.ts │ │ │ │ ├── chatglm.ts │ │ │ │ ├── codegemma.ts │ │ │ │ ├── codellama.ts │ │ │ │ ├── codeqwen.ts │ │ │ │ ├── deepseek.ts │ │ │ │ ├── deepseekcoder.ts │ │ │ │ ├── dmeta.ts │ │ │ │ ├── duckdbnsql.ts │ │ │ │ ├── gemma.ts │ │ │ │ ├── h2o.ts │ │ │ │ ├── index.ts │ │ │ │ ├── internlm.ts │ │ │ │ ├── llama.ts │ │ │ │ ├── llamavision.ts │ │ │ │ ├── llava.ts │ │ │ │ ├── mindchat.ts │ │ │ │ ├── mingyi.ts │ │ │ │ ├── minicpm.ts │ │ │ │ ├── mistral.ts │ │ │ │ ├── mixtral.ts │ │ │ │ ├── moondream.ts │ │ │ │ ├── mxbai.ts │ │ │ │ ├── nemo.ts │ │ │ │ ├── neuralchat.ts │ │ │ │ ├── nomic.ts │ │ │ │ ├── openchat.ts │ │ │ │ ├── paraformer.ts │ │ │ │ ├── phi.ts │ │ │ │ ├── qwen.ts │ │ │ │ ├── sd.ts │ │ │ │ ├── snowflake.ts │ │ │ │ ├── solar.ts │ │ │ │ ├── starcoder2.ts │ │ │ │ ├── starlinglm.ts │ │ │ │ ├── telespeech.ts │ │ │ │ ├── vits.ts │ │ │ │ ├── whisper.ts │ │ │ │ ├── wizardlm2.ts │ │ │ │ ├── yi.ts │ │ │ │ ├── zephyr.ts │ │ │ │ └── zipformer.ts │ │ │ ├── localchat.ts │ │ │ ├── login.ts │ │ │ ├── message.ts │ │ │ ├── model.ts │ │ │ ├── modelconfig.ts │ │ │ ├── notify.ts │ │ │ ├── prompt/ │ │ │ │ ├── index.ts │ │ │ │ ├── prompts-en.json │ │ │ │ └── prompts-zh.json │ │ │ ├── proxy.ts │ │ │ ├── store.ts │ │ │ └── upgrade.ts │ │ ├── system/ │ │ │ ├── aiconfig.ts │ │ │ ├── applist.ts │ │ │ ├── config.ts │ │ │ ├── core/ │ │ │ │ ├── FIleInterface.ts │ │ │ │ ├── FileLocal.ts │ │ │ │ ├── FileMode.ts │ │ │ │ ├── FileOs.ts │ │ │ │ ├── FileSystem.ts │ │ │ │ ├── Path.ts │ │ │ │ ├── SystemFileConfig.ts │ │ │ │ └── createInitFile.ts │ │ │ ├── dinglogin.ts │ │ │ ├── event/ │ │ │ │ ├── EventHook.ts │ │ │ │ ├── EventListener.ts │ │ │ │ ├── Eventer.ts │ │ │ │ ├── eventBus.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── initBuiltin.ts │ │ │ ├── initConfig.ts │ │ │ ├── member.ts │ │ │ ├── menu/ │ │ │ │ ├── Menu.ts │ │ │ │ ├── MenuItem.ts │ │ │ │ └── Tary.ts │ │ │ ├── notification/ │ │ │ │ └── Notification.ts │ │ │ ├── qiyeweixinlogin.ts │ │ │ ├── root.ts │ │ │ ├── router.ts │ │ │ ├── third_login.ts │ │ │ ├── type/ │ │ │ │ ├── enum.ts │ │ │ │ ├── file.ts │ │ │ │ ├── mod.d.ts │ │ │ │ └── type.ts │ │ │ └── window/ │ │ │ ├── BrowserWindow.ts │ │ │ ├── Dialog.ts │ │ │ ├── MakeDragable.ts │ │ │ └── dom/ │ │ │ ├── DragElement.ts │ │ │ └── ScaleElement.ts │ │ ├── util/ │ │ │ ├── Icon.ts │ │ │ ├── Tree.ts │ │ │ ├── clientid.ts │ │ │ ├── common.ts │ │ │ ├── debounce.ts │ │ │ ├── device.ts │ │ │ ├── file.ts │ │ │ ├── glowingBorder.ts │ │ │ ├── goutil.ts │ │ │ ├── markdown.ts │ │ │ ├── modash.ts │ │ │ ├── msg.ts │ │ │ ├── screenRecorder.ts │ │ │ ├── sharePath.ts │ │ │ ├── stepComponent.ts │ │ │ ├── thirdlogin.ts │ │ │ └── unzip.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vite.config.ts │ └── wailsjs/ │ ├── go/ │ │ └── app/ │ │ ├── App.d.ts │ │ └── App.js │ └── runtime/ │ ├── package.json │ ├── runtime.d.ts │ └── runtime.js ├── go.mod ├── go.sum ├── main.go ├── packages/ │ ├── baiban/ │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ └── static/ │ │ │ └── translations/ │ │ │ ├── ar.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── en.json │ │ │ ├── es.json │ │ │ ├── fa.json │ │ │ ├── fi.json │ │ │ ├── fr.json │ │ │ ├── gl.json │ │ │ ├── he.json │ │ │ ├── hi-in.json │ │ │ ├── hr.json │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── ko-kr.json │ │ │ ├── ku.json │ │ │ ├── languages.json │ │ │ ├── main.json │ │ │ ├── my.json │ │ │ ├── ne.json │ │ │ ├── no.json │ │ │ ├── pl.json │ │ │ ├── pt-br.json │ │ │ ├── pt-pt.json │ │ │ ├── ro.json │ │ │ ├── ru.json │ │ │ ├── sl.json │ │ │ ├── sv.json │ │ │ ├── te.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── vi.json │ │ │ ├── zh-cn.json │ │ │ └── zh-tw.json │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.jsx │ │ │ ├── assets/ │ │ │ │ └── font/ │ │ │ │ └── font.css │ │ │ ├── components/ │ │ │ │ ├── SaveButton.tsx │ │ │ │ └── SaveWithInput.tsx │ │ │ ├── index.css │ │ │ └── main.jsx │ │ ├── tailwind.config.js │ │ └── vite.config.js │ ├── kanban/ │ │ ├── .gitignore │ │ ├── CNAME │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── public/ │ │ │ ├── CNAME │ │ │ ├── index.html │ │ │ └── manifest.json │ │ ├── src/ │ │ │ ├── PersonalKanban/ │ │ │ │ ├── Introduction.stories.mdx │ │ │ │ ├── assets/ │ │ │ │ │ └── locales/ │ │ │ │ │ ├── cn/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ ├── de/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ ├── en/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ ├── es/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ ├── fr/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ ├── in/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ ├── jp/ │ │ │ │ │ │ └── translations.json │ │ │ │ │ └── ru/ │ │ │ │ │ └── translations.json │ │ │ │ ├── components/ │ │ │ │ │ ├── Board/ │ │ │ │ │ │ ├── Board.stories.tsx │ │ │ │ │ │ ├── Board.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Card/ │ │ │ │ │ │ ├── Card.stories.tsx │ │ │ │ │ │ ├── Card.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Column/ │ │ │ │ │ │ ├── Column.stories.tsx │ │ │ │ │ │ ├── Column.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ColumnForm/ │ │ │ │ │ │ ├── ColumnForm.stories.tsx │ │ │ │ │ │ ├── ColumnForm.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── IconButton/ │ │ │ │ │ │ ├── IconButton.stories.tsx │ │ │ │ │ │ ├── IconButton.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── KanbanBoard/ │ │ │ │ │ │ ├── KanbanBoard.stories.tsx │ │ │ │ │ │ ├── KanbanBoard.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── KanbanCard/ │ │ │ │ │ │ ├── KanbanCard.stories.tsx │ │ │ │ │ │ ├── KanbanCard.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── KanbanColumn/ │ │ │ │ │ │ ├── KanbanColumn.stories.tsx │ │ │ │ │ │ ├── KanbanColumn.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Radio/ │ │ │ │ │ │ ├── Radio.stories.tsx │ │ │ │ │ │ ├── Radio.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── RecordForm/ │ │ │ │ │ ├── RecordForm.stories.tsx │ │ │ │ │ ├── RecordForm.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── constants/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── containers/ │ │ │ │ │ ├── KanbanBoard/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── title.tsx │ │ │ │ │ └── Toolbar/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── enums/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── providers/ │ │ │ │ │ ├── ThemeProvider.tsx │ │ │ │ │ └── TranslationProvider.tsx │ │ │ │ ├── services/ │ │ │ │ │ ├── StorageService.ts │ │ │ │ │ └── Utils.ts │ │ │ │ └── types/ │ │ │ │ └── index.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── react-app-env.d.ts │ │ │ ├── reportWebVitals.ts │ │ │ ├── service-worker.ts │ │ │ ├── serviceWorkerRegistration.ts │ │ │ └── setupTests.ts │ │ └── tsconfig.json │ ├── mind/ │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── babel.config.js │ │ ├── package.json │ │ ├── public/ │ │ │ └── index.html │ │ ├── scripts/ │ │ │ ├── createNodeImageList.js │ │ │ └── updateVersion.js │ │ ├── src/ │ │ │ ├── App.vue │ │ │ ├── api/ │ │ │ │ └── index.js │ │ │ ├── assets/ │ │ │ │ ├── icon-font/ │ │ │ │ │ └── iconfont.css │ │ │ │ └── svg/ │ │ │ │ ├── business/ │ │ │ │ │ └── 商务 │ │ │ │ ├── education/ │ │ │ │ │ └── 教育 │ │ │ │ ├── festival/ │ │ │ │ │ └── 节日 │ │ │ │ ├── food/ │ │ │ │ │ └── 食物 │ │ │ │ ├── medicine/ │ │ │ │ │ └── 医疗 │ │ │ │ ├── tools/ │ │ │ │ │ └── 工具 │ │ │ │ └── travel/ │ │ │ │ └── 旅行 │ │ │ ├── components/ │ │ │ │ └── ImgUpload/ │ │ │ │ ├── index.vue │ │ │ │ └── style.less │ │ │ ├── config/ │ │ │ │ ├── constant.js │ │ │ │ ├── en.js │ │ │ │ ├── icon.js │ │ │ │ ├── image.js │ │ │ │ ├── index.js │ │ │ │ ├── zh.js │ │ │ │ └── zhtw.js │ │ │ ├── i18n.js │ │ │ ├── lang/ │ │ │ │ ├── en_us.js │ │ │ │ ├── index.js │ │ │ │ ├── zh_cn.js │ │ │ │ └── zh_tw.js │ │ │ ├── main.js │ │ │ ├── pages/ │ │ │ │ ├── Doc.vue │ │ │ │ └── Edit/ │ │ │ │ ├── Index.vue │ │ │ │ └── components/ │ │ │ │ ├── BaseStyle.vue │ │ │ │ ├── Color.vue │ │ │ │ ├── Contextmenu.vue │ │ │ │ ├── Count.vue │ │ │ │ ├── CustomNodeContent.vue │ │ │ │ ├── Demonstrate.vue │ │ │ │ ├── Edit.vue │ │ │ │ ├── Export.vue │ │ │ │ ├── FormulaSidebar.vue │ │ │ │ ├── Fullscreen.vue │ │ │ │ ├── Import.vue │ │ │ │ ├── MouseAction.vue │ │ │ │ ├── Navigator.vue │ │ │ │ ├── NavigatorToolbar.vue │ │ │ │ ├── NodeAnnotationBtn.vue │ │ │ │ ├── NodeAttachment.vue │ │ │ │ ├── NodeHyperlink.vue │ │ │ │ ├── NodeIcon.vue │ │ │ │ ├── NodeIconSidebar.vue │ │ │ │ ├── NodeIconToolbar.vue │ │ │ │ ├── NodeImage.vue │ │ │ │ ├── NodeImgPreview.vue │ │ │ │ ├── NodeNote.vue │ │ │ │ ├── NodeNoteContentShow.vue │ │ │ │ ├── NodeOuterFrame.vue │ │ │ │ ├── NodeTag.vue │ │ │ │ ├── NodeTagStyle.vue │ │ │ │ ├── Outline.vue │ │ │ │ ├── OutlineEdit.vue │ │ │ │ ├── OutlineSidebar.vue │ │ │ │ ├── RichTextToolbar.vue │ │ │ │ ├── Scale.vue │ │ │ │ ├── Scrollbar.vue │ │ │ │ ├── Search.vue │ │ │ │ ├── Setting.vue │ │ │ │ ├── ShortcutKey.vue │ │ │ │ ├── Sidebar.vue │ │ │ │ ├── SidebarTrigger.vue │ │ │ │ ├── SourceCodeEdit.vue │ │ │ │ ├── Structure.vue │ │ │ │ ├── Style.vue │ │ │ │ ├── Theme.vue │ │ │ │ ├── Toolbar.vue │ │ │ │ └── ToolbarNodeBtnList.vue │ │ │ ├── router.js │ │ │ ├── store.js │ │ │ └── utils/ │ │ │ ├── handleClipboardText.js │ │ │ ├── index.js │ │ │ └── loading.js │ │ └── vue.config.js │ ├── photoshop/ │ │ ├── .babelrc │ │ ├── .gitignore │ │ ├── MIT-LICENSE.txt │ │ ├── README.md │ │ ├── SECURITY.md │ │ ├── examples/ │ │ │ ├── add-edit-imgData.html │ │ │ ├── open-edit-save.html │ │ │ └── zoom.html │ │ ├── images/ │ │ │ └── test-collection.json │ │ ├── index.html │ │ ├── manifest-disabled.json │ │ ├── package.json │ │ ├── service-worker.js │ │ ├── src/ │ │ │ ├── css/ │ │ │ │ ├── component.css │ │ │ │ ├── layout.css │ │ │ │ ├── menu.css │ │ │ │ ├── popup.css │ │ │ │ ├── print.css │ │ │ │ ├── reset.css │ │ │ │ └── utility.css │ │ │ └── js/ │ │ │ ├── actions/ │ │ │ │ ├── _README.md │ │ │ │ ├── activate-tool.js │ │ │ │ ├── add-layer-filter.js │ │ │ │ ├── autoresize-canvas.js │ │ │ │ ├── base.js │ │ │ │ ├── bundle.js │ │ │ │ ├── clear-layer.js │ │ │ │ ├── delete-layer-filter.js │ │ │ │ ├── delete-layer-settings.js │ │ │ │ ├── delete-layer.js │ │ │ │ ├── index.js │ │ │ │ ├── init-canvas-zoom.js │ │ │ │ ├── insert-layer.js │ │ │ │ ├── prepare-canvas.js │ │ │ │ ├── refresh-action-attributes.js │ │ │ │ ├── refresh-layers-gui.js │ │ │ │ ├── reorder-layer.js │ │ │ │ ├── reset-layers.js │ │ │ │ ├── reset-selection.js │ │ │ │ ├── select-layer.js │ │ │ │ ├── select-next-layer.js │ │ │ │ ├── select-previous-layer.js │ │ │ │ ├── set-object-property.js │ │ │ │ ├── set-selection.js │ │ │ │ ├── stop-animation.js │ │ │ │ ├── store/ │ │ │ │ │ └── image-store.js │ │ │ │ ├── toggle-layer-visibility.js │ │ │ │ ├── update-config.js │ │ │ │ ├── update-layer-image.js │ │ │ │ └── update-layer.js │ │ │ ├── app.js │ │ │ ├── config-menu.js │ │ │ ├── config.js │ │ │ ├── core/ │ │ │ │ ├── base-gui.js │ │ │ │ ├── base-layers.js │ │ │ │ ├── base-search.js │ │ │ │ ├── base-selection.js │ │ │ │ ├── base-state.js │ │ │ │ ├── base-tools.js │ │ │ │ ├── components/ │ │ │ │ │ ├── color-input.js │ │ │ │ │ ├── color-picker-gradient.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── number-input.js │ │ │ │ │ ├── range.js │ │ │ │ │ └── swatches.js │ │ │ │ └── gui/ │ │ │ │ ├── gui-colors.js │ │ │ │ ├── gui-details.js │ │ │ │ ├── gui-information.js │ │ │ │ ├── gui-layers.js │ │ │ │ ├── gui-menu.js │ │ │ │ ├── gui-preview.js │ │ │ │ └── gui-tools.js │ │ │ ├── languages/ │ │ │ │ ├── ar.json │ │ │ │ ├── credits.js │ │ │ │ ├── de.json │ │ │ │ ├── el.json │ │ │ │ ├── empty.json │ │ │ │ ├── es.json │ │ │ │ ├── fr.json │ │ │ │ ├── it.json │ │ │ │ ├── ja.json │ │ │ │ ├── ko.json │ │ │ │ ├── lt.json │ │ │ │ ├── nl.json │ │ │ │ ├── pt.json │ │ │ │ ├── ru.json │ │ │ │ ├── tr.json │ │ │ │ ├── uk.json │ │ │ │ └── zh.json │ │ │ ├── libs/ │ │ │ │ ├── canvastotiff.js │ │ │ │ ├── clipboard.js │ │ │ │ ├── color-matrix.js │ │ │ │ ├── color-thief.js │ │ │ │ ├── gifjs/ │ │ │ │ │ ├── gif.js │ │ │ │ │ └── gif.worker.js │ │ │ │ ├── glfx.js │ │ │ │ ├── helpers.js │ │ │ │ ├── imagefilters.js │ │ │ │ ├── jquery.translate.js │ │ │ │ ├── popup.js │ │ │ │ ├── vintage.js │ │ │ │ └── zoomView.js │ │ │ ├── main.js │ │ │ ├── modules/ │ │ │ │ ├── edit/ │ │ │ │ │ ├── copy.js │ │ │ │ │ ├── paste.js │ │ │ │ │ ├── redo.js │ │ │ │ │ ├── selection.js │ │ │ │ │ └── undo.js │ │ │ │ ├── effects/ │ │ │ │ │ ├── abstract/ │ │ │ │ │ │ └── css.js │ │ │ │ │ ├── black_and_white.js │ │ │ │ │ ├── blueprint.js │ │ │ │ │ ├── borders.js │ │ │ │ │ ├── box_blur.js │ │ │ │ │ ├── browser.js │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── blur.js │ │ │ │ │ │ ├── brightness.js │ │ │ │ │ │ ├── contrast.js │ │ │ │ │ │ ├── grayscale.js │ │ │ │ │ │ ├── hue-rotate.js │ │ │ │ │ │ ├── invert.js │ │ │ │ │ │ ├── saturate.js │ │ │ │ │ │ ├── sepia.js │ │ │ │ │ │ └── shadow.js │ │ │ │ │ ├── denoise.js │ │ │ │ │ ├── dither.js │ │ │ │ │ ├── dot_screen.js │ │ │ │ │ ├── edge.js │ │ │ │ │ ├── emboss.js │ │ │ │ │ ├── enrich.js │ │ │ │ │ ├── grains.js │ │ │ │ │ ├── heatmap.js │ │ │ │ │ ├── instagram/ │ │ │ │ │ │ ├── 1977.js │ │ │ │ │ │ ├── aden.js │ │ │ │ │ │ ├── clarendon.js │ │ │ │ │ │ ├── gingham.js │ │ │ │ │ │ ├── inkwell.js │ │ │ │ │ │ ├── lofi.js │ │ │ │ │ │ ├── toaster.js │ │ │ │ │ │ ├── valencia.js │ │ │ │ │ │ └── xpro2.js │ │ │ │ │ ├── mosaic.js │ │ │ │ │ ├── night_vision.js │ │ │ │ │ ├── oil.js │ │ │ │ │ ├── pencil.js │ │ │ │ │ ├── sharpen.js │ │ │ │ │ ├── solarize.js │ │ │ │ │ ├── tilt_shift.js │ │ │ │ │ ├── vibrance.js │ │ │ │ │ ├── vignette.js │ │ │ │ │ ├── vintage.js │ │ │ │ │ └── zoom_blur.js │ │ │ │ ├── file/ │ │ │ │ │ ├── new.js │ │ │ │ │ ├── open.js │ │ │ │ │ ├── print.js │ │ │ │ │ ├── quickload.js │ │ │ │ │ ├── quicksave.js │ │ │ │ │ └── save.js │ │ │ │ ├── help/ │ │ │ │ │ ├── about.js │ │ │ │ │ └── shortcuts.js │ │ │ │ ├── image/ │ │ │ │ │ ├── auto_adjust.js │ │ │ │ │ ├── color_corrections.js │ │ │ │ │ ├── decrease_colors.js │ │ │ │ │ ├── flip.js │ │ │ │ │ ├── histogram.js │ │ │ │ │ ├── information.js │ │ │ │ │ ├── opacity.js │ │ │ │ │ ├── palette.js │ │ │ │ │ ├── resize.js │ │ │ │ │ ├── rotate.js │ │ │ │ │ ├── size.js │ │ │ │ │ ├── translate.js │ │ │ │ │ └── trim.js │ │ │ │ ├── layer/ │ │ │ │ │ ├── clear.js │ │ │ │ │ ├── composition.js │ │ │ │ │ ├── delete.js │ │ │ │ │ ├── differences.js │ │ │ │ │ ├── duplicate.js │ │ │ │ │ ├── flatten.js │ │ │ │ │ ├── merge.js │ │ │ │ │ ├── move.js │ │ │ │ │ ├── new.js │ │ │ │ │ ├── raster.js │ │ │ │ │ ├── rename.js │ │ │ │ │ └── visibility.js │ │ │ │ ├── tools/ │ │ │ │ │ ├── color_to_alpha.js │ │ │ │ │ ├── color_zoom.js │ │ │ │ │ ├── content_fill.js │ │ │ │ │ ├── keypoints.js │ │ │ │ │ ├── replace_color.js │ │ │ │ │ ├── restore_alpha.js │ │ │ │ │ ├── search.js │ │ │ │ │ ├── settings.js │ │ │ │ │ ├── sprites.js │ │ │ │ │ └── translate.js │ │ │ │ └── view/ │ │ │ │ ├── full_screen.js │ │ │ │ ├── grid.js │ │ │ │ ├── guides.js │ │ │ │ ├── ruler.js │ │ │ │ └── zoom.js │ │ │ └── tools/ │ │ │ ├── animation.js │ │ │ ├── blur.js │ │ │ ├── brush.js │ │ │ ├── bulge_pinch.js │ │ │ ├── clone.js │ │ │ ├── crop.js │ │ │ ├── desaturate.js │ │ │ ├── erase.js │ │ │ ├── fill.js │ │ │ ├── gradient.js │ │ │ ├── magic_erase.js │ │ │ ├── media.js │ │ │ ├── pencil.js │ │ │ ├── pick_color.js │ │ │ ├── select.js │ │ │ ├── selection.js │ │ │ ├── shape.js │ │ │ ├── shapes/ │ │ │ │ ├── arrow.js │ │ │ │ ├── bezier_curve.js │ │ │ │ ├── callout.js │ │ │ │ ├── cog.js │ │ │ │ ├── cylinder.js │ │ │ │ ├── ellipse.js │ │ │ │ ├── heart.js │ │ │ │ ├── hexagon.js │ │ │ │ ├── human.js │ │ │ │ ├── line.js │ │ │ │ ├── moon.js │ │ │ │ ├── parallelogram.js │ │ │ │ ├── pentagon.js │ │ │ │ ├── plus.js │ │ │ │ ├── polygon.js │ │ │ │ ├── rectangle.js │ │ │ │ ├── right_triangle.js │ │ │ │ ├── romb.js │ │ │ │ ├── star.js │ │ │ │ ├── tear.js │ │ │ │ ├── trapezoid.js │ │ │ │ └── triangle.js │ │ │ ├── sharpen.js │ │ │ └── text.js │ │ ├── tools/ │ │ │ └── translator/ │ │ │ ├── config.php │ │ │ ├── index.php │ │ │ └── libs/ │ │ │ ├── GoogleTranslate.php │ │ │ └── translator.php │ │ └── webpack.config.js │ ├── pptx/ │ │ ├── .eslintrc.cjs │ │ ├── .github/ │ │ │ ├── ISSUE_TEMPLATE/ │ │ │ │ ├── bug_report.md │ │ │ │ └── feature_request.md │ │ │ └── workflows/ │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── .husky/ │ │ │ └── commit-msg │ │ ├── .vscode/ │ │ │ └── extensions.json │ │ ├── LICENSE │ │ ├── README.md │ │ ├── commitlint.config.cjs │ │ ├── doc/ │ │ │ ├── Canvas.md │ │ │ ├── CustomElement.md │ │ │ ├── DirectoryAndData.md │ │ │ └── Q&A.md │ │ ├── env.d.ts │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.vue │ │ │ ├── assets/ │ │ │ │ └── styles/ │ │ │ │ ├── font.scss │ │ │ │ ├── global.scss │ │ │ │ ├── mixin.scss │ │ │ │ ├── prosemirror.scss │ │ │ │ └── variable.scss │ │ │ ├── components/ │ │ │ │ ├── Button.vue │ │ │ │ ├── ButtonGroup.vue │ │ │ │ ├── Checkbox.vue │ │ │ │ ├── CheckboxButton.vue │ │ │ │ ├── ColorPicker/ │ │ │ │ │ ├── Alpha.vue │ │ │ │ │ ├── Checkboard.vue │ │ │ │ │ ├── EditableInput.vue │ │ │ │ │ ├── Hue.vue │ │ │ │ │ ├── Saturation.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── Contextmenu/ │ │ │ │ │ ├── MenuContent.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── types.ts │ │ │ │ ├── Divider.vue │ │ │ │ ├── Drawer.vue │ │ │ │ ├── FileInput.vue │ │ │ │ ├── FullscreenSpin.vue │ │ │ │ ├── Input.vue │ │ │ │ ├── LaTeXEditor/ │ │ │ │ │ ├── FormulaContent.vue │ │ │ │ │ ├── SymbolContent.vue │ │ │ │ │ ├── hfmath.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── Message.vue │ │ │ │ ├── Modal.vue │ │ │ │ ├── MoveablePanel.vue │ │ │ │ ├── NumberInput.vue │ │ │ │ ├── Popover.vue │ │ │ │ ├── PopoverMenuItem.vue │ │ │ │ ├── RadioButton.vue │ │ │ │ ├── RadioGroup.vue │ │ │ │ ├── Select.vue │ │ │ │ ├── SelectGroup.vue │ │ │ │ ├── Slider.vue │ │ │ │ ├── Switch.vue │ │ │ │ ├── Tabs.vue │ │ │ │ ├── TextArea.vue │ │ │ │ └── WritingBoard.vue │ │ │ ├── components.d.ts │ │ │ ├── configs/ │ │ │ │ ├── animation.ts │ │ │ │ ├── canvas.ts │ │ │ │ ├── chartTypes.ts │ │ │ │ ├── element.ts │ │ │ │ ├── font.ts │ │ │ │ ├── hotkey.ts │ │ │ │ ├── imageClip.ts │ │ │ │ ├── latex.ts │ │ │ │ ├── lines.ts │ │ │ │ ├── shapes.ts │ │ │ │ ├── storage.ts │ │ │ │ ├── symbol.ts │ │ │ │ └── theme.ts │ │ │ ├── global.d.ts │ │ │ ├── hooks/ │ │ │ │ ├── useAddSlidesOrElements.ts │ │ │ │ ├── useAlignActiveElement.ts │ │ │ │ ├── useAlignElementToCanvas.ts │ │ │ │ ├── useCombineElement.ts │ │ │ │ ├── useCopyAndPasteElement.ts │ │ │ │ ├── useCreateElement.ts │ │ │ │ ├── useDeleteElement.ts │ │ │ │ ├── useExport.ts │ │ │ │ ├── useGlobalHotkey.ts │ │ │ │ ├── useHideElement.ts │ │ │ │ ├── useHistorySnapshot.ts │ │ │ │ ├── useImport.ts │ │ │ │ ├── useLink.ts │ │ │ │ ├── useLoadSlides.ts │ │ │ │ ├── useLockElement.ts │ │ │ │ ├── useMoveElement.ts │ │ │ │ ├── useOrderElement.ts │ │ │ │ ├── usePasteEvent.ts │ │ │ │ ├── usePasteTextClipboardData.ts │ │ │ │ ├── useScaleCanvas.ts │ │ │ │ ├── useScreening.ts │ │ │ │ ├── useSearch.ts │ │ │ │ ├── useSelectElement.ts │ │ │ │ ├── useShapeFormatPainter.ts │ │ │ │ ├── useSlideBackgroundStyle.ts │ │ │ │ ├── useSlideHandler.ts │ │ │ │ ├── useSlideTheme.ts │ │ │ │ ├── useTextFormatPainter.ts │ │ │ │ └── useUniformDisplayElement.ts │ │ │ ├── main.ts │ │ │ ├── mocks/ │ │ │ │ ├── layout.ts │ │ │ │ ├── slides.ts │ │ │ │ ├── theme.ts │ │ │ │ ├── tpl/ │ │ │ │ │ ├── dangjian.json │ │ │ │ │ ├── jianyuezi.json │ │ │ │ │ ├── product.json │ │ │ │ │ ├── science.json │ │ │ │ │ ├── summary.json │ │ │ │ │ └── taikongren.json │ │ │ │ └── tpl.ts │ │ │ ├── plugins/ │ │ │ │ ├── directive/ │ │ │ │ │ ├── clickOutside.ts │ │ │ │ │ ├── contextmenu.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tooltip.scss │ │ │ │ │ └── tooltip.ts │ │ │ │ └── icon.ts │ │ │ ├── store/ │ │ │ │ ├── index.ts │ │ │ │ ├── keyboard.ts │ │ │ │ ├── main.ts │ │ │ │ ├── screen.ts │ │ │ │ ├── slides.ts │ │ │ │ └── snapshot.ts │ │ │ ├── types/ │ │ │ │ ├── edit.ts │ │ │ │ ├── export.ts │ │ │ │ ├── injectKey.ts │ │ │ │ ├── mobile.ts │ │ │ │ ├── slides.ts │ │ │ │ └── toolbar.ts │ │ │ ├── utils/ │ │ │ │ ├── clipboard.ts │ │ │ │ ├── common.ts │ │ │ │ ├── crypto.ts │ │ │ │ ├── database.ts │ │ │ │ ├── element.ts │ │ │ │ ├── emitter.ts │ │ │ │ ├── font.ts │ │ │ │ ├── fullscreen.ts │ │ │ │ ├── htmlParser/ │ │ │ │ │ ├── format.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── lexer.ts │ │ │ │ │ ├── parser.ts │ │ │ │ │ ├── stringify.ts │ │ │ │ │ ├── tags.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── image.ts │ │ │ │ ├── message.ts │ │ │ │ ├── print.ts │ │ │ │ ├── prosemirror/ │ │ │ │ │ ├── commands/ │ │ │ │ │ │ ├── setListStyle.ts │ │ │ │ │ │ ├── setTextAlign.ts │ │ │ │ │ │ ├── setTextIndent.ts │ │ │ │ │ │ └── toggleList.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugins/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── inputrules.ts │ │ │ │ │ │ ├── keymap.ts │ │ │ │ │ │ └── placeholder.ts │ │ │ │ │ ├── schema/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── marks.ts │ │ │ │ │ │ └── nodes.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── selection.ts │ │ │ │ ├── svg2Base64.ts │ │ │ │ ├── svgPathParser.ts │ │ │ │ └── textParser.ts │ │ │ └── views/ │ │ │ ├── Editor/ │ │ │ │ ├── Canvas/ │ │ │ │ │ ├── AlignmentLine.vue │ │ │ │ │ ├── EditableElement.vue │ │ │ │ │ ├── ElementCreateSelection.vue │ │ │ │ │ ├── GridLines.vue │ │ │ │ │ ├── LinkDialog.vue │ │ │ │ │ ├── MouseSelection.vue │ │ │ │ │ ├── Operate/ │ │ │ │ │ │ ├── BorderLine.vue │ │ │ │ │ │ ├── CommonElementOperate.vue │ │ │ │ │ │ ├── ImageElementOperate.vue │ │ │ │ │ │ ├── LineElementOperate.vue │ │ │ │ │ │ ├── LinkHandler.vue │ │ │ │ │ │ ├── MultiSelectOperate.vue │ │ │ │ │ │ ├── ResizeHandler.vue │ │ │ │ │ │ ├── RotateHandler.vue │ │ │ │ │ │ ├── ShapeElementOperate.vue │ │ │ │ │ │ ├── TableElementOperate.vue │ │ │ │ │ │ ├── TextElementOperate.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Ruler.vue │ │ │ │ │ ├── ShapeCreateCanvas.vue │ │ │ │ │ ├── ViewportBackground.vue │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── useCommonOperate.ts │ │ │ │ │ │ ├── useDragElement.ts │ │ │ │ │ │ ├── useDragLineElement.ts │ │ │ │ │ │ ├── useDropImageOrText.ts │ │ │ │ │ │ ├── useInsertFromCreateSelection.ts │ │ │ │ │ │ ├── useMouseSelection.ts │ │ │ │ │ │ ├── useMoveShapeKeypoint.ts │ │ │ │ │ │ ├── useRotateElement.ts │ │ │ │ │ │ ├── useScaleElement.ts │ │ │ │ │ │ ├── useSelectElement.ts │ │ │ │ │ │ └── useViewportSize.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── CanvasTool/ │ │ │ │ │ ├── ChartPool.vue │ │ │ │ │ ├── LinePool.vue │ │ │ │ │ ├── MediaInput.vue │ │ │ │ │ ├── ShapeItemThumbnail.vue │ │ │ │ │ ├── ShapePool.vue │ │ │ │ │ ├── TableGenerator.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── EditorHeader/ │ │ │ │ │ ├── HotkeyDoc.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── ExportDialog/ │ │ │ │ │ ├── ExportImage.vue │ │ │ │ │ ├── ExportJSON.vue │ │ │ │ │ ├── ExportPDF.vue │ │ │ │ │ ├── ExportPPTX.vue │ │ │ │ │ ├── ExportSpecificFile.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── NotesPanel.vue │ │ │ │ ├── Remark/ │ │ │ │ │ ├── Editor.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── SearchPanel.vue │ │ │ │ ├── SelectPanel.vue │ │ │ │ ├── Thumbnails/ │ │ │ │ │ ├── LayoutPool.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── Toolbar/ │ │ │ │ │ ├── ElementAnimationPanel.vue │ │ │ │ │ ├── ElementPositionPanel.vue │ │ │ │ │ ├── ElementStylePanel/ │ │ │ │ │ │ ├── AudioStylePanel.vue │ │ │ │ │ │ ├── ChartStylePanel/ │ │ │ │ │ │ │ ├── ChartDataEditor.vue │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── ImageStylePanel.vue │ │ │ │ │ │ ├── LatexStylePanel.vue │ │ │ │ │ │ ├── LineStylePanel.vue │ │ │ │ │ │ ├── MultiStylePanel.vue │ │ │ │ │ │ ├── ShapeStylePanel.vue │ │ │ │ │ │ ├── TableStylePanel.vue │ │ │ │ │ │ ├── TextStylePanel.vue │ │ │ │ │ │ ├── VideoStylePanel.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── MultiPositionPanel.vue │ │ │ │ │ ├── SlideAnimationPanel.vue │ │ │ │ │ ├── SlideDesignPanel.vue │ │ │ │ │ ├── SymbolPanel.vue │ │ │ │ │ ├── ThemeStylesExtract.vue │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── ColorButton.vue │ │ │ │ │ │ ├── ElementColorMask.vue │ │ │ │ │ │ ├── ElementFilter.vue │ │ │ │ │ │ ├── ElementFlip.vue │ │ │ │ │ │ ├── ElementOpacity.vue │ │ │ │ │ │ ├── ElementOutline.vue │ │ │ │ │ │ ├── ElementShadow.vue │ │ │ │ │ │ ├── RichTextBase.vue │ │ │ │ │ │ └── TextColorButton.vue │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── Mobile/ │ │ │ │ ├── MobileEditor/ │ │ │ │ │ ├── ElementToolbar.vue │ │ │ │ │ ├── Header.vue │ │ │ │ │ ├── MobileEditableElement.vue │ │ │ │ │ ├── MobileOperate.vue │ │ │ │ │ ├── SlideToolbar.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── MobilePlayer.vue │ │ │ │ ├── MobilePreview.vue │ │ │ │ ├── MobileThumbnails.vue │ │ │ │ └── index.vue │ │ │ ├── Screen/ │ │ │ │ ├── BaseView.vue │ │ │ │ ├── CountdownTimer.vue │ │ │ │ ├── PresenterView.vue │ │ │ │ ├── ScreenElement.vue │ │ │ │ ├── ScreenSlide.vue │ │ │ │ ├── ScreenSlideList.vue │ │ │ │ ├── SlideThumbnails.vue │ │ │ │ ├── WritingBoardTool.vue │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useExecPlay.ts │ │ │ │ │ ├── useFullscreen.ts │ │ │ │ │ └── useSlideSize.ts │ │ │ │ └── index.vue │ │ │ └── components/ │ │ │ ├── ThumbnailSlide/ │ │ │ │ ├── ThumbnailElement.vue │ │ │ │ └── index.vue │ │ │ └── element/ │ │ │ ├── AudioElement/ │ │ │ │ ├── AudioPlayer.vue │ │ │ │ ├── BaseAudioElement.vue │ │ │ │ ├── ScreenAudioElement.vue │ │ │ │ └── index.vue │ │ │ ├── ChartElement/ │ │ │ │ ├── BaseChartElement.vue │ │ │ │ ├── Chart.vue │ │ │ │ └── index.vue │ │ │ ├── ElementOutline.vue │ │ │ ├── ImageElement/ │ │ │ │ ├── BaseImageElement.vue │ │ │ │ ├── ImageClipHandler.vue │ │ │ │ ├── ImageOutline/ │ │ │ │ │ ├── ImageEllipseOutline.vue │ │ │ │ │ ├── ImagePolygonOutline.vue │ │ │ │ │ ├── ImageRectOutline.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── useClipImage.ts │ │ │ │ └── useFilter.ts │ │ │ ├── LatexElement/ │ │ │ │ ├── BaseLatexElement.vue │ │ │ │ └── index.vue │ │ │ ├── LineElement/ │ │ │ │ ├── BaseLineElement.vue │ │ │ │ ├── LinePointMarker.vue │ │ │ │ └── index.vue │ │ │ ├── ProsemirrorEditor.vue │ │ │ ├── ShapeElement/ │ │ │ │ ├── BaseShapeElement.vue │ │ │ │ ├── GradientDefs.vue │ │ │ │ └── index.vue │ │ │ ├── TableElement/ │ │ │ │ ├── BaseTableElement.vue │ │ │ │ ├── CustomTextarea.vue │ │ │ │ ├── EditableTable.vue │ │ │ │ ├── StaticTable.vue │ │ │ │ ├── index.vue │ │ │ │ ├── useHideCells.ts │ │ │ │ ├── useSubThemeColor.ts │ │ │ │ └── utils.ts │ │ │ ├── TextElement/ │ │ │ │ ├── BaseTextElement.vue │ │ │ │ └── index.vue │ │ │ ├── VideoElement/ │ │ │ │ ├── BaseVideoElement.vue │ │ │ │ ├── ScreenVideoElement.vue │ │ │ │ ├── VideoPlayer/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── useMSE.ts │ │ │ │ └── index.vue │ │ │ └── hooks/ │ │ │ ├── useElementFlip.ts │ │ │ ├── useElementOutline.ts │ │ │ └── useElementShadow.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ └── word/ │ ├── .editorconfig │ ├── .eslintrc │ ├── .gitignore │ ├── .prettierrc │ ├── .vscode/ │ │ └── settings.json │ ├── LICENSE │ ├── README.md │ ├── cypress/ │ │ ├── e2e/ │ │ │ ├── control/ │ │ │ │ ├── checkbox.cy.ts │ │ │ │ ├── select.cy.ts │ │ │ │ └── text.cy.ts │ │ │ ├── editor.cy.ts │ │ │ └── menus/ │ │ │ ├── block.cy.ts │ │ │ ├── checkbox.cy.ts │ │ │ ├── codeblock.cy.ts │ │ │ ├── date.cy.ts │ │ │ ├── format.cy.ts │ │ │ ├── hyperlink.cy.ts │ │ │ ├── image.cy.ts │ │ │ ├── latex.cy.ts │ │ │ ├── pagebreak.cy.ts │ │ │ ├── painter.cy.ts │ │ │ ├── print.cy.ts │ │ │ ├── row.cy.ts │ │ │ ├── search.cy.ts │ │ │ ├── separator.cy.ts │ │ │ ├── table.cy.ts │ │ │ ├── text.cy.ts │ │ │ ├── title.cy.ts │ │ │ ├── undoRedo.cy.ts │ │ │ └── watermark.cy.ts │ │ ├── fixtures/ │ │ │ └── example.json │ │ ├── global.d.ts │ │ ├── support/ │ │ │ ├── commands.ts │ │ │ └── e2e.ts │ │ └── tsconfig.json │ ├── cypress.config.ts │ ├── docs/ │ │ ├── .vitepress/ │ │ │ └── config.ts │ │ ├── en/ │ │ │ ├── guide/ │ │ │ │ ├── api-common.md │ │ │ │ ├── api-instance.md │ │ │ │ ├── command-execute.md │ │ │ │ ├── command-get.md │ │ │ │ ├── contextmenu-custom.md │ │ │ │ ├── contextmenu-internal.md │ │ │ │ ├── eventbus.md │ │ │ │ ├── i18n.md │ │ │ │ ├── listener.md │ │ │ │ ├── option.md │ │ │ │ ├── override.md │ │ │ │ ├── plugin-custom.md │ │ │ │ ├── plugin-internal.md │ │ │ │ ├── schema.md │ │ │ │ ├── shortcut-custom.md │ │ │ │ ├── shortcut-internal.md │ │ │ │ └── start.md │ │ │ └── index.md │ │ ├── guide/ │ │ │ ├── api-common.md │ │ │ ├── api-instance.md │ │ │ ├── command-execute.md │ │ │ ├── command-get.md │ │ │ ├── contextmenu-custom.md │ │ │ ├── contextmenu-internal.md │ │ │ ├── eventbus.md │ │ │ ├── i18n.md │ │ │ ├── listener.md │ │ │ ├── option.md │ │ │ ├── override.md │ │ │ ├── plugin-custom.md │ │ │ ├── plugin-internal.md │ │ │ ├── schema.md │ │ │ ├── shortcut-custom.md │ │ │ ├── shortcut-internal.md │ │ │ └── start.md │ │ └── index.md │ ├── index.html │ ├── package.json │ ├── scripts/ │ │ ├── release.js │ │ └── verifyCommit.js │ ├── src/ │ │ ├── components/ │ │ │ ├── dialog/ │ │ │ │ ├── Dialog.ts │ │ │ │ └── dialog.css │ │ │ └── signature/ │ │ │ ├── Signature.ts │ │ │ └── signature.css │ │ ├── editor/ │ │ │ ├── assets/ │ │ │ │ └── css/ │ │ │ │ ├── block/ │ │ │ │ │ └── block.css │ │ │ │ ├── contextmenu/ │ │ │ │ │ └── contextmenu.css │ │ │ │ ├── control/ │ │ │ │ │ └── select.css │ │ │ │ ├── date/ │ │ │ │ │ └── datePicker.css │ │ │ │ ├── hyperlink/ │ │ │ │ │ └── hyperlink.css │ │ │ │ ├── index.css │ │ │ │ ├── previewer/ │ │ │ │ │ └── previewer.css │ │ │ │ ├── resizer/ │ │ │ │ │ └── resizer.css │ │ │ │ ├── table/ │ │ │ │ │ └── table.css │ │ │ │ └── zone/ │ │ │ │ └── zone.css │ │ │ ├── core/ │ │ │ │ ├── actuator/ │ │ │ │ │ ├── Actuator.ts │ │ │ │ │ └── handlers/ │ │ │ │ │ └── positionContextChange.ts │ │ │ │ ├── command/ │ │ │ │ │ ├── Command.ts │ │ │ │ │ └── CommandAdapt.ts │ │ │ │ ├── contextmenu/ │ │ │ │ │ ├── ContextMenu.ts │ │ │ │ │ └── menus/ │ │ │ │ │ ├── controlMenus.ts │ │ │ │ │ ├── globalMenus.ts │ │ │ │ │ ├── hyperlinkMenus.ts │ │ │ │ │ ├── imageMenus.ts │ │ │ │ │ └── tableMenus.ts │ │ │ │ ├── cursor/ │ │ │ │ │ ├── Cursor.ts │ │ │ │ │ └── CursorAgent.ts │ │ │ │ ├── draw/ │ │ │ │ │ ├── Draw.ts │ │ │ │ │ ├── control/ │ │ │ │ │ │ ├── Control.ts │ │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ │ └── CheckboxControl.ts │ │ │ │ │ │ ├── date/ │ │ │ │ │ │ │ └── DateControl.ts │ │ │ │ │ │ ├── interactive/ │ │ │ │ │ │ │ └── ControlSearch.ts │ │ │ │ │ │ ├── radio/ │ │ │ │ │ │ │ └── RadioControl.ts │ │ │ │ │ │ ├── richtext/ │ │ │ │ │ │ │ └── Border.ts │ │ │ │ │ │ ├── select/ │ │ │ │ │ │ │ └── SelectControl.ts │ │ │ │ │ │ └── text/ │ │ │ │ │ │ └── TextControl.ts │ │ │ │ │ ├── frame/ │ │ │ │ │ │ ├── Background.ts │ │ │ │ │ │ ├── Footer.ts │ │ │ │ │ │ ├── Header.ts │ │ │ │ │ │ ├── LineNumber.ts │ │ │ │ │ │ ├── Margin.ts │ │ │ │ │ │ ├── PageBorder.ts │ │ │ │ │ │ ├── PageNumber.ts │ │ │ │ │ │ ├── Placeholder.ts │ │ │ │ │ │ └── Watermark.ts │ │ │ │ │ ├── interactive/ │ │ │ │ │ │ ├── Group.ts │ │ │ │ │ │ └── Search.ts │ │ │ │ │ ├── particle/ │ │ │ │ │ │ ├── CheckboxParticle.ts │ │ │ │ │ │ ├── HyperlinkParticle.ts │ │ │ │ │ │ ├── ImageParticle.ts │ │ │ │ │ │ ├── LineBreakParticle.ts │ │ │ │ │ │ ├── ListParticle.ts │ │ │ │ │ │ ├── PageBreak.ts │ │ │ │ │ │ ├── RadioParticle.ts │ │ │ │ │ │ ├── Separator.ts │ │ │ │ │ │ ├── Subscript.ts │ │ │ │ │ │ ├── Superscript.ts │ │ │ │ │ │ ├── TextParticle.ts │ │ │ │ │ │ ├── block/ │ │ │ │ │ │ │ ├── BlockParticle.ts │ │ │ │ │ │ │ └── modules/ │ │ │ │ │ │ │ ├── BaseBlock.ts │ │ │ │ │ │ │ ├── IFrameBlock.ts │ │ │ │ │ │ │ └── VideoBlock.ts │ │ │ │ │ │ ├── date/ │ │ │ │ │ │ │ ├── DateParticle.ts │ │ │ │ │ │ │ └── DatePicker.ts │ │ │ │ │ │ ├── latex/ │ │ │ │ │ │ │ ├── LaTexParticle.ts │ │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ │ ├── LaTexUtils.ts │ │ │ │ │ │ │ ├── hershey.ts │ │ │ │ │ │ │ └── symbols.ts │ │ │ │ │ │ ├── previewer/ │ │ │ │ │ │ │ └── Previewer.ts │ │ │ │ │ │ └── table/ │ │ │ │ │ │ ├── TableOperate.ts │ │ │ │ │ │ ├── TableParticle.ts │ │ │ │ │ │ └── TableTool.ts │ │ │ │ │ └── richtext/ │ │ │ │ │ ├── AbstractRichText.ts │ │ │ │ │ ├── Highlight.ts │ │ │ │ │ ├── Strikeout.ts │ │ │ │ │ └── Underline.ts │ │ │ │ ├── event/ │ │ │ │ │ ├── CanvasEvent.ts │ │ │ │ │ ├── GlobalEvent.ts │ │ │ │ │ ├── eventbus/ │ │ │ │ │ │ └── EventBus.ts │ │ │ │ │ └── handlers/ │ │ │ │ │ ├── click.ts │ │ │ │ │ ├── composition.ts │ │ │ │ │ ├── copy.ts │ │ │ │ │ ├── cut.ts │ │ │ │ │ ├── drag.ts │ │ │ │ │ ├── drop.ts │ │ │ │ │ ├── input.ts │ │ │ │ │ ├── keydown/ │ │ │ │ │ │ ├── backspace.ts │ │ │ │ │ │ ├── delete.ts │ │ │ │ │ │ ├── enter.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── left.ts │ │ │ │ │ │ ├── right.ts │ │ │ │ │ │ ├── tab.ts │ │ │ │ │ │ └── updown.ts │ │ │ │ │ ├── mousedown.ts │ │ │ │ │ ├── mouseleave.ts │ │ │ │ │ ├── mousemove.ts │ │ │ │ │ ├── mouseup.ts │ │ │ │ │ └── paste.ts │ │ │ │ ├── history/ │ │ │ │ │ └── HistoryManager.ts │ │ │ │ ├── i18n/ │ │ │ │ │ ├── I18n.ts │ │ │ │ │ └── lang/ │ │ │ │ │ ├── en.json │ │ │ │ │ └── zh-CN.json │ │ │ │ ├── listener/ │ │ │ │ │ └── Listener.ts │ │ │ │ ├── observer/ │ │ │ │ │ ├── ImageObserver.ts │ │ │ │ │ ├── MouseObserver.ts │ │ │ │ │ ├── ScrollObserver.ts │ │ │ │ │ └── SelectionObserver.ts │ │ │ │ ├── override/ │ │ │ │ │ └── Override.ts │ │ │ │ ├── plugin/ │ │ │ │ │ └── Plugin.ts │ │ │ │ ├── position/ │ │ │ │ │ └── Position.ts │ │ │ │ ├── range/ │ │ │ │ │ └── RangeManager.ts │ │ │ │ ├── register/ │ │ │ │ │ └── Register.ts │ │ │ │ ├── shortcut/ │ │ │ │ │ ├── Shortcut.ts │ │ │ │ │ └── keys/ │ │ │ │ │ ├── listKeys.ts │ │ │ │ │ ├── richtextKeys.ts │ │ │ │ │ └── titleKeys.ts │ │ │ │ ├── worker/ │ │ │ │ │ ├── WorkerManager.ts │ │ │ │ │ └── works/ │ │ │ │ │ ├── catalog.ts │ │ │ │ │ ├── group.ts │ │ │ │ │ └── wordCount.ts │ │ │ │ └── zone/ │ │ │ │ ├── Zone.ts │ │ │ │ └── ZoneTip.ts │ │ │ ├── dataset/ │ │ │ │ ├── constant/ │ │ │ │ │ ├── Background.ts │ │ │ │ │ ├── Checkbox.ts │ │ │ │ │ ├── Common.ts │ │ │ │ │ ├── ContextMenu.ts │ │ │ │ │ ├── Control.ts │ │ │ │ │ ├── Cursor.ts │ │ │ │ │ ├── Editor.ts │ │ │ │ │ ├── Element.ts │ │ │ │ │ ├── Footer.ts │ │ │ │ │ ├── Group.ts │ │ │ │ │ ├── Header.ts │ │ │ │ │ ├── LineBreak.ts │ │ │ │ │ ├── LineNumber.ts │ │ │ │ │ ├── List.ts │ │ │ │ │ ├── PageBorder.ts │ │ │ │ │ ├── PageBreak.ts │ │ │ │ │ ├── PageNumber.ts │ │ │ │ │ ├── Placeholder.ts │ │ │ │ │ ├── Radio.ts │ │ │ │ │ ├── Regular.ts │ │ │ │ │ ├── Separator.ts │ │ │ │ │ ├── Table.ts │ │ │ │ │ ├── Title.ts │ │ │ │ │ ├── Watermark.ts │ │ │ │ │ └── Zone.ts │ │ │ │ └── enum/ │ │ │ │ ├── Background.ts │ │ │ │ ├── Block.ts │ │ │ │ ├── Common.ts │ │ │ │ ├── Control.ts │ │ │ │ ├── Editor.ts │ │ │ │ ├── Element.ts │ │ │ │ ├── ElementStyle.ts │ │ │ │ ├── Event.ts │ │ │ │ ├── KeyMap.ts │ │ │ │ ├── LineNumber.ts │ │ │ │ ├── List.ts │ │ │ │ ├── Observer.ts │ │ │ │ ├── Row.ts │ │ │ │ ├── Text.ts │ │ │ │ ├── Title.ts │ │ │ │ ├── VerticalAlign.ts │ │ │ │ └── table/ │ │ │ │ ├── Table.ts │ │ │ │ └── TableTool.ts │ │ │ ├── index.ts │ │ │ ├── interface/ │ │ │ │ ├── Background.ts │ │ │ │ ├── Block.ts │ │ │ │ ├── Catalog.ts │ │ │ │ ├── Checkbox.ts │ │ │ │ ├── Common.ts │ │ │ │ ├── Control.ts │ │ │ │ ├── Cursor.ts │ │ │ │ ├── Draw.ts │ │ │ │ ├── Editor.ts │ │ │ │ ├── Element.ts │ │ │ │ ├── Event.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Footer.ts │ │ │ │ ├── Group.ts │ │ │ │ ├── Header.ts │ │ │ │ ├── LineBreak.ts │ │ │ │ ├── LineNumber.ts │ │ │ │ ├── Listener.ts │ │ │ │ ├── Margin.ts │ │ │ │ ├── PageBorder.ts │ │ │ │ ├── PageBreak.ts │ │ │ │ ├── PageNumber.ts │ │ │ │ ├── Placeholder.ts │ │ │ │ ├── Plugin.ts │ │ │ │ ├── Position.ts │ │ │ │ ├── Previewer.ts │ │ │ │ ├── Radio.ts │ │ │ │ ├── Range.ts │ │ │ │ ├── Row.ts │ │ │ │ ├── Search.ts │ │ │ │ ├── Separator.ts │ │ │ │ ├── Text.ts │ │ │ │ ├── Title.ts │ │ │ │ ├── Watermark.ts │ │ │ │ ├── Zone.ts │ │ │ │ ├── contextmenu/ │ │ │ │ │ └── ContextMenu.ts │ │ │ │ ├── i18n/ │ │ │ │ │ └── I18n.ts │ │ │ │ ├── shortcut/ │ │ │ │ │ └── Shortcut.ts │ │ │ │ └── table/ │ │ │ │ ├── Colgroup.ts │ │ │ │ ├── Table.ts │ │ │ │ ├── Td.ts │ │ │ │ └── Tr.ts │ │ │ ├── types/ │ │ │ │ └── index.d.ts │ │ │ └── utils/ │ │ │ ├── clipboard.ts │ │ │ ├── element.ts │ │ │ ├── hotkey.ts │ │ │ ├── index.ts │ │ │ ├── option.ts │ │ │ ├── print.ts │ │ │ └── ua.ts │ │ ├── main.ts │ │ ├── mock.ts │ │ ├── plugins/ │ │ │ ├── barcode1d/ │ │ │ │ └── index.ts │ │ │ ├── barcode2d/ │ │ │ │ └── index.ts │ │ │ ├── copy/ │ │ │ │ └── index.ts │ │ │ ├── docx/ │ │ │ │ ├── exportDocx.ts │ │ │ │ ├── importDocx.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── excel/ │ │ │ │ ├── importExcel.ts │ │ │ │ └── index.ts │ │ │ ├── floatingToolbar/ │ │ │ │ ├── constant/ │ │ │ │ │ └── index.ts │ │ │ │ ├── enum/ │ │ │ │ │ └── index.ts │ │ │ │ ├── icons/ │ │ │ │ │ └── Svgs.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interface/ │ │ │ │ │ └── index.ts │ │ │ │ └── style/ │ │ │ │ └── index.scss │ │ │ └── markdown/ │ │ │ └── index.ts │ │ ├── style.css │ │ ├── utils/ │ │ │ ├── index.ts │ │ │ └── prism.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts ├── test/ │ ├── go.mod │ ├── go.sum │ └── main.go └── wails.json