@hufe921/canvas-editor 0.9.96 → 0.9.97

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.
@@ -73,6 +73,8 @@ export declare class Command {
73
73
  executePaperDirection: CommandAdapt['paperDirection'];
74
74
  executeSetPaperMargin: CommandAdapt['setPaperMargin'];
75
75
  executeInsertElementList: CommandAdapt['insertElementList'];
76
+ executeInsertArea: CommandAdapt['insertArea'];
77
+ executeSetAreaProperties: CommandAdapt['setAreaProperties'];
76
78
  executeAppendElementList: CommandAdapt['appendElementList'];
77
79
  executeUpdateElementById: CommandAdapt['updateElementById'];
78
80
  executeSetValue: CommandAdapt['setValue'];
@@ -98,6 +100,7 @@ export declare class Command {
98
100
  getImage: CommandAdapt['getImage'];
99
101
  getOptions: CommandAdapt['getOptions'];
100
102
  getValue: CommandAdapt['getValue'];
103
+ getAreaValue: CommandAdapt['getAreaValue'];
101
104
  getHTML: CommandAdapt['getHTML'];
102
105
  getText: CommandAdapt['getText'];
103
106
  getWordCount: CommandAdapt['getWordCount'];
@@ -20,6 +20,7 @@ import { IGetTitleValueOption, IGetTitleValueResult } from '../../interface/Titl
20
20
  import { IWatermark } from '../../interface/Watermark';
21
21
  import { Draw } from '../draw/Draw';
22
22
  import { INavigateInfo } from '../draw/interactive/Search';
23
+ import { IGetAreaValueOption, IGetAreaValueResult, IInsertAreaOption, ISetAreaPropertiesOption } from '../../interface/Area';
23
24
  export declare class CommandAdapt {
24
25
  private draw;
25
26
  private range;
@@ -104,6 +105,7 @@ export declare class CommandAdapt {
104
105
  getImage(payload?: IGetImageOption): Promise<string[]>;
105
106
  getOptions(): DeepRequired<IEditorOption>;
106
107
  getValue(options?: IGetValueOption): IEditorResult;
108
+ getAreaValue(options?: IGetAreaValueOption): IGetAreaValueResult | null;
107
109
  getHTML(): IEditorHTML;
108
110
  getText(): IEditorText;
109
111
  getWordCount(): Promise<number>;
@@ -154,4 +156,6 @@ export declare class CommandAdapt {
154
156
  getPositionContextByEvent(evt: MouseEvent): IPositionContextByEvent | null;
155
157
  insertTitle(payload: IElement): void;
156
158
  focus(payload?: IFocusOption): void;
159
+ insertArea(payload: IInsertAreaOption): string | null;
160
+ setAreaProperties(payload: ISetAreaPropertiesOption): void;
157
161
  }
@@ -37,6 +37,7 @@ import { Override } from '../override/Override';
37
37
  import { LineBreakParticle } from './particle/LineBreakParticle';
38
38
  import { ITd } from '../../interface/table/Td';
39
39
  import { TableOperate } from './particle/table/TableOperate';
40
+ import { Area } from './interactive/Area';
40
41
  export declare class Draw {
41
42
  private container;
42
43
  private pageContainer;
@@ -61,6 +62,7 @@ export declare class Draw {
61
62
  private background;
62
63
  private search;
63
64
  private group;
65
+ private area;
64
66
  private underline;
65
67
  private strikeout;
66
68
  private highlight;
@@ -150,6 +152,7 @@ export declare class Draw {
150
152
  getOptions(): DeepRequired<IEditorOption>;
151
153
  getSearch(): Search;
152
154
  getGroup(): Group;
155
+ getArea(): Area;
153
156
  getHistoryManager(): HistoryManager;
154
157
  getPosition(): Position;
155
158
  getZone(): Zone;
@@ -1,4 +1,4 @@
1
- import { IControlContext, IControlHighlight, IControlInitOption, IControlInstance, IGetControlValueOption, IGetControlValueResult, IInitNextControlOption, INextControlContext, IRepaintControlOption, ISetControlExtensionOption, ISetControlProperties, ISetControlRowFlexOption, ISetControlValueOption } from '../../../interface/Control';
1
+ import { IControlContext, IControlHighlight, IControlInitOption, IControlInstance, IDestroyControlOption, IGetControlValueOption, IGetControlValueResult, IInitNextControlOption, INextControlContext, IRepaintControlOption, ISetControlExtensionOption, ISetControlProperties, ISetControlRowFlexOption, ISetControlValueOption } from '../../../interface/Control';
2
2
  import { IElement, IElementPosition } from '../../../interface/Element';
3
3
  import { IRange } from '../../../interface/Range';
4
4
  import { Draw } from '../Draw';
@@ -16,6 +16,7 @@ export declare class Control {
16
16
  private options;
17
17
  private controlOptions;
18
18
  private activeControl;
19
+ private activeControlValue;
19
20
  constructor(draw: Draw);
20
21
  setHighlightList(payload: IControlHighlight[]): void;
21
22
  computeHighlightList(): void;
@@ -35,8 +36,9 @@ export declare class Control {
35
36
  getRange(): IRange;
36
37
  shrinkBoundary(context?: IControlContext): void;
37
38
  getActiveControl(): IControlInstance | null;
39
+ updateActiveControlValue(): void;
38
40
  initControl(): void;
39
- destroyControl(): void;
41
+ destroyControl(options?: IDestroyControlOption): void;
40
42
  repaintControl(options?: IRepaintControlOption): void;
41
43
  reAwakeControl(): void;
42
44
  moveCursor(position: IControlInitOption): IMoveCursorResult;
@@ -0,0 +1,18 @@
1
+ import { Draw } from '../Draw';
2
+ import { IAreaInfo, IGetAreaValueOption, IGetAreaValueResult, IInsertAreaOption, ISetAreaPropertiesOption } from '../../../interface/Area';
3
+ export declare class Area {
4
+ private draw;
5
+ private zone;
6
+ private range;
7
+ private position;
8
+ private areaInfoMap;
9
+ constructor(draw: Draw);
10
+ getActiveAreaId(): string | null;
11
+ getActiveAreaInfo(): IAreaInfo | null;
12
+ isReadonly(): boolean;
13
+ insertArea(payload: IInsertAreaOption): string | null;
14
+ render(ctx: CanvasRenderingContext2D, pageNo: number): void;
15
+ compute(): void;
16
+ getAreaValue(options?: IGetAreaValueOption): IGetAreaValueResult | null;
17
+ setAreaProperties(payload: ISetAreaPropertiesOption): void;
18
+ }
@@ -1,6 +1,6 @@
1
1
  import { IControlContext } from '../../interface/Control';
2
2
  import { IElement } from '../../interface/Element';
3
- import { IRange, IRangeParagraphInfo, RangeRowArray, RangeRowMap } from '../../interface/Range';
3
+ import { IRange, IRangeElementStyle, IRangeParagraphInfo, RangeRowArray, RangeRowMap } from '../../interface/Range';
4
4
  import { Draw } from '../draw/Draw';
5
5
  export declare class RangeManager {
6
6
  private draw;
@@ -10,9 +10,13 @@ export declare class RangeManager {
10
10
  private eventBus;
11
11
  private position;
12
12
  private historyManager;
13
+ private defaultStyle;
13
14
  constructor(draw: Draw);
14
15
  getRange(): IRange;
15
16
  clearRange(): void;
17
+ setDefaultStyle(style: IRangeElementStyle | null): void;
18
+ getDefaultStyle(): IRangeElementStyle | null;
19
+ getRangeAnchorStyle(elementList: IElement[], anchorIndex: number): IElement | null;
16
20
  getIsCollapsed(): boolean;
17
21
  getIsSelection(): boolean;
18
22
  getSelection(): IElement[] | null;
@@ -12,6 +12,7 @@ export declare const TITLE_CONTEXT_ATTR: Array<keyof IElement>;
12
12
  export declare const LIST_CONTEXT_ATTR: Array<keyof IElement>;
13
13
  export declare const CONTROL_CONTEXT_ATTR: Array<keyof IElement>;
14
14
  export declare const CONTROL_STYLE_ATTR: Array<keyof IControlStyle>;
15
+ export declare const AREA_CONTEXT_ATTR: Array<keyof IElement>;
15
16
  export declare const EDITOR_ELEMENT_CONTEXT_ATTR: Array<keyof IElement>;
16
17
  export declare const TEXTLIKE_ELEMENT_TYPE: ElementType[];
17
18
  export declare const IMAGE_ELEMENT_TYPE: ElementType[];
@@ -0,0 +1,5 @@
1
+ export declare enum AreaMode {
2
+ EDIT = "edit",
3
+ READONLY = "readonly",
4
+ FORM = "form"
5
+ }
@@ -17,3 +17,7 @@ export declare enum ControlIndentation {
17
17
  ROW_START = "rowStart",
18
18
  VALUE_START = "valueStart"
19
19
  }
20
+ export declare enum ControlState {
21
+ ACTIVE = "active",
22
+ INACTIVE = "inactive"
23
+ }
@@ -8,6 +8,7 @@ export declare enum ElementType {
8
8
  SEPARATOR = "separator",
9
9
  PAGE_BREAK = "pageBreak",
10
10
  CONTROL = "control",
11
+ AREA = "area",
11
12
  CHECKBOX = "checkbox",
12
13
  RADIO = "radio",
13
14
  LATEX = "latex",
@@ -11,7 +11,7 @@ import { IContextMenuContext, IRegisterContextMenu } from './interface/contextme
11
11
  import { EditorComponent, EditorZone, EditorMode, PageMode, PaperDirection, WordBreak, RenderMode } from './dataset/enum/Editor';
12
12
  import { EDITOR_CLIPBOARD, EDITOR_COMPONENT } from './dataset/constant/Editor';
13
13
  import { IWatermark } from './interface/Watermark';
14
- import { ControlIndentation, ControlType } from './dataset/enum/Control';
14
+ import { ControlIndentation, ControlState, ControlType } from './dataset/enum/Control';
15
15
  import { INavigateInfo } from './core/draw/interactive/Search';
16
16
  import { KeyMap } from './dataset/enum/KeyMap';
17
17
  import { BlockType } from './dataset/enum/Block';
@@ -36,6 +36,7 @@ import { createDomFromElementList, getElementListByHTML, getTextFromElementList,
36
36
  import { BackgroundRepeat, BackgroundSize } from './dataset/enum/Background';
37
37
  import { TextDecorationStyle } from './dataset/enum/Text';
38
38
  import { LineNumberType } from './dataset/enum/LineNumber';
39
+ import { AreaMode } from './dataset/enum/Area';
39
40
  export default class Editor {
40
41
  command: Command;
41
42
  listener: Listener;
@@ -48,5 +49,5 @@ export default class Editor {
48
49
  }
49
50
  export { splitText, createDomFromElementList, getElementListByHTML, getTextFromElementList };
50
51
  export { EDITOR_COMPONENT, LETTER_CLASS, INTERNAL_CONTEXT_MENU_KEY, EDITOR_CLIPBOARD };
51
- export { Editor, RowFlex, VerticalAlign, EditorZone, EditorMode, ElementType, ControlType, EditorComponent, PageMode, RenderMode, ImageDisplay, Command, KeyMap, BlockType, PaperDirection, TableBorder, TdBorder, TdSlash, MaxHeightRatio, NumberType, TitleLevel, ListType, ListStyle, WordBreak, ControlIndentation, BackgroundRepeat, BackgroundSize, TextDecorationStyle, LineNumberType, LocationPosition, IGetElementListByHTMLOption };
52
- export type { IElement, IEditorData, IEditorOption, IEditorResult, IContextMenuContext, IRegisterContextMenu, IWatermark, INavigateInfo, IBlock, ILang, ICatalog, ICatalogItem, IRange, IRangeStyle };
52
+ export { Editor, RowFlex, VerticalAlign, EditorZone, EditorMode, ElementType, ControlType, EditorComponent, PageMode, RenderMode, ImageDisplay, Command, KeyMap, BlockType, PaperDirection, TableBorder, TdBorder, TdSlash, MaxHeightRatio, NumberType, TitleLevel, ListType, ListStyle, WordBreak, ControlIndentation, BackgroundRepeat, BackgroundSize, TextDecorationStyle, LineNumberType, LocationPosition, AreaMode, ControlState };
53
+ export type { IElement, IEditorData, IEditorOption, IEditorResult, IContextMenuContext, IRegisterContextMenu, IWatermark, INavigateInfo, IBlock, ILang, ICatalog, ICatalogItem, IRange, IRangeStyle, IGetElementListByHTMLOption };
@@ -0,0 +1,41 @@
1
+ import { AreaMode } from '../dataset/enum/Area';
2
+ import { LocationPosition } from '../dataset/enum/Common';
3
+ import { IElement, IElementPosition } from './Element';
4
+ export interface IAreaBasic {
5
+ extension?: unknown;
6
+ }
7
+ export interface IAreaStyle {
8
+ top?: number;
9
+ borderColor?: string;
10
+ backgroundColor?: string;
11
+ }
12
+ export interface IAreaRule {
13
+ mode?: AreaMode;
14
+ }
15
+ export type IArea = IAreaBasic & IAreaStyle & IAreaRule;
16
+ export interface IInsertAreaOption {
17
+ id?: string;
18
+ area: IArea;
19
+ value: IElement[];
20
+ position?: LocationPosition;
21
+ }
22
+ export interface ISetAreaPropertiesOption {
23
+ id?: string;
24
+ properties: IArea;
25
+ }
26
+ export interface IGetAreaValueOption {
27
+ id?: string;
28
+ }
29
+ export interface IGetAreaValueResult {
30
+ id?: string;
31
+ area: IArea;
32
+ startPageNo: number;
33
+ endPageNo: number;
34
+ value: IElement[];
35
+ }
36
+ export interface IAreaInfo {
37
+ id: string;
38
+ area: IArea;
39
+ elementList: IElement[];
40
+ positionList: IElementPosition[];
41
+ }
@@ -1,5 +1,5 @@
1
1
  import { LocationPosition } from '../dataset/enum/Common';
2
- import { ControlType, ControlIndentation } from '../dataset/enum/Control';
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';
5
5
  import { RowFlex } from '../dataset/enum/Row';
@@ -89,7 +89,7 @@ export interface IControlInitResult {
89
89
  export interface IControlInstance {
90
90
  setElement(element: IElement): void;
91
91
  getElement(): IElement;
92
- getValue(): IElement[];
92
+ getValue(context?: IControlContext): IElement[];
93
93
  setValue(data: IElement[], context?: IControlContext, options?: IControlRuleOption): number;
94
94
  keydown(evt: KeyboardEvent): number | null;
95
95
  cut(): number;
@@ -105,6 +105,7 @@ export interface IControlRuleOption {
105
105
  export interface IGetControlValueOption {
106
106
  id?: string;
107
107
  conceptId?: string;
108
+ areaId?: string;
108
109
  }
109
110
  export type IGetControlValueResult = (Omit<IControl, 'value'> & {
110
111
  value: string | null;
@@ -115,17 +116,20 @@ export type IGetControlValueResult = (Omit<IControl, 'value'> & {
115
116
  export interface ISetControlValueOption {
116
117
  id?: string;
117
118
  conceptId?: string;
119
+ areaId?: string;
118
120
  value: string | IElement[];
119
121
  }
120
122
  export interface ISetControlExtensionOption {
121
123
  id?: string;
122
124
  conceptId?: string;
125
+ areaId?: string;
123
126
  extension: unknown;
124
127
  }
125
128
  export type ISetControlHighlightOption = IControlHighlight[];
126
129
  export type ISetControlProperties = {
127
130
  id?: string;
128
131
  conceptId?: string;
132
+ areaId?: string;
129
133
  properties: Partial<Omit<IControl, 'value'>>;
130
134
  };
131
135
  export type IRepaintControlOption = Pick<IDrawOption, 'curIndex' | 'isCompute' | 'isSubmitHistory' | 'isSetCursor'>;
@@ -145,3 +149,11 @@ export interface ISetControlRowFlexOption {
145
149
  availableWidth: number;
146
150
  controlRealWidth: number;
147
151
  }
152
+ export interface IControlChangeResult {
153
+ state: ControlState;
154
+ control: IControl;
155
+ controlId: string;
156
+ }
157
+ export interface IDestroyControlOption {
158
+ isEmitEvent?: boolean;
159
+ }
@@ -5,6 +5,7 @@ import { ListStyle, ListType } from '../dataset/enum/List';
5
5
  import { RowFlex } from '../dataset/enum/Row';
6
6
  import { TitleLevel } from '../dataset/enum/Title';
7
7
  import { TableBorder } from '../dataset/enum/table/Table';
8
+ import { IArea } from './Area';
8
9
  import { IBlock } from './Block';
9
10
  import { ICheckbox } from './Checkbox';
10
11
  import { IControl } from './Control';
@@ -106,7 +107,12 @@ export interface IImageElement {
106
107
  export interface IBlockElement {
107
108
  block?: IBlock;
108
109
  }
109
- export type IElement = IElementBasic & IElementStyle & IElementGroup & ITable & IHyperlinkElement & ISuperscriptSubscript & ISeparator & IControlElement & ICheckboxElement & IRadioElement & ILaTexElement & IDateElement & IImageElement & IBlockElement & ITitleElement & IListElement;
110
+ export interface IAreaElement {
111
+ valueList?: IElement[];
112
+ areaId?: string;
113
+ area?: IArea;
114
+ }
115
+ export type IElement = IElementBasic & IElementStyle & IElementGroup & ITable & IHyperlinkElement & ISuperscriptSubscript & ISeparator & IControlElement & ICheckboxElement & IRadioElement & ILaTexElement & IDateElement & IImageElement & IBlockElement & ITitleElement & IListElement & IAreaElement;
110
116
  export interface IElementMetrics {
111
117
  width: number;
112
118
  height: number;
@@ -1,6 +1,6 @@
1
1
  import { EditorZone, ElementType, ListStyle, ListType, PageMode, TitleLevel } from '..';
2
2
  import { RowFlex } from '../dataset/enum/Row';
3
- import { IControl } from './Control';
3
+ import { IControlChangeResult } from './Control';
4
4
  import { IEditorResult } from './Editor';
5
5
  import { IPositionContext } from './Position';
6
6
  import { ITextDecoration } from './Text';
@@ -34,7 +34,7 @@ export type IPageSizeChange = (payload: number) => void;
34
34
  export type IPageScaleChange = (payload: number) => void;
35
35
  export type ISaved = (payload: IEditorResult) => void;
36
36
  export type IContentChange = () => void;
37
- export type IControlChange = (payload: IControl | null) => void;
37
+ export type IControlChange = (payload: IControlChangeResult) => void;
38
38
  export type IPageModeChange = (payload: PageMode) => void;
39
39
  export type IZoneChange = (payload: EditorZone) => void;
40
40
  export type IMouseEventChange = (evt: MouseEvent) => void;
@@ -1,5 +1,5 @@
1
1
  import { EditorZone } from '../dataset/enum/Editor';
2
- import { IElement, IElementFillRect } from './Element';
2
+ import { IElement, IElementFillRect, IElementStyle } from './Element';
3
3
  export interface IRange {
4
4
  startIndex: number;
5
5
  endIndex: number;
@@ -35,3 +35,4 @@ export interface IRangeParagraphInfo {
35
35
  elementList: IElement[];
36
36
  startIndex: number;
37
37
  }
38
+ export type IRangeElementStyle = Pick<IElementStyle, 'bold' | 'color' | 'highlight' | 'font' | 'size' | 'italic' | 'underline' | 'strikeout'>;
@@ -15,6 +15,7 @@ export interface IRow {
15
15
  isList?: boolean;
16
16
  listIndex?: number;
17
17
  offsetX?: number;
18
+ offsetY?: number;
18
19
  elementList: IRowElement[];
19
20
  isWidthNotEnough?: boolean;
20
21
  rowIndex: number;
@@ -14,6 +14,7 @@ interface IPickElementOption {
14
14
  export declare function pickElementAttr(payload: IElement, option?: IPickElementOption): IElement;
15
15
  interface IZipElementListOption {
16
16
  extraPickAttrs?: Array<keyof IElement>;
17
+ isClassifyArea?: boolean;
17
18
  }
18
19
  export declare function zipElementList(payload: IElement[], options?: IZipElementListOption): IElement[];
19
20
  export declare function convertTextAlignToRowFlex(node: HTMLElement): RowFlex;
@@ -22,3 +22,4 @@ export declare function findScrollContainer(element: HTMLElement): HTMLElement;
22
22
  export declare function isArrayEqual(arr1: unknown[], arr2: unknown[]): boolean;
23
23
  export declare function isObjectEqual(obj1: unknown, obj2: unknown): boolean;
24
24
  export declare function isRectIntersect(rect1: IElementFillRect, rect2: IElementFillRect): boolean;
25
+ export declare function isNonValue(value: unknown): boolean;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@hufe921/canvas-editor",
3
3
  "author": "Hufe",
4
4
  "license": "MIT",
5
- "version": "0.9.96",
5
+ "version": "0.9.97",
6
6
  "description": "rich text editor by canvas/svg",
7
7
  "publishConfig": {
8
8
  "registry": "https://registry.npmjs.org/",