oolong-engine 0.0.2-t.6 → 0.0.2-t.7

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.
Files changed (125) hide show
  1. package/dist/ability/checkbox/CheckboxWorker.d.ts +1 -1
  2. package/dist/ability/create/handler/DocCreateHandler.d.ts +7 -0
  3. package/dist/ability/delete/DeleteWorker.d.ts +1 -1
  4. package/dist/ability/doc/DocContainerChildrenSortPosWorker.d.ts +8 -0
  5. package/dist/ability/doc/DocContainerConstants.d.ts +7 -0
  6. package/dist/ability/doc/DocContainerCreator.d.ts +23 -0
  7. package/dist/ability/line/BatchLineTextWorker.d.ts +1 -1
  8. package/dist/ability/line/CollectRelatedLineWorker.d.ts +8 -0
  9. package/dist/ability/line/LayoutWorker.d.ts +2 -1
  10. package/dist/ability/line/LineTextWorker.d.ts +1 -1
  11. package/dist/ability/line/handler/AbsLineLayoutHandler.d.ts +2 -1
  12. package/dist/ability/line/handler/CurveLayoutHandler.d.ts +1 -1
  13. package/dist/ability/line/handler/SimpleLineLayoutHandler.d.ts +1 -1
  14. package/dist/ability/line/handler/polyline/PolyLineLayoutHandler.d.ts +1 -1
  15. package/dist/ability/textInput/textFont/AbsTextFontWorker.d.ts +2 -0
  16. package/dist/ability/textInput/textFont/TextFontSizeWorker.d.ts +6 -0
  17. package/dist/ability/textInput/textParagraphPrefix/TextNormalWorker.d.ts +3 -1
  18. package/dist/ability/textInput/textParagraphPrefix/TextOrderWorker.d.ts +3 -1
  19. package/dist/ability/textInput/textParagraphPrefix/TextParaPrefixWorker.d.ts +2 -1
  20. package/dist/ability/textInput/textParagraphPrefix/TextQuoteWorker.d.ts +3 -1
  21. package/dist/ability/textInput/textParagraphPrefix/TextUnOrderWorker.d.ts +3 -1
  22. package/dist/action/executor/afterInterceptor/slide/AfterSlideCoverUpdateInterceptor.d.ts +15 -0
  23. package/dist/action/executor/beforeInterceptor/slide/SlideCoverUpdateInterceptor.d.ts +3 -4
  24. package/dist/action/render/IFocusInfo.d.ts +5 -0
  25. package/dist/action/render/RenderManager.d.ts +5 -7
  26. package/dist/action/render/drawMode/AbsDrawMode.d.ts +6 -0
  27. package/dist/action/render/drawMode/DocEditDrawMode.d.ts +7 -0
  28. package/dist/action/render/drawMode/NormalDrawMode.d.ts +7 -0
  29. package/dist/action/render/drawMode/SlideEditDrawMode.d.ts +7 -0
  30. package/dist/action/render/drawMode/SlidePlayingDrawMode.d.ts +7 -0
  31. package/dist/app/AppEventContext.d.ts +4 -1
  32. package/dist/app/OolongApp.d.ts +2 -0
  33. package/dist/app/api/OolongAPI.d.ts +3 -0
  34. package/dist/app/api/module/CreateAPI.d.ts +4 -0
  35. package/dist/app/api/module/doc/DocAPI.d.ts +8 -0
  36. package/dist/app/api/module/text/TextAPI.d.ts +11 -0
  37. package/dist/app/docModeManager/DocModeSwitchContext.d.ts +2 -0
  38. package/dist/app/docModeManager/switchHandler/AbsSwitchHandler.d.ts +2 -2
  39. package/dist/app/docModeManager/switchHandler/board/BoardToDocEditHandler.d.ts +6 -0
  40. package/dist/app/docModeManager/switchHandler/board/BoardToSlideEditHandler.d.ts +2 -2
  41. package/dist/app/docModeManager/switchHandler/board/BoardToSlidePlayHandler.d.ts +2 -2
  42. package/dist/app/docModeManager/switchHandler/docEdit/DocEditToBoardHandler.d.ts +6 -0
  43. package/dist/app/docModeManager/switchHandler/slide-edit/SlideEditToBoardHandler.d.ts +2 -2
  44. package/dist/app/docModeManager/switchHandler/slide-play/SlidePlayToBoardHandler.d.ts +2 -2
  45. package/dist/app/docState/DocMode.d.ts +2 -1
  46. package/dist/app/docState/DocModeStatus.d.ts +8 -0
  47. package/dist/app/docState/DocState.d.ts +5 -0
  48. package/dist/app/docState/SlideStatus.d.ts +1 -1
  49. package/dist/auxiliary/graphics/AuxiliaryType.d.ts +9 -1
  50. package/dist/auxiliary/graphics/hover/DocContainerTextHoverBound.d.ts +15 -0
  51. package/dist/auxiliary/graphics/select/DocContainerTextSelectBound.d.ts +15 -0
  52. package/dist/common/detect/DetectorEnum.d.ts +2 -1
  53. package/dist/doc/DocManager.d.ts +5 -0
  54. package/dist/engine.js +8956 -7340
  55. package/dist/engine.umd.cjs +18 -18
  56. package/dist/graphics/OolongDocContainer.d.ts +16 -0
  57. package/dist/graphics/OolongNode.d.ts +2 -0
  58. package/dist/graphics/line/LineIntersectionUtils.d.ts +1 -1
  59. package/dist/graphics/line/arrow/AbsArrowDrawer.d.ts +1 -1
  60. package/dist/graphics/line/arrow/CircleArrowDrawer.d.ts +1 -1
  61. package/dist/graphics/line/arrow/DiamondArrowDrawer.d.ts +1 -1
  62. package/dist/graphics/line/arrow/EmptyCircleArrowDrawer.d.ts +1 -1
  63. package/dist/graphics/line/arrow/EmptyDiamondArrowDrawer.d.ts +1 -1
  64. package/dist/graphics/line/arrow/EmptyTriangleArrowDrawer.d.ts +1 -1
  65. package/dist/graphics/line/arrow/SimpleArrowDrawer.d.ts +1 -1
  66. package/dist/graphics/line/arrow/TriangleArrowDrawer.d.ts +1 -1
  67. package/dist/graphics/props/DocProps.d.ts +11 -0
  68. package/dist/graphics/props/PropType.d.ts +2 -1
  69. package/dist/graphics/utils/GraphicUtils.d.ts +21 -6
  70. package/dist/idl/NodeType.d.ts +1 -0
  71. package/dist/idl/capInfo/ICapInfo.d.ts +2 -0
  72. package/dist/idl/capInfo/IDocProps.d.ts +3 -0
  73. package/dist/index.css +1 -1
  74. package/dist/plugin-copy-paste/copy-paste/paste/img/ImgPasteHandler.d.ts +27 -0
  75. package/dist/plugin-hotkey/hotkey/normal/DeleteKey.d.ts +1 -1
  76. package/dist/plugin-hotkey/hotkey/normal/move/ArrowDownKey.d.ts +2 -0
  77. package/dist/plugin-hotkey/hotkey/normal/move/ArrowLeftKey.d.ts +2 -0
  78. package/dist/plugin-hotkey/hotkey/normal/move/ArrowRightKey.d.ts +2 -0
  79. package/dist/plugin-hotkey/hotkey/normal/move/ArrowUpKey.d.ts +2 -0
  80. package/dist/plugin-hotkey/hotkey/normal/move/DocContainerArrowWorker.d.ts +19 -0
  81. package/dist/plugin-hotkey/hotkey/text/AbsArrowKey.d.ts +33 -0
  82. package/dist/plugin-hotkey/hotkey/text/ArrowDownKey.d.ts +1 -0
  83. package/dist/plugin-hotkey/hotkey/text/ArrowLeftKey.d.ts +1 -0
  84. package/dist/plugin-hotkey/hotkey/text/ArrowRightKey.d.ts +1 -0
  85. package/dist/plugin-hotkey/hotkey/text/ArrowUpKey.d.ts +1 -0
  86. package/dist/plugin-hotkey/hotkey/text/deleteKey/DeleteHandler.d.ts +17 -0
  87. package/dist/plugin-hotkey/hotkey/text/deleteKey/DocContainerDeleteHandler.d.ts +26 -0
  88. package/dist/plugin-hotkey/hotkey/text/deleteKey/NormalDeleteHandler.d.ts +13 -0
  89. package/dist/plugin-hotkey/hotkey/text/deleteKey/TextDeleteKey.d.ts +13 -0
  90. package/dist/plugin-hotkey/hotkey/text/deleteKey/index.d.ts +4 -0
  91. package/dist/plugin-hotkey/hotkey/text/enterKey/DocContainerEnterHandler.d.ts +16 -0
  92. package/dist/plugin-hotkey/hotkey/text/enterKey/DocContainerEnterStep.d.ts +48 -0
  93. package/dist/plugin-hotkey/hotkey/text/enterKey/DocContainerTextSplitter.d.ts +18 -0
  94. package/dist/plugin-hotkey/hotkey/text/enterKey/EnterHandler.d.ts +15 -0
  95. package/dist/plugin-hotkey/hotkey/text/enterKey/EnterHotKey.d.ts +13 -0
  96. package/dist/plugin-hotkey/hotkey/text/enterKey/ListLevelDecreaseHelper.d.ts +29 -0
  97. package/dist/plugin-hotkey/hotkey/text/enterKey/NormalEnterHandler.d.ts +16 -0
  98. package/dist/plugin-hotkey/hotkey/text/enterKey/index.d.ts +7 -0
  99. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/AdjustSiblingsStep.d.ts +9 -0
  100. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/CreateNewNodeStep.d.ts +13 -0
  101. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/ExpandContainerStep.d.ts +8 -0
  102. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/FocusNewNodeStep.d.ts +7 -0
  103. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/UpdateChildrenStep.d.ts +7 -0
  104. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/UpdateCurrentNodeStep.d.ts +8 -0
  105. package/dist/plugin-hotkey/hotkey/text/enterKey/steps/index.d.ts +6 -0
  106. package/dist/plugin-hotkey/index.d.ts +2 -2
  107. package/dist/plugin-pointer/interact/default/click/handler/ClickDocContainerTextHandler.d.ts +17 -0
  108. package/dist/plugin-pointer/interact/default/click/handler/ClickTextHandler.d.ts +3 -2
  109. package/dist/plugin-pointer/interact/default/click/handler/widget/CheckboxHandler.d.ts +1 -1
  110. package/dist/plugin-pointer/interact/default/create/normal/grab/handler/CreateUpDocHandler.d.ts +15 -0
  111. package/dist/plugin-pointer/interact/default/dbClick/handler/DBClickTextHandler.d.ts +3 -2
  112. package/dist/plugin-pointer/interact/default/dbClick/handler/DbCheckboxHandler.d.ts +1 -1
  113. package/dist/plugin-pointer/interact/default/dragSlide/DragSlideProcessor.d.ts +4 -0
  114. package/dist/plugin-pointer/interact/default/normal/hover/handler/HoverDocContainerTextHandler.d.ts +11 -0
  115. package/dist/plugin-pointer/interact/detector/DetectorResult.d.ts +2 -0
  116. package/dist/plugin-pointer/interact/detector/doc/DocParaDetector.d.ts +14 -0
  117. package/dist/preview/previewCreate/handler/PreviewDocHandler.d.ts +7 -0
  118. package/dist/select/status/single/SingleDocContainerTextStatusHandler.d.ts +11 -0
  119. package/dist/slide/SlideManager.d.ts +1 -1
  120. package/dist/slot/SlotKeyType.d.ts +2 -1
  121. package/dist/tool/ToolEnum.d.ts +2 -1
  122. package/dist/tool/ToolManager.d.ts +1 -1
  123. package/package.json +1 -2
  124. package/dist/plugin-hotkey/hotkey/text/EnterHotKey.d.ts +0 -14
  125. package/dist/plugin-hotkey/hotkey/text/TextDeleteKey.d.ts +0 -11
@@ -0,0 +1,16 @@
1
+ import { GraphicNode } from "@/graphics/node/GraphicNode";
2
+ import { IRect } from "@/common";
3
+ import { NodeType } from "@/idl";
4
+ import { DocProps } from "@/graphics/props/DocProps";
5
+ import { AbsProps } from "@/graphics/props/AbsProps";
6
+ export declare class OolongDocContainer extends GraphicNode {
7
+ type: NodeType;
8
+ inDocEditMode: boolean;
9
+ get docProps(): DocProps;
10
+ constructor(id: string, ctx: CanvasRenderingContext2D);
11
+ updateProps(props: Partial<AbsProps>[]): void;
12
+ drawOnGLCtx(ctx: CanvasRenderingContext2D): void;
13
+ canQuickCreate(): boolean;
14
+ getTextContentRect(): IRect;
15
+ static load(id: string, type: NodeType, zIndex: number, props: Partial<AbsProps>[], parent: GraphicNode, ctx: CanvasRenderingContext2D): OolongDocContainer;
16
+ }
@@ -43,6 +43,8 @@ export declare class OolongNode extends GraphicNode {
43
43
  getTextContentRect(): IRect;
44
44
  isEmptyText(): boolean;
45
45
  getConnectAnchor(): IPoint[];
46
+ canQuickCreate(): boolean;
47
+ canBeConnected(): boolean;
46
48
  /**
47
49
  * 根据数据创建节点
48
50
  * @param id
@@ -1,4 +1,4 @@
1
- import { OolongLine } from "./OolongLine";
1
+ import type { OolongLine } from "./OolongLine";
2
2
  import { IPoint } from "../../idl";
3
3
  import { IRectNode } from "../../common";
4
4
  export declare class LineIntersectionUtils {
@@ -1,4 +1,4 @@
1
- import { OolongLine } from "../OolongLine";
1
+ import type { OolongLine } from "../OolongLine";
2
2
  export declare abstract class AbsArrowDrawer {
3
3
  abstract drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
4
4
  }
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  export declare class CircleArrowDrawer extends AbsArrowDrawer {
4
4
  drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  export declare class DiamondArrowDrawer extends AbsArrowDrawer {
4
4
  drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  export declare class EmptyCircleArrowDrawer extends AbsArrowDrawer {
4
4
  drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  export declare class EmptyDiamondArrowDrawer extends AbsArrowDrawer {
4
4
  drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  export declare class EmptyTriangleArrowDrawer extends AbsArrowDrawer {
4
4
  drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  /**
4
4
  * 简单箭头
5
5
  */
@@ -1,5 +1,5 @@
1
1
  import { AbsArrowDrawer } from "./AbsArrowDrawer";
2
- import { OolongLine } from "../OolongLine";
2
+ import type { OolongLine } from "../OolongLine";
3
3
  export declare class TriangleArrowDrawer extends AbsArrowDrawer {
4
4
  drawOnGLCtx(ctx: CanvasRenderingContext2D, line: OolongLine): void;
5
5
  }
@@ -0,0 +1,11 @@
1
+ import { AbsProps } from "@/graphics";
2
+ import { IDocProps } from "@/idl/capInfo/IDocProps";
3
+ import { PropType } from "./PropType";
4
+ export declare class DocProps extends AbsProps implements IDocProps {
5
+ type: PropType;
6
+ children: string[];
7
+ static create(updateProps: Partial<DocProps>): DocProps;
8
+ static from(iProps: IDocProps): DocProps;
9
+ clone(): DocProps;
10
+ update(props: Partial<DocProps>): void;
11
+ }
@@ -15,5 +15,6 @@ export declare enum PropType {
15
15
  CheckSize = 13,
16
16
  TextParagraph = 14,
17
17
  TextParagraphQuote = 15,
18
- Slide = 16
18
+ Slide = 16,
19
+ Doc = 17
19
20
  }
@@ -6,11 +6,11 @@ import { AbsProps } from "../props/AbsProps";
6
6
  import { BaseProps } from "../props/BaseProps";
7
7
  import { InteractiveEvent, IRect, IRectNode, Point, Rect, RectNode, StretchType } from "../../common";
8
8
  import { NodeConnectEndType } from "../base/NodeConnectEndType";
9
- import { OolongLine } from "../line/OolongLine";
9
+ import type { OolongLine } from "../line/OolongLine";
10
10
  import { AppEventContext } from "../../app";
11
11
  import { ShapeCategoryType } from "../../config/ShapeCategoryType";
12
12
  import { RotateType } from "../../idl/common/RotateType";
13
- import { RenderManager, UpdateNodeInfo } from "../../action";
13
+ import { UpdateNodeInfo } from "../../action";
14
14
  import { TextBlock } from "../../renderText/TextBlock";
15
15
  import { RenderText, TextLine } from "../../renderText";
16
16
  import { TextParagraphProps } from "../props/TextParagraphProps";
@@ -198,8 +198,26 @@ export declare class GraphicUtils {
198
198
  static dealWithShiftLineInteractEvent(originEvent: InteractiveEvent, line: OolongLine, isDragEnd?: boolean): InteractiveEvent;
199
199
  static getMockEventModifierInit(event: KeyboardEvent): EventModifierInit;
200
200
  static judgeParentInset(node: GraphicNode, parentSet: Set<GraphicNode>): boolean;
201
+ static computeRelatedSlideSectionChildrenNode(node: GraphicNode, ctx: {
202
+ nodeManager: NodeManager;
203
+ }): Set<GraphicNode>;
201
204
  static judgeSlideSectionChildren(originNode: GraphicNode, slideContainer: OolongSlideContainer): GraphicNode | null;
205
+ static judgeSlideSectionRelatedNode(originNode: GraphicNode, slideContainer: OolongSlideContainer, ctx: {
206
+ nodeManager: NodeManager;
207
+ }): GraphicNode | null;
202
208
  static filterContainerFromNodes(nodes: GraphicNode[]): Set<GraphicNode>;
209
+ /**
210
+ * 判断节点是否在 DocContainer 内(是 DocContainer 的子节点)
211
+ * @param node 要检查的节点
212
+ * @returns 如果节点是 DocContainer 的子节点则返回 true
213
+ */
214
+ static isNodeInDocContainer(node: GraphicNode): boolean;
215
+ /**
216
+ * 检查节点列表中是否有任何节点在 DocContainer 内
217
+ * @param nodes 节点列表
218
+ * @returns 如果任何节点在 DocContainer 内则返回 true
219
+ */
220
+ static hasNodeInDocContainer(nodes: GraphicNode[]): boolean;
203
221
  /**
204
222
  * 判断线条的起始端点是否在容器外
205
223
  * @param line
@@ -244,8 +262,5 @@ export declare class GraphicUtils {
244
262
  static judgeNodeCanBeStretch(node: GraphicNode): boolean;
245
263
  static getSlideContainerChildNode(slideContainer: OolongSlideContainer, index: number, ctx: AppEventContext): OolongSection | null;
246
264
  static filterSlideContainerNodes(ctx: AppEventContext, nodeList: GraphicNode[]): GraphicNode[];
247
- static getSlideInfo(node: GraphicNode, { renderManager, nodeManager }: {
248
- renderManager: RenderManager;
249
- nodeManager: NodeManager;
250
- }): Promise<SlideCoverInfo>;
265
+ static getSlideInfo(node: GraphicNode, ctx: AppEventContext): Promise<SlideCoverInfo>;
251
266
  }
@@ -8,5 +8,6 @@ export declare enum NodeType {
8
8
  Checkbox = 6,
9
9
  CheckboxText = 7,
10
10
  SlideContainer = 8,
11
+ DocContainer = 9,
11
12
  ROOT = 99
12
13
  }
@@ -15,6 +15,7 @@ import { ICheckSizeProps } from "./ICheckSizeProps";
15
15
  import { ITextParagraphProps } from "./ITextParagraphProps";
16
16
  import { ITextParagraphQuoteProps } from "./ITextParagraphQuoteProps";
17
17
  import { ISlideProps } from "./ISlideProps";
18
+ import { IDocProps } from "@/idl/capInfo/IDocProps";
18
19
  export interface ICapInfo {
19
20
  baseProps?: IBaseProps;
20
21
  colorProps?: IColorProps;
@@ -33,4 +34,5 @@ export interface ICapInfo {
33
34
  textParagraphProps?: ITextParagraphProps;
34
35
  textParagraphQuoteProps?: ITextParagraphQuoteProps;
35
36
  slideProps?: ISlideProps;
37
+ docProps?: IDocProps;
36
38
  }
@@ -0,0 +1,3 @@
1
+ export interface IDocProps {
2
+ children: string[];
3
+ }
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .canvas-container .auxiliary-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:2;pointer-events:none}.canvas-container .content-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.canvas-container .page-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.normal-container,.normal-container .normal-canvas{width:100%;height:100%}.canvas-input{position:absolute;border:none;outline:none;-webkit-user-select:none;user-select:none;width:1px;z-index:3;opacity:0;pointer-events:none}@keyframes van-cursor-flicker{0%{opacity:1}50%{opacity:0}to{opacity:1}}.render-input{position:absolute;background-color:#000;width:1px;height:12px;z-index:4;pointer-events:none;animation:.6s van-cursor-flicker infinite}
1
+ .canvas-container .auxiliary-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:2;pointer-events:none}.canvas-container .content-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.canvas-container .page-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.normal-container,.normal-container .normal-canvas{width:100%;height:100%}.canvas-input{position:absolute;top:0;left:0;border:none;outline:none;-webkit-user-select:none;user-select:none;width:1px;z-index:3;opacity:0;pointer-events:none}@keyframes van-cursor-flicker{0%{opacity:1}50%{opacity:0}to{opacity:1}}.render-input{position:absolute;top:0;left:0;background-color:#000;width:1px;height:12px;z-index:4;pointer-events:none;animation:.6s van-cursor-flicker infinite}
@@ -5,4 +5,31 @@ export declare class ImgPasteHandler implements IPasteHandler {
5
5
  worker: ImageWorker;
6
6
  paste(e: ClipboardEvent, ctx: AppEventContext): boolean;
7
7
  pasteImg(blob: Blob, ctx: AppEventContext): Promise<void>;
8
+ /**
9
+ * 判断是否应该在 DocContainer 内粘贴图片
10
+ * 条件:1. 当前处于 DOC_EDIT 模式
11
+ * 2. 当前处于文字编辑状态
12
+ * 3. 文字节点在 DocContainer 内部
13
+ */
14
+ private shouldPasteInDocContainer;
15
+ /**
16
+ * 在 DocContainer 内粘贴图片
17
+ */
18
+ private pasteImgInDocContainer;
19
+ /**
20
+ * 情况1:替换空文字节点为图片节点
21
+ */
22
+ private replaceEmptyNodeWithImage;
23
+ /**
24
+ * 情况2:在当前文字节点后插入图片节点
25
+ */
26
+ private insertImageAfterNode;
27
+ /**
28
+ * 调整后续兄弟节点的位置
29
+ */
30
+ private adjustSiblingPositions;
31
+ /**
32
+ * 如果需要,扩展容器高度
33
+ */
34
+ private expandContainerIfNeeded;
8
35
  }
@@ -4,6 +4,6 @@ import { DeleteWorker } from "../../../ability/delete/DeleteWorker";
4
4
  export declare class DeleteKey extends HotKey {
5
5
  type: string;
6
6
  worker: DeleteWorker;
7
- work(_event: KeyboardEvent, context: AppEventContext): void;
7
+ work(event: KeyboardEvent, context: AppEventContext): void;
8
8
  enable(_event: KeyboardEvent): boolean;
9
9
  }
@@ -1,6 +1,7 @@
1
1
  import { HotKey } from "../../HotKey";
2
2
  import { AppEventContext } from "../../../../app";
3
3
  import { ArrowMoveWorker } from "./ArrowMoveWorker";
4
+ import { DocContainerArrowWorker } from "./DocContainerArrowWorker";
4
5
  /**
5
6
  * 下方向键
6
7
  * - 普通模式:向下移动1px
@@ -9,6 +10,7 @@ import { ArrowMoveWorker } from "./ArrowMoveWorker";
9
10
  export declare class ArrowDownKey extends HotKey {
10
11
  type: string;
11
12
  worker: ArrowMoveWorker;
13
+ docContainerWorker: DocContainerArrowWorker;
12
14
  enable(event: KeyboardEvent, isMac: boolean): boolean;
13
15
  work(event: KeyboardEvent, context: AppEventContext): void;
14
16
  }
@@ -1,6 +1,7 @@
1
1
  import { HotKey } from "../../HotKey";
2
2
  import { AppEventContext } from "../../../../app";
3
3
  import { ArrowMoveWorker } from "./ArrowMoveWorker";
4
+ import { DocContainerArrowWorker } from "./DocContainerArrowWorker";
4
5
  /**
5
6
  * 左方向键
6
7
  * - 普通模式:向左移动1px
@@ -9,6 +10,7 @@ import { ArrowMoveWorker } from "./ArrowMoveWorker";
9
10
  export declare class ArrowLeftKey extends HotKey {
10
11
  type: string;
11
12
  worker: ArrowMoveWorker;
13
+ docContainerWorker: DocContainerArrowWorker;
12
14
  enable(event: KeyboardEvent, isMac: boolean): boolean;
13
15
  work(event: KeyboardEvent, context: AppEventContext): void;
14
16
  }
@@ -1,6 +1,7 @@
1
1
  import { HotKey } from "../../HotKey";
2
2
  import { AppEventContext } from "../../../../app";
3
3
  import { ArrowMoveWorker } from "./ArrowMoveWorker";
4
+ import { DocContainerArrowWorker } from "./DocContainerArrowWorker";
4
5
  /**
5
6
  * 右方向键
6
7
  * - 普通模式:向右移动1px
@@ -9,6 +10,7 @@ import { ArrowMoveWorker } from "./ArrowMoveWorker";
9
10
  export declare class ArrowRightKey extends HotKey {
10
11
  type: string;
11
12
  worker: ArrowMoveWorker;
13
+ docContainerWorker: DocContainerArrowWorker;
12
14
  enable(event: KeyboardEvent, isMac: boolean): boolean;
13
15
  work(event: KeyboardEvent, context: AppEventContext): void;
14
16
  }
@@ -1,6 +1,7 @@
1
1
  import { HotKey } from "../../HotKey";
2
2
  import { AppEventContext } from "../../../../app";
3
3
  import { ArrowMoveWorker } from "./ArrowMoveWorker";
4
+ import { DocContainerArrowWorker } from "./DocContainerArrowWorker";
4
5
  /**
5
6
  * 上方向键
6
7
  * - 普通模式:向上移动1px
@@ -9,6 +10,7 @@ import { ArrowMoveWorker } from "./ArrowMoveWorker";
9
10
  export declare class ArrowUpKey extends HotKey {
10
11
  type: string;
11
12
  worker: ArrowMoveWorker;
13
+ docContainerWorker: DocContainerArrowWorker;
12
14
  enable(event: KeyboardEvent, isMac: boolean): boolean;
13
15
  work(event: KeyboardEvent, context: AppEventContext): void;
14
16
  }
@@ -0,0 +1,19 @@
1
+ import { AppEventContext } from "../../../../app";
2
+ /**
3
+ * 处理 DocContainer 内非文字节点的方向键跳转逻辑
4
+ */
5
+ export declare class DocContainerArrowWorker {
6
+ /**
7
+ * 检查是否需要处理 DocContainer 内的节点跳转
8
+ * @returns 是否处理了跳转
9
+ */
10
+ handleArrowKey(context: AppEventContext, direction: "up" | "down" | "left" | "right"): boolean;
11
+ /**
12
+ * 跳到下一个节点
13
+ */
14
+ private handleNextNode;
15
+ /**
16
+ * 跳到上一个节点
17
+ */
18
+ private handlePrevNode;
19
+ }
@@ -4,6 +4,39 @@ import { AppEventContext } from "../../../app/index";
4
4
  export declare abstract class AbsArrowKey extends HotKey {
5
5
  cursorMoveWorker: TextCursorMoveWorker;
6
6
  abstract moveCursor(renderText: RenderText, textCursorPosition: TextCursorPosition, context: AppEventContext): TextCursorPosition;
7
+ /**
8
+ * 获取移动类型
9
+ * - 'left': 左移,在开头时跳到上一个节点末尾
10
+ * - 'right': 右移,在末尾时跳到下一个节点开头
11
+ * - 'up': 上移,在首行时跳到上一个节点对应 x 位置
12
+ * - 'down': 下移,在末行时跳到下一个节点对应 x 位置
13
+ */
14
+ abstract getMoveType(): "left" | "right" | "up" | "down";
7
15
  enable(_event: KeyboardEvent): boolean;
8
16
  work(event: KeyboardEvent, context: AppEventContext): void;
17
+ /**
18
+ * 检查是否是 DocContainer 内的纯文本节点
19
+ */
20
+ private isDocContainerText;
21
+ /**
22
+ * 处理 DocContainer 内跨节点的光标移动
23
+ * @returns 是否处理了跨节点移动
24
+ */
25
+ private handleDocContainerCrossNode;
26
+ /**
27
+ * Right: 在文本末尾时跳到下一个节点开头
28
+ */
29
+ private handleRightCrossNode;
30
+ /**
31
+ * Left: 在文本开头时跳到上一个节点末尾
32
+ */
33
+ private handleLeftCrossNode;
34
+ /**
35
+ * Down: 在最后一行时跳到下一个节点,保持 x 位置
36
+ */
37
+ private handleDownCrossNode;
38
+ /**
39
+ * Up: 在第一行时跳到上一个节点,保持 x 位置
40
+ */
41
+ private handleUpCrossNode;
9
42
  }
@@ -2,5 +2,6 @@ import { AbsArrowKey } from "./AbsArrowKey";
2
2
  import { RenderText, TextCursorPosition } from "../../../renderText/index";
3
3
  export declare class ArrowDownKey extends AbsArrowKey {
4
4
  type: string;
5
+ getMoveType(): "left" | "right" | "up" | "down";
5
6
  moveCursor(renderText: RenderText, textCursorPosition: TextCursorPosition): TextCursorPosition;
6
7
  }
@@ -2,5 +2,6 @@ import { AbsArrowKey } from "./AbsArrowKey";
2
2
  import { RenderText, TextCursorPosition } from "../../../renderText/index";
3
3
  export declare class ArrowLeftKey extends AbsArrowKey {
4
4
  type: string;
5
+ getMoveType(): "left" | "right" | "up" | "down";
5
6
  moveCursor(renderText: RenderText, textCursorPosition: TextCursorPosition): TextCursorPosition;
6
7
  }
@@ -3,5 +3,6 @@ import { RenderText, TextCursorPosition } from "../../../renderText";
3
3
  import { AppEventContext } from "../../../app";
4
4
  export declare class ArrowRightKey extends AbsArrowKey {
5
5
  type: string;
6
+ getMoveType(): "left" | "right" | "up" | "down";
6
7
  moveCursor(renderText: RenderText, textCursorPosition: TextCursorPosition, context: AppEventContext): TextCursorPosition;
7
8
  }
@@ -2,5 +2,6 @@ import { AbsArrowKey } from "./AbsArrowKey";
2
2
  import { RenderText, TextCursorPosition } from "../../../renderText/index";
3
3
  export declare class ArrowUpKey extends AbsArrowKey {
4
4
  type: string;
5
+ getMoveType(): "left" | "right" | "up" | "down";
5
6
  moveCursor(renderText: RenderText, textCursorPosition: TextCursorPosition): TextCursorPosition;
6
7
  }
@@ -0,0 +1,17 @@
1
+ import { AppEventContext } from "../../../../app";
2
+ import { EditTextInfo } from "../../../../input/EditTextInfo";
3
+ /**
4
+ * Delete 键处理器基类
5
+ */
6
+ export declare abstract class DeleteHandler {
7
+ /**
8
+ * 判断是否启用该处理器
9
+ * @param editInfo 编辑文本信息
10
+ * @param context 应用事件上下文
11
+ */
12
+ abstract enable(editInfo: EditTextInfo, context: AppEventContext): boolean;
13
+ /**
14
+ * 处理 Delete 键事件
15
+ */
16
+ abstract handle(context: AppEventContext): void;
17
+ }
@@ -0,0 +1,26 @@
1
+ import { DeleteHandler } from "./DeleteHandler";
2
+ import { AppEventContext } from "../../../../app";
3
+ import { EditTextInfo } from "../../../../input/EditTextInfo";
4
+ /**
5
+ * DocContainer 内纯文本节点的 Delete 键处理器
6
+ * 当光标在首段首行首位时,删除当前节点并将内容合并到上一个节点
7
+ */
8
+ export declare class DocContainerDeleteHandler extends DeleteHandler {
9
+ private docPosWorker;
10
+ enable(editInfo: EditTextInfo, context: AppEventContext): boolean;
11
+ handle(context: AppEventContext): void;
12
+ /**
13
+ * 合并两段富文本
14
+ * 将 nextRichText 的内容追加到 prevRichText 的最后一个段落
15
+ */
16
+ private mergeRichText;
17
+ /**
18
+ * 检查是否需要缩小容器高度
19
+ * 如果最后一个节点的底部位置距离容器底部超过一个默认高度,则缩小容器
20
+ */
21
+ private shrinkContainerIfNeeded;
22
+ /**
23
+ * 检查文本是否为空
24
+ */
25
+ private isTextEmpty;
26
+ }
@@ -0,0 +1,13 @@
1
+ import { DeleteHandler } from "./DeleteHandler";
2
+ import { AppEventContext } from "../../../../app";
3
+ import { EditTextInfo } from "../../../../input/EditTextInfo";
4
+ /**
5
+ * 普通文本节点的 Delete 键处理器
6
+ * 处理段落层级删除和普通字符删除
7
+ */
8
+ export declare class NormalDeleteHandler extends DeleteHandler {
9
+ private editTextWorker;
10
+ private selectionDeleteWorker;
11
+ enable(_editInfo: EditTextInfo, _context: AppEventContext): boolean;
12
+ handle(context: AppEventContext): void;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { HotKey } from "../../HotKey";
2
+ import { AppEventContext } from "../../../../app";
3
+ /**
4
+ * Delete 键热键处理器
5
+ * 使用 handler 链模式处理不同场景的 Delete 键事件
6
+ */
7
+ export declare class TextDeleteKey extends HotKey {
8
+ type: string;
9
+ /** 处理器列表,按优先级排序 */
10
+ private handlers;
11
+ enable(_event: KeyboardEvent): boolean;
12
+ work(_event: KeyboardEvent, context: AppEventContext): void;
13
+ }
@@ -0,0 +1,4 @@
1
+ export { TextDeleteKey } from "./TextDeleteKey";
2
+ export { DeleteHandler } from "./DeleteHandler";
3
+ export { DocContainerDeleteHandler } from "./DocContainerDeleteHandler";
4
+ export { NormalDeleteHandler } from "./NormalDeleteHandler";
@@ -0,0 +1,16 @@
1
+ import { EnterHandler } from "./EnterHandler";
2
+ import { AppEventContext } from "../../../../app";
3
+ import { EditTextInfo } from "../../../../input/EditTextInfo";
4
+ /**
5
+ * DocContainer 内纯文本节点的 Enter 键处理器
6
+ * 结束当前编辑,在下方插入新的纯文本节点
7
+ * 如果光标在文本中间,则分割文本
8
+ */
9
+ export declare class DocContainerEnterHandler extends EnterHandler {
10
+ private textSplitter;
11
+ private listLevelHelper;
12
+ /** 处理步骤列表 */
13
+ private steps;
14
+ enable(editInfo: EditTextInfo): boolean;
15
+ handle(context: AppEventContext): void;
16
+ }
@@ -0,0 +1,48 @@
1
+ import { AppEventContext } from "../../../../app";
2
+ import { OolongDocContainer } from "../../../../graphics/OolongDocContainer";
3
+ import { GraphicNode } from "../../../../graphics";
4
+ import { RenderText, TextCursorPosition } from "../../../../renderText";
5
+ /**
6
+ * DocContainer Enter 操作的上下文信息
7
+ */
8
+ export interface DocContainerEnterContext {
9
+ /** 应用事件上下文 */
10
+ appContext: AppEventContext;
11
+ /** 当前编辑的节点 */
12
+ node: GraphicNode;
13
+ /** 父容器 */
14
+ docContainer: OolongDocContainer;
15
+ /** 渲染文本 */
16
+ renderText: RenderText;
17
+ /** 光标位置 */
18
+ textCursorPosition: TextCursorPosition;
19
+ /** 当前节点在 children 中的索引 */
20
+ currentIndex: number;
21
+ /** 是否是最后一个子节点 */
22
+ isLastChild: boolean;
23
+ /** 当前 children 列表(可修改) */
24
+ currentChildren: string[];
25
+ /** 光标前的富文本 */
26
+ prevRichText: string;
27
+ /** 光标后的富文本 */
28
+ nextRichText: string;
29
+ /** 光标后是否有文本 */
30
+ hasTextAfterCursor: boolean;
31
+ /** 新创建的节点 ID */
32
+ newChildId?: string;
33
+ /** 新节点的 Y 坐标 */
34
+ newY?: number;
35
+ /** 新节点的实际高度 */
36
+ actualNewHeight?: number;
37
+ }
38
+ /**
39
+ * DocContainer Enter 子处理器基类
40
+ * 用于将 DocContainer Enter 逻辑拆分成多个独立的步骤
41
+ */
42
+ export declare abstract class DocContainerEnterStep {
43
+ /**
44
+ * 执行该步骤的处理逻辑
45
+ * @param ctx DocContainer Enter 上下文
46
+ */
47
+ abstract execute(ctx: DocContainerEnterContext): void;
48
+ }
@@ -0,0 +1,18 @@
1
+ import { RenderText, TextCursorPosition } from "../../../../renderText";
2
+ /**
3
+ * DocContainer 文本分割工具
4
+ * 用于在光标位置分割富文本
5
+ */
6
+ export declare class DocContainerTextSplitter {
7
+ /**
8
+ * 在光标位置分割富文本,返回光标前后的两段 richText
9
+ */
10
+ splitRichTextAtCursor(renderText: RenderText, textCursor: TextCursorPosition): {
11
+ prevRichText: string;
12
+ nextRichText: string;
13
+ };
14
+ /**
15
+ * 检查光标后是否有文本内容
16
+ */
17
+ hasTextAfterCursor(nextRichText: string): boolean;
18
+ }
@@ -0,0 +1,15 @@
1
+ import { AppEventContext } from "../../../../app";
2
+ import { EditTextInfo } from "../../../../input/EditTextInfo";
3
+ /**
4
+ * Enter 键处理器基类
5
+ */
6
+ export declare abstract class EnterHandler {
7
+ /**
8
+ * 判断是否启用该处理器
9
+ */
10
+ abstract enable(editInfo: EditTextInfo): boolean;
11
+ /**
12
+ * 处理 Enter 键事件
13
+ */
14
+ abstract handle(context: AppEventContext): void;
15
+ }
@@ -0,0 +1,13 @@
1
+ import { HotKey } from "../../HotKey";
2
+ import { AppEventContext } from "../../../../app";
3
+ /**
4
+ * Enter 键热键处理器
5
+ * 使用 handler 链模式处理不同场景的 Enter 键事件
6
+ */
7
+ export declare class EnterHotKey extends HotKey {
8
+ type: string;
9
+ /** 处理器列表,按优先级排序 */
10
+ private handlers;
11
+ enable(_event: KeyboardEvent): boolean;
12
+ work(_event: KeyboardEvent, context: AppEventContext): void;
13
+ }
@@ -0,0 +1,29 @@
1
+ import { AppEventContext } from "../../../../app";
2
+ import { GraphicNode } from "../../../../graphics";
3
+ import { RenderText, TextCursorPosition } from "../../../../renderText";
4
+ /**
5
+ * 列表层级减少辅助类
6
+ * 处理空文本节点按 Enter 时减少列表缩进层级的逻辑
7
+ */
8
+ export declare class ListLevelDecreaseHelper {
9
+ /**
10
+ * 处理 DocContainer 文本节点的列表层级减少
11
+ * 当文本为空且有列表样式时,减少 level;level 为 0 时移除列表样式
12
+ * @returns 是否处理了列表层级减少(true 表示已处理,不需要继续执行换行逻辑)
13
+ */
14
+ handleDocContainerListDecrease(node: GraphicNode, renderText: RenderText, context: AppEventContext): boolean;
15
+ /**
16
+ * 处理普通文本节点的列表层级减少
17
+ * 当当前段落为空且有列表样式时,减少 level;level 为 0 时移除该段落的列表样式
18
+ * @returns 是否处理了列表层级减少(true 表示已处理,不需要继续执行换行逻辑)
19
+ */
20
+ handleNormalListDecrease(node: GraphicNode, renderText: RenderText, textCursorPosition: TextCursorPosition, context: AppEventContext): boolean;
21
+ /**
22
+ * 检查整个文本是否为空(用于 DocContainer 单文本节点)
23
+ */
24
+ private isTextEmpty;
25
+ /**
26
+ * 检查段落是否为空
27
+ */
28
+ private isParagraphEmpty;
29
+ }