@hailin-zheng/editor-core 1.0.61 → 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 (98) hide show
  1. package/README.md +91 -2
  2. package/controls/ButtonBase.d.ts +10 -0
  3. package/controls/Canvas.d.ts +10 -0
  4. package/controls/Config.d.ts +11 -0
  5. package/controls/FlexBox.d.ts +81 -0
  6. package/controls/Input.d.ts +33 -0
  7. package/controls/MedTimeLine/TimeAxis.d.ts +21 -0
  8. package/controls/MedTimeLine/TimeSlider.d.ts +19 -0
  9. package/controls/Menu.d.ts +31 -0
  10. package/controls/Node.d.ts +217 -0
  11. package/controls/NodeEvent.d.ts +136 -0
  12. package/controls/Rect.d.ts +4 -0
  13. package/controls/ScrollView.d.ts +56 -0
  14. package/controls/StackPanel.d.ts +27 -0
  15. package/controls/SurfaceView.d.ts +41 -0
  16. package/controls/Text.d.ts +45 -0
  17. package/controls/TextBase.d.ts +19 -0
  18. package/controls/ViewPaint.d.ts +57 -0
  19. package/controls/Window.d.ts +27 -0
  20. package/controls/WrapPanel.d.ts +10 -0
  21. package/controls/event-subject.d.ts +42 -0
  22. package/index-cjs.d.ts +0 -3
  23. package/index-cjs.js +14352 -9255
  24. package/index-cjs.js.map +1 -1
  25. package/index.d.ts +0 -3
  26. package/index.js +14336 -9256
  27. package/index.js.map +1 -1
  28. package/med_editor/framework/ast-parser.d.ts +3 -0
  29. package/med_editor/framework/document-arrange.d.ts +76 -0
  30. package/med_editor/framework/document-change.d.ts +6 -8
  31. package/med_editor/framework/document-comment.d.ts +4 -12
  32. package/med_editor/framework/document-event.d.ts +3 -2
  33. package/med_editor/framework/document-input-cursor.d.ts +3 -26
  34. package/med_editor/framework/document-paint.d.ts +9 -8
  35. package/med_editor/framework/document-textline-mode.d.ts +2 -3
  36. package/med_editor/framework/dynamic-executer.d.ts +23 -0
  37. package/med_editor/framework/element-define.d.ts +17 -8
  38. package/med_editor/framework/element-measure.d.ts +7 -5
  39. package/med_editor/framework/element-paint.d.ts +1 -10
  40. package/med_editor/framework/element-props.d.ts +23 -8
  41. package/med_editor/framework/element-reader.d.ts +1 -3
  42. package/med_editor/framework/element-render-cut.d.ts +9 -7
  43. package/med_editor/framework/element-util.d.ts +2 -12
  44. package/med_editor/framework/event-subject.d.ts +3 -1
  45. package/med_editor/framework/impl/checkbox/checkbox-impl.d.ts +1 -2
  46. package/med_editor/framework/impl/comments/comment-content-impl.d.ts +4 -3
  47. package/med_editor/framework/impl/comments/comment-element-impl.d.ts +4 -4
  48. package/med_editor/framework/impl/comments/comments-container-impl.d.ts +26 -5
  49. package/med_editor/framework/impl/comments/comments-util.d.ts +2 -9
  50. package/med_editor/framework/impl/comments/validate-msg-impl.d.ts +1 -1
  51. package/med_editor/framework/impl/data-element/data-element-barcode.d.ts +1 -1
  52. package/med_editor/framework/impl/data-element/data-element-base-impl.d.ts +4 -2
  53. package/med_editor/framework/impl/data-element/data-element-check-impl.d.ts +1 -2
  54. package/med_editor/framework/impl/data-element/data-element-date-impl.d.ts +1 -2
  55. package/med_editor/framework/impl/data-element/data-element-group-impl.d.ts +2 -2
  56. package/med_editor/framework/impl/data-element/data-element-image-impl.d.ts +1 -2
  57. package/med_editor/framework/impl/data-element/data-element-list-impl.d.ts +2 -3
  58. package/med_editor/framework/impl/data-element/data-element-text-impl.d.ts +1 -2
  59. package/med_editor/framework/impl/decorate/fill-null-space-imple.d.ts +1 -2
  60. package/med_editor/framework/impl/document/doc-body-impl.d.ts +3 -3
  61. package/med_editor/framework/impl/document/doc-body-part-impl.d.ts +1 -2
  62. package/med_editor/framework/impl/document/doc-footer-impl.d.ts +3 -3
  63. package/med_editor/framework/impl/document/doc-header-impl.d.ts +3 -3
  64. package/med_editor/framework/impl/document/doc-impl.d.ts +2 -2
  65. package/med_editor/framework/impl/media-formula/menstrual-history.d.ts +3 -4
  66. package/med_editor/framework/impl/paragraph/p-impl.d.ts +7 -4
  67. package/med_editor/framework/impl/picture/image-impl.d.ts +1 -2
  68. package/med_editor/framework/impl/radio/radio-impl.d.ts +1 -2
  69. package/med_editor/framework/impl/symbol/br-symbol-impl.d.ts +1 -2
  70. package/med_editor/framework/impl/symbol/page-br-symbol-impl.d.ts +21 -0
  71. package/med_editor/framework/impl/symbol/tab-symbol-impl.d.ts +16 -0
  72. package/med_editor/framework/impl/table/table-cell-impl.d.ts +3 -4
  73. package/med_editor/framework/impl/table/table-impl.d.ts +6 -8
  74. package/med_editor/framework/impl/table/table-row-impl.d.ts +1 -2
  75. package/med_editor/framework/impl/table/table-util.d.ts +5 -0
  76. package/med_editor/framework/impl/text/text-impl.d.ts +4 -4
  77. package/med_editor/framework/impl/text/track-run-impl.d.ts +3 -4
  78. package/med_editor/framework/paragraph-arrange.d.ts +82 -0
  79. package/med_editor/framework/render-context.d.ts +14 -17
  80. package/med_editor/framework/render-define.d.ts +1 -0
  81. package/med_editor/rule-control.d.ts +66 -0
  82. package/med_editor/texteditor.d.ts +35 -33
  83. package/package.json +5 -2
  84. package/med_editor/controls/button.d.ts +0 -10
  85. package/med_editor/controls/core.d.ts +0 -175
  86. package/med_editor/controls/data-grid.d.ts +0 -115
  87. package/med_editor/controls/editor.d.ts +0 -7
  88. package/med_editor/controls/event.d.ts +0 -22
  89. package/med_editor/controls/grid.d.ts +0 -11
  90. package/med_editor/controls/label.d.ts +0 -10
  91. package/med_editor/controls/panel.d.ts +0 -8
  92. package/med_editor/controls/render-context.d.ts +0 -59
  93. package/med_editor/controls/report-sheet.d.ts +0 -10
  94. package/med_editor/controls/rule.d.ts +0 -39
  95. package/med_editor/controls/scroll-viewer.d.ts +0 -60
  96. package/med_editor/controls/surface.d.ts +0 -23
  97. package/med_editor/doc-ruler.d.ts +0 -50
  98. package/med_editor/framework/impl/paragraph/p-line-impl.d.ts +0 -24
package/README.md CHANGED
@@ -79,7 +79,7 @@
79
79
  * <a href="#setCellBackground">setCellBackground 表格背景颜色</a>
80
80
 
81
81
  <h3 id="summary"><code>简介</code></h3>
82
- 编辑器 基于 ts+canvas。运行环境新版浏览器。
82
+ 编辑器 基于 ts+canvas。运行环境现代主流浏览器(chrome等)。
83
83
 
84
84
  <h3 id="install"><code>安装</code></h3>
85
85
  执行 npm i editor-core,安装编辑器。从 “editor-core” 可以引入编辑器类editor-core、loadDoc等导出的属性方法。
@@ -1635,7 +1635,96 @@ const getSelectionState = (): SelectionState => getEditor().selectionState;
1635
1635
  ```
1636
1636
  <!-- /div -->
1637
1637
 
1638
-
1638
+ <h3>如果当前性别为男性,隐藏月经史数据元</h3>
1639
+ ```js
1640
+ //获取文档上下文
1641
+ const docEleCtx = this.docCtx.getCtx(this.docCtx.document);
1642
+ //获取年龄数据元
1643
+ const dataEle = docEleCtx.getControlById('1493477712134672386') as DataElementText;
1644
+ //获取要隐藏的数据组
1645
+ const dataGroup = docEleCtx.ctx.treeFind((item) => item instanceof DataElementGroupElement) as DataElementGroupElement;
1646
+ //侦听数据元更改时间
1647
+ dataEle.onChangeSubject.subscribe((e) => {
1648
+ //在文档重新排版、绘制前,获取最终的指定节点的内容
1649
+ const beforeRefreshSub = this.onBeforeRefreshDocument.subscribe((e2) => {
1650
+ console.log('内容发生改变,隐藏数据组');
1651
+ //获取年龄数据元输入的值
1652
+ const age = Number.parseInt(dataEle.getValue());
1653
+ //年龄大于20,隐藏数据元
1654
+ dataGroup.props.hidden = age > 20;
1655
+ //取消订阅事件
1656
+ beforeRefreshSub.unsubscribe();
1657
+ });
1658
+
1659
+ });
1660
+ ```
1661
+ <h3>插入新段落</h3>
1662
+ 说明:在当前段落后面插入新段落,段落的内容为当前时间
1663
+
1664
+ ```typescript
1665
+ const {startControl} = this.selectionState;
1666
+ if (!startControl) {
1667
+ return;
1668
+ }
1669
+ //1.获取当前段落
1670
+ const currentParagraph = ElementUtil.getParentByType(startControl, ParagraphElement) as ParagraphElement;
1671
+ //2.创建新段落对象
1672
+ const newPara = ParagraphElement.createElement();
1673
+ //3.创建文本对象
1674
+ const newText = new TextGroupElement();
1675
+ newText.text = '当前时间为' + new Date();
1676
+ newText.props.fontName = '楷体';
1677
+ newText.props.fontSize = 18;
1678
+ newText.props.color = '#5b8c00';
1679
+ //4.将文本对象追加到新段落中
1680
+ newPara.addChild(newText);
1681
+ //5.在当前段落后面追加新段落
1682
+ currentParagraph.parent.addChild(newPara, currentParagraph.getIndex() + 1);
1683
+ //6.定位光标到新段落末尾处
1684
+ this.selectionState.resetRange(newText,-1);
1685
+ ```
1686
+ <h3>插入文本数据元</h3>
1687
+ 说明:在当前位置插入文本数据元
1688
+ ```typescript
1689
+ const {startControl} = this.selectionState;
1690
+ if (!startControl) {
1691
+ return;
1692
+ }
1693
+ const newDataTextElement=new DataElementText();
1694
+ newDataTextElement.props.nullText='请输入内容';
1695
+ newDataTextElement.props.nullTextProps=new TextProps();
1696
+ newDataTextElement.props.nullTextProps.fontSize=16;
1697
+ newDataTextElement.props.nullTextProps.fontName='宋体';
1698
+ newDataTextElement.props.nullTextProps.color='#ffc53d';
1699
+ newDataTextElement.props.valueTextProps=new TextProps();
1700
+ newDataTextElement.props.valueTextProps.fontSize=18;
1701
+ newDataTextElement.props.valueTextProps.fontName='楷体';
1702
+ newDataTextElement.props.valueTextProps.color='#096dd9';
1703
+ this.insertNewElement(newDataTextElement);
1704
+ ```
1705
+ <h3>修改页眉</h3>
1706
+ 说明:可以批量修改所有模板的页眉
1707
+ ```typescript
1708
+ //1.获取页眉对象
1709
+ const headerElement=this.docCtx.document.headerElement;
1710
+
1711
+ //2.创建新段落对象
1712
+ const newPara = ParagraphElement.createElement();
1713
+ //3.段落文本居中显示
1714
+ newPara.props.textAlign='center';
1715
+ //4.创建文本对象
1716
+ const newText = new TextGroupElement();
1717
+ newText.text = 'XXX人民医院病历文书';
1718
+ newText.props.fontName = '楷体';
1719
+ newText.props.fontSize = 28;
1720
+ newText.props.color = '#000';
1721
+ //5.将文本对象追加到新段落中
1722
+ newPara.addChild(newText);
1723
+
1724
+ //6.清除页眉内容,并添加新内容
1725
+ headerElement.clearItems();
1726
+ headerElement.addChild(newPara);
1727
+ ```
1639
1728
  <!--
1640
1729
  编辑页脚页眉
1641
1730
  双击页眉,body,页脚 开启是否可编辑,默认body 是可编辑;
@@ -0,0 +1,10 @@
1
+ import { IMeasureEvent, IRenderData, Size } from "./Node";
2
+ import { TextBase } from "./TextBase";
3
+ export declare class ButtonBase extends TextBase {
4
+ constructor();
5
+ render(e: IRenderData): void;
6
+ }
7
+ export declare class Button extends ButtonBase {
8
+ measureOverride(e: IMeasureEvent, availableSize: Size): Size;
9
+ render(e: IRenderData): void;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { IArrangeEvent, IMeasureEvent, IRenderData, Panel, Size } from "./Node";
2
+ /**
3
+ * 采用绝对布局系统的容器
4
+ */
5
+ export declare class Canvas extends Panel {
6
+ constructor();
7
+ measureOverride(e: IMeasureEvent, availableSize: Size): Size;
8
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
9
+ render(e: IRenderData): void;
10
+ }
@@ -0,0 +1,11 @@
1
+ export declare const ViewConfig: {
2
+ surfaceBgColor: string;
3
+ primaryColor: string;
4
+ onPrimaryColor: string;
5
+ themeSecondaryColor: string;
6
+ bgShadowBlur: number;
7
+ bgShadowColor: string;
8
+ textPrimaryColor: string;
9
+ textSecondaryColor: string;
10
+ buttonBgColor: string;
11
+ };
@@ -0,0 +1,81 @@
1
+ import { IArrangeEvent, IMeasureEvent, IRenderData, NodeCore, NodeItems, Rect, Size } from "./Node";
2
+ export declare class FlexBox extends NodeItems {
3
+ /**
4
+ * 轴线方向
5
+ */
6
+ flexDirection: 'row' | 'column';
7
+ /**
8
+ * 当主轴方向无法放置主元素时是否换行显示
9
+ */
10
+ flexWrap: 'no' | 'wrap';
11
+ /**
12
+ * 定义元素在主轴方向如果有剩余空间时,如何排列子元素
13
+ * 重要:如果容器禁止换行,而且内容超出主轴尺寸,justify-content会有影响
14
+ * flex-start:从主轴方向默认从左向右排列
15
+ * center:主轴方向居中
16
+ * flex-end:主轴方向从右向左排列
17
+ * space-between:除掉首尾元素,剩余空间执行->space-evenly算法
18
+ * space-around:主轴剩余的空间除以(元素数量*2),均分到每个元素左右两侧
19
+ * space-evenly:主轴剩余的空间除以(元素数量+1),均分到每个元素中间;类似space-between,但是不排除首尾元素
20
+ */
21
+ justifyContent: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch';
22
+ /**
23
+ * 定义交叉轴上元素的排列,算法与justifyContent一致
24
+ * 重要:所有行的垂轴是同样的
25
+ * 该属性对单行弹性盒子模型无效。(即:带有 flex-wrap: nowrap)
26
+ * stretch:交叉轴方向拉伸元素大小适应"当前行",如果项目设定了尺寸,则项目属性尺寸的优先级最高,该属性不生效
27
+ */
28
+ alignContent: 'normal' | 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch';
29
+ /**
30
+ * 作用类似alignContent
31
+ * 重要:每一行的垂轴对应到每一行
32
+ */
33
+ alignItems: 'flex-start' | 'center' | 'flex-end' | 'stretch';
34
+ measureOverride(e: IMeasureEvent, availableSize: Size): Size;
35
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
36
+ render(e: IRenderData): void;
37
+ /**
38
+ * 预先测量所有元素
39
+ */
40
+ private preMeasureItems;
41
+ /**
42
+ * 预先测量轴线方向为row
43
+ */
44
+ private measureRow;
45
+ private arrangeRow;
46
+ /**
47
+ * 横轴排版,排版每行内子项的X
48
+ * @param lines
49
+ * @param finalSize
50
+ */
51
+ arrangeJustifyContent(lines: Array<MainAxisLine>, finalSize: Size): void;
52
+ private arrangeAlignItems;
53
+ /**
54
+ * 获取行
55
+ */
56
+ private getRowLines;
57
+ /**
58
+ * 排版行
59
+ * @private
60
+ */
61
+ private arrangeRowLines;
62
+ private arrangeItems;
63
+ private preMeasureColumn;
64
+ }
65
+ /**
66
+ * 主轴线
67
+ */
68
+ interface MainAxisLine {
69
+ height: number;
70
+ width: number;
71
+ maxItemWidth: number;
72
+ maxItemHeight: number;
73
+ items: Array<ItemPreArrangeRect>;
74
+ x: number;
75
+ y: number;
76
+ }
77
+ interface ItemPreArrangeRect {
78
+ node: NodeCore;
79
+ finalRect: Rect;
80
+ }
81
+ export {};
@@ -0,0 +1,33 @@
1
+ import { TextSelectionRange } from "./Text";
2
+ import { IOnMousedownEvent, IOnMousemoveEvent } from "./NodeEvent";
3
+ import { IRenderData } from "./Node";
4
+ import { TextBase } from "./TextBase";
5
+ export declare class InputCore extends TextBase {
6
+ selectionRange: TextSelectionRange | null;
7
+ lines: Array<TextLine>;
8
+ constructor();
9
+ private input;
10
+ private onBackspaceHandler;
11
+ focus(): void;
12
+ blur(): void;
13
+ onMousedownHandler(evt: IOnMousedownEvent): void;
14
+ onMousedownMoveHandler(evt: IOnMousemoveEvent): void;
15
+ private getClickTextOffset;
16
+ /**
17
+ * 绘制光标
18
+ * @private
19
+ */
20
+ private drawCaret;
21
+ private getCaretPos;
22
+ render(e: IRenderData): void;
23
+ }
24
+ interface TextLine {
25
+ width: number;
26
+ height: number;
27
+ x: number;
28
+ y: number;
29
+ lineUnits: Array<{
30
+ sourceSize: number;
31
+ }>;
32
+ }
33
+ export {};
@@ -0,0 +1,21 @@
1
+ import { IArrangeEvent, IMeasureEvent, IRenderData, NodeCore, NodeItems, Size } from "../Node";
2
+ export declare class TimeAxis extends NodeItems {
3
+ get startDate(): Date;
4
+ set startDate(value: Date);
5
+ get endDate(): Date;
6
+ set endDate(value: Date);
7
+ dataPoints: Array<TimeAxisPoint>;
8
+ private _startDate;
9
+ private _endDate;
10
+ constructor();
11
+ measureOverride(e: IMeasureEvent, availableSize: Size): Size;
12
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
13
+ render(e: IRenderData): void;
14
+ }
15
+ export declare class TimeAxisPoint extends NodeCore {
16
+ xTime: Date;
17
+ yValue: number;
18
+ measureOverride(e: IMeasureEvent, availableSize: Size): Size;
19
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
20
+ render(e: IRenderData): void;
21
+ }
@@ -0,0 +1,19 @@
1
+ import { IArrangeEvent, IMeasureEvent, IRenderData, NodeItems, Size } from "../Node";
2
+ import { ButtonBase } from "../ButtonBase";
3
+ export declare class TimeSlider extends NodeItems {
4
+ leftButton: TimeSlideButton;
5
+ rightButton: TimeSlideButton;
6
+ constructor();
7
+ get startDate(): Date;
8
+ set startDate(value: Date);
9
+ get endDate(): Date;
10
+ set endDate(value: Date);
11
+ private _startDate;
12
+ private _endDate;
13
+ measureOverride(e: IMeasureEvent, availableSize: Size): Size;
14
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
15
+ render(e: IRenderData): void;
16
+ }
17
+ export declare class TimeSlideButton extends ButtonBase {
18
+ render(e: IRenderData): void;
19
+ }
@@ -0,0 +1,31 @@
1
+ import { IArrangeEvent, IMeasureEvent, IRenderData, NodeItems, Size } from "./Node";
2
+ import { LabelNode } from "./Text";
3
+ export declare class Menu extends NodeItems {
4
+ isFocused: boolean;
5
+ constructor();
6
+ /**
7
+ * 关闭所有的菜单
8
+ * @private
9
+ */
10
+ private closeAllMenu;
11
+ private switchMenuContainerVisible;
12
+ protected measureOverride(e: IMeasureEvent, availableSize: Size): Size;
13
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
14
+ render(e: IRenderData): void;
15
+ }
16
+ export declare class MenuItem extends NodeItems {
17
+ headerText: LabelNode;
18
+ menuContainer: MenuContainer;
19
+ constructor();
20
+ setMenuContainerVisible(visible: boolean): void;
21
+ getMenuContainerVisible(): boolean;
22
+ protected measureOverride(e: IMeasureEvent, availableSize: Size): Size;
23
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
24
+ render(e: IRenderData): void;
25
+ }
26
+ export declare class MenuContainer extends NodeItems {
27
+ protected measureOverride(e: IMeasureEvent, availableSize: Size): Size;
28
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
29
+ preRender(e: IRenderData): boolean;
30
+ render(e: IRenderData): void;
31
+ }
@@ -0,0 +1,217 @@
1
+ import { Subject, Subscription } from "./event-subject";
2
+ import { SurfaceView } from "./SurfaceView";
3
+ import { EventMap, EventTypes, IOnChangedEvent, ListenerEventData, ListenerFunc, NodeEvent, PercentType } from "./NodeEvent";
4
+ import { Position } from "../med_editor/framework/element-define";
5
+ import { ViewPaint } from "./ViewPaint";
6
+ export interface Size {
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export interface Rect extends Size {
11
+ x: number;
12
+ y: number;
13
+ }
14
+ export declare enum ModifyFlag {
15
+ None = 0,
16
+ Modify = 1,
17
+ Track = 2
18
+ }
19
+ export interface AttachedPropType {
20
+ StackPanel_VerticalAlignment: 'top' | 'bottom' | 'center' | 'stretch';
21
+ StackPanel_HorizontalAlignment: 'left' | 'right' | 'center' | 'stretch';
22
+ }
23
+ export declare type AttachedKey = keyof AttachedPropType;
24
+ export declare type AttachedKeyPairValueType<T extends AttachedKey> = AttachedPropType[T];
25
+ export declare type CursorType = 'text' | 'row-resize' | 'col-resize' | 'none' | 'default' | 'move' | 'pointer' | 'w-resize' | 's-resize' | 'se-resize' | 'ne-resize' | 'nwse-resize' | 'nesw-resize';
26
+ export declare type OutLineStyle = 'none' | 'solid' | 'dashed';
27
+ export interface IMeasureEvent {
28
+ render: ViewPaint;
29
+ }
30
+ export interface IArrangeEvent {
31
+ render: ViewPaint;
32
+ }
33
+ export interface IAppState {
34
+ pos: Position;
35
+ mousedown: boolean;
36
+ mousedownPos: Position;
37
+ sourceNode: NodeCore | null;
38
+ sourceNodePos: Position;
39
+ sourceHitPos: Position;
40
+ surface: SurfaceView;
41
+ }
42
+ export declare abstract class NodeCore {
43
+ enableClip: boolean;
44
+ pointEvent: boolean;
45
+ get enable(): boolean;
46
+ set enable(value: boolean);
47
+ private _enable;
48
+ enableFocus: boolean;
49
+ isFocused: boolean;
50
+ get cursor(): CursorType;
51
+ set cursor(value: CursorType);
52
+ private _cursor;
53
+ get visible(): boolean;
54
+ set visible(value: boolean);
55
+ private _visible;
56
+ get borderRadius(): number;
57
+ set borderRadius(value: number);
58
+ get width(): number | PercentType;
59
+ set width(value: number | PercentType);
60
+ get height(): number | PercentType;
61
+ set height(value: number | PercentType);
62
+ get x(): number;
63
+ set x(value: number);
64
+ get y(): number;
65
+ set y(value: number);
66
+ private _minWidth;
67
+ private _minHeight;
68
+ get minWidth(): number;
69
+ set minWidth(value: number);
70
+ get minHeight(): number;
71
+ set minHeight(value: number);
72
+ get bgColor(): string;
73
+ set bgColor(value: string);
74
+ private _border;
75
+ get border(): number;
76
+ set border(value: number);
77
+ private _padding;
78
+ get padding(): number;
79
+ set padding(value: number);
80
+ private _borderRadius;
81
+ private _borderColor;
82
+ get borderColor(): string;
83
+ set borderColor(value: string);
84
+ private _shadowBlur;
85
+ private _shadowColor;
86
+ get shadowBlur(): number;
87
+ set shadowBlur(value: number);
88
+ get shadowColor(): string;
89
+ set shadowColor(value: string);
90
+ private _isMouseenter;
91
+ get isMouseenter(): boolean;
92
+ set isMouseenter(value: boolean);
93
+ private _overflowHidden;
94
+ get overflowHidden(): boolean;
95
+ set overflowHidden(value: boolean);
96
+ outlineColor: string;
97
+ outlineStyle: OutLineStyle;
98
+ outlineWidth: number;
99
+ protected _width: number | PercentType;
100
+ protected _height: number | PercentType;
101
+ protected _x: number;
102
+ protected _y: number;
103
+ desiredSize: Size;
104
+ renderSize: Size;
105
+ finalRect: Rect;
106
+ protected _bgColor: string;
107
+ protected _modifyFlag: ModifyFlag;
108
+ get modifyFlag(): ModifyFlag;
109
+ set modifyFlag(value: ModifyFlag);
110
+ onChangedEvent: Subject<IOnChangedEvent>;
111
+ listenerEvents: Array<ListenerEventData>;
112
+ parent: NodeItems | null;
113
+ protected propertyChanged(prop: string, old: any, newV: any): void;
114
+ protected onChanged(): void;
115
+ addEventListener<T extends EventTypes>(name: T, listener: ListenerFunc<EventMap[T]>, useCapture?: boolean): void;
116
+ removeEventListener<T extends EventTypes>(name: T, listener: ListenerFunc<EventMap[T]>, useCapture?: boolean): void;
117
+ /**
118
+ * 父容器传入参数,子容器设置坐标位置
119
+ * @param e
120
+ * @param finalRect
121
+ */
122
+ arrange(e: IArrangeEvent, finalRect: Rect): void;
123
+ protected arrangeOverride(e: IArrangeEvent, finalSize: Size): Size;
124
+ /**
125
+ * 测量阶段
126
+ * @param e
127
+ * @param availableSize
128
+ */
129
+ measure(e: IMeasureEvent, availableSize: Size): void;
130
+ getPercentWidth(val: number): number;
131
+ getPercentHeight(val: number): number;
132
+ /**
133
+ * 获取内容尺寸
134
+ * 元素模型为边框模型,元素的大小为默认包含边框大小,内容大小需要减去边框大小
135
+ * @private
136
+ * @param width
137
+ * @param height
138
+ */
139
+ protected getContentSize(width: number, height: number): Size;
140
+ /**
141
+ * 获取外部尺寸
142
+ * @param availableSize
143
+ * @private
144
+ */
145
+ protected getOuterSize(availableSize: Size): Size;
146
+ /**
147
+ * 子元素需重写该方法
148
+ * @param e
149
+ * @param availableSize
150
+ */
151
+ protected measureOverride(e: IMeasureEvent, availableSize: Size): Size;
152
+ abstract render(e: IRenderData): void;
153
+ preRender(e: IRenderData): boolean;
154
+ private attachedProp;
155
+ setAttachedProp<K extends AttachedKey>(name: K, val: AttachedKeyPairValueType<K>): void;
156
+ getAttachedPropValue<K extends AttachedKey>(name: K): AttachedKeyPairValueType<K>;
157
+ removeAttachedProp(name: string): void;
158
+ /**
159
+ * 绘制轮廓
160
+ */
161
+ renderOutline(renderCtx: ViewPaint): void;
162
+ }
163
+ export interface IRenderData {
164
+ render: ViewPaint;
165
+ next: (rc: ViewPaint) => void;
166
+ appState: IAppState;
167
+ renderPos: Position;
168
+ }
169
+ export declare abstract class NodeItems extends NodeCore {
170
+ controls: Array<NodeCore>;
171
+ eventMap: WeakMap<NodeCore, Array<Subscription>>;
172
+ absoluteItems: boolean;
173
+ containerPropName: string;
174
+ addChild(control: NodeCore, index?: number): void;
175
+ getRenderItems(): Array<NodeCore>;
176
+ removeChild(index: number | NodeCore): void;
177
+ private addChildSub;
178
+ private removeChildSub;
179
+ getChild(index: number): NodeCore;
180
+ getItems(): Array<NodeCore>;
181
+ getIndex(): number;
182
+ clearChildren(): void;
183
+ get length(): number;
184
+ }
185
+ export declare abstract class Panel extends NodeItems {
186
+ }
187
+ export interface ActiveAppContext {
188
+ root: SurfaceView;
189
+ render: () => void;
190
+ }
191
+ export declare function getCurrentActiveAppContext(): ActiveAppContext | null;
192
+ export declare function setCurrentActiveAppContext(ctx: ActiveAppContext | null): void;
193
+ export declare type RenderTaskSchedule = () => void;
194
+ export declare function renderApp(root: SurfaceView, renderCtx: ViewPaint, nodeEvent: NodeEvent): RenderTaskSchedule;
195
+ export declare function renderNode(node: NodeCore, renderCtx: ViewPaint, appState: IAppState, parentPos: Position): void;
196
+ /**
197
+ * 绘制边框
198
+ * @param node
199
+ * @param renderCtx
200
+ */
201
+ export declare function drawBorderline(node: NodeCore, renderCtx: ViewPaint): void;
202
+ export declare function clipContent(node: NodeCore, renderCtx: ViewPaint): void;
203
+ export declare function translate(renderCtx: ViewPaint, x: number, y: number): void;
204
+ export declare function getParents(node: NodeCore): Array<NodeCore>;
205
+ /**
206
+ * 判断坐标是否在矩形框内
207
+ * @param rect
208
+ * @param position
209
+ * @returns
210
+ */
211
+ export declare function isInsideRectByPosition(rect: Rect, position: Position): boolean;
212
+ export declare function checkIntersect(rectA: Rect, rectB: Rect): boolean;
213
+ export declare function getNodePosition(node: NodeCore, currPos: Position): Position;
214
+ export declare function getMatchParent<T>(currNode: NodeCore, parentType: {
215
+ new (...args: any[]): T;
216
+ }): T;
217
+ export declare function getPredicateParent<T>(currNode: NodeCore, predicate: (node: NodeCore) => boolean): T;
@@ -0,0 +1,136 @@
1
+ import { Subject } from "./event-subject";
2
+ import { SurfaceView } from "./SurfaceView";
3
+ import { IAppState, NodeCore } from "./Node";
4
+ import { Position } from "../med_editor/framework/element-define";
5
+ export declare class NodeEvent {
6
+ root: SurfaceView;
7
+ canvas: HTMLCanvasElement;
8
+ appState: IAppState;
9
+ onSignal: Subject<void>;
10
+ hitInfo: IHitInfo | null;
11
+ mouseenterNodes: Array<NodeCore>;
12
+ prevNode: NodeCore;
13
+ prevFocusNodes: Array<NodeCore>;
14
+ constructor(root: SurfaceView, canvas: HTMLCanvasElement);
15
+ private setActiveAppContext;
16
+ setAppState(hitInfo: IHitInfo | null): void;
17
+ hitTest(evt: MouseEvent): IHitInfo | null;
18
+ onMousedownHandler(evt: MouseEvent): void;
19
+ onMousemoveHandler(evt: MouseEvent): void;
20
+ onMouseupHandler(evt: MouseEvent): void;
21
+ onDblClickHandler(evt: MouseEvent): void;
22
+ onMouseleaveHandler(evt: MouseEvent): void;
23
+ /**
24
+ * TODO:需要重新获取鼠标上的元素进行onWheel
25
+ * @param evt
26
+ */
27
+ onWheelHandler(evt: WheelEvent): void;
28
+ onContextMenuHandler(evt: MouseEvent): void;
29
+ getHitNode(hitPos: Position, parentPos: Position): IHitInfo | null;
30
+ getMouseHitNode(node: NodeCore, hitPos: Position, parentPos: Position): IHitInfo | null;
31
+ invokeNodeFocusedEvent(prevNode: NodeCore | null, prevParents: Array<NodeCore>, currNode: NodeCore | null): void;
32
+ }
33
+ /**
34
+ * 触发事件
35
+ * @returns 当前事件是否被取消
36
+ */
37
+ export declare function invokeEvent(event: IEventCore, eventName: EventTypes, node: NodeCore, useCaptureEvent?: boolean): boolean;
38
+ export declare function invokeNodeEvent(node: NodeCore, event: IEventCore, name: EventTypes, useCapture: boolean): boolean;
39
+ export interface IEventCore {
40
+ target: NodeCore;
41
+ source: NodeCore;
42
+ cancelable: boolean;
43
+ isCancel: boolean;
44
+ }
45
+ export interface PercentType {
46
+ value: number;
47
+ }
48
+ export interface IOnKeyEvent extends IEventCore {
49
+ }
50
+ export interface IOnKeydownEvent extends IOnKeyEvent {
51
+ sourceEvt: KeyboardEvent;
52
+ }
53
+ export interface IOnMouseEvent extends IEventCore {
54
+ pos: Position;
55
+ sourceHitPos: Position;
56
+ sourcePos: Position;
57
+ sourceEvt: Event;
58
+ }
59
+ export interface IOnMousemoveEvent extends IOnMouseEvent {
60
+ }
61
+ export interface IOnMousedownEvent extends IOnMouseEvent {
62
+ }
63
+ export interface IOnMouseupEvent extends IOnMouseEvent {
64
+ }
65
+ export interface IOnChangedEvent extends IEventCore {
66
+ }
67
+ export interface IOnClickEvent extends IOnMouseEvent {
68
+ }
69
+ export interface IOnDblClickEvent extends IOnMouseEvent {
70
+ }
71
+ export interface IOnMouseenterEvent extends IOnMouseEvent {
72
+ }
73
+ export interface IOnMouseleaveEvent extends IOnMouseEvent {
74
+ }
75
+ export interface IOnMouseoverEvent extends IOnMouseEvent {
76
+ }
77
+ export interface IOnMouseoutEvent extends IOnMouseEvent {
78
+ }
79
+ export interface IOnGotFocusEvent extends IEventCore {
80
+ }
81
+ export interface IOnLostFocusEvent extends IEventCore {
82
+ }
83
+ export interface IOnKeydownEvent extends IEventCore {
84
+ }
85
+ export interface IOnContextMenuEvent extends IOnMouseEvent {
86
+ }
87
+ export interface IOnWheelEvent extends IEventCore {
88
+ deltaX: number;
89
+ deltaY: number;
90
+ }
91
+ export interface IOnCopyEvent extends IEventCore {
92
+ sourceEvt: ClipboardEvent;
93
+ }
94
+ export interface IOnPasteEvent extends IEventCore {
95
+ sourceEvt: ClipboardEvent;
96
+ }
97
+ export interface IOnCutEvent extends IEventCore {
98
+ sourceEvt: ClipboardEvent;
99
+ }
100
+ export interface IOnInputEvent extends IEventCore {
101
+ data: string;
102
+ }
103
+ export interface EventMap {
104
+ mousemove: IOnMousemoveEvent;
105
+ mousedown: IOnMousedownEvent;
106
+ mouseup: IOnMouseupEvent;
107
+ click: IOnClickEvent;
108
+ dblclick: IOnDblClickEvent;
109
+ mouseenter: IOnMouseenterEvent;
110
+ mouseleave: IOnMouseleaveEvent;
111
+ wheel: IOnWheelEvent;
112
+ mouseover: IOnMouseoverEvent;
113
+ mouseout: IOnMouseoutEvent;
114
+ gotFocus: IOnGotFocusEvent;
115
+ lostFocus: IOnLostFocusEvent;
116
+ preGotFocus: IOnGotFocusEvent;
117
+ input: IOnInputEvent;
118
+ keydown: IOnKeydownEvent;
119
+ copy: IOnCopyEvent;
120
+ paste: IOnPasteEvent;
121
+ cut: IOnCutEvent;
122
+ contextmenu: IOnContextMenuEvent;
123
+ }
124
+ export declare type EventTypes = keyof EventMap;
125
+ export declare type ListenerFunc<T extends IEventCore = IEventCore> = (evt: T) => void;
126
+ export declare type ListenerEventMap = Map<EventTypes, Array<ListenerFunc>>;
127
+ export declare type ListenerEventData = {
128
+ name: EventTypes;
129
+ listener: ListenerFunc;
130
+ useCapture: boolean;
131
+ };
132
+ export interface IHitInfo {
133
+ target: NodeCore;
134
+ targetPos: Position;
135
+ hitPos: Position;
136
+ }
@@ -0,0 +1,4 @@
1
+ import { NodeCore, IRenderData } from "./Node";
2
+ export declare class RectNode extends NodeCore {
3
+ render(e: IRenderData): void;
4
+ }