@hailin-zheng/editor-core 2.2.20 → 2.2.22
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.
- package/editor.css +87 -146
- package/index-cjs.js +1099 -544
- package/index-cjs.js.map +1 -1
- package/index.js +1100 -545
- package/index.js.map +1 -1
- package/med_editor/doc-editor.d.ts +2 -1
- package/med_editor/doc-rule.d.ts +147 -19
- package/med_editor/framework/code-interpreter/dynamic-execute.d.ts +4 -1
- package/med_editor/framework/doc-layout/paragraph-arrange.d.ts +6 -3
- package/med_editor/framework/document-change.d.ts +1 -1
- package/med_editor/framework/document-context.d.ts +2 -2
- package/med_editor/framework/element-define.d.ts +5 -4
- package/med_editor/framework/element-props.d.ts +2 -1
- package/med_editor/framework/element-serialize.d.ts +1 -1
- package/med_editor/framework/impl/data-element/data-element-base-impl.d.ts +1 -1
- package/med_editor/framework/impl/document/doc-impl.d.ts +7 -0
- package/med_editor/framework/search/search-panel.d.ts +31 -0
- package/med_editor/framework/selection/selection-overlays.d.ts +5 -1
- package/med_editor/framework/util/common-util.d.ts +1 -0
- package/med_editor/framework/util/element-util.d.ts +19 -8
- package/package.json +2 -2
@@ -50,6 +50,7 @@ export declare class DocEditor {
|
|
50
50
|
private editInput;
|
51
51
|
private scrollContainer;
|
52
52
|
onKeyDownEvent: Subject<KeyboardEvent>;
|
53
|
+
private searchPanel;
|
53
54
|
constructor(svgContainer: HTMLElement);
|
54
55
|
private createCanvasContext;
|
55
56
|
private renderRoot;
|
@@ -164,7 +165,7 @@ export declare class DocEditor {
|
|
164
165
|
* @param evt
|
165
166
|
*/
|
166
167
|
onContextMenu(evt: MouseEvent): void;
|
167
|
-
resetViewer(
|
168
|
+
resetViewer(): void;
|
168
169
|
/**
|
169
170
|
* 缩放视图
|
170
171
|
* @param scale
|
package/med_editor/doc-rule.d.ts
CHANGED
@@ -12,35 +12,163 @@ export declare class DocRule {
|
|
12
12
|
private docCtx;
|
13
13
|
private options;
|
14
14
|
private ruleHeight;
|
15
|
+
private thumbWidth;
|
15
16
|
private thumbX;
|
16
17
|
private mouseDownPos;
|
17
|
-
private indentThumbPoints;
|
18
|
-
private hangThumbPoints;
|
19
18
|
private mouseDownThumbType;
|
20
19
|
viewOptions: ViewOptions;
|
21
20
|
ss: SelectionState;
|
22
|
-
private nodes;
|
23
21
|
constructor(docCtx: EditorContext);
|
24
22
|
destroy(): void;
|
25
23
|
setRuleOptions(options: RuleOptions): void;
|
26
|
-
private fillRectSvg;
|
27
|
-
private drawIndentThumbSvg;
|
28
|
-
private drawHangThumbSvg;
|
29
|
-
private drawLineSvg;
|
30
|
-
private drawTextSvg;
|
31
24
|
refreshRuleSvg(): IVNodeRenderFunc;
|
32
|
-
|
33
|
-
private getMousePos;
|
34
|
-
private canvasMousemove;
|
35
|
-
private canvasMouseup;
|
36
|
-
private pointInPoly;
|
37
|
-
/**
|
38
|
-
* 绘制
|
39
|
-
*/
|
40
|
-
private drawRuleSvg;
|
25
|
+
getRuleSVG(): any;
|
41
26
|
private getRuleMarksPos;
|
42
27
|
private getCurrPara;
|
43
|
-
private
|
44
|
-
|
28
|
+
private drawCellMark;
|
29
|
+
/**
|
30
|
+
* 绘制首行缩进thumb
|
31
|
+
* @returns
|
32
|
+
*/
|
33
|
+
createTopThumb(): {
|
34
|
+
sel: string;
|
35
|
+
data: {
|
36
|
+
on: {
|
37
|
+
mousedown: (evt: any) => void;
|
38
|
+
};
|
39
|
+
style: {
|
40
|
+
left: string;
|
41
|
+
};
|
42
|
+
};
|
43
|
+
children: {
|
44
|
+
sel: string;
|
45
|
+
data: {};
|
46
|
+
children: {
|
47
|
+
sel: string;
|
48
|
+
data: {
|
49
|
+
ns: string;
|
50
|
+
attrs: {
|
51
|
+
width: number;
|
52
|
+
height: number;
|
53
|
+
viewBox: string;
|
54
|
+
fill: string;
|
55
|
+
"stroke-width": number;
|
56
|
+
};
|
57
|
+
};
|
58
|
+
children: ({
|
59
|
+
sel: string;
|
60
|
+
data: {
|
61
|
+
ns: string;
|
62
|
+
attrs: {
|
63
|
+
stroke: string;
|
64
|
+
fill: string;
|
65
|
+
};
|
66
|
+
};
|
67
|
+
children: {
|
68
|
+
sel: string;
|
69
|
+
data: {
|
70
|
+
ns: string;
|
71
|
+
attrs: {
|
72
|
+
d: string;
|
73
|
+
stroke: string;
|
74
|
+
};
|
75
|
+
};
|
76
|
+
}[];
|
77
|
+
} | {
|
78
|
+
sel: string;
|
79
|
+
data: {
|
80
|
+
ns: string;
|
81
|
+
attrs: {
|
82
|
+
stroke: string;
|
83
|
+
fill: string;
|
84
|
+
};
|
85
|
+
};
|
86
|
+
children: {
|
87
|
+
sel: string;
|
88
|
+
data: {
|
89
|
+
ns: string;
|
90
|
+
attrs: {
|
91
|
+
d: string;
|
92
|
+
fill: string;
|
93
|
+
"vector-effect": string;
|
94
|
+
};
|
95
|
+
};
|
96
|
+
}[];
|
97
|
+
})[];
|
98
|
+
}[];
|
99
|
+
}[];
|
100
|
+
};
|
101
|
+
/**
|
102
|
+
* 绘制悬挂缩进thumb
|
103
|
+
* @returns
|
104
|
+
*/
|
105
|
+
createLeftThumb(): {
|
106
|
+
sel: string;
|
107
|
+
data: {
|
108
|
+
on: {
|
109
|
+
mousedown: (evt: MouseEvent) => void;
|
110
|
+
};
|
111
|
+
style: {
|
112
|
+
left: string;
|
113
|
+
};
|
114
|
+
};
|
115
|
+
children: {
|
116
|
+
sel: string;
|
117
|
+
data: {};
|
118
|
+
children: {
|
119
|
+
sel: string;
|
120
|
+
data: {
|
121
|
+
ns: string;
|
122
|
+
attrs: {
|
123
|
+
width: number;
|
124
|
+
height: number;
|
125
|
+
viewBox: string;
|
126
|
+
fill: string;
|
127
|
+
"stroke-width": number;
|
128
|
+
};
|
129
|
+
};
|
130
|
+
children: ({
|
131
|
+
sel: string;
|
132
|
+
data: {
|
133
|
+
ns: string;
|
134
|
+
attrs: {
|
135
|
+
stroke: string;
|
136
|
+
fill: string;
|
137
|
+
};
|
138
|
+
};
|
139
|
+
children: {
|
140
|
+
sel: string;
|
141
|
+
data: {
|
142
|
+
ns: string;
|
143
|
+
attrs: {
|
144
|
+
d: string;
|
145
|
+
stroke: string;
|
146
|
+
};
|
147
|
+
};
|
148
|
+
}[];
|
149
|
+
} | {
|
150
|
+
sel: string;
|
151
|
+
data: {
|
152
|
+
ns: string;
|
153
|
+
attrs: {
|
154
|
+
stroke: string;
|
155
|
+
fill: string;
|
156
|
+
};
|
157
|
+
};
|
158
|
+
children: {
|
159
|
+
sel: string;
|
160
|
+
data: {
|
161
|
+
ns: string;
|
162
|
+
attrs: {
|
163
|
+
d: string;
|
164
|
+
fill: string;
|
165
|
+
"vector-effect": string;
|
166
|
+
};
|
167
|
+
};
|
168
|
+
}[];
|
169
|
+
})[];
|
170
|
+
}[];
|
171
|
+
}[];
|
172
|
+
};
|
45
173
|
}
|
46
174
|
export {};
|
@@ -7,10 +7,13 @@ export declare class DynamicExecute {
|
|
7
7
|
current?: Element;
|
8
8
|
depItems?: Map<string, RefCtxValue>;
|
9
9
|
constructor(doc: BranchElement, ss: SelectionState);
|
10
|
+
create(): DynamicExecute;
|
10
11
|
setCurrentCtx(ele: Element, depItems: Map<string, RefCtxValue>): void;
|
11
12
|
clearCurrentCtx(): void;
|
12
13
|
cacheList: ReturnType<DocumentContext['getDataElementModelList']>;
|
13
|
-
getControlById(id: string
|
14
|
+
getControlById(id: string, options?: {
|
15
|
+
includeChildren: boolean;
|
16
|
+
}): DataCheckEleModel | DataInputEleModel | DataLeafEleModel | undefined;
|
14
17
|
getObject(id: string): RefCtxValue;
|
15
18
|
AVG(fn: () => Array<number | string>): number;
|
16
19
|
SUM(fn: () => Array<number | string | Array<string>>): number;
|
@@ -1,13 +1,16 @@
|
|
1
1
|
import { LeafRenderObject, RenderObject } from "../render-define";
|
2
2
|
import { FillNullSpaceRenderObject, ParagraphElement, ParagraphRenderObject, TextGroupRenderObject } from "../impl";
|
3
|
-
import { Element, InlineGroupElement, LeafElement, ViewOptions } from "../element-define";
|
3
|
+
import { Element, ICreateRenderData, InlineGroupElement, LeafElement, ViewOptions } from "../element-define";
|
4
4
|
import { RenderContextType } from "../render-context";
|
5
5
|
import { DynamicExecute } from "../code-interpreter/dynamic-execute";
|
6
|
+
import { EditorContext } from "../document-context";
|
6
7
|
export declare class ParagraphMeasure {
|
7
|
-
|
8
|
+
docCtx: EditorContext;
|
8
9
|
renderCtx: RenderContextType;
|
9
10
|
execute: DynamicExecute;
|
10
|
-
|
11
|
+
options: ViewOptions;
|
12
|
+
createData: ICreateRenderData;
|
13
|
+
constructor(docCtx: EditorContext, renderCtx: RenderContextType, execute: DynamicExecute);
|
11
14
|
/**
|
12
15
|
* 段落排版:
|
13
16
|
* 1.当前段落不存在项目符号,按照缩进和悬挂处理
|
@@ -33,7 +33,7 @@ export declare class EditorContext {
|
|
33
33
|
* 编辑器文档刷新后回调(DOM渲染完成后回调)
|
34
34
|
* @param cb
|
35
35
|
*/
|
36
|
-
onNextView(cb?:
|
36
|
+
onNextView(cb?: VoidFunction): void;
|
37
37
|
get document(): DocumentElement;
|
38
38
|
set document(value: DocumentElement);
|
39
39
|
clear(): void;
|
@@ -71,7 +71,6 @@ export declare class DocumentContext {
|
|
71
71
|
includeChildren: boolean;
|
72
72
|
}): Array<DataElementInlineGroup | DataElementLeaf>;
|
73
73
|
getControlById(id: string): DataElementInlineGroup | DataElementLeaf;
|
74
|
-
isDataEle(ele: Element): boolean;
|
75
74
|
getControlByName(name: string): DataElementInlineGroup | DataElementLeaf;
|
76
75
|
/**
|
77
76
|
* 获取数据元值集合
|
@@ -126,6 +125,7 @@ interface DataEleBaseModel {
|
|
126
125
|
id: string;
|
127
126
|
name: string;
|
128
127
|
fieldName: string;
|
128
|
+
caption: string;
|
129
129
|
getValue: () => any;
|
130
130
|
setValue: (val: any) => void;
|
131
131
|
}
|
@@ -74,6 +74,7 @@ export declare abstract class Element<P extends object = any> {
|
|
74
74
|
disposed: boolean;
|
75
75
|
loaded: boolean;
|
76
76
|
visibleExpr?: IParserExpress;
|
77
|
+
effectExpr?: IParserExpress;
|
77
78
|
attribute?: ElementAttribute;
|
78
79
|
private _parent;
|
79
80
|
get parent(): BranchElement;
|
@@ -176,6 +177,7 @@ export interface SelectionContentRange {
|
|
176
177
|
isFullSelected: boolean;
|
177
178
|
startOffset: number;
|
178
179
|
endOffset: number;
|
180
|
+
rangeColor?: string;
|
179
181
|
selectedChildren: Array<SelectionContentRange>;
|
180
182
|
}
|
181
183
|
/**
|
@@ -285,8 +287,6 @@ export declare class ViewOptions {
|
|
285
287
|
virtualViewMode: boolean;
|
286
288
|
trackInsColor: string;
|
287
289
|
trackDelColor: string;
|
288
|
-
showLineRect: boolean;
|
289
|
-
showCharRect: boolean;
|
290
290
|
showTabChar: boolean;
|
291
291
|
showSpaceChar: boolean;
|
292
292
|
showLineBreak: boolean;
|
@@ -294,7 +294,6 @@ export declare class ViewOptions {
|
|
294
294
|
devMode: boolean;
|
295
295
|
showParaSymbol: boolean;
|
296
296
|
showDebug: boolean;
|
297
|
-
resourceMode: 'lazy' | 'immediate';
|
298
297
|
secretBrowse: boolean;
|
299
298
|
chineseLayout: boolean;
|
300
299
|
enableTrackHistory: boolean;
|
@@ -341,7 +340,7 @@ export declare class ViewOptions {
|
|
341
340
|
textRowLineMode: boolean;
|
342
341
|
editUser: DocUser;
|
343
342
|
trackChangePeriod: number;
|
344
|
-
onChange: Subject<
|
343
|
+
onChange: Subject<void>;
|
345
344
|
printMode: 'normal' | 'continuation';
|
346
345
|
enableSuggestions: boolean;
|
347
346
|
constructor();
|
@@ -410,6 +409,7 @@ export interface ICreateRenderData {
|
|
410
409
|
options: ViewOptions;
|
411
410
|
renderCtx: RenderContextType;
|
412
411
|
execute: DynamicExecute;
|
412
|
+
onNextView: (cb: VoidFunction) => void;
|
413
413
|
}
|
414
414
|
export interface FontBoundingBox {
|
415
415
|
fontBoundingBoxAscent: number;
|
@@ -431,5 +431,6 @@ export interface IParserExpress {
|
|
431
431
|
}
|
432
432
|
export interface ElementAttribute {
|
433
433
|
visibleExpr?: string;
|
434
|
+
effectExpr?: string;
|
434
435
|
}
|
435
436
|
export {};
|
@@ -86,7 +86,7 @@ export declare class CheckBoxProps extends INotifyPropertyChanged {
|
|
86
86
|
getSerializeProps(viewOptions: ViewOptions): {
|
87
87
|
size: number;
|
88
88
|
isChecked: boolean;
|
89
|
-
groupName: string
|
89
|
+
groupName: string;
|
90
90
|
};
|
91
91
|
}
|
92
92
|
export declare class RadioBoxProps extends INotifyPropertyChanged {
|
@@ -338,5 +338,6 @@ export declare class BodyPartProps extends INotifyPropertyChanged {
|
|
338
338
|
export interface SelectionEffectObject {
|
339
339
|
selectionEleSets: Map<Element, SelectionContentRange>;
|
340
340
|
commRangeSets: Map<Element, SelectionContentRange>;
|
341
|
+
otherRangeSets: Map<Element, Array<SelectionContentRange>>;
|
341
342
|
}
|
342
343
|
export {};
|
@@ -8,7 +8,7 @@ export declare class ElementSerialize {
|
|
8
8
|
*/
|
9
9
|
static serialize(element: Element, viewOptions: ViewOptions): SerializeProps | null;
|
10
10
|
static serializeString(element: Element, options?: {
|
11
|
-
|
11
|
+
includeRunDel: boolean;
|
12
12
|
}): string;
|
13
13
|
static serializeObject(obj: object | undefined | null): any;
|
14
14
|
/**
|
@@ -7,6 +7,7 @@ import { DocumentFooterElement } from "./doc-footer-impl";
|
|
7
7
|
import { SelectionState } from "../../selection/document-selection";
|
8
8
|
import { CommentElement } from "../comments/comment-element-impl";
|
9
9
|
import { EditorContext } from "../../document-context";
|
10
|
+
import { Subject } from "../../infrastructure/event-subject";
|
10
11
|
export declare class DocumentElement extends BlockContainerElement<DocumentProps> {
|
11
12
|
viewOptions: ViewOptions;
|
12
13
|
bodyElement: DocumentBodyElement;
|
@@ -46,6 +47,12 @@ export declare class DocumentElement extends BlockContainerElement<DocumentProps
|
|
46
47
|
* 清除所有批注
|
47
48
|
*/
|
48
49
|
clearAllComms(): void;
|
50
|
+
onRefreshEvent: Subject<void>;
|
51
|
+
/**
|
52
|
+
* 元素内容或者属性发生改变,需要根据当前节点所在的树路径,设置脏标记,同时触发渲染
|
53
|
+
* @param ele
|
54
|
+
*/
|
55
|
+
invokeChange(ele: Element): void;
|
49
56
|
}
|
50
57
|
export declare class DocumentRenderObject extends BlockContainerRenderObject {
|
51
58
|
constructor(ele: Element);
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import { DocEditor } from 'src/med_editor/doc-editor';
|
2
|
+
import { TextGroupElement } from '../impl';
|
3
|
+
import { SelectionContentRange } from '../element-define';
|
4
|
+
export declare class SearchPanel {
|
5
|
+
private editor;
|
6
|
+
searchQuery: string;
|
7
|
+
currentIndex: number;
|
8
|
+
totalMatches: number;
|
9
|
+
searchResults: searchResult[];
|
10
|
+
searchRangeColor: string;
|
11
|
+
currentRangeColor: string;
|
12
|
+
inputRef: HTMLInputElement;
|
13
|
+
state: 'close' | 'open';
|
14
|
+
constructor(editor: DocEditor);
|
15
|
+
render(): import("snabbdom").VNode;
|
16
|
+
searchNext(): void;
|
17
|
+
searchPrevious(): void;
|
18
|
+
nagivateToShow(): void;
|
19
|
+
onKeydown(e: KeyboardEvent): void;
|
20
|
+
searchInDocument(e: KeyboardEvent): any[];
|
21
|
+
clear(): void;
|
22
|
+
destroy(): void;
|
23
|
+
findMatches(inputString: string, pattern: string): number[];
|
24
|
+
switchVisible(): void;
|
25
|
+
}
|
26
|
+
interface searchResult {
|
27
|
+
index: number;
|
28
|
+
ele: TextGroupElement;
|
29
|
+
range?: SelectionContentRange;
|
30
|
+
}
|
31
|
+
export {};
|
@@ -1,17 +1,21 @@
|
|
1
1
|
import { SelectionState } from "./document-selection";
|
2
2
|
import { Element, SelectionContentRange } from "../element-define";
|
3
|
+
import { SelectionEffectObject } from "../element-props";
|
3
4
|
/**
|
4
5
|
* 用于处理选区拖蓝
|
5
6
|
*/
|
6
|
-
export declare class SelectionOverlays {
|
7
|
+
export declare class SelectionOverlays implements SelectionEffectObject {
|
7
8
|
private selectionState;
|
8
9
|
private selectionRange;
|
9
10
|
selectionEleSets: Map<Element, SelectionContentRange>;
|
10
11
|
commRangeSets: Map<Element, SelectionContentRange>;
|
12
|
+
otherRangeSets: Map<Element, SelectionContentRange[]>;
|
11
13
|
constructor(selectionState: SelectionState);
|
12
14
|
getSelectionTreeData(): void;
|
13
15
|
private convertSelectRangeToSet;
|
14
16
|
static addToSets(range: SelectionContentRange, set: Map<Element, SelectionContentRange>): void;
|
17
|
+
addToOtherRangeSets(range: SelectionContentRange): void;
|
18
|
+
clearOtherRangeSets(): void;
|
15
19
|
/**
|
16
20
|
* 添加到批注集合
|
17
21
|
* @param range
|
@@ -71,6 +71,7 @@ export declare class CommonUtil {
|
|
71
71
|
static btoa(str: string): string;
|
72
72
|
static isEqual(a: any, b: any): boolean;
|
73
73
|
static getValue(val: any, defaultValue: any): any;
|
74
|
+
static getKeyCombination(event: KeyboardEvent): string;
|
74
75
|
}
|
75
76
|
declare type AnyFunction = (...args: any[]) => any;
|
76
77
|
export {};
|
@@ -285,12 +285,15 @@ export declare class ElementUtil {
|
|
285
285
|
/**
|
286
286
|
* 递归向前寻找最近的元素
|
287
287
|
* @param currElement
|
288
|
-
* @param inPara 是否在同一段落中寻找
|
289
|
-
* @param forCursor 查找结果是否用于光标定位
|
290
288
|
* @param viewOptions
|
291
289
|
* @returns
|
292
290
|
*/
|
293
|
-
static getRecursionPrevSiblingElement(currElement: Element | null,
|
291
|
+
static getRecursionPrevSiblingElement(currElement: Element | null, viewOptions: ViewOptions): CursorPositionInfo | null;
|
292
|
+
/**
|
293
|
+
* 递归元素里面向前寻找可以定位的元素
|
294
|
+
*/
|
295
|
+
static getRecursionSiblingElementCursorPosition(ele: Element, viewOptions: ViewOptions, direction: 'left' | 'right'): CursorPositionInfo | null;
|
296
|
+
static getElementPositionCursor(ele: LeafElement, viewOptions: ViewOptions, direction: 'left' | 'right'): CursorPositionInfo | null;
|
294
297
|
/**
|
295
298
|
* 循环向前寻找可定位的数据元
|
296
299
|
* @param currElement
|
@@ -299,7 +302,7 @@ export declare class ElementUtil {
|
|
299
302
|
/**
|
300
303
|
* 递归向后寻找最近的元素
|
301
304
|
*/
|
302
|
-
static getRecursionNextSiblingElement(currElement: Element | null,
|
305
|
+
static getRecursionNextSiblingElement(currElement: Element | null, viewOptions: ViewOptions): CursorPositionInfo | null;
|
303
306
|
/**
|
304
307
|
* 获取行内最大渲染单元格高度,主要处理纵向合并单元格问题
|
305
308
|
* @param row
|
@@ -379,10 +382,10 @@ export declare class ElementUtil {
|
|
379
382
|
*/
|
380
383
|
static getDataElement(ele: Element): DataElementInlineGroup | null;
|
381
384
|
/**
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
385
|
+
* 向上查找类型为数据元的父级
|
386
|
+
* @param ele
|
387
|
+
* @returns
|
388
|
+
*/
|
386
389
|
static getDataGroupElement(ele: Element): DataElementGroupElement | null;
|
387
390
|
static getOSPlatform(): 'Windows' | 'Mac' | 'Linux';
|
388
391
|
static getCheckboxPath(x: number, y: number, width: number, height: number): Array<Position>;
|
@@ -413,5 +416,13 @@ export declare class ElementUtil {
|
|
413
416
|
static getEleAttribute(ele: Element, attr: string): any;
|
414
417
|
static removeEleAttribute(ele: Element, attr: string): void;
|
415
418
|
static getMatchItems(item: Element, predicate: (item: Element) => boolean): Element<any>[];
|
419
|
+
static isDataEle(ele: Element): boolean;
|
420
|
+
}
|
421
|
+
/**
|
422
|
+
* 用于光标定位的信息
|
423
|
+
*/
|
424
|
+
interface CursorPositionInfo {
|
425
|
+
ele: LeafElement;
|
426
|
+
offset: number;
|
416
427
|
}
|
417
428
|
export {};
|
package/package.json
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
"author": "hailin-zheng",
|
5
5
|
"private": false,
|
6
6
|
"license": "ISC",
|
7
|
-
"version": "2.2.
|
7
|
+
"version": "2.2.22",
|
8
8
|
"scripts": {},
|
9
9
|
"dependencies": {
|
10
10
|
"moment": "^2.29.3",
|
@@ -16,4 +16,4 @@
|
|
16
16
|
"snabbdom-to-html": "^7.1.0",
|
17
17
|
"jsbarcode": "^3.11.5"
|
18
18
|
}
|
19
|
-
}
|
19
|
+
}
|