@hufe921/canvas-editor 1.0.5 → 1.1.0

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 (102) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +9 -8
  3. package/dist/assets/catalog-ezAM0r6o.js.map +1 -0
  4. package/dist/assets/group-BZtj1M7o.js.map +1 -1
  5. package/dist/assets/value-DKLIEqC1.js.map +1 -0
  6. package/dist/assets/wordCount-xSvDqE7d.js.map +1 -0
  7. package/dist/canvas-editor.js +4786 -2873
  8. package/dist/canvas-editor.js.map +1 -1
  9. package/dist/canvas-editor.umd.cjs +42 -42
  10. package/dist/canvas-editor.umd.cjs.map +1 -1
  11. package/dist/src/editor/core/command/Command.d.ts +9 -0
  12. package/dist/src/editor/core/command/CommandAdapt.d.ts +11 -2
  13. package/dist/src/editor/core/contextmenu/ContextMenu.d.ts +7 -0
  14. package/dist/src/editor/core/draw/Draw.d.ts +21 -10
  15. package/dist/src/editor/core/draw/column/ColumnManager.d.ts +2 -1
  16. package/dist/src/editor/core/draw/control/Control.d.ts +3 -2
  17. package/dist/src/editor/core/draw/control/interactive/ControlSearch.d.ts +2 -1
  18. package/dist/src/editor/core/draw/control/richtext/Border.d.ts +2 -1
  19. package/dist/src/editor/core/draw/frame/Background.d.ts +2 -1
  20. package/dist/src/editor/core/draw/frame/Badge.d.ts +3 -1
  21. package/dist/src/editor/core/draw/frame/Footer.d.ts +2 -1
  22. package/dist/src/editor/core/draw/frame/Header.d.ts +2 -1
  23. package/dist/src/editor/core/draw/frame/LineNumber.d.ts +2 -1
  24. package/dist/src/editor/core/draw/frame/Margin.d.ts +2 -1
  25. package/dist/src/editor/core/draw/frame/PageBorder.d.ts +2 -1
  26. package/dist/src/editor/core/draw/frame/PageNumber.d.ts +2 -1
  27. package/dist/src/editor/core/draw/frame/Placeholder.d.ts +2 -1
  28. package/dist/src/editor/core/draw/frame/Watermark.d.ts +4 -3
  29. package/dist/src/editor/core/draw/graffiti/Graffiti.d.ts +2 -1
  30. package/dist/src/editor/core/draw/interactive/Area.d.ts +14 -1
  31. package/dist/src/editor/core/draw/interactive/AreaTool.d.ts +18 -0
  32. package/dist/src/editor/core/draw/interactive/Group.d.ts +2 -1
  33. package/dist/src/editor/core/draw/interactive/Search.d.ts +2 -1
  34. package/dist/src/editor/core/draw/interactive/Spellcheck.d.ts +2 -1
  35. package/dist/src/editor/core/draw/particle/CheckboxParticle.d.ts +2 -1
  36. package/dist/src/editor/core/draw/particle/HyperlinkParticle.d.ts +2 -1
  37. package/dist/src/editor/core/draw/particle/ImageParticle.d.ts +3 -1
  38. package/dist/src/editor/core/draw/particle/LabelParticle.d.ts +2 -1
  39. package/dist/src/editor/core/draw/particle/LineBreakParticle.d.ts +2 -1
  40. package/dist/src/editor/core/draw/particle/ListParticle.d.ts +2 -1
  41. package/dist/src/editor/core/draw/particle/PageBreakParticle.d.ts +2 -1
  42. package/dist/src/editor/core/draw/particle/RadioParticle.d.ts +2 -1
  43. package/dist/src/editor/core/draw/particle/SeparatorParticle.d.ts +2 -1
  44. package/dist/src/editor/core/draw/particle/SubscriptParticle.d.ts +2 -1
  45. package/dist/src/editor/core/draw/particle/SuperscriptParticle.d.ts +2 -1
  46. package/dist/src/editor/core/draw/particle/TextParticle.d.ts +8 -2
  47. package/dist/src/editor/core/draw/particle/TraceParticle.d.ts +3 -2
  48. package/dist/src/editor/core/draw/particle/WhiteSpaceParticle.d.ts +2 -1
  49. package/dist/src/editor/core/draw/particle/block/BlockParticle.d.ts +3 -1
  50. package/dist/src/editor/core/draw/particle/block/modules/BaseBlock.d.ts +2 -1
  51. package/dist/src/editor/core/draw/particle/block/modules/VideoBlock.d.ts +2 -1
  52. package/dist/src/editor/core/draw/particle/date/DatePicker.d.ts +1 -0
  53. package/dist/src/editor/core/draw/particle/latex/LaTexParticle.d.ts +6 -1
  54. package/dist/src/editor/core/draw/particle/table/TableOperate.d.ts +2 -0
  55. package/dist/src/editor/core/draw/particle/table/TableParticle.d.ts +3 -2
  56. package/dist/src/editor/core/draw/richtext/AbstractRichText.d.ts +3 -2
  57. package/dist/src/editor/core/draw/richtext/Highlight.d.ts +2 -1
  58. package/dist/src/editor/core/draw/richtext/Strikeout.d.ts +2 -1
  59. package/dist/src/editor/core/draw/richtext/Underline.d.ts +2 -1
  60. package/dist/src/editor/core/draw/ruler/Ruler.d.ts +31 -2
  61. package/dist/src/editor/core/event/GlobalEvent.d.ts +1 -0
  62. package/dist/src/editor/core/event/pagePointer.d.ts +8 -0
  63. package/dist/src/editor/core/layout/LayoutEngine.d.ts +31 -0
  64. package/dist/src/editor/core/layout/TextMeasurer.d.ts +10 -0
  65. package/dist/src/editor/core/range/RangeManager.d.ts +2 -1
  66. package/dist/src/editor/core/render/BackendFactory.d.ts +3 -0
  67. package/dist/src/editor/core/render/RenderBackend.d.ts +24 -0
  68. package/dist/src/editor/core/render/canvas/CanvasBackend.d.ts +19 -0
  69. package/dist/src/editor/core/render/canvas/CanvasRenderer.d.ts +5 -0
  70. package/dist/src/editor/core/render/canvas/CanvasSurface.d.ts +17 -0
  71. package/dist/src/editor/core/render/model/DisplayList.d.ts +62 -0
  72. package/dist/src/editor/core/render/model/RenderContext.d.ts +48 -0
  73. package/dist/src/editor/core/render/svg/SvgBackend.d.ts +22 -0
  74. package/dist/src/editor/core/render/svg/SvgRenderer.d.ts +9 -0
  75. package/dist/src/editor/core/render/svg/SvgSurface.d.ts +13 -0
  76. package/dist/src/editor/core/render/svg/scene/PathCompiler.d.ts +16 -0
  77. package/dist/src/editor/core/render/svg/scene/ResourceKey.d.ts +7 -0
  78. package/dist/src/editor/core/render/svg/scene/SceneCompiler.d.ts +9 -0
  79. package/dist/src/editor/core/render/svg/scene/SceneKey.d.ts +28 -0
  80. package/dist/src/editor/core/render/svg/scene/SceneNode.d.ts +20 -0
  81. package/dist/src/editor/core/render/svg/scene/SceneReconciler.d.ts +12 -0
  82. package/dist/src/editor/core/render/svg/scene/SvgNodeFactory.d.ts +14 -0
  83. package/dist/src/editor/dataset/constant/Common.d.ts +1 -0
  84. package/dist/src/editor/dataset/enum/Common.d.ts +4 -0
  85. package/dist/src/editor/dataset/enum/Editor.d.ts +4 -0
  86. package/dist/src/editor/dataset/enum/TabStop.d.ts +11 -0
  87. package/dist/src/editor/index.d.ts +6 -5
  88. package/dist/src/editor/interface/Area.d.ts +8 -0
  89. package/dist/src/editor/interface/Checkbox.d.ts +3 -0
  90. package/dist/src/editor/interface/Control.d.ts +2 -1
  91. package/dist/src/editor/interface/Draw.d.ts +4 -0
  92. package/dist/src/editor/interface/Editor.d.ts +6 -0
  93. package/dist/src/editor/interface/Element.d.ts +12 -0
  94. package/dist/src/editor/interface/Listener.d.ts +7 -1
  95. package/dist/src/editor/interface/Row.d.ts +12 -0
  96. package/dist/src/editor/interface/table/Td.d.ts +2 -0
  97. package/dist/src/editor/utils/element.d.ts +1 -0
  98. package/dist/src/editor/utils/print.d.ts +1 -0
  99. package/package.json +14 -13
  100. package/dist/assets/catalog-B-cbxN0s.js.map +0 -1
  101. package/dist/assets/value-CLcLo2uw.js.map +0 -1
  102. package/dist/assets/wordCount-BWZRHbSB.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { IRowElement } from '../../../interface/Row';
2
+ import { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class LineBreakParticle {
4
5
  private options;
@@ -6,5 +7,5 @@ export declare class LineBreakParticle {
6
7
  static readonly HEIGHT = 9;
7
8
  static readonly GAP = 3;
8
9
  constructor(draw: Draw);
9
- render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
10
+ render(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
10
11
  }
@@ -1,6 +1,7 @@
1
1
  import { ListStyle, ListType } from '../../../dataset/enum/List';
2
2
  import { IElement, IElementPosition } from '../../../interface/Element';
3
3
  import { IRow } from '../../../interface/Row';
4
+ import type { IRenderContext } from '../../render/model/RenderContext';
4
5
  import { Draw } from '../Draw';
5
6
  export declare class ListParticle {
6
7
  private draw;
@@ -26,5 +27,5 @@ export declare class ListParticle {
26
27
  private findStyledElement;
27
28
  private getListFontStyle;
28
29
  getListStyleWidth(ctx: CanvasRenderingContext2D, listElementList: IElement[]): number;
29
- drawListStyle(ctx: CanvasRenderingContext2D, row: IRow, position: IElementPosition): void;
30
+ drawListStyle(ctx: IRenderContext, row: IRow, position: IElementPosition): void;
30
31
  }
@@ -1,9 +1,10 @@
1
1
  import { IRowElement } from '../../../interface/Row';
2
+ import type { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class PageBreakParticle {
4
5
  private draw;
5
6
  private options;
6
7
  private i18n;
7
8
  constructor(draw: Draw);
8
- render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
9
+ render(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
9
10
  }
@@ -1,8 +1,9 @@
1
1
  import { IElement } from '../../../interface/Element';
2
2
  import { IRow } from '../../../interface/Row';
3
+ import { IRenderContext } from '../../render/model/RenderContext';
3
4
  import { Draw } from '../Draw';
4
5
  interface IRadioRenderOption {
5
- ctx: CanvasRenderingContext2D;
6
+ ctx: IRenderContext;
6
7
  x: number;
7
8
  y: number;
8
9
  row: IRow;
@@ -1,7 +1,8 @@
1
1
  import { IRowElement } from '../../../interface/Row';
2
+ import { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class SeparatorParticle {
4
5
  private options;
5
6
  constructor(draw: Draw);
6
- render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
7
+ render(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
7
8
  }
@@ -1,5 +1,6 @@
1
1
  import { IRowElement } from '../../../interface/Row';
2
+ import { IRenderContext } from '../../render/model/RenderContext';
2
3
  export declare class SubscriptParticle {
3
4
  getOffsetY(element: IRowElement): number;
4
- render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
5
+ render(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
5
6
  }
@@ -1,5 +1,6 @@
1
1
  import { IRowElement } from '../../../interface/Row';
2
+ import { IRenderContext } from '../../render/model/RenderContext';
2
3
  export declare class SuperscriptParticle {
3
4
  getOffsetY(element: IRowElement): number;
4
- render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
5
+ render(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
5
6
  }
@@ -1,6 +1,7 @@
1
1
  import { IElement } from '../../..';
2
2
  import { IRowElement } from '../../../interface/Row';
3
3
  import { ITextMetrics } from '../../../interface/Text';
4
+ import type { IRenderContext } from '../../render/model/RenderContext';
4
5
  import { Draw } from '../Draw';
5
6
  export interface IMeasureWordResult {
6
7
  width: number;
@@ -15,7 +16,10 @@ export declare class TextParticle {
15
16
  private text;
16
17
  private curStyle;
17
18
  private curColor?;
18
- cacheMeasureText: Map<string, TextMetrics>;
19
+ private curSourceElement?;
20
+ private sourceKeys;
21
+ private sourceKeyId;
22
+ private textMeasurer;
19
23
  constructor(draw: Draw);
20
24
  measureBasisWord(ctx: CanvasRenderingContext2D, font: string): ITextMetrics;
21
25
  measureWord(ctx: CanvasRenderingContext2D, elementList: IElement[], curIndex: number): IMeasureWordResult;
@@ -23,7 +27,9 @@ export declare class TextParticle {
23
27
  measureText(ctx: CanvasRenderingContext2D, element: IElement): ITextMetrics;
24
28
  getBasisWordBoundingBoxAscent(ctx: CanvasRenderingContext2D, font: string): number;
25
29
  complete(): void;
26
- record(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
30
+ renderTabLeader(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
31
+ record(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
27
32
  private _setCurXY;
33
+ private _getSourceKey;
28
34
  private _render;
29
35
  }
@@ -1,9 +1,10 @@
1
1
  import { IElement, IElementMetrics, IElementPosition } from '../../../interface/Element';
2
2
  import { IRow, IRowElement } from '../../../interface/Row';
3
3
  import { IMarkElementListDeletedOption } from '../../../interface/Trace';
4
+ import type { IRenderContext } from '../../render/model/RenderContext';
4
5
  import { Draw } from '../Draw';
5
6
  interface ITraceRenderContext {
6
- ctx: CanvasRenderingContext2D;
7
+ ctx: IRenderContext;
7
8
  element: IRowElement;
8
9
  x: number;
9
10
  y: number;
@@ -29,7 +30,7 @@ export declare class TraceParticle {
29
30
  handleMouseMove(evt: MouseEvent): void;
30
31
  private _getTraceFlags;
31
32
  render(context: ITraceRenderContext): void;
32
- flush(ctx: CanvasRenderingContext2D): void;
33
+ flush(ctx: IRenderContext): void;
33
34
  private _flushStrikeout;
34
35
  private _flushUnderline;
35
36
  isTraceHidden(element: IElement): boolean;
@@ -1,7 +1,8 @@
1
1
  import { IRowElement } from '../../../interface/Row';
2
+ import { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class WhiteSpaceParticle {
4
5
  private options;
5
6
  constructor(draw: Draw);
6
- render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number): void;
7
+ render(ctx: IRenderContext, element: IRowElement, x: number, y: number): void;
7
8
  }
@@ -1,5 +1,6 @@
1
1
  import { IIframeInfo } from '../../../../interface/Block';
2
2
  import { IRowElement } from '../../../../interface/Row';
3
+ import type { IRenderContext } from '../../../render/model/RenderContext';
3
4
  import { Draw } from '../../Draw';
4
5
  export declare class BlockParticle {
5
6
  private draw;
@@ -11,9 +12,10 @@ export declare class BlockParticle {
11
12
  private _createBlockContainer;
12
13
  getDraw(): Draw;
13
14
  getBlockContainer(): HTMLDivElement;
14
- render(ctx: CanvasRenderingContext2D, pageNo: number, element: IRowElement, x: number, y: number): void;
15
+ render(ctx: IRenderContext, pageNo: number, element: IRowElement, x: number, y: number): void;
15
16
  clear(): void;
16
17
  update(): void;
17
18
  drawIframeToPage(pageList: HTMLCanvasElement[], snapDomFunction: (iframe: HTMLIFrameElement) => Promise<string>): Promise<void>;
19
+ drawIframeToSvgPage(pageList: SVGSVGElement[], snapDomFunction: (iframe: HTMLIFrameElement) => Promise<string>): Promise<void>;
18
20
  pickIframeInfo(): IIframeInfo[][];
19
21
  }
@@ -1,4 +1,5 @@
1
1
  import { IRowElement } from '../../../../../interface/Row';
2
+ import type { IRenderContext } from '../../../../render/model/RenderContext';
2
3
  import { BlockParticle } from '../BlockParticle';
3
4
  import { IFrameBlock } from './IFrameBlock';
4
5
  import { VideoBlock } from './VideoBlock';
@@ -33,7 +34,7 @@ export declare class BaseBlock {
33
34
  private _updateResizerRect;
34
35
  private _mousedown;
35
36
  private _mousemove;
36
- snapshot(ctx: CanvasRenderingContext2D, pageNo: number, x: number, y: number): void;
37
+ snapshot(ctx: IRenderContext, pageNo: number, x: number, y: number): void;
37
38
  render(): void;
38
39
  setClientRects(pageNo: number, x: number, y: number): void;
39
40
  setStatus(): void;
@@ -1,8 +1,9 @@
1
1
  import { IRowElement } from '../../../../../interface/Row';
2
+ import type { IRenderContext } from '../../../../render/model/RenderContext';
2
3
  export declare class VideoBlock {
3
4
  private element;
4
5
  protected videoCache: Map<string, HTMLVideoElement>;
5
6
  constructor(element: IRowElement);
6
- snapshot(ctx: CanvasRenderingContext2D, x: number, y: number): Promise<unknown>;
7
+ snapshot(ctx: IRenderContext, x: number, y: number): Promise<unknown>;
7
8
  render(blockItemContainer: HTMLDivElement): void;
8
9
  }
@@ -59,6 +59,7 @@ export declare class DatePicker {
59
59
  private _bindEvent;
60
60
  private _setPosition;
61
61
  isInvalidDate(value: Date): boolean;
62
+ parseDate(value: string, format: string): Date | null;
62
63
  private _setValue;
63
64
  private _getDatePickerType;
64
65
  private _getLang;
@@ -1,7 +1,12 @@
1
1
  import { IElement } from '../../../../interface/Element';
2
+ import { IRenderContext } from '../../../render/model/RenderContext';
3
+ import { Draw } from '../../Draw';
2
4
  import { ImageParticle } from '../ImageParticle';
3
5
  import { LaTexSVG } from './utils/LaTexUtils';
4
6
  export declare class LaTexParticle extends ImageParticle {
7
+ private latexDraw;
8
+ private pendingLaTexMap;
9
+ constructor(draw: Draw);
5
10
  static convertLaTextToSVG(laTex: string): LaTexSVG;
6
- render(ctx: CanvasRenderingContext2D, element: IElement, x: number, y: number): void;
11
+ render(ctx: IRenderContext, element: IElement, x: number, y: number): void;
7
12
  }
@@ -26,6 +26,8 @@ export declare class TableOperate {
26
26
  tableBorderType(payload: TableBorder): void;
27
27
  tableBorderColor(payload: string): void;
28
28
  tableTdBorderType(payload: TdBorder): void;
29
+ tableTdBorderColor(payload: string): void;
30
+ tableTdBorderWidth(payload: number): void;
29
31
  tableTdSlashType(payload: TdSlash): void;
30
32
  tableTdBackgroundColor(payload: string): void;
31
33
  private _measureTdContentWidth;
@@ -3,6 +3,7 @@ import { ITableRowFragment } from '../../../../interface/Element';
3
3
  import { IRow } from '../../../../interface/Row';
4
4
  import { ITd } from '../../../../interface/table/Td';
5
5
  import { ITr } from '../../../../interface/table/Tr';
6
+ import { IRenderContext } from '../../../render/model/RenderContext';
6
7
  import { Draw } from '../../Draw';
7
8
  export declare class TableParticle {
8
9
  private draw;
@@ -36,6 +37,6 @@ export declare class TableParticle {
36
37
  getTdListByColIndex(trList: ITr[], colIndex: number): ITd[];
37
38
  getTdListByRowIndex(trList: ITr[], rowIndex: number): ITd[];
38
39
  computeRowColInfo(element: IElement): void;
39
- drawRange(ctx: CanvasRenderingContext2D, element: IElement, startX: number, startY: number, fragment?: ITableRowFragment): void;
40
- render(ctx: CanvasRenderingContext2D, element: IElement, startX: number, startY: number, fragment?: ITableRowFragment): void;
40
+ drawRange(ctx: IRenderContext, element: IElement, startX: number, startY: number, fragment?: ITableRowFragment): void;
41
+ render(ctx: IRenderContext, element: IElement, startX: number, startY: number, fragment?: ITableRowFragment): void;
41
42
  }
@@ -1,11 +1,12 @@
1
1
  import { TextDecorationStyle } from '../../../dataset/enum/Text';
2
2
  import { IElementFillRect } from '../../../interface/Element';
3
+ import type { IRenderContext } from '../../render/model/RenderContext';
3
4
  export declare abstract class AbstractRichText {
4
5
  protected fillRect: IElementFillRect;
5
6
  protected fillColor?: string;
6
7
  protected fillDecorationStyle?: TextDecorationStyle;
7
8
  constructor();
8
9
  clearFillInfo(): IElementFillRect;
9
- recordFillInfo(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height?: number, color?: string, decorationStyle?: TextDecorationStyle): void;
10
- abstract render(ctx: CanvasRenderingContext2D): void;
10
+ recordFillInfo(ctx: IRenderContext, x: number, y: number, width: number, height?: number, color?: string, decorationStyle?: TextDecorationStyle): void;
11
+ abstract render(ctx: IRenderContext): void;
11
12
  }
@@ -1,7 +1,8 @@
1
1
  import { AbstractRichText } from './AbstractRichText';
2
+ import type { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class Highlight extends AbstractRichText {
4
5
  private options;
5
6
  constructor(draw: Draw);
6
- render(ctx: CanvasRenderingContext2D): void;
7
+ render(ctx: IRenderContext): void;
7
8
  }
@@ -1,7 +1,8 @@
1
1
  import { AbstractRichText } from './AbstractRichText';
2
+ import type { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class Strikeout extends AbstractRichText {
4
5
  private options;
5
6
  constructor(draw: Draw);
6
- render(ctx: CanvasRenderingContext2D): void;
7
+ render(ctx: IRenderContext): void;
7
8
  }
@@ -1,4 +1,5 @@
1
1
  import { AbstractRichText } from './AbstractRichText';
2
+ import type { IRenderContext } from '../../render/model/RenderContext';
2
3
  import { Draw } from '../Draw';
3
4
  export declare class Underline extends AbstractRichText {
4
5
  private options;
@@ -6,5 +7,5 @@ export declare class Underline extends AbstractRichText {
6
7
  private _drawLine;
7
8
  private _drawDouble;
8
9
  private _drawWave;
9
- render(ctx: CanvasRenderingContext2D): void;
10
+ render(ctx: IRenderContext): void;
10
11
  }
@@ -3,6 +3,7 @@ export declare class Ruler {
3
3
  private readonly MM_PX;
4
4
  private readonly HANDLE_HIT_TOLERANCE;
5
5
  private readonly MIN_INNER_SIZE;
6
+ private readonly MIN_INNER_SIZE_INDENT;
6
7
  private draw;
7
8
  private options;
8
9
  private container;
@@ -14,6 +15,17 @@ export declare class Ruler {
14
15
  private dragSide;
15
16
  private dragStartPosition;
16
17
  private dragOriginMargins;
18
+ private dragIndentTarget;
19
+ private dragOriginIndents;
20
+ private isIndentApplied;
21
+ private dragTabStopIndex;
22
+ private dragOriginTabStops;
23
+ private dragOriginTabStopX;
24
+ private isTabStopApplied;
25
+ private isTabStopDragOutside;
26
+ private guideline;
27
+ private indentMarkerPositionCache;
28
+ private tabStopPositionCache;
17
29
  private mousemoveHandler;
18
30
  private mouseupHandler;
19
31
  constructor(draw: Draw);
@@ -24,18 +36,35 @@ export declare class Ruler {
24
36
  render(): void;
25
37
  private _renderX;
26
38
  private _renderY;
27
- private _drawXHandle;
28
- private _drawYHandle;
39
+ private _getParagraphElementList;
40
+ private _getParagraphIndents;
41
+ private _getFirstParagraphElementList;
42
+ private _getIndentAnchor;
43
+ private _getParagraphTabStops;
44
+ private _getIndentMarkerPositions;
45
+ private _drawIndentMarker;
46
+ private _drawTabStopMark;
47
+ private _getHitIndentTarget;
48
+ private _getHitTabStopIndex;
49
+ private _addTabStop;
50
+ private _showGuideline;
51
+ private _removeGuideline;
29
52
  private _getHitMarginSideX;
30
53
  private _getHitMarginSideY;
31
54
  private _getRelativeX;
32
55
  private _getRelativeY;
56
+ private _getRelativeYOnCanvasX;
33
57
  private _isMarginDragDisabled;
34
58
  private _startDrag;
59
+ private _startIndentDrag;
60
+ private _startTabStopDrag;
35
61
  private _mousedownX;
36
62
  private _mousedownY;
37
63
  private _updateCursorX;
38
64
  private _updateCursorY;
65
+ private _resetCursor;
66
+ private _dragIndent;
67
+ private _dragTabStop;
39
68
  private _dragMargin;
40
69
  private _stopDrag;
41
70
  clampMargin(value: number, max: number): number;
@@ -8,6 +8,7 @@ export declare class GlobalEvent {
8
8
  private range;
9
9
  private previewer;
10
10
  private tableTool;
11
+ private areaTool;
11
12
  private hyperlinkParticle;
12
13
  private hintParticle;
13
14
  private control;
@@ -0,0 +1,8 @@
1
+ import type { RenderPage } from '../render/RenderBackend';
2
+ export interface IPagePointer {
3
+ x: number;
4
+ y: number;
5
+ pageNo: number;
6
+ page: RenderPage;
7
+ }
8
+ export declare function getPagePointer(evt: MouseEvent, pageContainer: HTMLElement): IPagePointer | null;
@@ -0,0 +1,31 @@
1
+ import { PageMode, PaperDirection } from '../../dataset/enum/Editor';
2
+ import { IComputeRowListPayload } from '../../interface/Draw';
3
+ import { IElement } from '../../interface/Element';
4
+ import { IRow } from '../../interface/Row';
5
+ import type { Draw } from '../draw/Draw';
6
+ export interface IComputePageListPayload {
7
+ rowList: IRow[];
8
+ elementList: IElement[];
9
+ pageMode: PageMode;
10
+ paperDirection: PaperDirection;
11
+ maxPageNo?: number | null;
12
+ }
13
+ export interface IComputePageListResult {
14
+ pageRowList: IRow[][];
15
+ pageDirectionList: PaperDirection[];
16
+ elementList: IElement[];
17
+ isElementListTruncated: boolean;
18
+ }
19
+ export declare class LayoutEngine {
20
+ private draw;
21
+ private controlMinWidthPlaceholderElementListSet;
22
+ constructor(draw: Draw);
23
+ consumeControlMinWidthPlaceholders(elementList: IElement[]): void;
24
+ markControlMinWidthPlaceholders(elementList: IElement[]): void;
25
+ getIsControlMinWidthPlaceholder(elementList: IElement[]): boolean;
26
+ computeRowList(payload: IComputeRowListPayload): IRow[];
27
+ computePageList(payload: IComputePageListPayload): IComputePageListResult;
28
+ private _getHitTabStop;
29
+ private _isHangPunctuation;
30
+ private _getTabRunWidth;
31
+ }
@@ -0,0 +1,10 @@
1
+ import { IElement } from '../../interface/Element';
2
+ import { ITextMetrics } from '../../interface/Text';
3
+ export declare class TextMeasurer {
4
+ private ctx;
5
+ private cache;
6
+ constructor(ctx?: CanvasRenderingContext2D);
7
+ measure(element: IElement, font: string, ctx?: CanvasRenderingContext2D): ITextMetrics;
8
+ measureText(value: string, font: string, ctx?: CanvasRenderingContext2D): ITextMetrics;
9
+ measureBasis(font: string, ctx?: CanvasRenderingContext2D): ITextMetrics;
10
+ }
@@ -2,6 +2,7 @@ import { IControlContext } from '../../interface/Control';
2
2
  import { IElement } from '../../interface/Element';
3
3
  import { IRange, IRangeElementStyle, IRangeParagraphInfo, RangeRowArray, RangeRowMap } from '../../interface/Range';
4
4
  import { Draw } from '../draw/Draw';
5
+ import type { IRenderContext } from '../render/model/RenderContext';
5
6
  export declare class RangeManager {
6
7
  private draw;
7
8
  private options;
@@ -40,6 +41,6 @@ export declare class RangeManager {
40
41
  setRangeStyle(): void;
41
42
  recoveryRangeStyle(): void;
42
43
  shrinkBoundary(context?: IControlContext): void;
43
- render(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number): void;
44
+ render(ctx: IRenderContext, x: number, y: number, width: number, height: number): void;
44
45
  toString(): string;
45
46
  }
@@ -0,0 +1,3 @@
1
+ import { BackendType } from '../../dataset/enum/Editor';
2
+ import type { IRenderBackend } from './RenderBackend';
3
+ export declare function createBackend(type: BackendType | undefined, pageContainer: HTMLElement): IRenderBackend;
@@ -0,0 +1,24 @@
1
+ import type { DisplayList } from './model/DisplayList';
2
+ export type RenderPage = HTMLElement | SVGSVGElement;
3
+ export interface IPageResizeOption {
4
+ gap?: number;
5
+ updateCssHeight?: boolean;
6
+ }
7
+ export interface ICanvasCapability {
8
+ getPage(pageNo: number): HTMLCanvasElement;
9
+ getPageList(): HTMLCanvasElement[];
10
+ getContext(pageNo: number): CanvasRenderingContext2D;
11
+ }
12
+ export interface IRenderBackend {
13
+ readonly canvas: ICanvasCapability | null;
14
+ create(pageNo: number, width: number, height: number, gap: number, dpr: number): void;
15
+ resize(pageNo: number, width: number, height: number, dpr: number, options?: IPageResizeOption): void;
16
+ resizeHeight(pageNo: number, height: number, dpr: number): void;
17
+ renderPage(pageNo: number, displayList: DisplayList): void;
18
+ flush?(): void;
19
+ observeVisibility(callback: (pageNo: number) => void): void;
20
+ disconnectVisibility(): void;
21
+ getPage(pageNo: number): RenderPage;
22
+ getPageList(): RenderPage[];
23
+ destroy(): void;
24
+ }
@@ -0,0 +1,19 @@
1
+ import type { DisplayList } from '../model/DisplayList';
2
+ import type { ICanvasCapability, IPageResizeOption, IRenderBackend } from '../RenderBackend';
3
+ export declare class CanvasBackend implements IRenderBackend, ICanvasCapability {
4
+ readonly canvas: ICanvasCapability;
5
+ private surface;
6
+ private renderer;
7
+ private pageList;
8
+ constructor(pageContainer: HTMLElement);
9
+ create(pageNo: number, width: number, height: number, gap: number, dpr: number): void;
10
+ resize(pageNo: number, width: number, height: number, dpr: number, options?: IPageResizeOption): void;
11
+ resizeHeight(pageNo: number, height: number, dpr: number): void;
12
+ renderPage(pageNo: number, displayList: DisplayList): void;
13
+ observeVisibility(callback: (pageNo: number) => void): void;
14
+ disconnectVisibility(): void;
15
+ getPage(pageNo: number): HTMLCanvasElement;
16
+ getPageList(): HTMLCanvasElement[];
17
+ getContext(pageNo: number): CanvasRenderingContext2D;
18
+ destroy(): void;
19
+ }
@@ -0,0 +1,5 @@
1
+ import { DisplayList } from '../model/DisplayList';
2
+ export declare class CanvasRenderer {
3
+ render(ctx: CanvasRenderingContext2D, displayList: DisplayList): void;
4
+ private _isRenderPattern;
5
+ }
@@ -0,0 +1,17 @@
1
+ export declare class CanvasSurface {
2
+ private pageContainer;
3
+ private visibilityObserver;
4
+ constructor(pageContainer: HTMLElement);
5
+ create(pageNo: number, width: number, height: number, gap: number, dpr: number): {
6
+ page: HTMLCanvasElement;
7
+ ctx: CanvasRenderingContext2D;
8
+ };
9
+ private initializeContext;
10
+ resize(page: HTMLCanvasElement, ctx: CanvasRenderingContext2D, width: number, height: number, dpr: number, options?: {
11
+ gap?: number;
12
+ updateCssHeight?: boolean;
13
+ }): void;
14
+ resizeHeight(page: HTMLCanvasElement, ctx: CanvasRenderingContext2D, height: number, dpr: number): void;
15
+ observeVisibility(pageList: Element[], callback: (pageNo: number) => void): void;
16
+ disconnectVisibility(): void;
17
+ }
@@ -0,0 +1,62 @@
1
+ import type { ISceneResourceIdentity, SceneGroupKind } from '../svg/scene/SceneNode';
2
+ import { IRenderContext, IRenderPattern, IRenderSource } from './RenderContext';
3
+ export type IRenderMethodName = 'save' | 'restore' | 'fillRect' | 'beginPath' | 'moveTo' | 'lineTo' | 'arc' | 'quadraticCurveTo' | 'bezierCurveTo' | 'rect' | 'closePath' | 'fill' | 'strokeRect' | 'scale' | 'rotate' | 'clip' | 'fillText' | 'translate' | 'stroke' | 'drawImage' | 'setLineDash';
4
+ export type IRenderOperation = {
5
+ type: 'set';
6
+ property: string;
7
+ value: unknown;
8
+ } | {
9
+ type: IRenderMethodName;
10
+ args: unknown[];
11
+ } | {
12
+ type: 'beginGroup';
13
+ key: string;
14
+ kind: SceneGroupKind;
15
+ } | {
16
+ type: 'endGroup';
17
+ };
18
+ export declare class DisplayList implements IRenderContext {
19
+ private operations;
20
+ private state;
21
+ private stateStack;
22
+ constructor();
23
+ getOperations(): readonly IRenderOperation[];
24
+ get lineWidth(): number;
25
+ set lineWidth(value: number);
26
+ set fillStyle(value: string | CanvasGradient | CanvasPattern | IRenderPattern);
27
+ set strokeStyle(value: string | CanvasGradient | CanvasPattern);
28
+ set font(value: string);
29
+ set globalAlpha(value: number);
30
+ set textAlign(value: 'center' | 'end' | 'left' | 'right' | 'start');
31
+ set textBaseline(value: CanvasTextBaseline);
32
+ set lineCap(value: 'butt' | 'round' | 'square');
33
+ set lineJoin(value: 'bevel' | 'miter' | 'round');
34
+ setLineDash(segments: number[]): void;
35
+ getLineDash(): number[];
36
+ createPattern(image: CanvasImageSource, repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat', resource?: ISceneResourceIdentity): IRenderPattern;
37
+ beginGroup(key: string, kind: SceneGroupKind): void;
38
+ endGroup(): void;
39
+ save(): void;
40
+ restore(): void;
41
+ fillRect(x: number, y: number, width: number, height: number): void;
42
+ beginPath(): void;
43
+ moveTo(x: number, y: number): void;
44
+ lineTo(x: number, y: number): void;
45
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
46
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
47
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
48
+ rect(x: number, y: number, width: number, height: number): void;
49
+ closePath(): void;
50
+ fill(): void;
51
+ strokeRect(x: number, y: number, width: number, height: number): void;
52
+ scale(x: number, y: number): void;
53
+ rotate(angle: number): void;
54
+ clip(): void;
55
+ fillText(text: string, x: number, y: number): void;
56
+ fillTextWithSource(text: string, x: number, y: number, source: IRenderSource): void;
57
+ translate(x: number, y: number): void;
58
+ stroke(): void;
59
+ drawImage(image: CanvasImageSource, ...args: [number, number, number, number] | [number, number, number, number, number, number, number, number]): void;
60
+ private set;
61
+ private record;
62
+ }
@@ -0,0 +1,48 @@
1
+ import type { ISceneResourceIdentity, SceneGroupKind } from '../svg/scene/SceneNode';
2
+ export interface IRenderPattern {
3
+ type: 'pattern';
4
+ image: CanvasImageSource;
5
+ repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';
6
+ resource?: ISceneResourceIdentity;
7
+ }
8
+ export interface IRenderSource {
9
+ key: string;
10
+ }
11
+ export interface IRenderContext {
12
+ fillStyle: any;
13
+ strokeStyle: string | CanvasGradient | CanvasPattern;
14
+ font: string;
15
+ globalAlpha: number;
16
+ textAlign: 'center' | 'end' | 'left' | 'right' | 'start';
17
+ textBaseline: CanvasTextBaseline;
18
+ lineWidth: number;
19
+ lineCap: 'butt' | 'round' | 'square';
20
+ lineJoin: 'bevel' | 'miter' | 'round';
21
+ beginGroup?(key: string, kind: SceneGroupKind): void;
22
+ endGroup?(): void;
23
+ save(): void;
24
+ restore(): void;
25
+ setLineDash(segments: number[]): void;
26
+ getLineDash(): number[];
27
+ createPattern(image: CanvasImageSource, repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat', resource?: ISceneResourceIdentity): CanvasPattern | IRenderPattern | null;
28
+ fillRect(x: number, y: number, width: number, height: number): void;
29
+ strokeRect(x: number, y: number, width: number, height: number): void;
30
+ beginPath(): void;
31
+ closePath(): void;
32
+ moveTo(x: number, y: number): void;
33
+ lineTo(x: number, y: number): void;
34
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
35
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
36
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
37
+ rect(x: number, y: number, width: number, height: number): void;
38
+ fill(): void;
39
+ stroke(): void;
40
+ clip(): void;
41
+ fillText(text: string, x: number, y: number): void;
42
+ fillTextWithSource?(text: string, x: number, y: number, source: IRenderSource): void;
43
+ translate(x: number, y: number): void;
44
+ scale(x: number, y: number): void;
45
+ rotate(angle: number): void;
46
+ drawImage(image: CanvasImageSource, x: number, y: number, width: number, height: number): void;
47
+ drawImage(image: CanvasImageSource, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number): void;
48
+ }