@hufe921/canvas-editor 1.0.5 → 1.0.6

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.
@@ -33,6 +33,8 @@ export declare class Command {
33
33
  executeList: CommandAdapt['list'];
34
34
  executeRowFlex: CommandAdapt['rowFlex'];
35
35
  executeRowMargin: CommandAdapt['rowMargin'];
36
+ executeSpacingBefore: CommandAdapt['spacingBefore'];
37
+ executeSpacingAfter: CommandAdapt['spacingAfter'];
36
38
  executeInsertTable: CommandAdapt['insertTable'];
37
39
  executeInsertTableTopRow: CommandAdapt['insertTableTopRow'];
38
40
  executeInsertTableBottomRow: CommandAdapt['insertTableBottomRow'];
@@ -49,6 +51,8 @@ export declare class Command {
49
51
  executeTableBorderType: CommandAdapt['tableBorderType'];
50
52
  executeTableBorderColor: CommandAdapt['tableBorderColor'];
51
53
  executeTableTdBorderType: CommandAdapt['tableTdBorderType'];
54
+ executeTableTdBorderColor: CommandAdapt['tableTdBorderColor'];
55
+ executeTableTdBorderWidth: CommandAdapt['tableTdBorderWidth'];
52
56
  executeTableTdSlashType: CommandAdapt['tableTdSlashType'];
53
57
  executeTableTdBackgroundColor: CommandAdapt['tableTdBackgroundColor'];
54
58
  executeTableAutoFitToContent: CommandAdapt['tableAutoFitToContent'];
@@ -75,6 +75,8 @@ export declare class CommandAdapt {
75
75
  list(listType: ListType | null, listStyle?: ListStyle): void;
76
76
  rowFlex(payload: RowFlex): void;
77
77
  rowMargin(payload: number): void;
78
+ spacingBefore(payload: number): void;
79
+ spacingAfter(payload: number): void;
78
80
  insertTable(row: number, col: number): void;
79
81
  insertTableTopRow(): void;
80
82
  insertTableBottomRow(): void;
@@ -91,6 +93,8 @@ export declare class CommandAdapt {
91
93
  tableBorderType(payload: TableBorder): void;
92
94
  tableBorderColor(payload: string): void;
93
95
  tableTdBorderType(payload: TdBorder): void;
96
+ tableTdBorderColor(payload: string): void;
97
+ tableTdBorderWidth(payload: number): void;
94
98
  tableTdSlashType(payload: TdSlash): void;
95
99
  tableTdBackgroundColor(payload: string): void;
96
100
  tableAutoFitToContent(): void;
@@ -53,6 +53,7 @@ import { LineBreakParticle } from './particle/LineBreakParticle';
53
53
  import { ITd } from '../../interface/table/Td';
54
54
  import { TableOperate } from './particle/table/TableOperate';
55
55
  import { Area } from './interactive/Area';
56
+ import { AreaTool } from './interactive/AreaTool';
56
57
  import { Badge } from './frame/Badge';
57
58
  import { Graffiti } from './graffiti/Graffiti';
58
59
  import { Magnifier } from './interactive/Magnifier';
@@ -86,6 +87,7 @@ export declare class Draw {
86
87
  private spellcheck;
87
88
  private group;
88
89
  private area;
90
+ private areaTool;
89
91
  private underline;
90
92
  private strikeout;
91
93
  private highlight;
@@ -219,6 +221,7 @@ export declare class Draw {
219
221
  getSpellcheck(): Spellcheck;
220
222
  getGroup(): Group;
221
223
  getArea(): Area;
224
+ getAreaTool(): AreaTool;
222
225
  getBadge(): Badge;
223
226
  getMagnifier(): Magnifier;
224
227
  getHistoryManager(): HistoryManager;
@@ -237,6 +240,7 @@ export declare class Draw {
237
240
  getElementList(): IElement[];
238
241
  getMainElementList(): IElement[];
239
242
  getRawRowList(): IRow[];
243
+ getMainRowList(): IRow[];
240
244
  getIncrementalRowComputer(): IncrementalRowComputer;
241
245
  getIsElementListTruncated(): boolean;
242
246
  getIsControlMinWidthPlaceholder(): boolean;
@@ -1,6 +1,7 @@
1
1
  import { Draw } from '../Draw';
2
2
  import { IAreaInfo, IDeleteAreaOption, IGetAreaValueOption, IGetAreaValueResult, IInsertAreaOption, ILocationAreaOption, ISetAreaPropertiesOption, ISetAreaValueOption } from '../../../interface/Area';
3
3
  import { IRange } from '../../../interface/Range';
4
+ import { IRow } from '../../../interface/Row';
4
5
  import { IElementPosition } from '../../../interface/Element';
5
6
  export declare class Area {
6
7
  private draw;
@@ -17,8 +18,19 @@ export declare class Area {
17
18
  insertArea(payload: IInsertAreaOption): string | null;
18
19
  render(ctx: CanvasRenderingContext2D, pageNo: number): void;
19
20
  compute(): void;
21
+ /**
22
+ * 收集区域补高的跨页延续段:
23
+ * 结转标记在区域后续行时,起点 = 结转行内容顶部 - 本行全部偏移(即页内容区顶部);
24
+ * 结转标记在区域末行自身时(区域位于文档末尾),延续段位于下一空白页顶部
25
+ */
26
+ private computePaddingSegmentList;
20
27
  private computeAreaInfo;
21
28
  private computeTableAreaInfo;
29
+ /**
30
+ * 应用区域最小高度:按区域分组连续行累计内容高度,
31
+ * 不足 minHeight 时将差值补充到区域末行行高(区域顶部间距不计入内容高度)
32
+ */
33
+ applyMinHeight(rowList: IRow[]): void;
22
34
  getAreaValue(options?: IGetAreaValueOption): IGetAreaValueResult | null;
23
35
  getContextByAreaId(areaId: string, options?: ILocationAreaOption): {
24
36
  range: IRange;
@@ -0,0 +1,18 @@
1
+ import { Draw } from '../Draw';
2
+ export declare class AreaTool {
3
+ private readonly BORDER_VALUE;
4
+ private readonly MIN_AREA_HEIGHT;
5
+ private draw;
6
+ private canvas;
7
+ private options;
8
+ private container;
9
+ private toolBorder;
10
+ private anchorLine;
11
+ private mousedownY;
12
+ private lastAnchorKey;
13
+ constructor(draw: Draw);
14
+ dispose(): void;
15
+ render(): void;
16
+ private _mousedown;
17
+ private _mousemove;
18
+ }
@@ -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;
@@ -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;
@@ -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;
@@ -28,3 +28,7 @@ export declare enum FlexDirection {
28
28
  ROW = "row",
29
29
  COLUMN = "column"
30
30
  }
31
+ export declare enum CheckboxMarkType {
32
+ CHECK = "check",
33
+ CROSS = "cross"
34
+ }
@@ -4,7 +4,7 @@ import { IElement } from './interface/Element';
4
4
  import { Command } from './core/command/Command';
5
5
  import { Listener } from './core/listener/Listener';
6
6
  import { RowFlex } from './dataset/enum/Row';
7
- import { FlexDirection, ImageDisplay, LocationPosition, SurroundPosition } from './dataset/enum/Common';
7
+ import { FlexDirection, CheckboxMarkType, ImageDisplay, LocationPosition, SurroundPosition } from './dataset/enum/Common';
8
8
  import { ElementType } from './dataset/enum/Element';
9
9
  import { Register } from './core/register/Register';
10
10
  import { IContextMenuContext, IRegisterContextMenu } from './interface/contextmenu/ContextMenu';
@@ -56,5 +56,5 @@ export default class Editor {
56
56
  }
57
57
  export { splitText, createDomFromElementList, getElementListByHTML, getTextFromElementList };
58
58
  export { EDITOR_COMPONENT, LETTER_CLASS, INTERNAL_CONTEXT_MENU_KEY, INTERNAL_SHORTCUT_KEY, EDITOR_CLIPBOARD };
59
- export { Editor, RowFlex, VerticalAlign, EditorZone, EditorMode, ElementType, ControlType, EditorComponent, PageMode, RenderMode, ImageDisplay, Command, KeyMap, BlockType, MacroType, PaperDirection, TableBorder, TdBorder, TdSlash, MaxHeightRatio, NumberType, TitleLevel, ListType, ListStyle, WordBreak, ControlIndentation, ControlComponent, BackgroundRepeat, BackgroundSize, TextDecorationStyle, LineNumberType, LocationPosition, SurroundPosition, AreaMode, ControlState, FlexDirection, WatermarkType, WatermarkLayer };
59
+ export { Editor, RowFlex, VerticalAlign, EditorZone, EditorMode, ElementType, ControlType, EditorComponent, PageMode, RenderMode, ImageDisplay, Command, KeyMap, BlockType, MacroType, PaperDirection, TableBorder, TdBorder, TdSlash, MaxHeightRatio, NumberType, TitleLevel, ListType, ListStyle, WordBreak, ControlIndentation, ControlComponent, BackgroundRepeat, BackgroundSize, TextDecorationStyle, LineNumberType, LocationPosition, SurroundPosition, AreaMode, ControlState, FlexDirection, CheckboxMarkType, WatermarkType, WatermarkLayer };
60
60
  export type { IElement, IEditorData, IEditorOption, IEditorResult, IContextMenuContext, IRegisterContextMenu, IWatermark, INavigateInfo, IBlock, ILang, ICatalog, ICatalogItem, IRange, IRangeStyle, RangeRect, IBadge, IGetElementListByHTMLOption };
@@ -10,6 +10,7 @@ export interface IAreaBasic {
10
10
  }
11
11
  export interface IAreaStyle {
12
12
  top?: number;
13
+ minHeight?: number;
13
14
  borderColor?: string;
14
15
  backgroundColor?: string;
15
16
  }
@@ -17,6 +18,7 @@ export interface IAreaRule {
17
18
  mode?: AreaMode;
18
19
  hide?: boolean;
19
20
  deletable?: boolean;
21
+ resizable?: boolean;
20
22
  }
21
23
  export type IArea = IAreaBasic & IAreaStyle & IAreaRule;
22
24
  export interface IInsertAreaOption {
@@ -44,6 +46,11 @@ export interface IGetAreaValueResult {
44
46
  endPageNo: number;
45
47
  value: IElement[];
46
48
  }
49
+ export interface IAreaPaddingSegment {
50
+ pageNo: number;
51
+ y: number;
52
+ height: number;
53
+ }
47
54
  export interface IAreaInfo {
48
55
  id: string;
49
56
  area: IArea;
@@ -54,6 +61,7 @@ export interface IAreaInfo {
54
61
  td: ITd;
55
62
  tablePosition: IElementPosition;
56
63
  };
64
+ paddingSegmentList?: IAreaPaddingSegment[];
57
65
  }
58
66
  export interface ILocationAreaOption {
59
67
  position: LocationPosition;
@@ -1,8 +1,10 @@
1
+ import { CheckboxMarkType } from '../dataset/enum/Common';
1
2
  import { VerticalAlign } from '../dataset/enum/VerticalAlign';
2
3
  export interface ICheckbox {
3
4
  value: boolean | null;
4
5
  code?: string;
5
6
  disabled?: boolean;
7
+ markType?: CheckboxMarkType;
6
8
  }
7
9
  export interface ICheckboxOption {
8
10
  width?: number;
@@ -14,5 +16,6 @@ export interface ICheckboxOption {
14
16
  checkFillStyle?: string;
15
17
  checkStrokeStyle?: string;
16
18
  checkMarkColor?: string;
19
+ markType?: CheckboxMarkType;
17
20
  verticalAlign?: VerticalAlign;
18
21
  }
@@ -1,4 +1,4 @@
1
- import { FlexDirection, LocationPosition } from '../dataset/enum/Common';
1
+ import { CheckboxMarkType, FlexDirection, LocationPosition } from '../dataset/enum/Common';
2
2
  import { ControlType, ControlIndentation, ControlState } from '../dataset/enum/Control';
3
3
  import { EditorZone } from '../dataset/enum/Editor';
4
4
  import { MoveDirection } from '../dataset/enum/Observer';
@@ -27,6 +27,7 @@ export interface IControlCheckbox {
27
27
  max?: number;
28
28
  flexDirection: FlexDirection;
29
29
  valueSets: IValueSet[];
30
+ markType?: CheckboxMarkType;
30
31
  }
31
32
  export interface IControlRadio {
32
33
  code: string | null;
@@ -39,6 +39,8 @@ export interface IElementStyle {
39
39
  strikeout?: boolean;
40
40
  rowFlex?: RowFlex;
41
41
  rowMargin?: number;
42
+ spacingBefore?: number;
43
+ spacingAfter?: number;
42
44
  level?: TitleLevel;
43
45
  title?: ITitle;
44
46
  letterSpacing?: number;
@@ -24,6 +24,8 @@ export interface IRangeStyle {
24
24
  highlight: string | null;
25
25
  rowFlex: RowFlex | null;
26
26
  rowMargin: number;
27
+ spacingBefore: number;
28
+ spacingAfter: number;
27
29
  dashArray: number[];
28
30
  level: TitleLevel | null;
29
31
  listType: ListType | null;
@@ -20,6 +20,15 @@ export interface IRow {
20
20
  listIndex?: number;
21
21
  offsetX?: number;
22
22
  offsetY?: number;
23
+ spacingAfter?: number;
24
+ areaPadding?: {
25
+ areaId: string;
26
+ height: number;
27
+ };
28
+ areaPaddingCarry?: {
29
+ areaId: string;
30
+ height: number;
31
+ };
23
32
  elementList: IRowElement[];
24
33
  isWidthNotEnough?: boolean;
25
34
  rowIndex: number;
@@ -25,6 +25,8 @@ export interface ITd {
25
25
  positionList?: IElementPosition[];
26
26
  verticalAlign?: VerticalAlign;
27
27
  backgroundColor?: string;
28
+ borderColor?: string;
29
+ borderWidth?: number;
28
30
  borderTypes?: TdBorder[];
29
31
  slashTypes?: TdSlash[];
30
32
  mainHeight?: number;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@hufe921/canvas-editor",
3
3
  "author": "Hufe",
4
4
  "license": "MIT",
5
- "version": "1.0.5",
5
+ "version": "1.0.6",
6
6
  "description": "A Canvas/SVG-based rich text editor",
7
7
  "publishConfig": {
8
8
  "registry": "https://registry.npmjs.org/",
@@ -45,16 +45,17 @@
45
45
  "docs:dev": "vitepress dev docs",
46
46
  "docs:build": "vitepress build docs",
47
47
  "docs:preview": "vitepress preview docs",
48
- "pre-release": "node scripts/pre-release.js"
48
+ "pre-release": "node scripts/pre-release.js",
49
+ "prepublishOnly": "npm run lib && npm run pre-release"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@eslint/js": "^10.0.1",
52
53
  "@rollup/plugin-typescript": "^12.3.0",
53
54
  "@types/jsdom": "^28.0.3",
54
- "@types/node": "^24.19.1",
55
+ "@types/node": "^24.19.2",
55
56
  "@types/prismjs": "^1.26.6",
56
- "@typescript-eslint/eslint-plugin": "^8.71.1",
57
- "@typescript-eslint/parser": "^8.71.1",
57
+ "@typescript-eslint/eslint-plugin": "^8.71.2",
58
+ "@typescript-eslint/parser": "^8.71.2",
58
59
  "@vitest/coverage-v8": "^4.1.11",
59
60
  "cypress": "^15.21.1",
60
61
  "cypress-file-upload": "^5.0.8",
@@ -64,13 +65,13 @@
64
65
  "simple-git-hooks": "^2.14.0",
65
66
  "tslib": "^2.8.1",
66
67
  "typescript": "^6.0.3",
67
- "typescript-eslint": "^8.71.1",
68
- "vite": "^8.3.3",
68
+ "typescript-eslint": "^8.71.2",
69
+ "vite": "^8.3.4",
69
70
  "vite-plugin-css-injected-by-js": "^5.0.1",
70
71
  "vitepress": "^1.6.4",
71
72
  "vitest": "^4.1.11",
72
73
  "vitest-canvas-mock": "^1.2.0",
73
- "vue": "^3.5.43"
74
+ "vue": "^3.5.44"
74
75
  },
75
76
  "simple-git-hooks": {
76
77
  "pre-commit": "npm run lint && npm run type:check",